彭韬 刘根利 杨宝军 翟渊
摘 要:在RS485总线中,主机和从机通常使用固定的波特率进行通信;而在实际应用中,波特率的大小和传输的距离是成反比的,波特率越高传输的距离越短,误码率增加越大。为避免波特率過高通信不可靠的问题,根据硬件波特率自适应的机制,文章采用从机数量来计算最优的波特率的方式进行主从机通信。经过实验验证,可提高RS485通信系统的稳定性。
关键词:RS485总线;自适应;波特率
在RS485总线型中,主机和从机的通信是构成整个系统的生命线,通信波特率大小的选择是一个困扰开发者的问题[1]。设计者都是凭着自身的经验进行设定,在能够满足通信的情况下,采用固定大小的波特率进行通信。但是在实际情况中,条件是会变化的,当波特率不变的情况下,RS485总线越长,连接的从机数量越多,数据的传输效率就会越慢,从机设备的动态增加变得极其困难,在实际应用中具有一定的局限性[2]。因此,根据从机数量的多少,计算出最优波特率进行通信传输变得尤为重要。本方案为解决主从机之间通信波特率的选择提供了最优解,面对不同的从机数量,主机采用不同的波特率进行通信,经过几个月应用在智能抄表的实验来看,采用本方案不仅通信稳定,而且从机设备可动态增加。
1 系统硬件设计
RS485总线型采用了半双工通信方式,每台从机和主机呈并联结构建立连接,主从机默认为接收状态,主机对从机进行轮询,主机发送信息给从机后,马上转为接收状态,从机接收到信息再回复给主机,如图1所示。主机和所有从机轮询一遍称为一个通信周期,理论上从机接收到主机命令再执行的时间范围小于一个时间周期。当主机接到指令要求对应从机执行命令时,主机刚好轮询到该目标从机,则从机立即执行,此时时间最短。若主机刚好轮询过该目标从机,则只有在下一个周期的轮询中主机才能够和从机通信,此时主机发送命令到从机执行的理论时间为轮询一个周期的时间。
2 实现依据
目前,主流的ARM内核的单片机比如STM32芯片中,自动波特率检测(Auto Baud Rate,ABR)使接收设备能够接收来自各种以不同速率工作的发送设备数据,无需事先设定数据速率。ABR可在事先不知道系统的通信速度或者系统正在使用精确度相对较低的时钟源且该机制允许在不测量时钟偏差的情况下,获得正确的波特率。
硬件自动波特率检测是基础,为实现主机根据不同的从机数量和总线长度进行对应的波特率通信,提供了硬件依据。
波特率表示每秒钟传送的码元符号的个数,是衡量数据传送速率的指标,用单位时间内载波调制状态改变的次数来表示。波特率的大小直接影响了通信速率的快慢,波特率越高,单位时间内传输的数据就越多,传输的距离越短,即波特率大小和传输距离成反比。在本方案中,轮询一个周期的时间为T,排除从机本身的计算响应等时间,从机自主机发送命令到响应的时间为0~T。所以根据设定,假设一个轮询固定周期时间T,传输的数据量一定,则主机和一个从机的通信时间就一定,当从机的数量变化时,波特率也随着变化,在轮询周期固定的情况下,波特率和从机数量成正比,从机数量越多波特率就越高。
3 ABR检测模式
STM32产品上的自动波特率检测功能内置了4种检测模式。
模式0:在模式0下,接收端接收的字符以字符‘1开头,接收端会通过测量起始位也即下降沿到上升沿的持续时间来计算出发送端的波特率。
模式1:在模式1下,发送端会发送以10XX模式开头的任意字符,接收端会测量起始位和第一个数据位的持续时间,相对于模式0,此时接收端测量的是波形下降沿到下降沿的持续时间,因此,在信号斜率较小的情况下仍能获得较高的精度。
模式2:在模式2下,发送端发送固定字符0X7F,在此模式下,接收端首先在起始位结束处计算起始位持续时间然后更新波特率,然后在第6位结束时计算6个高位持续的时间再次更新波特率。
模式3:在模式3下,发送端发送固定字符0X55,接收端首先在起始位结束处计算起始位持续时间然后更新波特率,然后在位0结束处再次更新波特率,最后在位6的结束处同样更新波特率。同时接收端还会对接收线路的每个中间转换执行其他检查。
在以上4种工作模式下,STM32都会在同步数据接收期间多次检测波特率,并将每一次的检测值与上一次的检测值进行比较,从而确保发送端与接收端波特率的一致性,进而提高通信可靠性。
4 ABR通信误差
STM32的通信速率范围由USART时钟源也即FCK决定,为提高通信鲁棒性,接收器可以采用过采样技术,通过过采样技术可区分有效输入数据和噪声,从而可以在最大通信速率与抗噪声及时钟不准确性之间实现平衡。STM32支持16倍过采样及8倍过采样,可通过编程USARTx_CR1寄存器中的OVER8位来选择过哪种过采样模式。16倍过采样时,波特率介于FCK/65535与FCK/16之间,8倍过采样时,波特率介于FCK/65535与FCK/8之间。
波特率误差取决于USART时钟源、过采样方法和ABR模式。当时钟频率为72 MHz,预期波特率为115 200时,通过官方测试数据可知:ABR模式2和3的精确度高于模式0和1,它们的波特率误差值更低。不过,由于预期波特率与实际波特率之间的误差小于1%,因此所有模式均可正常工作。
5 最优波特率计算
设主机轮询所有从机的周期时间为T,轮询一个从机的时间为t,主机轮询帧长度为L1,从机回复的数据帧长度为L2,从机数量为n,波特率为BR(baud rate)。假设只有一个从机的情况下,一个轮询传输单元包含的数据字节位数为Q,则Q= L1+L2。
6 实验结果
对RS485总线下的智能抄表系统进行实验研究,数据通信格式为8位数据位,1位起始位,1位停止位,无奇偶校验位。主机发送一帧数据为3个字节,分别为地址码、功能码和CRC校验码。从机回复一帧数据为6个字节,分别为地址码、数据码和CRC校验码。其中,数据码占用4个字节,轮询一个从机总的字节数9个字节,每个字节有8个bit,则轮询一个从机的信息量为72 bit。测试中从机首先接入5个,轮询所有从机的周期T定为1 s,经实际测试波特率为360,理论计算结果为BR=72/1×5=360,实际测试与理论相符,从机增加到10个,波特率经测试为720,也与理论计算相符合,由于波特率较低,单片机收发切换带来的误差可忽略不计。系统运行几个月未出现波特率变化或通信错误问题,系统运行效果良好。
7 结语
实际RS485通信应用中,从机的数量会出现动态增加,通过采用自适应波特率进行主从机之间的通信,在可满足通信要求的情况下降低系统通信的波特率,进而减小误码率小并可提高传输距离,提升通信稳定性。本方案在主控器支持自适应波特率的场合均可以使用,具有良好的扩展性。