大家好,欢迎来到IT知识分享网。
一.寄存器表解读
寄存器对应功能(我们只着重研究怎么配置和怎么读取)
| 地址 | 名称 | 功能 | 复位值 | 类型 |
| 00h | 配置寄存器 | 控制设备的操作模式、转换时间和平均模式 | 0x4127 | 读写 |
| 01h | 电压降寄存器 | 包含电流互感器电压的测量数据。该寄存器存储沿电流互感器电阻的电压降,该电压降与通过电流互感器的电流成比例。 | 0x00 | 只读 |
| 02h | 总线电压寄存器 | 该寄存器存储沿总线电压的电压降,即相对于地的电压。该测量结果以16位格式表示。 | 0x00 | 只读 |
| 03h | 功率寄存器 | 包含传递到负载的功率值。该寄存器存储以16位格式表示的功率测量结果。 | 0x00 | 只读 |
| 04h | 电流寄存区 | 包含传感器测量的电流值。该寄存器存储以16位格式表示的电流测量结果。 | 0x00 | 只读 |
| 05h | 校准寄存器 | 是用于设置电流和功率测量的全量程范围和最小分辨率(LSB) | 0x0000 | 读写 |
| 06h | 屏蔽/使能寄存器 | 报警配置和转换就绪标志 | 0x00 | 读写 |
| 07h | 报警限值寄存器 | 报警限值寄存器中包含了一个限制值,该值用于与选择的报警功能进行比较 | 0x00 | 读写 |
| FEh | 制造商标识寄存器 | 制造商标识寄存器包含了唯一的制造商标识号。这个标识号是一个独特的数值,用于识别特定制造商 | 0x5449 | 只读 |
| FFh | 芯片识别寄存器 | 芯片识别寄存器通常包含了一个独特的标识号,用于识别芯片的具体版本或制造信息 | 0x2260 | 只读 |
1.配置寄存器(00h)
首先看配置寄存器的功能描述:
Configuration Register(地址:0x00)用于控制设备的操作模式。这个寄存器包括设置用于电流、电压测量的转换时间以及使用的平均模式的配置。此外,还可以通过该寄存器设置控制选择要测量的信号的操作模式。
Configuration Register可以随时读取,而不会影响设备的设置或正在进行的转换。写入Configuration Register会暂停正在进行的任何转换,直到写入序列完成,从而基于Configuration Register(0x00)的新内容启动新的转换。这个停顿防止了在下一个完成的转换中使用的条件中出现任何不确定性。
1.1第15位:复位位,写1复位
1.2第11-9位:平均模式,默认为1次平均。
- 000:1次平均
- 001:4次平均
- 010:16次平均
- 011:64次平均
- 100:128次平均
- 101:256次平均
- 110:512次平均
- 111:1024次平均
1.3第8-6位:总线电压转换时间,默认为1.1ms,时间越久转换越精确。
- 000:140 μs
- 001:204 μs
- 010:332 μs
- 011:588 μs
- 100:1.1 ms
- 101:2.116 ms
- 110:4.156 ms
- 111:8.244 ms
1.4第5-3位:电流检测电压转换时间(VSHCT)位设置了电流检测电压的转换时间,默认1.1ms。
- 000:140 μs
- 001:204 μs
- 010:332 μs
- 011:588 μs
- 100:1.1 ms
- 101:2.116 ms
- 110:4.156 ms
- 111:8.244 ms
1.5第2-0位:操作模式(MODE)位用于选择INA226芯片的工作模式,默认连续测量电流和总线电压。
000: 断电模式(或关机)001: 连续测量电流,触发测量电压010: 连续测量总线电压,触发测量电流011: 连续测量电流和总线电压,触发测量100: 断电模式(或关机)101: 连续测量电流110: 连续测量总线电压111: 连续测量电流和总线电压
2.电压降寄存器(01h)
Shunt Voltage Register (01h)是一个只读寄存器,用于存储当前的电流电压读数VSHUNT。负数采用二补数格式表示。计算负数的二补数,首先对绝对值的二进制数取反,然后加1。如果最高有效位(MSB)为’1’,则表示一个负数。
例如,对于VSHUNT = -80 mV的值:
- 取绝对值:80 mV
- 将这个数转换为整数(80 mV ÷ 2.5 µV)= 32000
- 将这个数转换为二进制 = 0111 1101 0000 0000
- 对二进制结果取反 = 1000 0010 1111 1111
- 在取反结果上加’1’,得到二补数结果 = 1000 0011 0000 0000 = 8300h
如果启用了均值功能,该寄存器将显示均值。
全幅范围 = 81.92 mV(十进制=7FFF);最小可测量单位(LSB)为2.5 μV。
3.总线电压寄存器(02h)
Bus Voltage Register (02h)用于存储最近的母线电压读数VBUS。
如果启用了均值功能,该寄存器将显示均值。
全幅范围 = 40.96 V(十进制=7FFF);最小可测量单位(LSB)为1.25 mV。
4.功率寄存器(03h)
如果启用了均值功能,该寄存器将显示均值。
功率寄存器的最小可测量单位(LSB)内部编程为等于Current_LSB的程序值的25倍。
根据公式4,功率寄存器通过将电流寄存器的十进制值与母线电压寄存器的十进制值相乘来记录功率(瓦特)。
公式4:
5.电流寄存器(04h)
如果启用了均值功能,该寄存器将显示均值。
电流寄存器的值通过将电压寄存器中的十进制值与根据公式3计算的校准寄存器的十进制值相乘得到。
公式3:
6.校准寄存器(05h)
这个寄存器为设备提供了存在的电流互感器电阻的值,该电流互感器电阻用于产生测量的差分电压。它还设置了Current Register的分辨率。编程此寄存器会设置Current_LSB和Power_LSB。这个寄存器也适用于整个系统的校准。有关编程Calibration Register的附加信息,请参阅Programming the Calibration Register。
简单来说这个寄存器就是配置Current_LSB和Power_LSB,也就是配置分辨率和量程的。
这里演示一下如何计算写入的值
笔者测量的电流较低,选用较大的采样电阻提升精度,选用0.5Ω电阻。根据电压降寄存器(01h)的满量程为81.92mV可算得最大测量电流为81.92 / 0.5 = 163.84mA。
我们计算Current_LSB,根据公式3,此时的Maximum Expected Current为163.84
Current_LSB = 163.84 / 32768 = 0.005mA,再根据公式1向校准寄存器写入的值(CAL)为
(0.00512 / (0.005 * 0.5))* 1000 = 2048 = 0x0800
二、运用例子
首先分析手册中给出的例子
将对应地址的值读出,将读出来的值乘上对应的最小单位就能得出真实值
即
关于各LSB
| LSB | FSR | |
| Shunt Voltage Register | 2.5uV | 0x7FFF |
| Bus Voltage Register | 1.25mV | 0x7FFF |
| Current Register | 自己算 | 0x7FFF |
| Power Register 的 LSB | Current_LSB * 25 | 0xFFFF |
接下来绘制原理图,笔者使用的是高端检测,检测总线的元器件的电压和总线电流来检测元器件的功率,目的是做恒功率驱动。
查看地址为(0x40)
三、程序编写
该程序是基于HAL库的硬件iic环境下编写(已验证可以正常使用)
1.ina226.c文件:
#include "ina226.h" / * @brief INA226初始化 * @param 无 * @retval 无 */ void INA226_Init(void) { uint8_t tData[3]; tData[0] = Configuration_Register; tData[1] = Configuration_Register_Init >> 8; tData[2] = (uint8_t)Configuration_Register_Init; HAL_I2C_Master_Transmit(&hi2c1, INA226_ADDR, tData, 3, 0xff); HAL_Delay(5); tData[0] = Calibration_Register; tData[1] = Calibration_Register_Init >> 8; tData[2] = (uint8_t)Calibration_Register_Init; HAL_I2C_Master_Transmit(&hi2c1, INA226_ADDR, tData, 3, 0xff); } / * @brief INA226读取总线电压值 * @param 无 * @retval 总线电压值 */ uint16_t INA226_Read_Bus_Voltage(void) { uint16_t Bus_Voltage; uint8_t rData[2]; uint8_t tData[1] = {Bus_Voltage_Register}; HAL_I2C_Master_Transmit(&hi2c1, INA226_ADDR, tData, 1, 0xff); HAL_I2C_Master_Receive(&hi2c1, INA226_ADDR, rData, 2, 0xff); Bus_Voltage = rData[0] << 8 | rData[1]; return Bus_Voltage; } / * @brief INA226读取电流 * @param 无 * @retval 总线电流值 */ uint16_t INA226_Read_Current(void) { uint16_t Current; uint8_t rData[2]; uint8_t tData[1] = {Current_Register}; HAL_I2C_Master_Transmit(&hi2c1, INA226_ADDR, tData, 1, 0xff); HAL_I2C_Master_Receive(&hi2c1, INA226_ADDR, rData, 2, 0xff); Current = rData[0] << 8 | rData[1]; return Current; } / * @brief INA226读取功率 * @param 无 * @retval 功率值 */ uint16_t INA226_Read_Pow(void) { uint16_t Pow; uint8_t rData[2]; uint8_t tData[1] = {Power_Register}; HAL_I2C_Master_Transmit(&hi2c1, INA226_ADDR, tData, 1, 0xff); HAL_I2C_Master_Receive(&hi2c1, INA226_ADDR, rData, 2, 0xff); Pow = rData[0] << 8 | rData[1]; return Pow; }
2.ina226.h文件:
#ifndef __INA226_H_ #define __INA226_H_ #include "main.h" #include "i2c.h" #define INA226_ADDR 0x80 // 地址 #define Configuration_Register_Init 0x41ff // 1次平均 8.244ms 连续监测 #define Calibration_Register_Init 0x0800 // 0.5Ω 0.005mA #define Configuration_Register 0x00 // 配置寄存器 #define Shunt_Voltage_Register 0x01 // 电压降寄存器 #define Bus_Voltage_Register 0x02 // 总线电压寄存器 #define Power_Register 0x03 // 功率寄存器 #define Current_Register 0x04 // 电流寄存器 #define Calibration_Register 0x05 // 校准寄存器 #define Shunt_Voltage_Register_LSB 2.5f #define Bus_Voltage_Register_LSB 1.25f #define Current_Register_LSB 0.005f #define Power_Register_LSB 0.125f void INA226_Init(void); uint16_t INA226_Read_Bus_Voltage(void); uint16_t INA226_Read_Current(void); uint16_t INA226_Read_Pow(void); #endif // _INA226_H_
3.main函数
Current_Original = INA226_Read_Current(); Voltage_Original = INA226_Read_Bus_Voltage(); Pow_Original = INA226_Read_Pow(); Current = Current_Register_LSB * Current_Original; Voltage = (Bus_Voltage_Register_LSB * Voltage_Original) / 1000.0; Pow = Power_Register_LSB * Pow_Original;
四、基于PID算法的恒功率驱动效果
设定450mW,控制效果如下
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/111726.html

















