协议里发 mA 还是发 DAC 码?单位改造的三步决策

📅 2026/8/6 10:09:58
协议里发 mA 还是发 DAC 码?单位改造的三步决策
一句话: 协议原先是上位机发12位DAC码业务上却要100mA。改造用mA×100整数传输100.00mA 10000。帧长不变、无浮点、精度0.01mA回读语义选当前生效值——发什么、回什么、谁换算三步想清楚。适合谁读做上位机协议、纠结传输单位怎么定的嵌入式工程师。需求领导要直接发 mA原协议里上位机设电流发的是 12 位 DAC 码0~4095。领导要求上位机直接发 mA——业务语言是我要 100mA不是寄存器写 1365。方案选型三个候选方案精度代价float mA无限帧变长浮点字节序麻烦嵌入式解析成本高U16 mA×1000.01mA帧长不变2B整数运算精度远超需求U16 mA×100.1mA精度低于 DAC 本身分辨率选mA×100100.00mA 10000。理由帧长不变原来 2 字节的码值现在 2 字节的 mA×100协议结构不用改整数运算无浮点嵌入式端好解析、好调试精度足够0.01mA 远高于 DAC 的 12 位分辨率约 0.073mA有个关键认知要先说清楚发 mA 不提高输出精度——输出精度由 DAC 位数决定上位机发 100.00mADAC 也只能输出到 0.073mA 的粒度。但回读分辨率提升了而且未来换 16 位 DAC上位机协议不用改。回读语义之争回什么单位改完后有个细节要定读电流命令回显什么方案 A回显上位机上次发的值——所见即所得方案 B回显当前生效的设定值——屏幕、发光序列、PID 改的也反映选了B。原因很实际改电流的不止上位机一个——串口屏可以设、发光序列自动跑、PID 也会调。如果回显 A上位机发的旧值屏上显示的和实际设定不一致调试和用户都会懵。回显当前生效才是真实状态。三条经验协议单位改造先想清楚发什么、回什么、谁换算——三个角色上位机、固件、其他写入方屏/序列/PID。每一项都要有明确归属×100 是整数协议传输的常用技巧——避免浮点、保留精度、帧长不变。类似做法还有 ×10、×1000按需要的精度选回读语义要覆盖所有写入方——不能只想着上位机发的要问还有谁会改这个值换算一览角色做什么上位机发mA×100 整数100.00mA → 10000固件收÷100 得 mA再换算 DAC 码固件回读当前生效的 mA×100其他写入方屏/序列也按 mA×100 语义读写实测对比发DAC码上位机要自己换算业务语言断层 | 发mA×100上位机直接说100.00mA精度0.01mA有用的话点个收藏下次调试直接用。有问题欢迎评论区交流看到了都会回。下一篇协议Bug排查两案例——地址写错通道漏擦——复制粘贴代码的代价