基于STM32的RS485适配器开发
2019-11-27周灵江丁小洪章家会朱鸿博
周灵江,金 杰,丁小洪,朱 阳,章家会,金 辰,朱鸿博
(国网浙江临海市供电有限公司,浙江 临海 317000)
1 引言
STM32 系列微控制器是一款基于ARM Cortex-M3 内核的嵌入式应用产品[1]。由于其高性能、低成本、低功耗的特性使其应用领域不断扩大,对于高效开发和利用更为重要。
STM32CubeMX 软件是意法半导体(ST)公司推出的STM32 系列单片机的图形化配置工具,开发者可利用其提供的可视化引脚、外设、时钟等配置功能,快速完成工程的建立、初始化[2-3]。基于MATLAB 和STM32CubeMX 联合开发的STM32-MAT 工具箱,它提供的MCU CONFIG 模块可以配置STM32CubeMX 软件所支持的STM32 芯片,同时它还包含几乎所有STM32 芯片上的资源。在嵌入式软件开发过程中,可以结合Matlab&Simulink 已有的模块实现复杂的控制算法与嵌入式编程。在STM32CubeMX 软件配置的基础上,快速为STM32 芯片实现图形化设计、早期验证、代码自动生成和文档自动化[4]。Embedded Coder 生成的C 代码MDK 工程文件,编译、下载后直接在单片机上运行,进一步简化了代码集成过程[5]。
随着国家电网公司用电信息采集系统建设的推进,对采集成功率的要求越来越高[6-7]。
RS485 作为国际通用串口通信标准,在用电信息采集系统中得到了广泛应用,对电能表乃至整个用电采集系统的安全经济运行都有重要意义[8]。RS485 通信系统越来越庞大,再加上供电系统复杂的电磁环境,使RS485 通信网络的稳定性面临严峻考验。从现场维护的实际经验来看,RS485 总线传输的拥堵、阻塞以及不稳定是用电信息采集不成功的原因之一。
基于STM32 的RS485 适配器能够很好解决电信息采集系统RS485 通信网络的稳定性问题。
2 硬件系统
系统电路结构连接关系如图1所示[9]。
图1 系统电路结构连接关系
2.1 STM32 单片机关键系统
STM32 单片机最小系统由STM32F103ZET6 单片机、时钟电路、复位电路、JTAG 接口构成。时钟电路采用的晶振频率为8 MHz,复位电路包含上电复位和按键复位。JTAG接口用于给STM32 单片机下载固件或调试程序。
2.2 电源模块
电源模块采用电平转换芯片AMS1117-3.3、一个5 V 转 3 V 稳压电源芯片,内部集成有过热保护与限流电路。供电模块还有供电状态指示灯。
2.3 MAX485 芯片连接
本设计使用MAXIM 公司生产的MAX485 芯片。MAX485 是用于RS485 通信的低功耗收发器,每个器件中都具有一个驱动器和一个收发器,芯片引脚及引脚说明如图2所示。RE/DE 为发送接收使能端,高电平发送数据,低电平接收数据。
3 软件设计
软件系统的设计任务具体如下:①利用STM32CubeMX平台进行初始化配置后,生成初始化MDK 工程;②在Matlab&Simulink 图形化环境下,使用STM32-MAT 工具箱及Simulink 模型进行应用层软件的开发。
图2 RS485 芯片引脚及引脚说明
3.1 信号输出在STM32cubeMX 中的配置
STM32cubeMX 是一款图形化软件设置工具,支持STM32全系列芯片,用户可以非常方便地配置MCU的引脚、时钟、外设等,并且支持自动生成工程项目文件[10]。
3.1.1 时钟配置
时钟配置界面如图3所示,外部晶振通过锁相环(PLL)倍频得到PLLCLK,之后得到系统时钟72 MHz[11]。
图3 时钟配置界面
3.1.2 I/O 口配置
通过STM32I/O 口的输入输出,从而驱动MAX485 数据的输入输出,配置界面如图4所示。主MAX485 芯片RO输出接入STM32芯片INPUT引脚,MAX485芯片的RE/DE、DI 输入引脚接入STM32 芯片OUTPUT 引脚。从MAX485芯片的RO 输出分别接入至STM32 芯片的INPUT 引脚,但14 路从MAX485 芯片的RE/DE、DI 引脚并接为并由STM32芯片的两个定义为OUTPUT 形态的I/O 口引脚控制。
3.1.3 计时器配置
STM32 需要实时扫描主从MAX485 芯片RO 引脚的状态,为保证扫描的实时性,需要计时器定时操作。在STM32CubeMX 界面初始化和使能中断即可,TIMER2 中断使能如图5所示。在Matlab&Simulink 图形化环境中,对计时器进行应用配置。
图4 I/O 口配置界面
图5 TIMER2 中断使能
3.2 应用层软件在Matlab&Simulink 中的模型搭建
3.2.1 计时器配置及中断
STM32-MAT 工具箱中时钟模块,时钟配置界面如图6所示。在界面中配置时钟频率为100 000 Hz,即0.01 ms 中断一次。有效提高了采集MAX485 的RO 状态的分辨率。时钟中断模型如图7所示,在中断模型中进行数据处理过程模型的搭建。
图6 Matlab&Simulink 时钟配置界面
图7 时钟中断模型
3.2.2 RS485 适配器处理原则及软件实现
RS485 适配器设计分为接收到数据集中器数据后的处理规则、电能表数据接收后的处理规则。
电能表数据接收后的处理规则:当RS485 适配器接收到数据集中器发送来的数据时,RS485 适配器把收到的数据通过电能表连接的14 个RS485口发出去。以实现连接到RS485适配器上的每个设就像都在同一条总线上一样。这时RS485适配器就要把收到的数据同步传送给下面的每个RS485 口。 下位机数据接收后的处理规则:当RS485 适配器接收到与电能表连接的14 个RS485 口发送来的数据时,RS485 适配器要把收到的数据通过与数据集中器连接的RS485 发送给数据集中器,使连接到RS485 适配器上的每个设备就像都在同一条总线上一样。当多个RS485 同时接收到数据时,适配器仅选择一个口的数据发送给上位机,并报警提示[12]。
Stateflow 是有限状态机的图形实现工具,可用于解决事件驱动系统中复杂的逻辑问题。有限状态机又称事件驱动系统,是指系统在条件发生变化时从一个状态转换到另外一个状态。有限状态机输入输出如图8所示。
图8 有限状态机输入输出
图8中,计数器、RS485 状态变量作为事件输入至状态机。有限状态机输出各MAX485 芯片数据信号持续时间以及各MAX485 芯片的同步控制信号。
有限状态机内部状态切换如图9所示。
图9 有限状态机内部状态切换图
利用 STM32CubeMX 平台进行初始化配置,并在Matlab&Simulink 图形化环境下进行应用软件模型的搭建,有效提高了软件的可靠性及复用性。
4 结论
本设计介绍了基于STM32F103 单片机的RS485 适配器开发过程。STM32CubeMX 和MATLAB/Simulink 的STM32 MAT 模型库的使用,使RS485 适配器的功能实现更为方便快捷,极大提高了设计开发效率,提高了RS485 适配器的可维护性及长期运行可靠性。目前,RS485 适配器已在电信息采集系统成功应用,有效减少了现场运维人员的工作量。