
直流电压电流表
简介
这是一个基于STC8H单片机和BH45B1225设计的直流电压电流表,弥补普通万用表没有数据输出(Modbus)的痛点,能够同时测量电压,电流并推算出功率,体积小巧,使用电池供电
简介:这是一个基于STC8H单片机和BH45B1225设计的直流电压电流表,弥补普通万用表没有数据输出(Modbus)的痛点,能够同时测量电压,电流并推算出功率,体积小巧,使用电池供电开源协议
:GPL 3.0
(未经作者授权,禁止转载)描述
0,写在前面
设计初衷是为了方便连续测试电流电压并输出记录到电脑,主要目标是为了方便开发或测试使用
关于精度,分采样前端和后端处理两部分
采样前端这里极其简陋,主要是为了验证功能,实际还有很大的优化空间(悬空时,电流档有底数,会抖,电压档有底数,比较稳定,可以通过Modbus接口分别设置归零值)
后端这里使用BH45B1225,主要是看中了易于购买,价格合适,有连续PGA可调(1~128)
1,测量参数
可测量直流电压≤24V,直流电流≤1A(电阻分压1:101,电流采样电阻为10mR)
代码中电压档使用8倍的PGA,可以测量2500/8=312.5mV,电流档使用128倍的PGA,可以测量2500/128=19.53125mV
上述测量范围结合分压或采样电阻可得实际的电压输入范围为≤31V,电流输入范围为≤1.9A
电压分辨率为0.12mV左右(暂时没有量程分档的机制,校准麻烦),电流分辨率暂时没仪器测试
2,功能简介
1,485模式(屏幕上左下角显示"485",长按"L"切换到此界面,开机后默认为此界面)
该模式下,屏幕依次显示电压,电流,"瞬时"功率,电池电压,大概更新频率为3Hz
外界可通过485接口,基于Modbus协议访问设备时间,测量值,校准参数等
该模式适合简单测试电压电流,或嵌入用户的设备中使用
2,Log模式(屏幕上左下角显示"Log",长按"C"切换到此界面)
该模式下,屏幕依次显示电压,电流,"瞬时"功率,电池电压,大概更新频率为3Hz
外界设备主动向485端口汇报时间,测量值,大概更新频率为1Hz(汇报格式为csv格式,方便串口接收到文件形成表格)
该模式适合简单测试电压电流,或记录电压,电流值到电脑
3,设置模式(屏幕下方显示当前设备时间,长按"R"切换到此界面)
该模式下,屏幕依次显示电压校准值(默认101.000),电流校准值(默认100.000),电池电压校准值(默认5.700)
外界可通过485接口,基于Modbus协议访问设备时间,测量值,校准参数等
这个界面下还可以使用STC的烧录软件中的"RTC对时"功能校准时间(使用stcai-isp-v6.94H测试通过)
我简单说一下校准值这个,电压和电池电压这两个校准值好理解,电流这个,我大概说一下
默认100.000是在采样电阻为10mR的时候推出来的,但是不知道怎么的,我手上的电阻实际测试的时候,通1A电流,测到了电阻上压降为12mV多
所以我手上这个就简单地把校准值缩小了1.2倍左右后,再去细调,最后确定为80.989这个值还OK
所以制作的时候要结合实际电阻大小来调整这个校准值
3,使用说明
Modbus寄存器表见附件,有个简单的使用说明
Log汇报模式下,不响应Modbus命令,同时建议先打开串口软件,并勾选"保存到文件"后,再切换到Log模式,避免丢失csv的标题栏
烧录时先按下"L"按键后再给芯片上电,即可在烧录软件中看到待烧录设备,烧录参数见附件
附件中的"ReceivedTofile-COM24-2024_7_21_17-56-47 - 副本.CSV"为Log模式下,设备串口输出到文件的内容,测量对象为锂电池(不是给设备供电的锂电池,这里特别注意)
测试时请注意485端未加隔离,设备供电电源不要引入到测量回路,测量超过24V时,特别注意电火花,安全第一
4,简单测试
5,协议说明
通讯参数 115200 8N1
仅在非Log模式下响应Modbus命令
寄存器地址表
typedef enum
{
AppPort_ModbusReg_Addr = 0,
AppPort_ModbusReg_Time_H,
AppPort_ModbusReg_Time_L,
AppPort_ModbusReg_Voltage_H,
AppPort_ModbusReg_Voltage_L,
AppPort_ModbusReg_Current_H,
AppPort_ModbusReg_Current_L,
AppPort_ModbusReg_Power_H,
AppPort_ModbusReg_Power_L,
AppPort_ModbusReg_Vin_H,
AppPort_ModbusReg_Vin_L,
AppPort_ModbusReg_Voltage_ADC_H,//11
AppPort_ModbusReg_Voltage_ADC_L,
AppPort_ModbusReg_Current_ADC_H,
AppPort_ModbusReg_Current_ADC_L,
AppPort_ModbusReg_Vin_ADC,
AppPort_ModbusReg_VoltageGain_H,//16
AppPort_ModbusReg_VoltageGain_L,
AppPort_ModbusReg_CurrentGain_H,
AppPort_ModbusReg_CurrentGain_L,
AppPort_ModbusReg_VinGain_H,
AppPort_ModbusReg_VinGain_L,
AppPort_ModbusReg_VoltageDrop_H,//22
AppPort_ModbusReg_VoltageDrop_L,
AppPort_ModbusReg_CurrentDrop_H,
AppPort_ModbusReg_CurrentDrop_L,
AppPort_ModbusReg_CustomArea_S,//26
AppPort_ModbusReg_CustomArea_E = (AppPort_ModbusReg_CustomArea_S+12),
}AppPort_ModbusReg_E;
地址0:Modbus地址,可修改范围为1~247,请不要修改为0,默认地址为1(不知道确切地址时可发送255,设备同样响应)
地址1~2:当前设备的时间,UTC格式
地址3~4:电压测量值,为真实值的1000倍
地址5~6:电流测量值,为真实值的1000倍
地址7~8:"瞬时"功率推算值,为真实值的1000倍
地址9~10:电池电压测量值,为真实值的10倍
地址11~12:电压ADC,18bit
地址13~14:电流ADC,18bit
地址15:电池电压ADC,12bit
地址16~17:电压校准值,为真实值的1000倍,默认101.000
地址18~19:电流校准值,为真实值的1000倍,默认100.000
地址20~21:电池电压校准值,为真实值的1000倍,默认5.700
地址22~23:电压归零值,为真实值的1000倍,小于该值的测量值会被归零,默认0.5mV
地址24~25:电流归零值,为真实值的1000倍,小于该值的测量值会被归零,默认1.0mA
地址26~38:自定义开机字符串,支持'\n'换行,请写入不超过三行的字符串,否则会挡住开机进度条
6,写在最后
代码里OLED刷新部分用的模拟IIC,而且图方便使用的是整屏刷新,所以上述的频率都使用了"大概"这个修饰词
关于精度这部分,我测试中使用皆为1%的常规电阻,个人感觉电压档还行,电流档欠妥
关于代码这部分,我第一次使用STC的单片机,写的代码实在是,嗯,一言难尽吧,就不开源出来献丑了,大家如果复刻中遇到任何问题,欢迎向我反馈
硬件这块,半桶水,自知还有很大的提升空间,请大佬们多多指教
图片里测量基准为开了空调时测得,视频里测量基准时为关了空调,温漂挺明显了
后面得加温补并替换低温漂电阻,电压也得分档测量,电流检测这块估计得重新设计,不然没太大的复刻意义...
使用STC8H这款单片机下来,个人感觉还是不错的,尤其是STC配套的ISP上位机,真的替开发人员,乃至生产流程都考虑到很多
当然使用下来也有一点点问题,使用STC的单芯片仿真,选择USB方式,仿真全速运行时,电脑风扇会狂转,感觉要起飞了!(驱动版本 V1.19)
要是能顺带优化下,全速时开关断点,变量周期更新就更好了,期待姚总更新,尽管这样还是要给姚总疯狂打call,给我们带来了那么多物美价廉的产品
有一说一,立创EDA这些年做的也是越来越成熟了,有些功能点确实提高了工作效率,而且还无门槛提供每月两次包邮白嫖机会,简直就是活菩萨
感谢STC&立创EDA组织的这次活动,让我能验证自己的设计想法,感谢各位看官老爷捧场
设计图

BOM


评论