前言
電流電壓檢測(cè)作為電流電壓檢測(cè)是電子系統(tǒng)的“生命體征監(jiān)測(cè)儀”,實(shí)時(shí)捕捉電路中的電流流動(dòng)與電壓波動(dòng),像安全衛(wèi)士般守護(hù)系統(tǒng)運(yùn)行——精準(zhǔn)識(shí)別過流、過壓、欠壓等異常狀態(tài),觸發(fā)保護(hù)機(jī)制防止硬件損毀。又能化身“能耗分析師”,精確計(jì)算功率損耗與能源效率,為優(yōu)化電路設(shè)計(jì)、延長(zhǎng)電池續(xù)航提供數(shù)據(jù)基石。
圖1 INA226參數(shù)圖
? ? 本期我們介紹德州儀器的INA226實(shí)現(xiàn)電流電壓檢測(cè)。
芯片介紹
圖 2 INA226架構(gòu)圖
? ? 首先我們來看看芯片架構(gòu)圖,INA226主要由左邊的模擬電路部分和右邊的數(shù)字通訊部分組成。
模擬電路部分由五大關(guān)鍵模塊構(gòu)成:電壓檢測(cè)通道,電流檢測(cè)通道,基準(zhǔn)電壓源,Σ-Δ型ADC,溫度補(bǔ)償網(wǎng)絡(luò)。
圖 3 總線電壓測(cè)量示意圖
? ? 電壓ADC通道可以切換測(cè)量總線電壓,電流經(jīng)過負(fù)載之后,會(huì)在采樣電阻中產(chǎn)生壓降,而INA226則可以通過這個(gè)壓降來計(jì)算出電流大小。
圖4 電流測(cè)量工作圖
? ? 這個(gè)采樣電阻的大小通常在0.1Ω或者0.01Ω,以0.01Ω采樣電阻為例,在8x的PGA模式下,最低可以采樣到1mA的電流大小。
圖5 數(shù)字通訊示意圖
? ? 芯片由五個(gè)主要寄存器(圖中四個(gè)加上一個(gè)配置寄存器)和I2C通訊總線組成,其中A0和A1用來決定芯片的I2C通訊地址。
圖6 ?配置寄存器示意圖
? ? 配置寄存器是INA226的核心控制單元,用于設(shè)定芯片的工作模式和性能參數(shù)。通過配置寄存器(地址0x00)的16位字段,用戶可定義平均采樣次數(shù)(1~128次)、總線電壓與分流電壓的獨(dú)立轉(zhuǎn)換時(shí)間(140μs~8.244ms),以及選擇連續(xù)測(cè)量、單次觸發(fā)或低功耗關(guān)機(jī)等工作模式。該寄存器還包含軟復(fù)位功能,可一鍵恢復(fù)默認(rèn)狀態(tài)。其配置直接影響測(cè)量精度、響應(yīng)速度和功耗水平,例如高精度場(chǎng)景需增加平均次數(shù)和轉(zhuǎn)換時(shí)間,而動(dòng)態(tài)檢測(cè)需縮短轉(zhuǎn)換時(shí)間以提升采樣率。合理配置能協(xié)調(diào)ADC、PGA和數(shù)字濾波模塊的協(xié)同工作,確保電流電壓檢測(cè)的可靠性與效率。
圖7 ?電流電壓寄存器示意圖
? ? 分流電壓寄存器和總線電壓寄存器顧名思義分別用來存儲(chǔ)采樣電阻兩端的電壓還有總線電壓值。
圖 8 功率電流寄存器示意圖
? ? 功率寄存器和電流寄存器分別存儲(chǔ)根據(jù)電壓電流計(jì)算的功率值和經(jīng)過采樣電阻的電流大小。
還有一些其他的寄存器這里不做過多的介紹了,下面讓我們編寫STM32的代碼。
程序設(shè)計(jì)
typedefstruct {
? ? I2C_HandleTypeDef *hi2c;
uint8_t?address;
float?current_lsb;
float?r_shunt; ??
float?BusVoltage;
float?Current;
float?Power;
} INA226_t;
代碼塊1 : 結(jié)構(gòu)體代碼
首先定義一個(gè)INA226的結(jié)構(gòu)體,它包含了器件地址,計(jì)算用電流變量,采樣電阻值,總線電壓值,采樣電流值,功率。
HAL_StatusTypeDef?INA226_WriteReg(INA226_t *dev,?uint8_t?reg,?uint16_t?value){
uint8_t?buf[3];
? ? buf[0] = reg;
? ? buf[1] = (value >>?8) &?0xFF;
? ? buf[2] = value &?0xFF;
return?HAL_I2C_Master_Transmit(dev->hi2c, dev->address, buf,?3, HAL_MAX_DELAY);
}
代碼塊2 HAL庫(kù)硬件I2C寫操作
使用STM32HAL庫(kù)實(shí)現(xiàn)硬件I2C通訊。
HAL_StatusTypeDef?INA226_ReadReg(INA226_t *dev,?uint8_t?reg,?uint16_t?*value){
uint8_t?buf[2];
? ? HAL_StatusTypeDef ret;
? ? ret =?HAL_I2C_Master_Transmit(dev->hi2c, dev->address, ®,?1, HAL_MAX_DELAY);
if?(ret != HAL_OK)?return?ret;
? ? ret =?HAL_I2C_Master_Receive(dev->hi2c, dev->address, buf,?2, HAL_MAX_DELAY);
if?(ret != HAL_OK)?return?ret;
? ? *value = (buf[0] <<?8) | buf[1];
return?HAL_OK;
}
代碼塊3 HAL庫(kù)硬件I2C讀操作
同樣的利用STM32HAL庫(kù)實(shí)現(xiàn)對(duì)指定寄存器的讀取,利用這種方式我們可以得到獲取各寄存器的值。
floatINA226_ReadBusVoltage(INA226_t *dev){
uint16_t raw =?0;
float?Voltage;
if?(INA226_ReadReg(dev,?INA226_REG_BUS_VOLTAGE, &raw) !=?HAL_OK)?return-1;
? ??Voltage?= raw *?1.25f /?1000.0f;?
? ? dev->BusVoltage?=?Voltage;
return?Voltage;
}
代碼塊3 ?INA226總線電壓讀取程序
如上述代碼所示,利用STM32讀取寄存器總線電壓寄存器的值后,再根據(jù)手冊(cè)計(jì)算實(shí)際電壓值后返回。
其他寄存器處理暫不演示,源碼已上傳至交流群。
程序測(cè)試
圖9 ?INA226電壓電流功率讀取值
圖10 ?實(shí)際電壓圖
? ? 經(jīng)過程序測(cè)試,可以看到總線電壓測(cè)試結(jié)果和電壓表測(cè)試結(jié)果幾乎無異,后續(xù)擬使用INA226配合邊緣神經(jīng)網(wǎng)絡(luò)實(shí)現(xiàn)以下電機(jī)故障檢測(cè)。