:在带学生做问题之前,我发现高中技术选择考试总是有一个问题,测试继电器特性的抖动处理。包括你自己的项目,你也会遇到这样的问题。嵌入式通常涉及一些信号,这些信号通常不是一个稳定的值,会产生一些不可避免的抖动,然后记录这个问题。
1. 基础功能
??假设洗碗机的控制系统现在需要完成,洗碗机的水需要热水。现在用继电器控制加热棒加热水箱,用温敏电阻测量水箱温度。水箱温度小于65℃继电器吸合,加热棒打开,加热水箱水;水箱温度大于等于65℃继电器断开,停止加热。
2. 遇到问题
??在理想状态下,温度数据是时,满足<65℃,继电器开启;>=65℃当继电器断开时。但在实际情况下,因为,在特殊时刻,检测到的温度总是在65℃左右浮动。此时继电器开关频率过高,控制系统极不稳定,不断开启吸合。
3. 问题解决
??实践中发现,虽然实际温度总是在某个温度点附近跳跃,但跳跃范围不大,如65℃附近的跳变值不会达到70℃。因此,可采用以下做法:
- 温度升高过程:温度<65℃,加热水箱;但温度升高>=70℃时,停止加热
- 温度下降过程:当温度为70时℃回落时,温度<65℃,停止加热。
??即在65℃~70℃在温度范围内,控制继电器的状态,。
3.1 软件实现
/* ret:是否加热标志 Target:目标加热温度 delt:滞环温度允许范围 actual:实际测量温度 heatTube:上一次加热棒打开标志 */ uint8_t HeatingTemp(uint8_t Target,uint8_t delt,uint8_t actual,uint8_t heatTube) {
uint8_t ret = 0; if(actual < Target) ret = 1; //打开低于目标温度的加热棒 else if(actual > Target delt) ret = 0; //高于目标温度断开 else ret = heatTube; //中间温度,加热 与上一次加热棒状态相同 return ret; }
??软件代码类似于实现滞环,其优点是实现方便,系统稳定性强。但他也受到两个限制:
??若上述温度给定数据变化迅速,范围大于给定开关范围delt,开关频率过高仍会产生效果。
:到目前为止,类似的问题包括:温度加热控制、手机上类似的充电量格显示和光耦抖动处理。