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才关闭。这样避免了压缩机频繁启停,延长寿命。施密特触发器干的就是类似的事,只不过对象是电信号。

参考链接

相关推荐
青衫嵌入式11 小时前
FreeRTOS中断优先级配置不对也会HardFault?这次用一个血的教训讲明白
嵌入式
零涂毕业设计1 天前
毕业设计模块开发-OLED显示屏(IIC协议0.96寸)STM32 ESP32 FPGA Linux驱动免费分享
linux·stm32·单片机·嵌入式·esp32·fpga·oled
wdfk_prog1 天前
嵌入式面试真题第 13 题:单硬件 Timer 下的高精度多路软件定时器架构设计
c语言·开发语言·面试·职场和发展·嵌入式
nullregedit2 天前
OpenHarmony 小鸿 AI 开发实战 05:烧录成功仍黑屏的 GPIO14/PWR_ON 故障复盘
openharmony·gpio·故障排查·开源鸿蒙·ws63
潘潘的嵌入式日记2 天前
嵌入式安全重构——新老两套同时跑
嵌入式·架构设计·验证·代码重构
Fu_Lin_2 天前
Qt 嵌入式从零基础到精通总纲
开发语言·qt·嵌入式·qt嵌入式
潘潘的嵌入式日记3 天前
一个宏在调试阶段挡住所有误操作
安全·嵌入式··调试·编译期·bring-up
K成长日志7 天前
BLE链路层空口包--LE Uncoded PHY
物联网·嵌入式·蓝牙·iot·ble·无线·通信
凉、介7 天前
Virtio(三):Virtqueue 建立与 Buffer 提交
笔记·学习·嵌入式·arm·虚拟化·virtio
dddwjzx7 天前
嵌入式Linux C应用编程——Framebuffer应用编程
linux·嵌入式