无线中远程通信系统设计
2015-04-25涂宁,施展
涂 宁,施 展
(上海理工大学 光电信息与计算机工程学院,上海200093)
STM32以其优良的性价比、丰富的片上资源,被广泛应用于通信传输系统中。而通信系统的快速发展对数据的处理速率、可靠性、实时性都提出了更高的要求[1]。
RS485具有传输速度快、传输距离远、支持多节点和抗干扰能力强等特点,基于Modbus协议的RS485已广泛应用于通信系统中。此实验是利用RS485和无线收发模块实现一点对多点的无线通信,并将无线与有线相结合,充分利用其优点。传统的便携通信系统因受存储空间等限制,已无法满足实际通信系统的调度与管理的需要,本文提出的基于STM32单片机的无线通信系统充分利用其片上资源,扩展了512 MB的NAND Flash存储器。此外还利用了STM32的电源、时钟管理和看门狗等功能,改善了传统中远距离传输过程中存在的不足,同时功耗也大幅降低[2]。
1 无线传输系统的总体设计方案
系统是基于STM32微控制器和Modbus协议的RS485总线的弱电信号传输系统,可应用于各种弱电信号一对多的无线传输。整个系统由STM32主控制器、数据存储器、SP3485接收器、NRF24L01无线通信模块、电源模块等组成。
发出信息经过无线传输传给无线接收模块,在经过RS485接口模块进行高效率的一点对多点信息传递,最后由从设备对信号进行存储和显示。无线传输系统总体框图如图1所示。
2 无线传输系统硬件设计
无线传输系统硬件部分由主控制器、数据存储器、RS485通讯接口、无线传输模块和电源电路组成。主控制器完成信号的传输、接收控制和存储显示;RS485通讯接口将信号传递给主控制器进行存储与显示;无线传输模块完成无线传输信号的发送和接收;电源模块为整个无线传输系统的各个模块提供工作电压。
图1 无线传输系统总体框图
2.1 无线通信模块
本实验无线模块中所使用的芯片是NRF24L01芯片,用到的是深圳云佳科技生产的NRF24L01,该模块的工作电压是3.3 V,工作在2.4 GHz全球开放的ISM频段。最高工作速率2 Mbit·s-1,具有高效的GFSK调制和抗干扰能力强等特点,且其成熟度和稳定性良好,该模块已被大量使用。模块VCC脚的电压范围为1.9~3.6 V,一般不超过3.6 V,否则可能烧坏电路板。
2.2 RS485接口电路
RS485总线由于具有结构简单、技术成熟、造价低廉、便于维护等特点被广泛应用于通信网络中。RS485的电器特性规定为2线,半双工,多点通信的标准。其特性与RS232不同,其是靠线缆两端的电压差来表示传递信号[3]。RS485总线的电气接口有四线制跟两线制接口,根据实验采用的半双工和全双工模式的不同而不同,本实验使用两线制的RS485总线拓扑图。总线的两端跨接了两个电阻,是用于消除信号反射带来的信号失真,RS485的接口电路主要由低功耗的RS485接收器SP3485组成,其最大速率可达10 Mbit·s-1,支持32个节点,并具有输出短路保护[4]。通信接口模块电路如图2所示。
图2 RS485总线接口模块电路
2.3 数据存储模块
AT25DF021是带有SPI接口的Flash型数据存储器。传统的Flash存储器需多个地址线和一个并行接口,而AT25DF021采用的是串行接口传输方式,按顺序访问内部的数据,容量为2 MB,最大工作频率为66 MHz。本实验使用的这种简单的串行接口,可简化硬件繁琐的布局,从而使系统的可靠性得到提高。AT25DF021的低电压、低功耗,对于此实验通讯系统的设计较为适用。
2.4 RS485总线拓扑结构
RS485总线只是定义在网络的物理层,对网络的上层没有规定,可根据具体需要来定义上层的协议。本实验采用Modbus协议向多个从设备传递信息。Modbus协议对网络物理层没有规定。按照主-从的方式进行网络通信,即所有的命令都是主设备发起,从设备根据所得到的信息进行回应[5]。本实验中主设备可以一对一或一对多的方式进行通信。网络还需两个匹配电阻,其阻值等于传输电缆的特性阻抗,一般为120Ω,其作用是避免设备在静止或无能量时产生噪音,导致数据传输错误。总线拓扑结构如图3所示。
图3 RS485总线拓扑结构
3 无线传输系统的软件实现
本实验设计中,采用ARM公司推出的集成开发环境Keil4为开发平台。应用程序包括主设备和从设备程序、无线模块控制程序、串行接口中断子程序等主要部分。
3.1 主从设备程序设计
主从设备的程序主要负责对于系统初始化、数据的发送和接收、错误检测、中断处理和存储与显示操作。主从设备都是依照Modbus协议来编写程序。主设备需要主动发起网络中的通信,为了保证系统的可靠性,程序还设置了超时和错误检测。从设备一直处于接收状态,当从设备接收到数据时,首先和自身的地址进行比较,若地址不一致,将丢弃这一帧数据,继续等待数据。若地址一致则接收数据,存储并显示。然后向总线发出反馈信号作为回应。主从设备程序流程分别如图4和图5所示。
3.2 无线接收模块的控制程序设计
每一帧数据都包括两位的PID数据包识别码,用来识别接收的数据是否为新数据,PID标示码可防止同一数据多次被接收,每次在接收一帧新数据后PID值加1。
此外还有CRC校验,在链路中如果丢失了一帧数据,而导致PID值与上一包的PID值相同,则进行CRC校验[6]。对两包的CRC值进行比较,若CRC值相同,则认为是同一帧数据并将其舍去。无线接 收模块的控制程序流程图如图6所示。
图4 主设备程序设计流程图
图5 从设备程序设计流程图
图6 无线接收模块的控制流程图
3.3 中断处理流程设计
初始化中设置UART0模块工作,选择时钟信号为ACLK,数据位为8位,波特率为9 600 bit·s-1,发送数据方式为主动发送[7]。当接收到一个完整的数据,产生一个信号:URXIFG0=1,表示接受完整的数据。当数据正在发送中,UTXIFG0=1,此时不能再发送数据,必须等当前数据发送完毕。
完成整个串行数据的传输是靠中断来处理的,当串行口有数据时,即触发中断,在中断环节中完成数据的存储与显示,然后不断地重复进行,直到数据传输结束。
3.4 Modbus协议设计
Modbus协议有ASCII和RTU两种传输模式。同样在9 600 bit·s-1波特率下,可比ASCII方式传送更多的数据。所以本实验采用Modbus协议的传输模式是RTU模式,其是建立在串口通信方式的基础上,摒弃了TCP/IP协议的3次握手才建立连接的繁琐,体现出便捷式传输的优点。RTU传输模式如表1所示。
表1 RTU消息帧
实验工作在9 600 bit·s-1波特率下,并将定时器终端设置为1 ms一次,在9 600 bit·s-1的情况下将超时时间设为4,在串口不接收数据时,定时器不会清0,当达到超时时间4时,将下面传来的帧视为新的消息帧,在接收新帧结束后进入命令解析状态。第一步是CRC校验,将接收的CRC值与自身解析的CRC值进行比较,来判断接收的数据是否正确。
在CRC校验正确后,便可判断地址。每个从设备用自身的本机地址跟新帧的第一字节相比较,从而识别主机查询的是哪个设备。当地址、CRC等判断正确后,就可判断最重要的功能码了,由于是需要读取数据,所以选择功能码为0X01。在对一帧的外围进行解析和判断之后,就开始进行数据的传输。下面是获得CRC校验码C语言程序的实现。
4 系统实现
本实验所设计的中远程无线通信系统,通过无线接口模块和RS485总线实现主机与从设备之间的通信,从设备的液晶屏可实时接收并显示从主机发送过来的信息。在代码编译成功后,烧写代码到开发板,通过按键指定NRF24L01模块的接收方式,主设备选择发送,从设备选择接收状态,设置好后,便可进行实时通信了。
完成对芯片的正确配置之后,可通过串行调制助手来测试相应的误码率和丢包率。测试中每次发送200 000 Byte的数据进行测试。测试效果如表2所示。
表2 实时测试结果
实验数据显示,在近距离的情况下,系统相对稳定,误码率和丢包率相对较低,而在短距离且中间有障碍物时,误码率和丢包率均会大幅增加,且丢包率波动较大。在30 m以内时信号传输相对较稳定,误码率约为4%。在30 m以外系统丢包率和误码率会随着无线传输距离的增加而增加。
无线通信需要解决的最大问题是保证传输数据的准确性,即要求误码率低。误码率是衡量数据在规定时间内数据传输精确性的指标。误码率=错误码元数/传输总码元数100%[8]。实验中通过KEY0和KEY1来选择NRF24L01模块所要进入的工作模式,开发板一个选择发送,一个选择接收即可。设置好后通信结果如图7所示。
图7 通信结果
5 结束语
本文设计了中远程通信系统的实现方法。通过调试,证明了系统可以正常运行,各方面指标均已达到设计要求且误码率低。整个系统集成度高、功耗低,且体积小、可靠性高,易于控制,使用灵活,性价比较高。
[1] 张旭,元学广,李世光,等.基于STM32电力数据采集系统的设计[J].电子测量技术,2010,6(2):90-93.
[2] 王永虹,徐炜,郝立平.STM32系列ARM Cortex-M3微控制器原理及实践[M].北京:北京航空航天大学出版社,2008.
[3]AI Changsheng,Wang Baoguang,Sun Xuan.Ultrasonic water depth measuring instrument withdifferential GPS over GPRS network[C].3rd Tnternational Symposium on Instrumentation Science and Technology,2004:1127-1131.
[4] 马洪兵,谷源涛.嵌入式系统硬件与软件架构[M].北京:人民邮电出版社,2008.
[5] 李宁.基于MDK的STM32处理器开发应用[M].北京:北京航空航天大学出版社,2008.
[6] 李东生.Prote199SE电路设计技术入门与应[M].北京:电子工业出版社,2002.
[7] 曾勇,杨涛,冯月晖.基于nRF24L01的超低功耗无线传感网网络节点设计[J].电子技术应用,2008,7(2):45-48.
[8] 王永虹,徐炜,郝立平.STM32系ARMCortex-M3微控制器原理与实践[M].北京:北京航空航天大学出版社,2008.