3、硬件接口标准:UART接口在菊花链中的应用、RS-485/422标准、差分信号原理
3.1 差分信号原理
差分信号是RS-485/422等长距离通信接口的核心技术。与单端信号(如UART的TX/RX)不同,差分信号使用一对等长、等阻抗的导线(通常标记为A和B,或D+和D-)来传输信息。信号电压由两根导线之间的电压差(VAB = VA - VB)表示,而非对地电压。
📐 差分信号原理示意图
关键特性:外部噪声会同时耦合到两根线上(共模噪声),但差分接收器只响应两线之间的电压差,因此共模噪声被抵消,抗干扰能力大幅提升。
3.2 RS-485/422标准对比
3.3 UART接口在菊花链中的应用
传统UART是点对点通信,但在菊花链架构中,通过RS-485收发器将UART的单端信号转换为差分信号,实现多节点共享总线。每个节点包含一个UART控制器、一个RS-485收发器(如MAX485、SP3485)以及一个微控制器(MCU)用于数据转发。
🔗 UART + RS-485 菊花链节点架构
工作流程:MCU通过UART TX/RX与RS-485收发器连接。收发器将UART的TTL电平转换为差分信号发送到总线。接收时,差分信号被转换为TTL电平送入UART RX。总线两端需各接一个120Ω终端电阻以消除信号反射。
3.4 硬件设计要点
- ✔ 终端匹配:RS-485总线两端各接120Ω电阻,阻抗匹配防止信号反射。
- ✔ 偏置电阻:在总线空闲时,A线对VCC上拉、B线对GND下拉(如10kΩ),确保逻辑“1”状态。
- ✔ 共模电压范围:RS-485收发器支持-7V至+12V共模输入,适应长距离地电位差。
- ✔ 隔离设计:长距离应用建议使用隔离型收发器(如ISO3082)或光耦隔离,防止地环路干扰。
- ✔ UART配置:菊花链中所有节点UART参数(波特率、数据位、停止位、校验位)必须一致,常用9600/115200bps、8N1。
3.5 典型应用电路
/* 基于MAX485的UART转RS-485节点电路 */
/* MCU: STM32F103, 收发器: MAX485 */
// 引脚连接
// MCU PA9 (TX) -> MAX485 DI (驱动器输入)
// MCU PA10 (RX) -> MAX485 RO (接收器输出)
// MCU PA8 -> MAX485 RE# (接收使能,低电平有效)
// MCU PA8 -> MAX485 DE (驱动器使能,高电平有效)
// 初始化代码片段
void RS485_Init(void) {
// 配置UART
USART_InitTypeDef USART_InitStructure;
USART_InitStructure.USART_BaudRate = 115200;
USART_InitStructure.USART_WordLength = USART_WordLength_8b;
USART_InitStructure.USART_StopBits = USART_StopBits_1;
USART_InitStructure.USART_Parity = USART_Parity_No;
USART_Init(USART1, &USART_InitStructure);
// 配置控制引脚 (PA8)
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_Init(GPIOA, &GPIO_InitStructure);
// 初始为接收模式
GPIO_ResetBits(GPIOA, GPIO_Pin_8);
}
void RS485_Send(uint8_t *data, uint16_t len) {
// 切换为发送模式
GPIO_SetBits(GPIOA, GPIO_Pin_8); // DE=1, RE#=1
delay_us(10); // 等待收发器切换
// 发送数据
for(uint16_t i = 0; i < len; i++) {
while(!USART_GetFlagStatus(USART1, USART_FLAG_TXE));
USART_SendData(USART1, data[i]);
}
while(!USART_GetFlagStatus(USART1, USART_FLAG_TC)); // 等待发送完成
// 切换回接收模式
delay_us(5);
GPIO_ResetBits(GPIOA, GPIO_Pin_8); // DE=0, RE#=0
}
3.6 菊花链通信协议帧结构
基于UART+RS-485的菊花链通常采用自定义协议帧,包含地址、命令、数据和校验字段。以下是一个典型帧格式:
📦 菊花链数据帧格式
转发机制:每个节点收到帧后,检查目标地址是否匹配。若不匹配,则将帧原样转发到下一节点;若匹配,则处理命令并可选返回响应帧。地址0xFF通常用作广播地址。