STM32水温控制系统硬件详解
系统介绍:基于STM32F103的水温控制系统.实现室温到100度任意区间水温控制.精度;+/-1摄氏度.平均响应应时间:5分钟.控制对象:1公斤水.
系统主要组成;铂金测温驱动电路(恒流源实现),市电电压过零检测电路.功率驱动电路(固态继电器实现),小信号放大电路(仪用运放实现),STM32单片机最小系统.500W水温加热管.
1,铂金电阻测温驱动电路
驱动PT100铂金测温电阻.和电阻桥原理相似.利用1MA精密恒流源加在铂金电阻一端,另一端接地.用另一个1MA精密恒流源加在精密100欧姆电阻一端,另一端接地.(选择100欧姆,是因为PT100在零度时电阻值是100欧姆)
这是铂金电阻驱动电路,R3是铂金电阻,当温度变化时电阻会发生变化,从而影响VF1和VF2之间压差不为零。分别作为INA128仪表放大器的输入端(仪表放大器的优点是输入阻抗非常高,共模抑制比好,非常适合桥式电路)。经过放大输出差模信号。但是其输入的共模信号比较窄,最大也只能到达电源电压附近,此时可以通过调节Ref端调节输出电压。再用OPA335完成10倍的放大工作使其输出在合适的范围,方便AD采集。
2,驱动电阻桥的是1 毫安的电流源,必须选用精密电流源。保证电阻的变化不影响电流源的电流,如果不是精密电流源,那么电阻的变化就不能真正反应温度的变化,影响整个系统的精度。我选用的是HowLand电流泵
这是1 mA的电流源,经过试验搭建非常稳定,适合用来驱动桥式测温电路。
3,电热丝驱动电路,用的是固态继电器。性能稳定,但价格较贵。在调节加热功率时用的过零检测电路,通知单片机进入中断,调节继电器通断时间,控制导通角,从而控制加热功率。其实可以不用过零检测,这里用到是因为这里用过零检测,可以精确地调整输入功率,控制更精确,对电网冲击更小。使整个系统工作更稳定。
4,温度控制算法,在控制领域因为水是滞后性比较严重的介质。在加热功率的控制上,必须采用一定的算法控制,这里采用PID控制算法,简单易行。通过调节比例,积分,微分常数,控制功率,避免超调。下面是程序算法模型
struct PID {
unsigned int SetPoint; // 设定目标 Desired Value
unsigned int Proportion; // 比例常数 Proportional Const
unsigned int Integral; // 积分常数 Integral Const
unsigned int Derivative; // 微分常数 Derivative Const
unsigned int LastError; // Error[-1]
unsigned int PrevError; // Error[-2]
unsigned int SumError; // Sums of Errors
};
//PID处理函数
//=====================================================================================================*/
unsigned int PIDCalc( struct PID *pp, unsigned int NextPoint )
{
unsigned int dError,Error;
Error = pp->SetPoint - NextPoint; // 偏差
pp->SumError += Error; // 积分
dError = pp->LastError - pp->PrevError; // 当前微分
pp->PrevError = pp->LastError;
pp->LastError = Error;
return (pp->Proportion * Error // 比例项
+ pp->Integral * pp->SumError // 积分项
+ pp->Derivative * dError); // 微分项
}
此模型容易在单片机上实现,性能较好。经过实际验证符合较高的要求。对于各个参数的选取,我才用的是配凑发,根据效果来不断调整参数,最终调到合适的参数。
5,最后一点是AD采集的基准电压源也很重要,直接影响采样精度,如果可以尽量选用专用的基准电压源芯片,控制AD采样误差。
以上是整个水温控制系统的设计要点,比较简单。但是对于理解PID控制有很大帮助,还有仪用运放的使用和电流源的使用桥式电路的使用。硬件和软件都达到一定的锻炼效果。
2012年4月 于武汉