本帖最后由 KA_IX 于 2023-1-13 16:03 编辑

滞回比较器在模拟电路中,
滞回比较器在日常应用中非常广泛,所谓滞回,字面意思就是等待一段时间再回来,它是相较于普通单限比较器而言的。
单限比较器只有一个门限电压,这让它有很高的灵敏度响应,如果输入信号仅仅是高、低电平,那只需要把参考电平设置成高电平的一半,使用单限比较器完全没有问题。但是在一些应用当中,如输入信号是0~5v的模拟电压信号,当输入信号的值在参考的门限电压附近时,就有可能因为输入信号的波动使比较器的输出在短时间内高低电平来回跳变。
因此,滞回比较器,可以提高输出的抗干扰能力。
那么滞回比较器,有什么特性呢?它主要是由两个阈值电压,如下图所示VTH1,VTH2;
从图上很好理解,当输入的电压Vin从高递减到0,Vout是按照图中2号折线进行变化;
当输入电压Vin从低依次递增超过VTH2时,Vout是按照图中1号折线进行变化;
f334e9f8aa8a4f7a88df83ad02351da4~noop.image?_iz=58558&from=article.jpg
滞回比较器的特性曲线

关于滞回比较器的模拟电路,如下图所示:
ee3d0aaba6ed4f0ebe12cdb76765f45b~noop.image?_iz=58558&from=article.jpg
滞回比较器

关于上图所示用运放构成滞回比较器的原理,就不详细说了。
下面来说下,怎么用C语言代码,实现一个具有滞回效应的比较器了。代码如下所示:

  1. //处理水泵自动运行
  2. /*
  3.   当湿度传感器的测量湿度值
  4.      current_HumiVal 小于   设定的最小湿度值时候,就应该自动开始浇水;
  5.          current_HumiVal 大于   设定的最小湿度值+100 时候,就应该停止浇水;
  6. */
  7. void handle_motor_auto(int current_humival,int SetHumiVal)
  8. {
  9.         if(current_HumiVal<SetHumiVal)//L
  10.         {
  11.             digitalWrite(MOTOR_PIN,HIGH); //motor 开启
  12.         }else if(current_HumiVal>(SetHumiVal+100))//H  100数值是一个保持阶段
  13.         {
  14.                 digitalWrite(MOTOR_PIN,Low); //motor 关闭  
  15.         }       
  16. }  

8a7b5cfaa14741cd840ccf51591b1f1d~noop.image?_iz=58558&from=article.jpg

图中黑色线表示,当前湿度值从高依次递减,motor_pin引脚按照黑色线进行电平变化(0到1变化);
图中橙色线表示,当前湿度值从低依次递增,motor_pin引脚按照橙色线线进行电平变化(1到0变化);

同样的道理,用c语言代码实现的滞回比较器,提高输出的抗干扰能力。motor_pin引脚不会因为传感器获取的湿度值微小波动而发生动作,从而提高了系统的抗干扰能力。

来源:风口上的胖子