485芯片AB波形正负半周的问题探讨

      本人做的一个产品,产品的其中一个接口是RS485的,我们使用的芯片是MAX13487E。MCU是STM32F103,MCU的USART通过光耦隔离后,接到MAX13487E。因为STM32F103的VCC是3.3V的,MAX13487E的VCC是5V。

      部分原理图如下,


上述部分电路参考了官方的参考设计,现在测试的AB波形时候发现如下问题。

1.把R10和R16改为1k,示波器CH1测A波形(A,GND1),CH2测B波形(B,GND1),MATH做CH1 -CH2.波形如下


示波器CH1测AB之间的波形(钩子接A,夹子接B)波形如下


可见,单A和单B的波形没有关于原点0V对称,CH1-CH2或者AB之间的波形也没有关于0V对称,为什么?

2.焊掉终端电阻R12后,波形如下


### RS485 AB波形原理与分析 RS485是一种用于多点异步通信的标准,其核心在于差分信号传输机制。差分信号通过两条线路(A和B)来传递数据,这两条线路之间的电压差决定了逻辑状态。具体来说,当AB间的电压差为+2V至+6V时,表示逻辑1;当电压差为-2V至-6V时,表示逻辑0[^4]。 在实际应用中,RS485波形可以通过示波器进行观察和分析。例如,在调试STM32单片机移植MODBUS协议的过程中,使用带隔离的ADM2483芯片,主机通过轮询机制询问从机,并接收从机的响应数据。此时,可以通过示波器观察到主机询问与从机回答的波形,两组数据之间通常会有7ms左右的间隔,而根据MODBUS协议的规定,两组数据之间必须有至少3.5字符的间隔[^2]。 进一步分析波形时,可以将信号放大以读取具体的比特信息。例如,一个字符通常由1位起始位、8位数据位、1位校验位(可选)以及1位停止位组成。以波特率为9600 bit/s为例,单个字符的时长大约为1.05ms,因此可以通过测量时间来反推出波特率:10bit / 1.05ms × 1000 ≈ 9600 bit/s[^2]。 此外,单独观察A线或B线对地的电压波形可能不够理想,但通过计算A-B的电压差,可以获得较为清晰的总线电压情况。这是因为差分信号能够有效抵消共模干扰,从而提高通信的稳定性[^4]。 以下是一个简单的代码示例,用于配置RS485通信的波特率和发送数据: ```c #include "usart.h" void RS485_Init(void) { USART_InitTypeDef USART_InitStructure; GPIO_InitTypeDef GPIO_InitStructure; // 配置USART引脚 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9; // TXD GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOA, &GPIO_InitStructure); // 配置USART参数 RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART1, ENABLE); USART_InitStructure.USART_BaudRate = 9600; USART_InitStructure.USART_WordLength = USART_WordLength_8b; USART_InitStructure.USART_StopBits = USART_StopBits_1; USART_InitStructure.USART_Parity = USART_Parity_No; USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None; USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx; USART_Init(USART1, &USART_InitStructure); USART_Cmd(USART1, ENABLE); } void RS485_SendData(uint8_t data) { while (USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET); USART_SendData(USART1, data); } ``` ### 示例波形分析 以下是对波形的具体分析: 1. **起始位**:每个字符的起始位总是低电平。 2. **数据位**:数据位按照低位在前、高位在后的顺序发送。例如,数据0x07(二进制为0000 0111)在波形中表现为连续5个低电平和3个高电平[^3]。 3. **停止位**:每个字符的结束位总是高电平。 通过观察波形,还可以验证数据的正确性。例如,发送数据0x55AA时,波形会显示交替的高低电平,因为0x55AA的二进制形式为0101 0101 1010 1010。 --- ###
评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值