GPIO内部结构中的施密特触发器(肖特基触发器)作用及原理

如下为GPIO内部基本结构图:

图中标号为3的是施密特触发器(这图翻译错误,翻译为肖特基触发器了),这个触发器的作用是什么呢?其作用是就是对输入的电压进行整形,它的执行逻辑是:如果输入电压大于某一阈值,输出就会瞬间升为高电平,而一旦为高电平了,输入电压必须降到下限阈值以下才会变为低电平,否则不会变为低电平;如果输入电压小于某一阈值,输出电压将会瞬间降为低电平,而一旦变为低电平了,输入电压必须升高到上限阈值以上才能再次变为高电平,否则不会变为高电平。举个例子:因为这个GPIO引脚的波形是外界输入的,虽然是数字信号,实际情况下可能产生各种失真,比如有如下红色线表示的波形:

这是一个夹杂了波动的高低变化电平信号,如果没有施密特触发器,那很可能因为干扰而导致误判,如果有了施密特触发器,比如定一个绿色线表示的阈值上限和下限,高于上限输出高电平,低于下限输出低电平。这样施密特触发器的输出就是首先低于下限输出低电平(2的左边),然后在1位置处高于上限,输出立刻变为高电平,虽然在1~3之间由于信号波动,有部分信号再次低于上限,但没低于下限阈值(最下面的绿线),但是对施密特触发器来说,只有高于上限或者低于下限,输出才会变化,所以(1,4)开区间电平依然是高电平,直到下次低于下限时即到达4位置处时,才会转为低电平,在(4,5]区间,信号即使在下限附近来回横跳,因为没有跳到上面绿色线表示的上限去,所以输出仍然是稳定,直到下一次高于上限即到6位置处,才输出高电平,这就是施密特触发器的输出信号,可以看到,相比输入信号,经过整形的信号就很完美了。这里用了两个比较阈值(上下两条绿色线表示)来进行判断,中间留有一定的变化范围可以有效避免因为信号波动造成输出抖动现象。

在看一个例子:

你有没有遇到过这种情况------明明只按了一下按键,系统却响应了好几次?或者传感器信号明明变化不大,MCU却频繁触发中断?这类问题往往不是代码写错了,而是 输入信号太"脏"了 。在真实世界中,模拟信号从来都不是教科书里那种干净利落的波形。传输线反射、电磁干扰、机械触点弹跳......这些都会让本该清晰的高低电平变得模糊不清。这时候,普通的数字逻辑门或比较器就容易"误判",而一个看似简单的小电路------ 施密特触发器(Schmitt Trigger) ,就能帮你轻松化解这一难题。它不像复杂的滤波算法那样吃算力,也不需要一堆外围元件,靠的就是一种叫 滞回特性 (Hysteresis)的设计智慧。今天我们就来彻底拆解这个经典电路,从底层原理讲到实际应用,让你真正理解为什么它是嵌入式系统中的"信号守门员"。

我们先来看一个典型的场景:机械按键。

当你按下一颗轻触开关时,金属触点并不会瞬间稳定接触,而是会像弹簧一样反复弹跳几次,持续时间通常在 5~20ms 之间。如果直接把这个信号接到MCU的GPIO上,哪怕开启了中断,也可能产生多个上升沿/下降沿,导致一次操作被识别成好几次。

普通比较器或逻辑门只有一个固定的翻转阈值,比如3.3V系统中是1.65V。只要输入在这个电压附近上下抖动,输出就会来回翻转------这就是所谓的"振荡"现象。

而施密特触发器不同。它的聪明之处在于: 上升和下降用的是两个不同的阈值 。

输入电压从低往高走,必须超过 上阈值 V_{T+} 才会翻高;

而一旦变高了,就不能轻易再变回去------只有当输入降到 下阈值 V_{T-} 以下时,才会重新拉低。

这两个阈值之间的差值 \\Delta V = V_{T+} - V_{T-}} 就是 滞回电压 ,也叫迟滞窗口。只要噪声幅度小于这个窗口,就不会引起误触发。

这就像你家的空调设定温度:制冷模式下,室温升到26°C才启动,但不会一降到26°C就停机,而是等到24°C才关闭。这样避免了压缩机频繁启停,延长寿命。施密特触发器干的就是类似的事,只不过对象是电信号。

参考链接

相关推荐
梵刹古音1 天前
【C语言】 浮点型(实型)变量
c语言·开发语言·嵌入式
良许Linux1 天前
DSP的选型和应用
后端·stm32·单片机·程序员·嵌入式
余生皆假期-1 天前
永磁同步电机下桥三电阻采样方式的电机电流重构方法
单片机·嵌入式硬件·嵌入式
切糕师学AI2 天前
ARM 架构中的复位(Reset)与复位流程
arm开发·单片机·嵌入式·复位
梵刹古音2 天前
【C语言】 格式控制符与输入输出函数
c语言·开发语言·嵌入式
嵌入小生0072 天前
双向链表、双向循环链表之间的异同---嵌入式入门---Linux
linux·c语言·数据结构·链表·嵌入式·小白
CQ_YM3 天前
ARM之I2C
arm开发·单片机·嵌入式硬件·嵌入式
梵刹古音3 天前
【C语言】 字符型变量
c语言·开发语言·嵌入式
2401_859049083 天前
lvgl移植到Linux踩坑
linux·运维·arm开发·elasticsearch·嵌入式·ubantu
嵌入小生0073 天前
单向链表的常用操作方法---嵌入式入门---Linux
linux·开发语言·数据结构·算法·链表·嵌入式