小飞机的板子画成这样:
然后就开始溜号了。。。真心希望有小伙伴能来一起搞一下啊~
溜号是因为这次想在马达控制中加入电流闭环,所以就想测一下720空心杯带桨和不带桨状态下用锂电池供电的电流,正当要测时发现手上的万用表没电了,很是恼火。并且我的万用表也无法连续记录数据,这样就无法得到锂电池的放电曲线,所以干脆自己做一个吧!
方案一
MCU + ADC + OP AMP
有不少专为电流测量的放大器,比如TI的INA181、INA199,如果对分辨率要求不高,现在很多MCU内置12位ADC已经足够用了。这种方案架构比较灵活,可选范围很大。但是需要开发MCU程序,并且电路也不简洁。
方案二
数字接口电流计/功率计芯片
这种方案集成度高,电路简洁,但是可选范围变窄了,测量参数指标完全由芯片决定。
因为之前已经做了 CH347转SPI I2C接口模块,啥也别说了,方案二走起!
原理图
选用了TI的INA226芯片,原理图如下:
特性
- 感测总线电压范围:0V - 36V
- 高侧/低侧电流感测
- 电压、电流、功率测量
- 0.1% 增益误差
- 10uV 偏移
- 可配置测量平均值
- 16个可配置I2C地址
- 2.7V - 5.5V 电源供电
- 2路电源轨,可选为负载电源,作为 CH347高速USB桥接模块 扩展时,为 3.3V 和 5V
- Alert指示灯
- 非共地连接时,可选远端电压感测
- 引脚兼容CH347模块,即插即用
PCB
打样归来:
项目已经上传到GitHub:
https://github.com/pengwon/ina226
测试
python API已经编写差不多,连接esp32-c3模块测试下:
测试代码:
sensor = INA226()
print(sensor.get_config())
sensor.set_alert_limit(0x1000)
print(sensor.get_calibration())
print(sensor.get_shunt_voltage(), 'uV')
print(sensor.get_bus_voltage(), 'mV')
print(sensor.get_current(), 'uA')
print(sensor.get_power(), 'mW')
sensor.set_mask_enable('SOL')
print(sensor.get_mask_enable())
sensor.close()
输出:
{'reset': False, 'avg': 0, 'vbus_ct': 4, 'vsh_ct': 4, 'mode': 7}
2048
595.0 uV
5035.0 mV
29750.0 uA
150.0 mW
{'SOL': True, 'SUL': False, 'BOL': False, 'BUL': False, 'POL': False, 'CNVR': False, 'AFF': False, 'CVRF': True, 'OVF': False, 'APOL': False, 'LEN': False}
这个esp32模块中有程序在运行,功耗应该是动态变化的,画个动态图看看:
后面有时间可以学着搞个gui,毕竟颜值即正义嘛。
公众号 | FunIO
微信搜一搜 “funio”,发现更多精彩内容。
个人博客 | blog.boringhex.top