第一次接触电流/电压测量时,我踩过不少坑。传统方案需要外部分流电阻+ADC+复杂校准,而INA260直接把15A量程、0.1%精度的分流电阻集成在芯片内部,实测温漂只有10ppm/°C。这意味着什么?就像用电子秤称体重时,连秤盘都帮你校准好了,直接站上去就能读数字。
这个TI出品的传感器有三项绝活:
我在智能插座项目实测中发现,即便负载电流从0.1A突变到5A,INA260的响应时间仅需588μs。对于需要快速保护的应用场景,它的ALERT引脚还能设置阈值触发中断。
第一次配置时,我因为漏选依赖项导致编译报错。完整的环境准备清单应该是:
rt-thread --version确认)bash复制RT-Thread Components --->
Device Drivers --->
[*] Using Sensor device drivers
bash复制msh > i2c probe
Found I2C bus: i2c1
官方软件包有时更新滞后,推荐用GitHub最新版:
bash复制# 在packages文件夹下执行
git clone https://github.com/RT-Thread-packages/ina260.git
menuconfig配置时注意这两个选项:
Enable INA260 exampleAVG=16(16次均值滤波)| 现象 | 可能原因 | 解决方案 |
|---|---|---|
| 初始化失败 | I2C地址不匹配 | 检查A0/A1引脚电平组合 |
| 读数恒为0 | 未使能BUS_VOLTAGE测量 | 配置MODE_REG为0x07 |
| 数据跳变严重 | 电源纹波过大 | 在VCC引脚添加10μF电容 |
| 功率计算异常 | 校准寄存器未写入 | 调用ina260_set_calibration |
原始示例代码的采样间隔太短,我改进后的方案:
c复制void ina260_thread_entry(void *parameter)
{
struct rt_sensor_data data;
while (1) {
// 每次读取间隔500ms
rt_thread_mdelay(500);
// 批量读取所有数据(原子操作)
if (rt_device_read(sensor_dev, 0, &data, 1) == 1) {
rt_kprintf("Current:%.2fmA, Voltage:%.2fV, Power:%.2fmW\n",
data.data.current,
data.data.voltage,
data.data.power);
}
}
}
关键点在于使用rt_device_read的批量读取模式,比单独调用三个API更稳定。
官方标称精度是±0.15%,但通过两点校准可以做得更好:
c复制ina260_set_calibration(0.0); // 清除偏移
c复制ina260_set_calibration(5.0 / read_value);
虽然INA260自带温漂补偿,但在极端环境下还需额外处理:
c复制float temp_compensate(float raw, float temp)
{
// 每摄氏度补偿0.0012%
return raw * (1 + (temp - 25) * 0.000012);
}
单纯测量瞬时值不够?我用环形缓冲区实现了电能累计:
c复制#define BUF_SIZE 60
struct {
float power[BUF_SIZE];
rt_tick_t time[BUF_SIZE];
int index;
} energy_buf;
void record_power(float pwr)
{
energy_buf.power[energy_buf.index] = pwr;
energy_buf.time[energy_buf.index] = rt_tick_get();
energy_buf.index = (energy_buf.index + 1) % BUF_SIZE;
}
float calculate_energy()
{
float total = 0;
for (int i = 1; i < BUF_SIZE; i++) {
int prev = (energy_buf.index - i - 1) % BUF_SIZE;
int curr = (energy_buf.index - i) % BUF_SIZE;
rt_tick_t delta = energy_buf.time[curr] - energy_buf.time[prev];
total += energy_buf.power[curr] * delta / RT_TICK_PER_SECOND;
}
return total / 3600.0; // 转换为Wh
}
PCB布局直接影响测量精度,我的血泪教训:
实测对比:优化布局后,1A小电流测量误差从3%降至0.2%。