背景介绍
最近几年搞项目开发,大家都在提国产化,之前差不多有十年的时间一直在使用ST的芯片在做开发,先是STM32F103和107,再就是STM32L071和073,还用STM32F429开发了几个产品,中间穿插着使用低功耗的处理MSP430F5438A开了几个产品,之后就是芯片库存告急,st的芯片几乎很难找到批量的库存,那几年公司业务也一般,调研了几家国产芯片,之后偶然的机会接触到了小华半导体的低功耗系列HC32L196的芯片,测试后发现国产芯片也可以了,对于我们功耗要求也不是那么严苛,整机静态功耗100uA,锂电池供电,基本就满足需求了。还有一点比较重要的是,在休眠模式下串口唤醒不丢数,之前STM32的L系列芯片要调试到任何情况下都不丢数据,必须让芯片在低功耗运行模式下才能实现,这两年没再关注ST的芯片也不太清楚现在是否有改观,小华的芯片可以做到在9600波特率下串口唤醒不丢数据,国产芯片已经很不错了。
需求
- 具备RS485通讯功能,支持Modbus-RTU协议;
- 具备电源指示灯和运行指示灯;
- 控制固态继电器,调节加热部分的功率;
- 能够采集PT100的温度,偏差在1℃以内;
- Modbus从机地址可配置;
- 加热温度的波动控制在1℃以内;
技术难点
控制加热锅炉的功率,开始考虑使用板载的器件直接控制锅炉,经过请教大牛,给了个建议使用固态继电器,通过固态继电器来控制锅炉,板子上使用控制直流有刷电机的A4950,这样板子的通用性会更强一些,同时使用固态继电器,标准化的产品会增强系统的稳定性。确定方案后难点就在固态继电器的特性上了,过零点切换,这个是重点,这个特点决定PWM的频率不能太快,要考虑1%高脉冲里有多少个周波可以计算在内,这里采用的1Hz的PWM,通过调节占空比来实现50Hz交流电的控制;
温度采集,开始没有过多考虑就直接用最简单粗暴的方式采集PT100的阻值,分压法,实际设计完硬件后,考虑软件实现时发现PT100的正常工作电流有要求,工作电流要求≤5mA,这样PT100电阻的分压变化范围会很小,在5mA点留下,两百摄氏度比零度时电压变化了0.375V,无法将MCU自带ADC的效用发挥到最大。然后开始查资料,最后确定使用一个稳压芯片提供稳定的2.5V电压,搭建一个电阻桥,然后使用一个MS358运放芯片放大50倍,然后用ADC采集电压。
稳定电压的提供,如何提供一个2.5V的稳定电压,通过查询资料,使用了TL431,串联的电阻一定不要太大了,开始用1K的电压无法稳定在2.5V,换成100的就OK了。
电阻桥的设计,跟PT100对应位置的电阻设计比较重要,需要根据测量温度的范围来选取阻值,开始考虑测量范围0~200℃,所以选用了100欧姆的电阻,后来需求上要求能够测试零下十几度的温度,遂将此电阻阻值设置为75欧姆,还有就是电阻桥上串联的电阻用来控制电路中电流的,选用了10K的电阻,电流大了放大倍数会变小,需要根据项目需求实际计算一个合理的值。
运放的选择,也是国产化的思维作祟,选用了MS358,供电电压3.3V,电压在其合理的范围内,实际测试时发现输出电压到了2.1付左右后无法再往上增加,询问了原厂的技术,说设计看不出来问题,让我改一下芯片的供电电压试试,为了避坑,我调节了放大倍数,让最高测试点不超过2.1V,同时也调节了供电电压,因为调节后的极限温度比较高,也能满足项目需求了就没再关注这个问题,过程中也购买了TI的LM358DR芯片进行测试,效果一毛一样,可能真是便宜没好货,老工程师给建议,不要图低成本太多,还是要先实现项目目标为主。
其余部分没啥难度,复用直流有刷电机的部分代码。
设计
核心器件选型
大部分复用了直流有刷电机控制板的器件,新增了稳压芯片TL431,运放芯片MS358。
功能框图
功能描述
- 具备RS485通讯功能,支持Modbus-RTU协议;
- 具备电源指示灯和运行指示灯;
- 支持PT100阻值采集,温度范围-20℃~200℃;
- 支持供电电压采集;
- 默认PWM输出频率1Hz,占空比可调0~99;
- 支持参数设置,掉电不丢失;
- 加热控制部分采用磁隔离;
- Modbus从机地址可以配置;
- 串口通讯参数可以配置;
- 加热工作模式可以配置(恒定功率加热,PID温控加热等);
产品
正面图
背面图
控制模式有四种,固定功率加热模式,固定功率+时间加热模式,PID温控加热模式和温度采集模式。
产品配置助手,基于python3的QT6开发,如下图所示: