DIY USB 电流表(7):读取和显示 INA219 电流电压数据

DIY USB 电流表(7):读取和显示 INA219 电流电压数据

💡 原文中文,约6800字,阅读约需16分钟。
📝

内容提要

在这篇文章中,作者介绍了如何适配INA219驱动到CH32V003上,并读取传感器数据显示在屏幕上。文章详细介绍了准备工作、I2C读取方法、INA219驱动适配、获取系统运行时间、读取数据并显示等步骤。最后,作者展示了USB电流表的实际运行效果。文章提供了相关的代码和开源地址。

🔎

延伸解读

I2C 读取功能的实现要点

文章指出,CH32V003-GameConsole 原有的 I2C 驱动仅支持写入,无法读取 INA219 数据。作者通过修改 i2c_tx.c 启用自动 ACK 标志位,并新增 I2C_start_read、I2C_read 和 I2C_read_stop 三个方法,实现了完整的读取流程。这提醒读者,在复用现有驱动时,需根据外设需求补充缺失的功能,并注意 ACK 配置对读取成功的影响。

INA219 驱动移植的适配工作

作者将 ESP32 平台的 INA219_WE 库移植到 CH32V003,主要修改包括移除 Arduino 头文件、精简构造函数、补充 byte、abs 和 delayMicroseconds 等缺失定义,并将 writeRegister 和 readRegister 中的 Wire 调用替换为 i2c_tx 中的方法。这表明跨平台移植时,需重点关注底层硬件抽象层的差异,并逐一替换依赖项。

电量累计的计算方法

文章采用积分方式计算累计电量:每次读取功率后,乘以距上次计算的时间间隔,再累加到总电量中。作者利用 SysTick 中断实现 millis() 函数来获取时间。这种方法简单有效,但读者需注意时间间隔的精度和溢出问题,以及功率波动对累计值的影响。

实际测量中的压降现象

作者在 5V 输入下测得负载端电压约为 4.8V,指出这是 USB 线材内阻导致的压降。线材内阻越大,压降和发热越明显,尤其在充电场景中。这提示读者,USB 电流表的测量结果受线材质量影响,选择低内阻线材有助于减少压降和发热。

❓

Q&A

如何将INA219驱动适配到CH32V003上?

将INA219_WE库中的相关文件复制到USB电流表项目中,并修改代码以适配CH32V003的I2C方法。

在读取INA219数据之前需要准备哪些工作?

需要安装相关库,配置I2C读取方法,并编写计时方法以计算电量消耗。

如何实现I2C读取方法?

需要修改i2c_tx.c文件以启用ACK标志位,并在i2c_tx.h中添加读取相关方法的定义。

USB电流表如何计算电量消耗?

通过获取系统运行时间和功率,使用积分方式计算累计电量。

如何显示INA219读取的数据?

通过show_power_metrics方法将电压、电流、功率和电量格式化并显示在屏幕上。

USB电流表的开源地址在哪里可以找到?

USB电流表的开源地址是https://github.com/ohdarling/CH32V003-USBMeter。

🏷️

标签

➡️

继续阅读