STM32F107平台Modbus协议的嵌入式网关设计
2019-01-17,,
,,
(陆军装甲兵学院 信息通信系,北京 100072)
引 言
随着工业通信技术的不断发展,基于现场总线技术的控制系统被广泛应用于工业领域。Modbus协议作为一种能够有效控制实时网络和分布式系统的现场总线技术,以其运行稳定且实时性好等优点被越来越多地应用于工业系统中。企业信息化进程的不断发展对实现企业上层管理网络与现场控制网络的无缝连接提出了更高的要求。在工业自动控制领域,工业系统的网络化通信模式已发展成为一种趋势,工业通信技术正朝着智能化和网络化的方向不断发展。特别是近几年来,短程无线通信技术的崛起,使其也逐步渗透到工业控制领域。
如何将现场控制设备与以太网互联,完成异构网络之间的数据传输,进而实现底层生产与上层管理的紧密集成是当前研究的热点。基于此,本文提出了一种基于Modbus协议的工业有线/无线混合网络传输方案,设计了嵌入式网关的软硬件以完成Modbus协议与TCP/IP协议之间的转换,实现了Modbus协议在现场总线网和以太网之间的互联。
1 系统总体设计
Modbus协议是属于应用层的通信协议,它与物理层的设备和电器接口无关,既支持传统的RS232/RS485通信标准,也支持以太网通信标准。所以根据物理层网络的不同,Modbus协议被分成串行链路版本和运行在以太网的Modbus/TCP版本。
网关又称网间连接器、协议转换器,在采用不同体系结构或协议的网络之间进行互通时,提供协议转换、数据交换等网络兼容功能的设施。在本设计中,网关的主要功能是将串行链路版的Modbus现场总线与基于TCP/IP协议的以太网连接起来。其总体结构框图如图1所示。
图1 总体结构框图
本设计以STM32F107作为主控制器芯片,其上运行嵌入式实时操作系统RT-Thread,负责对各任务进程进行调度,其上加载的LwIP协议栈完成以太网通信相关任务。对外根据具体总线的类型选择收发芯片,采用物理层收发芯片结合RJ-45接口和WiFi芯片完成以太网有线和无线的通信任务。
2 硬件设计
2.1 硬件总体设计
系统硬件总体设计框图如图2所示。
图2 系统总体硬件设计框图
系统采用意法半导体公司基于ARM Cortex-M3内核的微控制芯片STM32F107VCT6作为核心处理器。该芯片是一款互联型微控制器,性价比高,内核、系统和存储器体积小;其工作频率高达72 MHz,内置高速存储器(256 KB的闪存和64 KB的SRAM),具备丰富的I/O接口及外设资源。该芯片的运行速度可满足系统的实时性多任务需求,丰富的对外通信接口可满足多种应用场合的需求。总体设计包括基本的核心控制芯片级周边外设、电源模块、各通信接口、烧录和调试程序的JTAG接口;FLASH模块主要保存各种需掉电保存的参数配置信息;RTC实时时钟模块主要在掉电时利用锂电池供电,保持时钟与其他系统同步。
2.2 STM32F107VCT6核心控制芯片电路设计
本设计的核心控制芯片STM32F107VCT6芯片为LQFP100封装,根据芯片手册,采用25 MHz温补晶振作为基准时钟源,采用32 768 kHz晶振作为外部低速时钟源,启动方式配置为上电直接从内部启动运行(BOOT0引脚下拉接地),采用多种滤波电容把交流噪声旁路到地,起到稳定电压的作用,在PCB布板时需要把电容放置在距离芯片电源引脚尽可能近的地方,以达到更好的滤波效果。该芯片核心工作电压为+3.3 V,由电源电路提供。程序的烧录和调试采用了JTAG模式中的SWJ-DP模式。
2.3 电源模块设计
电源模块采用德州仪器的LM2596电源转换芯片将+12 V电压转换为+5 V。电路设计中加入了保险丝、瞬态抑制二极管等元件对后端电路进行保护,防止接反短路。采用了电容、电感等降低电源电路的纹波噪声,其设计如图3所示。系统中所需要的+3.3 V电压采用电压转换芯片ASM1117获得,该芯片由LM2596产生的+5 V电压转换为+3.3 V,并在周边加上各滤波电路,减少噪声干扰。
图3 电源模块设计图
2.4 有线以太网接口电路设计
STM32F107系列微控制器内部集成了高性能的以太网模块,提供支持IEEE-802.3-2002的介质访问控制器用于以太网通信,支持10 Mb/s和100 Mb/s两种速率。该控制器内部集成两个介质无关接口,分别是工业标准的介质无关接口(MII-有17路信号线,时钟为25 MHz)和精简的介质无关接口(RMII-9路信号线,时钟为50 MHz)。
STM32F107需要一个外接物理接口设备(PHY)连接介质无关端口与物理局域网总线结合,实现以太网的功能。本设计选用的以太网物理层接口收发控制器是美国国家半导体公司生产的DP83848CVV单端物理层(PHY)芯片。该芯片能耗低、单路高速、鲁棒性好、功能全,具有通用的网络接口,支持MII(介质无关接口)和RMII(精简介质无关接口),还支持10BASE-TX和100BASE-TX的以太网外设,可以兼容其他标准的以太网解决方案,通用性高,这样可以使设计更加简单灵活。
DP83848芯片配合RMII精简标准接口提供的连接方案,能够减少MAC与PHY接口的引脚数,使设计者在保持IEEE802.3规范所有特性的同时,也降低了系统设计的成本,因此该芯片能够很好地满足工业控制和工厂自动化,以及通用嵌入式系统的要求。正是因为如此,该芯片也是STM32系列互联型控制器的推荐芯片型号,该接口芯片与微控制器连接设计如图4所示。
图4 DP83848与微控制器连接设计图
本设计选择与网络芯片连接的RJ45接口器件是集隔离变压器于一体的连接座HR91105,连接座器件带有黄绿指示灯,其连接关系设计如图5所示。
2.5 无线以太网WiFi接口电路设计
本设计采用ESP8266作为提供无线以太网连接的接口芯片。ESP8266包含Tensilica L106超低功耗、32位精简模式的CPU,主频为80 MHz,内置50 KB SRAM高速缓存,16 MB ROM(外扩FLASH芯片),支持ADC/PWM,可支持UART、SDIO、SPI、I2C等多种总线传输模式,支持802.11b/g/n协议,发射频率范围为2.4~2.5 GHz,最大发射功率可达+20 dBm。
图5 RJ45端口设计
本设计中ESP8266芯片通过USART串行接口与STM32F107进行通信,完成数据交互,通过SPI总线与FLASH芯片(W25Q80)完成通信, FLASH芯片可保存一些参数配置信息。采用26 MHz高精度温补晶振为其提供时钟源,其电路设计如图6所示。其中ESP8266的天线采用了SMA底座、阻抗匹配为50 Ω的外置射频天线,在PCB布板时,要注意芯片ANT引脚到射频底座之间的走线,要尽可能短,如有拐弯的需要,要尽量设计成大于90°的弧形走线,以降低功率衰减,获得更好的无线通信质量。
图6 无线WiFi接口电路设计
2.6 串行接口电路设计
本设计中的串行接口主要是RS-232接口和RS-485接口。设计中采用MAX3232作为RS-232接口电路的电平转换芯片。该芯片与STM32F107的串口1和串口4相连,将TTL电平转换为符合RS-232标准的电平,实现和其他串行接口设备的通信。
采用ADM2483完成STM32的串口TTL电平和RS-485差分电平之间的转换。由于485总线采用单工通信方式,在此单独使用STM32的一根引脚对ADM2483的收发进行切换控制。
2.7 CAN总线接口电路设计
CAN总线作为目前较为流行的控制器局域网,广泛应用在多种行业。本设计考虑该网关的未来功能扩展,在此将STM32F107的CAN总线控制功能也设计出来,作为预留接口。STM32F107内部包括两个CAN控制器,分别连接两个CAN收发器实现数据的传输功能。CAN收发器是CAN控制器和物理总线之间的接口,为CAN控制器提供差分接收、发送功能,本设计选用TJA1050作为CAN收发器,其设计电路如图7所示。
图7 CAN总线接口电路设计
3 软件设计
嵌入式系统大多对实时性有较高的要求,本设计在嵌入式实时操作系统RT-Thread完成对各项任务的调度。该系统运行于STM32F107核心控制芯片上。在此对其移植过程进行简要介绍,RT-Thread是一款国产的嵌入式开源RTOS,支持NXP、ST等多家公司的ARM架构芯片,其结构框图如图8所示。
图8 RT-Thread结构框图
在具体硬件平台和板级支持包(BSP)基础之上,RT-Thread构建了一个内核对象管理系统,系统通过它对内核对象进行统一管理,这些对象包括线程、内存块、信号量、互斥量等。RT-Thread的外围组件包括RT-GUI、文件系统、Shell和LwIP。其中,LwIP(Light Weight IP,轻量化IP协议)是应用于嵌入式系统的TCP/IP协议栈,它实现了完整的TCP/IP协议,但是占用资源较少。RT-Thread将其作为默认的TCP/IP协议栈,并进行了进一步优化,可以供用户直接使用,是完成本设计中Modbus协议与TCP/IP协议之间转换的重要组成部分。Finish Shell是RT-Thread提供的一个很方便的应用,主要用来调试、查看系统信息。
3.1 RT-Thread实时操作系统移植
为了让RT-Thread能够在STM32F107核心控制芯片上正常运行,必须进行移植。RT-Thread支持多种开发环境,本设计采用Keil MDK4。首先在RT-Thread的官网根据实际的硬件开发平台下载对应的版本,本设计使用RT-Thread2.0.0稳定版,其BSP(板级支持包)含有所支持的各平台的移植代码(根据实际情况可将其他无关平台的内容删除),内部包含有两个汇编文件:一个是系统启动初始化文件,另一个是线程进行上下文切换的文件,其他都是C 源文件。在移植时,选好开发平台后仅需修改rtconfig.h 文件使能本设计中要使用到的组件LwIP和Finish Shell (其他组件可根据需要配置) 。
3.2 RT-Thread初始化
MDK的用户程序入口是main()函数,main()函数调用rt_thread_startup()函数(RT-Thread多平台下的统一入口点),函数中包含了RT-Thread操作系统的启动流程:初始化系统相关的硬件,初始化定时器、调度器等系统组件,初始化系统设备,初始化各个应用线程并启动调度器。其中用户代码入口位置是rt_application_init(),在这个函数中可以初始化用户应用程序的线程,当打开调度器后,用户线程也将得到执行。在本设计中,主要根据硬件平台具体使用、连接关系,初始化用到的全部外设通信接口和工作状态指示灯。
3.3 LwIP协议栈的初始化及应用
LwIP由协议的实现模块(IP、ICMP、TCP、UDP)、操作系统模拟层、缓冲与内存管理模块、网络接口函数和API接口函数等独立模块组成。本设计中采用TCP协议完成数据通信,利用LwIP提供的轻型BSD Socket API接口函数调用实现,其中为大量已有的网络应用程序提供了兼容接口。