4、数字量输入(DI)采集原理:干接点与湿接点、光耦隔离、电平检测电路
各位工程师朋友,咱们今天聊聊数字量输入采集。这玩意儿看着简单,但坑不少。我在现场调试时,见过太多因为DI接口没处理好导致的奇怪故障。说白了,数字量输入就是判断一个信号是“有”还是“无”,是“高”还是“低”。但实际工程中,这背后涉及到的知识点,足够写一本小册子了。
4.1 干接点与湿接点:两种信号源的本质区别
先说说信号源。你想想看,一个开关,它本身不带电,就是一个纯粹的机械触点。这种就叫干接点。另一种,信号源本身已经带了电压,比如一个传感器输出24V或0V,这种就叫湿接点。
核心区别一句话:干接点是无源触点,湿接点是有源信号。
我在一个老旧产线改造项目里遇到过这种情况。现场有一堆行程开关,全是干接点。我直接用PLC的DI模块去读,结果发现信号抖动得厉害。后来一查,是触点氧化导致接触电阻变大了。嗯,这里要注意,干接点虽然简单,但长距离传输时容易受干扰,而且触点本身会老化。
湿接点就好办多了。信号源自己提供电压,你只需要判断电平高低就行。但湿接点也有麻烦——电压等级不统一。有的设备输出5V,有的输出12V,还有的输出24V。我曾经被一个输出15V的传感器坑过,那电压不上不下,既不是标准的12V也不是24V,搞得我专门加了个电平转换电路。
| 类型 | 特点 | 典型应用 | 注意事项 |
|---|---|---|---|
| 干接点 | 无源,纯机械触点 | 按钮、继电器触点、行程开关 | 触点氧化、长距离干扰、需上拉/下拉 |
| 湿接点 | 有源,自带电压信号 | 传感器输出、PLC输出、编码器 | 电压等级匹配、共模电压问题 |
4.2 光耦隔离:为什么非它不可?
你可能会问,直接把信号接到单片机或PLC的IO口上不行吗?行,但风险很大。工业现场到处都是电机、变频器、焊机,这些设备产生的电磁干扰能轻松烧掉你的IO口。光耦隔离就是干这个用的。
光耦的原理很简单:输入端是一个LED,输出端是一个光敏三极管。电信号转成光信号,再转回电信号。电气上完全隔离,两边的地可以不一样。我个人的习惯是,所有外部DI信号必须经过光耦,哪怕只是接一个按钮。
我的经验:光耦的电流传输比(CTR)很重要。选型时别只看耐压,还要看CTR够不够。我曾经用过一个CTR只有20%的光耦,结果输入电流小了,输出端死活拉不低。后来换成CTR 100%以上的,问题就解决了。
光耦隔离电路一般长这样:
// 典型光耦输入电路(以PC817为例)
// 输入侧:接外部信号
// 输出侧:接MCU或PLC的IO口
// 输入侧计算:
// 假设外部信号为24V,光耦LED压降1.2V,电流取10mA
// 限流电阻 R = (24 - 1.2) / 0.01 = 2280Ω,取2.2kΩ
// 输出侧计算:
// 上拉电阻一般取4.7kΩ~10kΩ
// 输出高电平 = VCC,输出低电平 ≈ 0.3V
这里有个坑:光耦的响应速度。普通光耦如PC817,开关速度也就几kHz。如果你要采集高速脉冲信号,比如编码器输出,那就得用高速光耦,比如6N137。我记得有一次做高速计数,用PC817死活读不到脉冲,换了6N137就正常了。
4.3 电平检测电路:如何可靠地判断0和1?
信号经过光耦隔离后,就到了电平检测电路。说白了,就是判断电压是高还是低。但工业现场的信号不是完美的方波,会有噪声、毛刺、缓慢上升下降。所以我们需要一个施密特触发器。
施密特触发器有两个阈值:一个上升阈值,一个下降阈值。信号从低到高,超过上升阈值才认为是高;从高到低,低于下降阈值才认为是低。这两个阈值之间的差值叫回差。有了回差,就能有效抑制噪声。
关键参数:回差电压一般取0.5V~1V。太小了抗干扰差,太大了信号可能触发不了。
我常用的电平检测电路有两种:
- 分立元件方案:用两个三极管和几个电阻搭成施密特触发器。成本低,但参数一致性差。
- 集成芯片方案:直接用74HC14或CD40106这样的施密特反相器。我建议用这个,省心。
举个例子,用74HC14做电平检测:
// 74HC14施密特反相器典型应用
// 输入:光耦输出信号
// 输出:干净的方波信号给MCU
// 阈值参数(VCC=5V时):
// 上升阈值 VT+ ≈ 2.4V
// 下降阈值 VT- ≈ 1.6V
// 回差 ≈ 0.8V
// 实际电路:
// 光耦输出 -> 10kΩ上拉到VCC -> 74HC14输入
// 74HC14输出 -> MCU的GPIO
你可能会问,为什么不用比较器?比较器也能做电平检测,但比较器没有内置回差,需要外加正反馈电阻。施密特触发器内部已经集成了回差,用起来更方便。我个人习惯是,低速信号用施密特触发器,高速信号用比较器。
警告:电平检测电路的输入阻抗一定要高。如果输入阻抗太低,会拉低信号源的电压,导致误判。我见过有人用1kΩ的上拉电阻,结果信号源输出能力弱,电压被拉下来,一直读不到高电平。一般上拉电阻取4.7kΩ~10kΩ比较合适。
4.4 完整的DI采集链路
把上面这些串起来,一个完整的DI采集链路就是:
- 信号源:干接点或湿接点
- 输入保护:TVS管、限流电阻、滤波电容
- 光耦隔离:电气隔离,抗干扰
- 电平检测:施密特触发器,整形去抖
- MCU读取:GPIO或专用DI芯片
我在设计一个远程IO模块时,就用了这个链路。现场有24V的传感器信号,也有干接点信号。我统一用光耦隔离,然后接74HC14整形,最后进STM32的GPIO。运行了两年,没出过问题。
避坑指南:我曾经遇到过一个问题,光耦输出端的上拉电阻选得太小,导致输出低电平时电流过大,光耦发热严重。后来把上拉电阻从1kΩ改成4.7kΩ,温度就降下来了。记住,光耦的输出电流一般不要超过10mA。
最后说一句,DI采集看似简单,但每个环节都有讲究。干接点要注意触点保护和去抖,湿接点要注意电压匹配,光耦要注意CTR和速度,电平检测要注意回差和阻抗。把这些细节都处理好,你的设备才能稳定运行。
好了,这一章就到这里。下一章我们聊聊数字量输出(DO)的原理,看看怎么可靠地驱动继电器和电磁阀。