内容提要
在这篇文章中,作者介绍了如何适配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。