历史上的今天
今天是:2025年06月01日(星期日)
2019年06月01日 | 示波器调试RS485通信波形图
2019-06-01 来源:eefocus
由于笔者在调试STM32移植的MODBUS协议的时候遇到了一些问题,需要借助示波器来看波形,而关于485通信波形相关的资料网上不多,所以把自己调试过程中的波形记录下来。
硬件:STM32单片机,1个主机和10个从机,移植MODBUS协议,采用轮询机制,主机挨个询问从机,从机采集一些信息回复给主机。
原理图:使用带隔离的芯片ADM2483,PA1,PA2,PA3指的是单片机的引脚,分别是使能,TXD和RXD。

代码:基本上是http://www.openedv.com/forum.php?mod=viewthread&tid=98367&highlight=modbus
根据自己的业务稍微做了简化和修改。
以下是主机询问以及从机回答的波形,两组。测试的是AB两线的电压差

以下是一组主机询问与从机回答的波形,中间间隔7ms左右。注意,MODBUS规定两组数据之间必须有3.5字符的间隔,我的单个字符时长大约1ms,所以这个间隔不得小于3.5ms。

以下是一个命令的波形,可以看出一个命令用时约为8ms多一点,而一个命令是8个字符,通常情况下1个字符包括1位起始位、8位数据位(一般情况)、1位校验位(或者没有,本例子没有校验位)、1位停止位(一般情况下)。也就是一个字符是10位,由此可以推算出波特率:10bit / 1.05ms X 1000 ≈ 9600 bit/s

以下两图是把波形进一步“放大”,尝试从波形里读出数据。约4格表示一个字符。
此图是上图前四格的第一个字符,也就是10位,起始位总是低电平,而结束位是高电平,8个数据位,低位在前。可以看出,第一格式起始位的低电平,接下来是连续3个高电平和5个低电平,最后一格是结束位的高电平。中间的数据位是1110 0000,由于低位在前,所以实际是0000 0111,也就是0x07


下图的黄色线是A线对地电压,蓝线是B线对地电压。为了方便观察,第一个图把两个波形完全分开了,第二个图的“地”在同一水平线上。而A减去B,也就是黄色减去蓝色,就可以得到465总线上的电压情况。可以看出,单个A或是B的波形都不是很理想,定时A-B的波形还不错。大概这就是485通信稳定的一个原因了吧。

下一篇:STM32 正交编码器代码
史海拾趣
|
电阻器的选用经验介绍 1.固定电阻器的选用 固定电阻器有多种类型,选择哪一种材料和结构的电阻器, 应根据应用电路的具体要求而定。 高频电路应选用分布电感和分布电容小的非线绕电阻器,例如碳膜电阻器、 ...… 查看全部问答> |
|
LED灯可能最终都会取代节能灯的,我现在正在整理一些材料;关于LED灯壳的型号如何去取代节能灯的某个型号; 譬如 我说MR16,是不是意味着这有可能是LED驱动外壳,也有可能是节能灯的外壳。 谁有这方面的资料;还有E27 E26 LED灯 ...… 查看全部问答> |
|
DM9000可以正确发送,可是接受到的数据包却大于1518B!!! dmfe_packet_receive: DM9000\'s RxLen is: ffff 接收到的数据包长度为0xffff > 1518 可能原因是什麽啊?… 查看全部问答> |
|
使用keil mdk 4.12 编译出现这些错误,是为什么呢?ads1.2不会。。 S3C2440\\source\\2440init.s(456): error: A1516E: Bad symbol \'Image$$RO$$Base\', not defined or external S3C2440\\source\\2440init.s: 456 000003d ...… 查看全部问答> |
|
近期要选一个ARM最好能代替单片机的芯片,我将范围定在cortex m3系列,cortex M3有三大系列,LM3S\\LPC17XX\\STM32,我将目标定在STM32系列,不知道各位有什么想法。 还有关于STM32系列的我不是很了解,想知道(1)它的指令周期和机器周期之间的关系 ...… 查看全部问答> |
|
//****************************************************************************** // MSP430F5438 Demo - USCI_A0, 9600 UART, SMCLK, LPM0, Echo with over-sampling // // Description: Echo a received characte ...… 查看全部问答> |




