迟滞比较器是一个具有迟滞回环传输特性的比较器。又可理解为加正反馈的单限比较器。在反相输入单门限电压比较器的基础上引入正反馈网络,就组成了具有双门限值的反相输入迟滞比较器。——来源百度百科
那么我们在程序设计时也会用到类似于这种功能的算法,比如实现在某个温度点执行动作,当超过这个温度阈值时,设备工作,当低于温度阈值时,设备关闭。如果温度在阈值上下波动,那么设备也会频繁的启停,这样对用户来讲体验是不友好的,因此需要一种算法来避开这个波动区间,这就是我们要讲的滞回算法。
蓝色表示上升曲线,红色表示下降曲线。分析:在上升阶段,大于开启点时,开始执行;在下降阶段时,小于关闭点时,停止执行。要实现这个算法,首先我们需要明白一个关键点,怎么判断当前的数据是上升还是下降?提供一个思路:用当前的数据与上次的数据和设定的阈值进行对比,如果当前的数据大于阈值,但上次的数据小于阈值,那么就可以判断为上升阶段;反之,如果当前的数据小于阈值,但上次的数据是大于阈值的,那么可以判断为下降阶段。滞回曲线可以分为三个部分,关闭、开启和保持。
unsigned int InputData=0;//输入数据
unsigned int OldData=0;//上次数据
unsigned char Falling=0;//下降标志位
unsigned char rise=0; //上升标志位
unsigned char Start = 100;//关闭阈值
unsigned char End = 150;//开启阈值
printf("Please input data:");
scanf("%d",&InputData); //输入数据
if((InputData > Start) && (OldData <= Start)) //判断是否为上升阶段
rise = 1;//上升标志位
if((InputData < End) && (OldData >= End)) //判断是否为下降阶段
Falling = 1;//下降标志位
if(InputData <= Start)//输入的数据小于等于关闭阈值
{
printf("Close
");//执行关闭动作
rise = 0;//标志位清零
Falling = 0;
}
else if(InputData < End)//输入的数据小于开启阈值,则分为两种情况
{
if(rise)//上升标志位
printf("Close
");//关闭
if(Falling)//下降标志位
printf("Open
");//开启
}
else //输入的数据大于等于阈值
{
printf("Open
");//开启
rise = 0;
Falling = 0;//标志位清零
}
OldData = InputData;//记录上一次数据
----------------------------------------------------END---------------------------------------------------------------
页面更新:2024-04-25
本站资料均由网友自行发布提供,仅用于学习交流。如有版权问题,请与我联系,QQ:4156828
© CopyRight 2008-2024 All Rights Reserved. Powered By bs178.com 闽ICP备11008920号-3
闽公网安备35020302034844号