1.硬件平臺(tái)
電壓測(cè)量模塊: INA226(IIC接口)
2.功能實(shí)現(xiàn)
1.可測(cè)量直流電壓0~36V,適用于低電壓電子電路中。
2.可測(cè)量直流電0~5A范圍內(nèi),目前采用的ACS712測(cè)量量程為5A,該模塊有多個(gè)量程,可測(cè)量到20A
3.實(shí)時(shí)功率監(jiān)測(cè)
4.電池電量監(jiān)測(cè)(采用電壓壓降方式計(jì)算)
3.硬件介紹
3.1 INA226模塊
NA226是具有I2C?或SMBUS兼容接口的電流分流器和功率監(jiān)控器。該設(shè)備同時(shí)監(jiān)視并聯(lián)電壓降和總線電源電壓。可編程的校準(zhǔn)值,轉(zhuǎn)換時(shí)間和平均值與內(nèi)部乘法器結(jié)合使用,可以直接讀取以安培為單位的電流和以瓦特為單位的功率。INA226感應(yīng)共??偩€電壓上的電流,該電壓可在0 V至36 V之間變化,與電源電壓無(wú)關(guān)。該器件采用2.7V至5.5V單電源供電,典型功耗為330 μA。該器件的額定工作溫度范圍為–40°C至125 xC2°C,并且在I 2 C兼容接口上具有多達(dá)16個(gè)可編程地址。

根據(jù)實(shí)物和原理圖可看出IN和OUT 之間進(jìn)接了一個(gè)0.002R電阻。在官方提供說(shuō)明文檔介紹改模塊是可以測(cè)量直流電壓0~36V,可測(cè)量總線共模電流,測(cè)量電流范圍為-20A ~ 20A之間。測(cè)量精度為±1%。但在實(shí)際使用過(guò)程中發(fā)現(xiàn)僅能測(cè)量測(cè)量到電壓值。測(cè)量電壓時(shí)接線方式為:
INPUT接電源正極,GND接電源負(fù)極。
按照模塊使用說(shuō)明提示在將模塊串聯(lián)接入電路(即OUPUT接入到負(fù)載),實(shí)際測(cè)量發(fā)現(xiàn)無(wú)法獲取到正常電流值,因此采用ACS712模塊通過(guò)ADC方式完成電流測(cè)量。
3.2 INA226模塊相關(guān)寄存器和設(shè)備地址
1.INA226一共有6個(gè)寄存器(0x0~0x5),關(guān)于各個(gè)寄存器詳細(xì)介紹這里則不展開(kāi)介紹,可自行下載相關(guān)資料。

2.INA226模塊采用IIC通訊,根據(jù)原理圖可知地址A1 A0 ==00,再參考官方技術(shù)文檔可知模塊設(shè)備地址為:0x40

從時(shí)序可以看出,第8位為讀寫(xiě)使能位,則地址和讀寫(xiě)為組合則為:讀0x81,寫(xiě)0x80

3.3 INA226模塊驅(qū)動(dòng)
#include "sys.h"
#include "myiic.h"
#define CFG_REG 0x00 //
#define SV_REG 0x01 //分流電壓
#define BV_REG 0x02 //總線電壓
#define PWR_REG 0x03 //電源功率
#define CUR_REG 0x04 //電流
#define CAL_REG 0x05 //校準(zhǔn),設(shè)定滿量程范圍以及電流和功率測(cè)數(shù)的
#define ONFF_REG 0x06 //屏蔽 使能 警報(bào)配置和轉(zhuǎn)換準(zhǔn)備就緒
#define AL_REG 0x07 //包含與所選警報(bào)功能相比較的限定值
#define INA226_GET_ADDR 0XFF /
//初始化INA226
void INA226_Init(void)
{
IIC_Init();
INA226_SendData(INA226_ADDR1,CFG_REG,0x8000); //重新啟動(dòng)
INA226_SendData(INA226_ADDR1,CFG_REG,0x484f); //設(shè)置轉(zhuǎn)換時(shí)間204us,求平均值次數(shù)128,采樣時(shí)間為204*128,設(shè)置模式為分流和總線連續(xù)模式
INA226_SendData(INA226_ADDR1,CAL_REG,CAL); //設(shè)置分辨率
//INA226_SendData(INA226_ADDR1,CAL_REG,0x0012);//設(shè)置分流電壓轉(zhuǎn)電流轉(zhuǎn)換參數(shù)
INA226_Get_ID(INA226_ADDR1); //獲取ina226的id
}
//設(shè)置寄存器指針
void INA226_SetRegPointer(u8 addr,u8 reg)
{
IIC_Start();
IIC_Send_Byte(addr);
IIC_Wait_Ack();
IIC_Send_Byte(reg);
IIC_Wait_Ack();
IIC_Stop();
}
//發(fā)送,寫(xiě)入數(shù)據(jù)
void INA226_SendData(u8 addr,u8 reg,u16 data)
{
u8 temp=0;
IIC_Start();
IIC_Send_Byte(addr);
IIC_Wait_Ack();
IIC_Send_Byte(reg);
IIC_Wait_Ack();
temp = (u8)(data>>8);
IIC_Send_Byte(temp);
IIC_Wait_Ack();
temp = (u8)(data&0x00FF);
IIC_Send_Byte(temp);
IIC_Wait_Ack();
IIC_Stop();
}
//讀取數(shù)據(jù)
u16 INA226_ReadData(u8 addr)
{
u16 temp=0;
IIC_Start();
IIC_Send_Byte(addr+1);
IIC_Wait_Ack();
temp = IIC_Read_Byte(1);
temp<<=8;
temp |= IIC_Read_Byte(0);
IIC_Stop();
return temp;
}
//1mA/bit
u16 INA226_GetShunt_Current(u8 addr)
{
u16 temp=0;
INA226_SetRegPointer(addr,CUR_REG);
temp = INA226_ReadData(addr);
if(temp&0x8000) temp = ~(temp - 1);
return temp;
}
//獲取id
void INA226_Get_ID(u8 addr)
{
u32 temp=0;
INA226_SetRegPointer(addr,INA226_GET_ADDR);
temp = INA226_ReadData(addr);
ina226_data.ina226_id = temp;
}
//獲取校準(zhǔn)值
u16 INA226_GET_CAL_REG(u8 addr)
{
u32 temp=0;
INA226_SetRegPointer(addr,CAL_REG);
temp = INA226_ReadData(addr);
return (u16)temp;
}
//1.25mV/bit
u16 INA226_GetVoltage(u8 addr)
{
u32 temp = 0;
INA226_SetRegPointer(addr,BV_REG);
temp = INA226_ReadData(addr);
return (u16)temp;
}
//2.5uV/bit
u16 INA226_GetShuntVoltage(u8 addr)
{
int16_t temp = 0;
INA226_SetRegPointer(addr,SV_REG);
temp = INA226_ReadData(addr);
if(temp&0x8000) temp = ~(temp - 1);
return (u16)temp;
}
//獲取電壓
void GetVoltage(float *Voltage)//mV
{
*Voltage = INA226_GetVoltage(INA226_ADDR1)*Voltage_LSB;
}
3.4 ACS712模塊
ACS712基于霍爾感應(yīng)的原理設(shè)計(jì),由一個(gè)精確的低偏移線性霍爾傳感器電路與位于接近IC表面的銅箔組成(如下圖所示),電流流過(guò)銅箔時(shí),產(chǎn)生一個(gè)磁場(chǎng), 霍爾元件根據(jù)磁場(chǎng)感應(yīng)出一個(gè)線性的電壓信號(hào),經(jīng)過(guò)內(nèi)部的放大、濾波、斬波與修正電路,輸出一個(gè)電壓信號(hào),該信號(hào)從芯片的第七腳輸出,直接反應(yīng)出流經(jīng)銅箔電流的大小。ACS712根據(jù)尾綴的不一樣,量程分為三個(gè)規(guī)格:±5A、±20A、±30A 。輸入與輸出在量程范圍內(nèi)為良好的線性關(guān)系,其系數(shù)Sensitivity分別為,185 mV/A、100 mV/A、66mV/A。因?yàn)閿夭娐返脑?,其輸出將加載于0.5Vcc上。ACS712的Vcc電源 一般建議采用5V。輸出與輸入的關(guān)系為Vout=0.5Vcc+IpSensitivity。一般輸出的電壓信號(hào)介于0.5V~4.5V之間。
典型的應(yīng)用:電機(jī)領(lǐng)域,載荷檢測(cè)和管理,開(kāi)關(guān)電源領(lǐng)域,和各種電子產(chǎn)品過(guò)電流故障保護(hù)。
器件特點(diǎn)
80KHZ帶寬
總輸出誤差為1.5%
采用小型貼片SOIC8封裝
1.2mΩ內(nèi)部電阻
左側(cè)大電流引腳(PIN1-4)與右側(cè)低電壓引腳(PIN5-8)最小絕緣電壓為2100V
5V單電壓工作
該器件不可應(yīng)用于汽車領(lǐng)域

ACS712模塊為霍爾傳感器,通過(guò)ADC采集電壓值,載根據(jù)電壓與電流的線性關(guān)系時(shí)序電流轉(zhuǎn)換,輸入電流與輸出電壓對(duì)應(yīng)曲線及計(jì)算公式:
ACS712ELCTR-05B電流電壓對(duì)應(yīng)關(guān)系如下圖,Ip=0A即沒(méi)有輸入電流的時(shí)候,對(duì)應(yīng)輸出電壓為2.5V.精確度為185mV/A即為圖中斜線的斜率。取VCC=5V,計(jì)算公式為:
Vout = 2.5 + 0.185*Ip

3.5 ACS712驅(qū)動(dòng)
#include "adc.h"
/***************ADC規(guī)則通道初始化*************
**硬件接口:PB0 -- ADC1_CH8(模擬)
**
*注:ADC的工作頻頻率不能超過(guò)14MHZ
********************************************/
void ADC1_RegularChannel_Init(void)
{
//1.開(kāi)時(shí)鐘
RCC->APB2ENR|=1<<9;//ADC1時(shí)鐘
RCC->APB2ENR|=1<<3;//PB0時(shí)鐘
RCC->APB2RSTR|=1<<9;//ADC復(fù)位時(shí)鐘
RCC->APB2RSTR&=~(1<<9);//關(guān)復(fù)位
/*2.GPIO配置*/
GPIOB->CRL&=0xFFFFFFF0;//模式輸入方式
/*3.ADC時(shí)鐘頻率配置*/
RCC->CFGR&=~(0x3<<14);//清除原來(lái)配置
RCC->CFGR|=0x2<<14;//ADC工作頻率72MHZ/6=12MZH
/*4.配置ADC核心寄存器*/
// ADC1->CR1&=~(0xF<<16);//獨(dú)立模式
ADC1->CR2|=1<<23;//啟動(dòng)溫度傳感器(測(cè)量CPU溫度)
ADC1->CR2|=1<<20;//規(guī)則通道外部觸發(fā)轉(zhuǎn)換模式
ADC1->CR2|=0x7<<17;//外部事件通過(guò)開(kāi)關(guān)事件觸發(fā)
// ADC1->CR2&=~(1<<11);//右對(duì)齊(地位對(duì)齊,高位補(bǔ)0)
ADC1->SMPR1|=0x7<<18;//溫度傳感器采樣時(shí)間通道16
ADC1->SMPR2|=0x7<<24;//通道8采用時(shí)間
ADC1->SQR1&=~(0xF<<20);//規(guī)則通道轉(zhuǎn)換的通道數(shù)目為1個(gè)轉(zhuǎn)換
// ADC1->CR2&=~(1<<1);//單次轉(zhuǎn)換模式
ADC1->CR2|=1<<0;//開(kāi)啟ADC
ADC1->CR2|=1<<3;//初始化校準(zhǔn)
while(ADC1->CR2&1<<3);//等待初始化校準(zhǔn)完成
ADC1->CR2|=1<<2;//開(kāi)始校準(zhǔn)
while(ADC1->CR2&1<<2){}//等待校準(zhǔn)完成
}
/****************ADC1規(guī)則通道獲取數(shù)值***************/
u16 ADC1_GetRegularCHx(u8 chx)
{
ADC1->SQR3&=~(0x1F<<0);//清除原來(lái)寄存器中的值
ADC1->SQR3|=chx;//要轉(zhuǎn)的通道號(hào)
ADC1->CR2|=1<<22;//開(kāi)啟轉(zhuǎn)換規(guī)則通過(guò)
while(!(ADC1->SR&1<<1)){}//等待轉(zhuǎn)換完成
return ADC1->DR;
}

審核編輯:湯梓紅
-
電壓測(cè)量
+關(guān)注
關(guān)注
1文章
76瀏覽量
16899 -
電流測(cè)量
+關(guān)注
關(guān)注
0文章
112瀏覽量
15376 -
INA226
+關(guān)注
關(guān)注
0文章
6瀏覽量
8176 -
ACS712
+關(guān)注
關(guān)注
0文章
20瀏覽量
12554
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
請(qǐng)問(wèn)INA226可以用于測(cè)量隔離電源的前級(jí)的電壓和電流嗎?
請(qǐng)問(wèn)INA226是沒(méi)有辦法測(cè)量空載電流嗎?
用INA226僅僅測(cè)量電壓,不測(cè)電流,可以刪掉shunt電阻嗎?
請(qǐng)問(wèn)INA226的電流、功率測(cè)量范圍多少?
ACS712電流測(cè)量模塊,為什么一直輸出不變呢?
怎么使用PRoC和ACS712進(jìn)行交流電流測(cè)量
ACS712測(cè)量電流的精度問(wèn)題
INA226模塊簡(jiǎn)介
INA226模塊的相關(guān)資料推薦
如何使用ACS712進(jìn)行電源/能量測(cè)量?
INA226使用之程序與模塊測(cè)試

ACS712電流傳感器的原理及應(yīng)用說(shuō)明
使用ACS712測(cè)量任何交流電流

評(píng)論