第二章:硬件接口基础——数字接口与模拟接口的区别、常见数字接口标准、接口电平标准
各位同学,咱们今天聊聊硬件接口的基础。说实话,很多刚入行的工程师,甚至干了两三年的朋友,在接口选型上还是容易犯迷糊。我见过不少人把I2C和SPI搞混,也有人因为电平不匹配烧了芯片。这节课,咱们就把这些基础打扎实。
2.1 数字接口 vs 模拟接口:本质区别在哪?
先问个问题:你手里的红外探测器,它输出的信号是连续的电压值,还是只有0和1?
这就是数字和模拟最根本的区别。
- 模拟接口:信号是连续变化的。比如一个热释电传感器,它输出的电压会随着红外辐射强度平滑变化。你拿万用表去量,能看到1.2V、1.3V、1.35V……任何中间值都有可能。
- 数字接口:信号只有两个状态——高电平和低电平。说白了就是“有”和“无”。比如UART的TX引脚,要么是3.3V(代表逻辑1),要么是0V(代表逻辑0),没有中间状态。
我个人习惯,在项目初期就会想清楚:探测器输出的是模拟量还是数字量?这决定了后面整个电路的设计方向。
核心区别总结:
- 模拟接口:连续值,易受干扰,需要ADC转换
- 数字接口:离散值,抗干扰强,直接与MCU通信
我在项目中遇到过一件事:有个同事用了一个模拟输出的红外传感器,直接连到MCU的GPIO口上,结果死活读不到数据。为什么?因为GPIO只能识别0和1,而模拟信号是连续变化的。后来加了个比较器电路才搞定。嗯,这就是没搞清楚接口类型吃的亏。
2.2 常见数字接口标准
咱们做红外探测器,最常用的数字接口就这四种:UART、I2C、SPI、GPIO。我一个个说。
2.2.1 UART(通用异步收发器)
UART应该是大家最熟悉的。两根线:TX(发送)和RX(接收)。异步通信,不需要时钟线。
特点:
- 全双工:可以同时收发
- 点对点:只能两个设备之间通信
- 波特率要一致:比如9600、115200
很多红外探测器模块,比如串口型的红外测温模组,用的就是UART。你发个指令过去,它回传温度数据。简单可靠。
避坑指南:我曾经遇到过UART通信偶尔丢数据的情况。排查了半天,发现是TX和RX接反了。嗯,这种低级错误,犯一次就记住了。
2.2.2 I2C(IIC,两线式串行总线)
I2C也是两根线:SCL(时钟)和SDA(数据)。但和UART不同,它是同步通信,而且支持多设备挂载在同一总线上。
特点:
- 半双工:同一时间只能一个方向传输
- 多主多从:理论上可以挂很多设备
- 每个设备有唯一地址:7位或10位地址
- 速度较慢:标准模式100kHz,快速模式400kHz
你想想看,如果系统里接了多个传感器,每个都用UART,那MCU的串口根本不够用。这时候I2C就派上用场了。我做过一个项目,挂了4个红外探测器在一条I2C总线上,每个地址不同,读数据时指定地址就行。
2.2.3 SPI(串行外设接口)
SPI比I2C快,但线也多。标准SPI需要四根线:
- SCLK:时钟
- MOSI:主出从入
- MISO:主入从出
- CS:片选(每个从设备一根)
特点:
- 全双工:可以同时收发
- 速度快:几十MHz很常见
- 一主多从:但每个从设备需要单独的CS线
说实话,SPI在红外探测器里用得不如I2C和UART多,但有些高速红外阵列传感器会用SPI。因为数据量大,I2C那400kHz的速度扛不住。
2.2.4 GPIO(通用输入输出)
GPIO是最基础的。一个引脚,要么输入要么输出。输出时拉高或拉低,输入时读取电平状态。
在红外探测器里,GPIO常用来做:
- 触发信号:比如有人经过时,探测器输出一个高电平脉冲
- 使能控制:控制探测器的工作模式
- 中断输入:通知MCU有事件发生
我习惯把GPIO当作“最朴素的通信方式”。不需要协议,不需要时钟,一根线搞定。但缺点也很明显——只能传一个比特的信息。
注意:GPIO的输入输出模式要配置正确。我曾经把输出模式的引脚当输入用,结果读到的电平一直不对。后来查手册才发现,输出模式下读引脚,读的是输出寄存器的值,不是外部电平。
2.3 接口电平标准
这部分特别重要。电平不匹配,轻则通信失败,重则烧芯片。我见过太多这样的案例了。
2.3.1 3.3V vs 5V
这是最常碰到的两个电平标准。
| 电平标准 | 逻辑高电平 | 逻辑低电平 | 常见器件 |
|---|---|---|---|
| 3.3V | ≥2.0V | ≤0.8V | STM32、ESP32、多数现代MCU |
| 5V | ≥3.5V | ≤1.5V | Arduino Uno、传统51单片机 |
你想想看,一个3.3V的MCU去读一个5V输出的传感器,会怎样?如果传感器输出5V高电平,MCU的引脚可能承受不了,直接烧掉。反过来,5V的MCU读3.3V的信号,可能读不到高电平,因为3.3V对5V系统来说不够高。
我的做法:电平转换。最简单的用电阻分压,或者用电平转换芯片(比如TXB0104)。我习惯用MOS管搭一个双向电平转换电路,成本低,效果也不错。
2.3.2 TTL vs CMOS
这两个是逻辑电平的“门派”。
- TTL(晶体管-晶体管逻辑):老标准了。输入低电平阈值0.8V,高电平阈值2.0V。输出低电平0.4V,高电平2.4V。5V供电。
- CMOS(互补金属氧化物半导体):现代主流。输入阈值通常是电源电压的30%~70%。输出接近电源轨(0V和VCC)。
说白了,TTL的噪声容限小,CMOS的噪声容限大。现在大部分芯片都是CMOS工艺了,但有些老器件还是TTL电平。混用时要小心。
我记得有一次,用了一个TTL电平的传感器去接CMOS的MCU。传感器输出2.4V算高电平,但CMOS的MCU需要至少0.7×VCC(3.3V下是2.31V)才算高。2.4V刚好超过2.31V,勉强能用,但噪声一大就误判。后来还是加了电平转换才稳定。
2.4 知识体系总览
下面这张图,把咱们这节课的核心逻辑串起来了。你一看就明白。
这张图把咱们这节课的内容串起来了。从硬件接口这个大概念出发,分模拟和数字两条路。数字接口里,UART、I2C、SPI、GPIO各有各的适用场景。最后别忘了电平标准——3.3V、5V、TTL、CMOS,选错了就是事故。
一句话总结:接口选型,先看探测器输出什么(模拟还是数字),再看速率要求(低速用I2C,高速用SPI),最后确认电平是否匹配。这三步走完,基本不会出大问题。
好了,这节课就到这儿。下节课咱们聊红外探测器的具体硬件电路设计,包括运放选型、滤波电路这些实战内容。到时候见。
公众号:蓝海资料掘金营,微信deep3321