1. 引言
在工业控制、数据采集及嵌入式系统中,常常需要处理开关量信号。最简单的开关量是"0"和"1"两种状态,但在工程现场,开关信号的物理形态多种多样------可能是高低电平、悬空/接地、供电/开路等。这类信号统称为离散量信号 。

三种典型的离散量输入类型为:
- V/地:高电平(V)和接地(GND)两种状态
- V/开:高电平(V)和开路(悬空)两种状态
- 地/开:接地(GND)和开路(悬空)两种状态
输出端同样需要能够产生这三种信号形式,以满足不同负载和后续设备的接口要求。


本文参照典型的离散量输入输出采集卡设计,完整讲解从信号调理、隔离保护、模式选择到单片机 0--5V 逻辑电平的转换电路,帮助工程师快速搭建可靠、兼容多种信号类型的离散量接口。
2. 系统总体架构
一个完整的离散量采集与输出系统通常包含以下功能模块:
#mermaid-svg-vHkqvabp94Bedgxs{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-vHkqvabp94Bedgxs .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-vHkqvabp94Bedgxs .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-vHkqvabp94Bedgxs .error-icon{fill:#552222;}#mermaid-svg-vHkqvabp94Bedgxs .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-vHkqvabp94Bedgxs .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-vHkqvabp94Bedgxs .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-vHkqvabp94Bedgxs .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-vHkqvabp94Bedgxs .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-vHkqvabp94Bedgxs .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-vHkqvabp94Bedgxs .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-vHkqvabp94Bedgxs .marker{fill:#333333;stroke:#333333;}#mermaid-svg-vHkqvabp94Bedgxs .marker.cross{stroke:#333333;}#mermaid-svg-vHkqvabp94Bedgxs svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-vHkqvabp94Bedgxs p{margin:0;}#mermaid-svg-vHkqvabp94Bedgxs .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-vHkqvabp94Bedgxs .cluster-label text{fill:#333;}#mermaid-svg-vHkqvabp94Bedgxs .cluster-label span{color:#333;}#mermaid-svg-vHkqvabp94Bedgxs .cluster-label span p{background-color:transparent;}#mermaid-svg-vHkqvabp94Bedgxs .label text,#mermaid-svg-vHkqvabp94Bedgxs span{fill:#333;color:#333;}#mermaid-svg-vHkqvabp94Bedgxs .node rect,#mermaid-svg-vHkqvabp94Bedgxs .node circle,#mermaid-svg-vHkqvabp94Bedgxs .node ellipse,#mermaid-svg-vHkqvabp94Bedgxs .node polygon,#mermaid-svg-vHkqvabp94Bedgxs .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-vHkqvabp94Bedgxs .rough-node .label text,#mermaid-svg-vHkqvabp94Bedgxs .node .label text,#mermaid-svg-vHkqvabp94Bedgxs .image-shape .label,#mermaid-svg-vHkqvabp94Bedgxs .icon-shape .label{text-anchor:middle;}#mermaid-svg-vHkqvabp94Bedgxs .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-vHkqvabp94Bedgxs .rough-node .label,#mermaid-svg-vHkqvabp94Bedgxs .node .label,#mermaid-svg-vHkqvabp94Bedgxs .image-shape .label,#mermaid-svg-vHkqvabp94Bedgxs .icon-shape .label{text-align:center;}#mermaid-svg-vHkqvabp94Bedgxs .node.clickable{cursor:pointer;}#mermaid-svg-vHkqvabp94Bedgxs .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-vHkqvabp94Bedgxs .arrowheadPath{fill:#333333;}#mermaid-svg-vHkqvabp94Bedgxs .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-vHkqvabp94Bedgxs .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-vHkqvabp94Bedgxs .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-vHkqvabp94Bedgxs .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-vHkqvabp94Bedgxs .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-vHkqvabp94Bedgxs .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-vHkqvabp94Bedgxs .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-vHkqvabp94Bedgxs .cluster text{fill:#333;}#mermaid-svg-vHkqvabp94Bedgxs .cluster span{color:#333;}#mermaid-svg-vHkqvabp94Bedgxs div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-vHkqvabp94Bedgxs .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-vHkqvabp94Bedgxs rect.text{fill:none;stroke-width:0;}#mermaid-svg-vHkqvabp94Bedgxs .icon-shape,#mermaid-svg-vHkqvabp94Bedgxs .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-vHkqvabp94Bedgxs .icon-shape p,#mermaid-svg-vHkqvabp94Bedgxs .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-vHkqvabp94Bedgxs .icon-shape .label rect,#mermaid-svg-vHkqvabp94Bedgxs .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-vHkqvabp94Bedgxs .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-vHkqvabp94Bedgxs .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-vHkqvabp94Bedgxs :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 单片机系统
信号调理与隔离
输出通道
输入通道
现场信号端
V/地 传感器
V/开 开关
地/开 按钮
模式选择 / 上拉下拉
光电隔离
MCU GPIO 0--5V
光电隔离
驱动级
V/地 / V/开 / 地/开 输出
核心设计原则:
- 信号隔离:所有输入输出均使用光电耦合器隔离,消除现场干扰和地环路
- 模式兼容:通过跳线或开关选择输入信号类型,同一硬件兼容三种信号
- 电平转换:将现场电压域(常见 12V/24V)转换到 MCU 可接受的 0--5V
- 输出驱动:能驱动继电器、指示灯或下级设备,并支持多种输出形态
3. 离散量输入通道设计
输入通道需要将 V/地、V/开、地/开 三种信号统一转换为 0V/5V 逻辑电平,同时实现电气隔离。
3.1 V/地 信号输入
V/地信号最为简单,信号源主动提供高电平和低电平。常见的电压等级为 12V 或 24V(工业标准),需要经过限流和光耦隔离后送入 MCU。
电路原理:
#mermaid-svg-2yWfbq9ZY60ucS7D{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-2yWfbq9ZY60ucS7D .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-2yWfbq9ZY60ucS7D .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-2yWfbq9ZY60ucS7D .error-icon{fill:#552222;}#mermaid-svg-2yWfbq9ZY60ucS7D .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-2yWfbq9ZY60ucS7D .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-2yWfbq9ZY60ucS7D .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-2yWfbq9ZY60ucS7D .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-2yWfbq9ZY60ucS7D .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-2yWfbq9ZY60ucS7D .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-2yWfbq9ZY60ucS7D .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-2yWfbq9ZY60ucS7D .marker{fill:#333333;stroke:#333333;}#mermaid-svg-2yWfbq9ZY60ucS7D .marker.cross{stroke:#333333;}#mermaid-svg-2yWfbq9ZY60ucS7D svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-2yWfbq9ZY60ucS7D p{margin:0;}#mermaid-svg-2yWfbq9ZY60ucS7D .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-2yWfbq9ZY60ucS7D .cluster-label text{fill:#333;}#mermaid-svg-2yWfbq9ZY60ucS7D .cluster-label span{color:#333;}#mermaid-svg-2yWfbq9ZY60ucS7D .cluster-label span p{background-color:transparent;}#mermaid-svg-2yWfbq9ZY60ucS7D .label text,#mermaid-svg-2yWfbq9ZY60ucS7D span{fill:#333;color:#333;}#mermaid-svg-2yWfbq9ZY60ucS7D .node rect,#mermaid-svg-2yWfbq9ZY60ucS7D .node circle,#mermaid-svg-2yWfbq9ZY60ucS7D .node ellipse,#mermaid-svg-2yWfbq9ZY60ucS7D .node polygon,#mermaid-svg-2yWfbq9ZY60ucS7D .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-2yWfbq9ZY60ucS7D .rough-node .label text,#mermaid-svg-2yWfbq9ZY60ucS7D .node .label text,#mermaid-svg-2yWfbq9ZY60ucS7D .image-shape .label,#mermaid-svg-2yWfbq9ZY60ucS7D .icon-shape .label{text-anchor:middle;}#mermaid-svg-2yWfbq9ZY60ucS7D .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-2yWfbq9ZY60ucS7D .rough-node .label,#mermaid-svg-2yWfbq9ZY60ucS7D .node .label,#mermaid-svg-2yWfbq9ZY60ucS7D .image-shape .label,#mermaid-svg-2yWfbq9ZY60ucS7D .icon-shape .label{text-align:center;}#mermaid-svg-2yWfbq9ZY60ucS7D .node.clickable{cursor:pointer;}#mermaid-svg-2yWfbq9ZY60ucS7D .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-2yWfbq9ZY60ucS7D .arrowheadPath{fill:#333333;}#mermaid-svg-2yWfbq9ZY60ucS7D .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-2yWfbq9ZY60ucS7D .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-2yWfbq9ZY60ucS7D .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-2yWfbq9ZY60ucS7D .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-2yWfbq9ZY60ucS7D .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-2yWfbq9ZY60ucS7D .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-2yWfbq9ZY60ucS7D .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-2yWfbq9ZY60ucS7D .cluster text{fill:#333;}#mermaid-svg-2yWfbq9ZY60ucS7D .cluster span{color:#333;}#mermaid-svg-2yWfbq9ZY60ucS7D div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-2yWfbq9ZY60ucS7D .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-2yWfbq9ZY60ucS7D rect.text{fill:none;stroke-width:0;}#mermaid-svg-2yWfbq9ZY60ucS7D .icon-shape,#mermaid-svg-2yWfbq9ZY60ucS7D .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-2yWfbq9ZY60ucS7D .icon-shape p,#mermaid-svg-2yWfbq9ZY60ucS7D .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-2yWfbq9ZY60ucS7D .icon-shape .label rect,#mermaid-svg-2yWfbq9ZY60ucS7D .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-2yWfbq9ZY60ucS7D .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-2yWfbq9ZY60ucS7D .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-2yWfbq9ZY60ucS7D :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 隔离带
V_IN(高/低)
R1 限流电阻
光耦 LED 侧
GND
R2 上拉(到 VCC_5V)
MCU_GPIO_IN(0/5V)
- 当
V_IN为高(12V/24V)时,光耦 LED 导通,光电三极管饱和,MCU_IN为低电平(0V) - 当
V_IN为低(GND)时,光耦 LED 截止,MCU_IN被R2上拉到 5V
注意:输入端光线逻辑是反相的------高电平输入 → MCU 读到低电平;低电平输入 → MCU 读到高电平。这一反相可在软件中处理,也可在输出端再加一级反相。
关键元器件选型:
| 元件 | 推荐参数 | 说明 |
|---|---|---|
| 光耦 | PC817 / TLP185 | 通用低速光耦,CTR ≥ 50% |
| R1 | 2.2kΩ(24V 输入) | LED 正向电流约 10mA |
| R2 | 10kΩ | 上拉电阻,保证截止时稳定输出 5V |
3.2 V/开 信号输入
V/开 信号是指:有效状态为高电平,无效状态为悬空(高阻)。当输入悬空时,若无处理,光耦 LED 端线路也悬空,电平不确定,容易受干扰误触发。
解决方案:输入端增加下拉电阻。
#mermaid-svg-noe72Q4WRV5ylpmE{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-noe72Q4WRV5ylpmE .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-noe72Q4WRV5ylpmE .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-noe72Q4WRV5ylpmE .error-icon{fill:#552222;}#mermaid-svg-noe72Q4WRV5ylpmE .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-noe72Q4WRV5ylpmE .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-noe72Q4WRV5ylpmE .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-noe72Q4WRV5ylpmE .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-noe72Q4WRV5ylpmE .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-noe72Q4WRV5ylpmE .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-noe72Q4WRV5ylpmE .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-noe72Q4WRV5ylpmE .marker{fill:#333333;stroke:#333333;}#mermaid-svg-noe72Q4WRV5ylpmE .marker.cross{stroke:#333333;}#mermaid-svg-noe72Q4WRV5ylpmE svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-noe72Q4WRV5ylpmE p{margin:0;}#mermaid-svg-noe72Q4WRV5ylpmE .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-noe72Q4WRV5ylpmE .cluster-label text{fill:#333;}#mermaid-svg-noe72Q4WRV5ylpmE .cluster-label span{color:#333;}#mermaid-svg-noe72Q4WRV5ylpmE .cluster-label span p{background-color:transparent;}#mermaid-svg-noe72Q4WRV5ylpmE .label text,#mermaid-svg-noe72Q4WRV5ylpmE span{fill:#333;color:#333;}#mermaid-svg-noe72Q4WRV5ylpmE .node rect,#mermaid-svg-noe72Q4WRV5ylpmE .node circle,#mermaid-svg-noe72Q4WRV5ylpmE .node ellipse,#mermaid-svg-noe72Q4WRV5ylpmE .node polygon,#mermaid-svg-noe72Q4WRV5ylpmE .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-noe72Q4WRV5ylpmE .rough-node .label text,#mermaid-svg-noe72Q4WRV5ylpmE .node .label text,#mermaid-svg-noe72Q4WRV5ylpmE .image-shape .label,#mermaid-svg-noe72Q4WRV5ylpmE .icon-shape .label{text-anchor:middle;}#mermaid-svg-noe72Q4WRV5ylpmE .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-noe72Q4WRV5ylpmE .rough-node .label,#mermaid-svg-noe72Q4WRV5ylpmE .node .label,#mermaid-svg-noe72Q4WRV5ylpmE .image-shape .label,#mermaid-svg-noe72Q4WRV5ylpmE .icon-shape .label{text-align:center;}#mermaid-svg-noe72Q4WRV5ylpmE .node.clickable{cursor:pointer;}#mermaid-svg-noe72Q4WRV5ylpmE .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-noe72Q4WRV5ylpmE .arrowheadPath{fill:#333333;}#mermaid-svg-noe72Q4WRV5ylpmE .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-noe72Q4WRV5ylpmE .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-noe72Q4WRV5ylpmE .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-noe72Q4WRV5ylpmE .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-noe72Q4WRV5ylpmE .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-noe72Q4WRV5ylpmE .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-noe72Q4WRV5ylpmE .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-noe72Q4WRV5ylpmE .cluster text{fill:#333;}#mermaid-svg-noe72Q4WRV5ylpmE .cluster span{color:#333;}#mermaid-svg-noe72Q4WRV5ylpmE div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-noe72Q4WRV5ylpmE .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-noe72Q4WRV5ylpmE rect.text{fill:none;stroke-width:0;}#mermaid-svg-noe72Q4WRV5ylpmE .icon-shape,#mermaid-svg-noe72Q4WRV5ylpmE .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-noe72Q4WRV5ylpmE .icon-shape p,#mermaid-svg-noe72Q4WRV5ylpmE .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-noe72Q4WRV5ylpmE .icon-shape .label rect,#mermaid-svg-noe72Q4WRV5ylpmE .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-noe72Q4WRV5ylpmE .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-noe72Q4WRV5ylpmE .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-noe72Q4WRV5ylpmE :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} V_IN(高/悬空)
R1 限流
光耦 LED
GND
Rpd(下拉到 GND)
- 当
V_IN为高电平时,电流经 R1 流入 LED,光耦导通 - 当
V_IN悬空时,R_pd 将输入端拉到 GND,LED 无电流,光耦可靠截止
R_pd 的典型取值:10kΩ--47kΩ。过小会导致有效高电平时分流过多,过大则下拉能力不足。
3.3 地/开 信号输入
地/开 信号是指:有效状态为接地,无效状态为悬空。
输入端需要上拉到某个参考电压(如 V_24V 或 V_5V_ISO),使悬空时输入固定为高,接地时被拉低。
#mermaid-svg-px1kebEgj7JQm68a{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-px1kebEgj7JQm68a .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-px1kebEgj7JQm68a .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-px1kebEgj7JQm68a .error-icon{fill:#552222;}#mermaid-svg-px1kebEgj7JQm68a .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-px1kebEgj7JQm68a .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-px1kebEgj7JQm68a .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-px1kebEgj7JQm68a .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-px1kebEgj7JQm68a .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-px1kebEgj7JQm68a .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-px1kebEgj7JQm68a .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-px1kebEgj7JQm68a .marker{fill:#333333;stroke:#333333;}#mermaid-svg-px1kebEgj7JQm68a .marker.cross{stroke:#333333;}#mermaid-svg-px1kebEgj7JQm68a svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-px1kebEgj7JQm68a p{margin:0;}#mermaid-svg-px1kebEgj7JQm68a .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-px1kebEgj7JQm68a .cluster-label text{fill:#333;}#mermaid-svg-px1kebEgj7JQm68a .cluster-label span{color:#333;}#mermaid-svg-px1kebEgj7JQm68a .cluster-label span p{background-color:transparent;}#mermaid-svg-px1kebEgj7JQm68a .label text,#mermaid-svg-px1kebEgj7JQm68a span{fill:#333;color:#333;}#mermaid-svg-px1kebEgj7JQm68a .node rect,#mermaid-svg-px1kebEgj7JQm68a .node circle,#mermaid-svg-px1kebEgj7JQm68a .node ellipse,#mermaid-svg-px1kebEgj7JQm68a .node polygon,#mermaid-svg-px1kebEgj7JQm68a .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-px1kebEgj7JQm68a .rough-node .label text,#mermaid-svg-px1kebEgj7JQm68a .node .label text,#mermaid-svg-px1kebEgj7JQm68a .image-shape .label,#mermaid-svg-px1kebEgj7JQm68a .icon-shape .label{text-anchor:middle;}#mermaid-svg-px1kebEgj7JQm68a .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-px1kebEgj7JQm68a .rough-node .label,#mermaid-svg-px1kebEgj7JQm68a .node .label,#mermaid-svg-px1kebEgj7JQm68a .image-shape .label,#mermaid-svg-px1kebEgj7JQm68a .icon-shape .label{text-align:center;}#mermaid-svg-px1kebEgj7JQm68a .node.clickable{cursor:pointer;}#mermaid-svg-px1kebEgj7JQm68a .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-px1kebEgj7JQm68a .arrowheadPath{fill:#333333;}#mermaid-svg-px1kebEgj7JQm68a .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-px1kebEgj7JQm68a .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-px1kebEgj7JQm68a .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-px1kebEgj7JQm68a .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-px1kebEgj7JQm68a .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-px1kebEgj7JQm68a .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-px1kebEgj7JQm68a .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-px1kebEgj7JQm68a .cluster text{fill:#333;}#mermaid-svg-px1kebEgj7JQm68a .cluster span{color:#333;}#mermaid-svg-px1kebEgj7JQm68a div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-px1kebEgj7JQm68a .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-px1kebEgj7JQm68a rect.text{fill:none;stroke-width:0;}#mermaid-svg-px1kebEgj7JQm68a .icon-shape,#mermaid-svg-px1kebEgj7JQm68a .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-px1kebEgj7JQm68a .icon-shape p,#mermaid-svg-px1kebEgj7JQm68a .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-px1kebEgj7JQm68a .icon-shape .label rect,#mermaid-svg-px1kebEgj7JQm68a .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-px1kebEgj7JQm68a .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-px1kebEgj7JQm68a .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-px1kebEgj7JQm68a :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} V_IN(低/悬空)
R1 限流
光耦 LED
GND_ISO
Rpu(上拉到 V_REF)
- 当
V_IN接地时,R1 两端有压差,电流经 LED 到 GND,光耦导通 - 当
V_IN悬空时,R_pu 将输入端拉高到 V_REF,LED 两端等电位,无电流,光耦截止
实际设计中,V_REF 可以复用 V/地 输入所使用的供电轨(如 +24V)。R_pu 典型值 4.7kΩ--10kΩ。
3.4 三合一输入模式选择电路
要实现同一硬件兼容三种信号类型,核心思路是通过跳线或拨码开关切换上拉/下拉/直通配置。
#mermaid-svg-1G5iTRHPfNkQiHk5{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-1G5iTRHPfNkQiHk5 .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-1G5iTRHPfNkQiHk5 .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-1G5iTRHPfNkQiHk5 .error-icon{fill:#552222;}#mermaid-svg-1G5iTRHPfNkQiHk5 .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-1G5iTRHPfNkQiHk5 .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-1G5iTRHPfNkQiHk5 .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-1G5iTRHPfNkQiHk5 .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-1G5iTRHPfNkQiHk5 .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-1G5iTRHPfNkQiHk5 .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-1G5iTRHPfNkQiHk5 .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-1G5iTRHPfNkQiHk5 .marker{fill:#333333;stroke:#333333;}#mermaid-svg-1G5iTRHPfNkQiHk5 .marker.cross{stroke:#333333;}#mermaid-svg-1G5iTRHPfNkQiHk5 svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-1G5iTRHPfNkQiHk5 p{margin:0;}#mermaid-svg-1G5iTRHPfNkQiHk5 .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-1G5iTRHPfNkQiHk5 .cluster-label text{fill:#333;}#mermaid-svg-1G5iTRHPfNkQiHk5 .cluster-label span{color:#333;}#mermaid-svg-1G5iTRHPfNkQiHk5 .cluster-label span p{background-color:transparent;}#mermaid-svg-1G5iTRHPfNkQiHk5 .label text,#mermaid-svg-1G5iTRHPfNkQiHk5 span{fill:#333;color:#333;}#mermaid-svg-1G5iTRHPfNkQiHk5 .node rect,#mermaid-svg-1G5iTRHPfNkQiHk5 .node circle,#mermaid-svg-1G5iTRHPfNkQiHk5 .node ellipse,#mermaid-svg-1G5iTRHPfNkQiHk5 .node polygon,#mermaid-svg-1G5iTRHPfNkQiHk5 .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-1G5iTRHPfNkQiHk5 .rough-node .label text,#mermaid-svg-1G5iTRHPfNkQiHk5 .node .label text,#mermaid-svg-1G5iTRHPfNkQiHk5 .image-shape .label,#mermaid-svg-1G5iTRHPfNkQiHk5 .icon-shape .label{text-anchor:middle;}#mermaid-svg-1G5iTRHPfNkQiHk5 .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-1G5iTRHPfNkQiHk5 .rough-node .label,#mermaid-svg-1G5iTRHPfNkQiHk5 .node .label,#mermaid-svg-1G5iTRHPfNkQiHk5 .image-shape .label,#mermaid-svg-1G5iTRHPfNkQiHk5 .icon-shape .label{text-align:center;}#mermaid-svg-1G5iTRHPfNkQiHk5 .node.clickable{cursor:pointer;}#mermaid-svg-1G5iTRHPfNkQiHk5 .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-1G5iTRHPfNkQiHk5 .arrowheadPath{fill:#333333;}#mermaid-svg-1G5iTRHPfNkQiHk5 .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-1G5iTRHPfNkQiHk5 .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-1G5iTRHPfNkQiHk5 .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-1G5iTRHPfNkQiHk5 .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-1G5iTRHPfNkQiHk5 .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-1G5iTRHPfNkQiHk5 .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-1G5iTRHPfNkQiHk5 .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-1G5iTRHPfNkQiHk5 .cluster text{fill:#333;}#mermaid-svg-1G5iTRHPfNkQiHk5 .cluster span{color:#333;}#mermaid-svg-1G5iTRHPfNkQiHk5 div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-1G5iTRHPfNkQiHk5 .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-1G5iTRHPfNkQiHk5 rect.text{fill:none;stroke-width:0;}#mermaid-svg-1G5iTRHPfNkQiHk5 .icon-shape,#mermaid-svg-1G5iTRHPfNkQiHk5 .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-1G5iTRHPfNkQiHk5 .icon-shape p,#mermaid-svg-1G5iTRHPfNkQiHk5 .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-1G5iTRHPfNkQiHk5 .icon-shape .label rect,#mermaid-svg-1G5iTRHPfNkQiHk5 .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-1G5iTRHPfNkQiHk5 .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-1G5iTRHPfNkQiHk5 .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-1G5iTRHPfNkQiHk5 :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} V/地 模式
V/开 模式
地/开 模式
V_IN 端子
跳线 / 开关矩阵
直通到 R1
接入 Rpd → GND
接入 Rpu → V_REF
R1 限流
光耦
MCU
实现方式:
使用 2×3 排针 + 短路帽,两种跳线配置即可覆盖三种模式:
| 模式 | 跳线连接 | 等效电路 |
|---|---|---|
| V/地 | 不接上拉/下拉(或悬空跳线位) | 输入端仅经 R1 到光耦 |
| V/开 | 跳线接通 R_pd → GND | 输入端对地有下拉电阻 |
| 地/开 | 跳线接通 R_pu → V_REF | 输入端对 V_REF 有上拉电阻 |
实际也可使用三档拨动开关或继电器切换,实现更便捷的配置。
4. 离散量输出通道设计
输出通道的任务是:将 MCU 的 0/5V 逻辑信号转换为符合现场要求的离散量输出。
4.1 V/地 输出
目标:当 MCU 输出高电平时,输出端为 V(如 24V);低电平时为 GND。
实现方案:光耦 + NPN 三极管推挽级
#mermaid-svg-l0RUTxm3ujB82oEJ{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-l0RUTxm3ujB82oEJ .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-l0RUTxm3ujB82oEJ .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-l0RUTxm3ujB82oEJ .error-icon{fill:#552222;}#mermaid-svg-l0RUTxm3ujB82oEJ .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-l0RUTxm3ujB82oEJ .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-l0RUTxm3ujB82oEJ .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-l0RUTxm3ujB82oEJ .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-l0RUTxm3ujB82oEJ .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-l0RUTxm3ujB82oEJ .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-l0RUTxm3ujB82oEJ .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-l0RUTxm3ujB82oEJ .marker{fill:#333333;stroke:#333333;}#mermaid-svg-l0RUTxm3ujB82oEJ .marker.cross{stroke:#333333;}#mermaid-svg-l0RUTxm3ujB82oEJ svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-l0RUTxm3ujB82oEJ p{margin:0;}#mermaid-svg-l0RUTxm3ujB82oEJ .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-l0RUTxm3ujB82oEJ .cluster-label text{fill:#333;}#mermaid-svg-l0RUTxm3ujB82oEJ .cluster-label span{color:#333;}#mermaid-svg-l0RUTxm3ujB82oEJ .cluster-label span p{background-color:transparent;}#mermaid-svg-l0RUTxm3ujB82oEJ .label text,#mermaid-svg-l0RUTxm3ujB82oEJ span{fill:#333;color:#333;}#mermaid-svg-l0RUTxm3ujB82oEJ .node rect,#mermaid-svg-l0RUTxm3ujB82oEJ .node circle,#mermaid-svg-l0RUTxm3ujB82oEJ .node ellipse,#mermaid-svg-l0RUTxm3ujB82oEJ .node polygon,#mermaid-svg-l0RUTxm3ujB82oEJ .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-l0RUTxm3ujB82oEJ .rough-node .label text,#mermaid-svg-l0RUTxm3ujB82oEJ .node .label text,#mermaid-svg-l0RUTxm3ujB82oEJ .image-shape .label,#mermaid-svg-l0RUTxm3ujB82oEJ .icon-shape .label{text-anchor:middle;}#mermaid-svg-l0RUTxm3ujB82oEJ .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-l0RUTxm3ujB82oEJ .rough-node .label,#mermaid-svg-l0RUTxm3ujB82oEJ .node .label,#mermaid-svg-l0RUTxm3ujB82oEJ .image-shape .label,#mermaid-svg-l0RUTxm3ujB82oEJ .icon-shape .label{text-align:center;}#mermaid-svg-l0RUTxm3ujB82oEJ .node.clickable{cursor:pointer;}#mermaid-svg-l0RUTxm3ujB82oEJ .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-l0RUTxm3ujB82oEJ .arrowheadPath{fill:#333333;}#mermaid-svg-l0RUTxm3ujB82oEJ .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-l0RUTxm3ujB82oEJ .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-l0RUTxm3ujB82oEJ .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-l0RUTxm3ujB82oEJ .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-l0RUTxm3ujB82oEJ .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-l0RUTxm3ujB82oEJ .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-l0RUTxm3ujB82oEJ .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-l0RUTxm3ujB82oEJ .cluster text{fill:#333;}#mermaid-svg-l0RUTxm3ujB82oEJ .cluster span{color:#333;}#mermaid-svg-l0RUTxm3ujB82oEJ div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-l0RUTxm3ujB82oEJ .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-l0RUTxm3ujB82oEJ rect.text{fill:none;stroke-width:0;}#mermaid-svg-l0RUTxm3ujB82oEJ .icon-shape,#mermaid-svg-l0RUTxm3ujB82oEJ .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-l0RUTxm3ujB82oEJ .icon-shape p,#mermaid-svg-l0RUTxm3ujB82oEJ .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-l0RUTxm3ujB82oEJ .icon-shape .label rect,#mermaid-svg-l0RUTxm3ujB82oEJ .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-l0RUTxm3ujB82oEJ .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-l0RUTxm3ujB82oEJ .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-l0RUTxm3ujB82oEJ :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 隔离
集电极
MCU GPIO
R1 限流
光耦 LED
GND
V_24V_ISO
R2 上拉
Q1 NPN 基极
OUT 端子
负载
GND_ISO
- MCU 输出高电平 → 光耦导通 → Q1 基极为低(截止) → OUT 通过负载内部上拉到 V_24V
- MCU 输出低电平 → 光耦截止 → Q1 基极被 R2 拉高(导通) → OUT 被拉低到 GND
需要做逻辑反相处理时,可在 MCU 侧软件反转,或使用两路光耦/反相器。
4.2 V/开 输出
要求:输出端在高电平和悬空(高阻)之间切换,而不是主动拉低。这常见于需要模拟"干接点"开关的场景。
实现方案:光耦 + MOSFET 作为开关
使用 N-MOSFET 做高边开关(或 P-MOSFET 配合电平移位):
MCU GPIO → 光耦 → MOSFET 栅极驱动
MOSFET 漏极 → OUT(+24V 通过 MOSFET 通断)
- MCU 高电平 → 光耦导通 → MOSFET 导通 → OUT = 24V
- MCU 低电平 → 光耦截止 → MOSFET 截止 → OUT = 高阻
或可采用光耦继电器(PhotoMOS),直接实现开/关(无机械触点),最为简洁。
推荐器件:
- AQY212 / TLP172A:内置 MOSFET 输出的光耦继电器,可直接驱动小负载,隔离电压高,输出悬空或导通,天然适合 V/开 输出
4.3 地/开 输出
要求:输出端在接地和高阻之间切换。
实现:光耦 + NPN 开集极输出
#mermaid-svg-yvjYrJFxS0bcrr77{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-yvjYrJFxS0bcrr77 .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-yvjYrJFxS0bcrr77 .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-yvjYrJFxS0bcrr77 .error-icon{fill:#552222;}#mermaid-svg-yvjYrJFxS0bcrr77 .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-yvjYrJFxS0bcrr77 .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-yvjYrJFxS0bcrr77 .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-yvjYrJFxS0bcrr77 .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-yvjYrJFxS0bcrr77 .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-yvjYrJFxS0bcrr77 .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-yvjYrJFxS0bcrr77 .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-yvjYrJFxS0bcrr77 .marker{fill:#333333;stroke:#333333;}#mermaid-svg-yvjYrJFxS0bcrr77 .marker.cross{stroke:#333333;}#mermaid-svg-yvjYrJFxS0bcrr77 svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-yvjYrJFxS0bcrr77 p{margin:0;}#mermaid-svg-yvjYrJFxS0bcrr77 .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-yvjYrJFxS0bcrr77 .cluster-label text{fill:#333;}#mermaid-svg-yvjYrJFxS0bcrr77 .cluster-label span{color:#333;}#mermaid-svg-yvjYrJFxS0bcrr77 .cluster-label span p{background-color:transparent;}#mermaid-svg-yvjYrJFxS0bcrr77 .label text,#mermaid-svg-yvjYrJFxS0bcrr77 span{fill:#333;color:#333;}#mermaid-svg-yvjYrJFxS0bcrr77 .node rect,#mermaid-svg-yvjYrJFxS0bcrr77 .node circle,#mermaid-svg-yvjYrJFxS0bcrr77 .node ellipse,#mermaid-svg-yvjYrJFxS0bcrr77 .node polygon,#mermaid-svg-yvjYrJFxS0bcrr77 .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-yvjYrJFxS0bcrr77 .rough-node .label text,#mermaid-svg-yvjYrJFxS0bcrr77 .node .label text,#mermaid-svg-yvjYrJFxS0bcrr77 .image-shape .label,#mermaid-svg-yvjYrJFxS0bcrr77 .icon-shape .label{text-anchor:middle;}#mermaid-svg-yvjYrJFxS0bcrr77 .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-yvjYrJFxS0bcrr77 .rough-node .label,#mermaid-svg-yvjYrJFxS0bcrr77 .node .label,#mermaid-svg-yvjYrJFxS0bcrr77 .image-shape .label,#mermaid-svg-yvjYrJFxS0bcrr77 .icon-shape .label{text-align:center;}#mermaid-svg-yvjYrJFxS0bcrr77 .node.clickable{cursor:pointer;}#mermaid-svg-yvjYrJFxS0bcrr77 .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-yvjYrJFxS0bcrr77 .arrowheadPath{fill:#333333;}#mermaid-svg-yvjYrJFxS0bcrr77 .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-yvjYrJFxS0bcrr77 .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-yvjYrJFxS0bcrr77 .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-yvjYrJFxS0bcrr77 .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-yvjYrJFxS0bcrr77 .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-yvjYrJFxS0bcrr77 .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-yvjYrJFxS0bcrr77 .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-yvjYrJFxS0bcrr77 .cluster text{fill:#333;}#mermaid-svg-yvjYrJFxS0bcrr77 .cluster span{color:#333;}#mermaid-svg-yvjYrJFxS0bcrr77 div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-yvjYrJFxS0bcrr77 .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-yvjYrJFxS0bcrr77 rect.text{fill:none;stroke-width:0;}#mermaid-svg-yvjYrJFxS0bcrr77 .icon-shape,#mermaid-svg-yvjYrJFxS0bcrr77 .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-yvjYrJFxS0bcrr77 .icon-shape p,#mermaid-svg-yvjYrJFxS0bcrr77 .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-yvjYrJFxS0bcrr77 .icon-shape .label rect,#mermaid-svg-yvjYrJFxS0bcrr77 .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-yvjYrJFxS0bcrr77 .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-yvjYrJFxS0bcrr77 .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-yvjYrJFxS0bcrr77 :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 隔离
MCU GPIO
R1
光耦 LED
Q1 NPN 开集极
OUT(地/开)
外部上拉(可选)
- MCU 高电平 → 光耦导通 → 电流流入 Q1 基极 → Q1 饱和导通 → OUT 接地
- MCU 低电平 → 光耦截止 → Q1 截止 → OUT 高阻
开集极输出可以承受比 MCU 供电更高的电压(由 Q1 的 V_CEO 决定,如 2N3904 可承受 40V),注意续流保护。
4.4 输出模式选择
同样通过跳线切换输出拓扑:
- 连接推挽级 → V/地 模式
- 连接 MOSFET 高边开关 → V/开 模式
- 连接 NPN 开集极 → 地/开 模式
若使用 PhotoMOS 之类器件,甚至可以仅更换末级驱动电路板(子板)来实现不同输出模式。
5. 隔离设计要点
5.1 电源隔离
输入侧、输出侧、MCU 侧三者必须独立供电,使用隔离 DC-DC 模块:
| 域 | 供电 | 典型电压 |
|---|---|---|
| MCU 侧 | 板载 LDO/DC-DC | 5V / 3.3V |
| 输入隔离侧 | 隔离 DC-DC | 5V 或 24V(依传感器) |
| 输出隔离侧 | 隔离 DC-DC | 24V(驱动继电器等) |
推荐使用 B0505S / B2405S 系列隔离电源模块,隔离耐压 1500V DC 以上。
5.2 PCB 布局
- 隔离带两侧保持≥8mm 爬电距离
- 光耦下方 PCB 开槽,增强物理隔离
- 不同电源域的地平面完全分割,使用不同的 GND 网络符号
6. 完整参考电路
下面给出一个完整的多通道离散量输入输出电路参考方案(以 4 路输入 / 4 路输出为例):
输入通道(单路)核心节点:
现场端子 J_INx
├── R1(2.2kΩ / 1206)→ 光耦 PC817 引脚 1(阳极)
├── 跳线 JPx 公共端
│ ├── 1 脚:R_pd(47kΩ / 0805)→ GND_ISO_IN
│ └── 3 脚:R_pu(10kΩ / 0805)→ V_24V_ISO_IN
└── TVS 管 SMAJ24CA 对地保护
光耦 PC817:
引脚 2(阴极)→ GND_ISO_IN
引脚 3(发射极)→ GND_MCU
引脚 4(集电极)→ R_pullup(10kΩ)→ VCC_5V_MCU
引脚 4 → MCU GPIO(配置为输入)
输出通道(单路)核心节点:
MCU GPIO(输出)→ R_drv(330Ω)→ 光耦 PC817 引脚 1(阳极)
引脚 2(阴极)→ GND_MCU
光耦引脚 4(集电极)→ V_24V_ISO_OUT(经 10kΩ 上拉)
→ Q1 NPN(2N3904)基极(经 1kΩ 基极电阻)
Q1 集电极 → J_OUTx 端子
Q1 发射极 → GND_ISO_OUT
继电器驱动时,J_OUTx 经继电器线圈回 V_24V_ISO_OUT
7. 采集卡参考设计------以 NI DAQ / 凌华 PCI 板卡为例
商业离散量输入输出采集卡(如 NI 6509、凌华 PCI-7230 等)有以下共同设计特点,可供参考:
| 设计要点 | 常见实现 |
|---|---|
| 输入范围 | 兼容 0--30V DC,过压保护 ±40V |
| 隔离电压 | 2500Vrms 光耦隔离 |
| 输入阻抗 | >100kΩ(低负载效应) |
| 输入类型 | 可通过跳线/软件配置为 NPN/PNP |
| 输出类型 | 开集极输出,单路 500mA 灌电流 |
| 供电方式 | PCI 总线供电 + 外部端子供电可选 |
| 通道数 | 8/16/32 路隔离 DI,8/16 路隔离 DO |
自研离散量采集卡设计建议:
- 使用 USB/PCIe 桥接芯片(如 CH347 / FT600)与上位机通信,配合 MCU 或 FPGA 做采集调度
- 输入使用 8 通道光耦阵列(如 TLP290-4 × 2),减少布板面积
- 输出使用达林顿阵列(如 ULN2803)+ 光耦,实现多路大电流驱动
- 每路输入配备 LED 指示灯,方便现场调试
- 模式选择可用电子开关(如 CD4066)配合 MCU 控制,省去跳线
8. 实际应用注意事项
- 输入去抖:机械开关型输入会有抖动,建议 MCU 侧做 10--50ms 软件去抖
- 过压保护:输入端并联 TVS 管(如 SMAJ24CA),防止瞬态过压损坏光耦
- 续流二极管:输出驱动感性负载(继电器、电磁阀)时,必须反并联续流二极管(如 1N4007)
- 光耦速度:普通光耦(PC817)开关速度在 kHz 级别,高速应用选用 6N137 等高速光耦
- CTR 衰减:光耦电流传输比会随温度和使用时间下降,设计时留出 50% 以上余量
- 共模抑制:长线传输时,输入端可并联电容(0.1μF)滤除共模噪声,但会降低响应速度
9. 总结
本文从工程实践角度出发,完整介绍了离散量输入输出电路的搭建方法:
- 输入侧:通过跳线切换上拉/下拉配置,兼容 V/地、V/开、地/开 三种信号,经光耦隔离后接入 MCU
- 输出侧:利用光耦 + 三极管 / MOSFET 组合,实现三种输出形态的灵活切换
- 隔离设计:电源隔离 + 信号隔离 + PCB 布局隔离,三管齐下确保系统可靠性
- 参考采集卡设计:借鉴商用产品的架构,可快速扩展为多通道 USB/PCI 采集卡
掌握这些电路,即可应对绝大多数工业离散量接口场景,为自研采集卡或嵌入式控制系统打下坚实基础。