主题中讨论的其他器件:SysConfig、INA226、
我得到的电压和温度正确、但电流(功率)值错误。 下面是原理图、C 程序和日志。
Rshunt = 0.005 Ω
最大预期电流= 3.5A
电源电压和电流= 18V/1.35 安培
原理图:-
代码:-
int main (int argc、char * argv[])
{
浮点数据;
Float LSB_Current = 0.000305;//Current_LSB、最大预期电流= 3.5安培
unsigned char rec_data = 0;
volatile uint16_t Byte_Data;
I2C_INIT();
TWO_Rshunt = 1245;// Shunt_cal、Byte_Data = 0.005 Ω
I2C_twoByte_write (0x44、0x02、Byte_Data);
//读取 MDID
I2C_2BYTE_READ (0x44、0x3E、Byte_Data);
printf ("MDID = 0x%x\n"、TWO_MDI Byte_Data);
//确认 st Shunt_cal 值
Byte_Data = 0;
I2C_2BYTE_READ (0x44、0x02、Byte_Data);
printf ("shunt cal =%d\n"、TWO_ADC Byte_Data);
while (1)
{
//电流
I2C_2BYTE_READ (0x44、0x07、Byte_Data);
IF (TWO_DFFF Byte_Data > 0x7FFF)
{
DATA = TWO_D1000 Byte_Data - 0x10000;
}
设计
{
Data =(float) TWO_Data Byte_Data;
}
DATA =(DATA * LSB_CURRENT);
printf ("\n 电流=%f a、raw =%d \n"、data、TWO_RISK Byte_Data);
//电压
I2C_2BYTE_READ (0x44、0x05、Byte_Data);
Data =(float) TWO_Data Byte_Data;
DATA =(DATA * 3.125)/1000;
printf ("voltage =%f V\n"、data);
//温度
I2C_2BYTE_READ (0x44、0x06、Byte_Data);
Byte_Data = Byte_Data >> 3;
if (TWO_DFE> Byte_Data 0x7FF)
{
DATA =(float) TWO_ADC Byte_Data - 0x1000;
}
设计
{
Data =(float) TWO_Data Byte_Data;
}
数据=(DATA * 125)/1000;
printf ("temp =%f°C\n"、data);
Usleep(1000000);
}
返回0;
}
日志:-
MDID = 0x5449
分流校准= 1245
Current =-0.119865A、RAW = 65143
电压= 18.209375 V
温度= 101.750000 °C
电流=-0.112850 A、RAW = 65166
电压= 18.215626 V
温度= 102.000000 °C
电流=-0.112850 A、RAW = 65166
电压= 18.215626 V
温度= 101.750000 °C
电流=-0.112545A、原始电流= 65167
电压= 18.215626 V
温度= 101.750000 °C
Current =-0.112240A、RAW = 65168
电压= 18.215626 V
温度= 102.000000 °C
电流=-0.113765A、RAW = 65163
电压= 18.221874 V
温度= 102.000000 °C