基于STM32单片机的RS485总线分布式数据采集系统设计.pdf
- 文档编号:3433010
- 上传时间:2023-05-05
- 格式:PDF
- 页数:5
- 大小:319.32KB
基于STM32单片机的RS485总线分布式数据采集系统设计.pdf
《基于STM32单片机的RS485总线分布式数据采集系统设计.pdf》由会员分享,可在线阅读,更多相关《基于STM32单片机的RS485总线分布式数据采集系统设计.pdf(5页珍藏版)》请在冰点文库上搜索。
工业通信基于STM32单片机的RS485总线分布式数据采集系统设计引言在工业现场中传感器及数据采集单元往往是分布在不同的地方,需要利用现场总线技术将分布在多处的传感器采集的数据实时传输到一个集中的监控设备,以便以监控和管理。
RS485、CAN、Profibus、LonWorks、FF等现场总线中,RS485总线以构造简单、技术成熟、造价低廉、便于维护等特点广泛应用于工业控制、仪器仪表、机电一体化产品等诸多领域,实现远程信息传输。
随着数据采集量的大幅增加,以及对数据分析的实时性要求,高端的32位单片机正逐渐进入工业和日常生活的各个领域。
本文介绍了一种基于意法半导体(ST)公司STM32微控制器和RS485总线网络的分布式数据采集系统。
64ServoControlr华中科技大学控制科学与工程系彭刚徐庆江张崇金王中南摘要:
本文介绍了一种基于意法半导体公司的STM32单片机glRS485总线网络的分布式数据采集系统的设计与实现。
STM32芯片功能强大、接口丰富、价格相对低廉,非常适合应用于工业数据采集领域。
RS485总线以组网简单、造价低廉、便于维护等特点广泛应用于工业现场中的分布式数据采集系统和控制系统中。
采用构造简单、功麓强大的Modbus协议作为RS485总线网络的上层通讯协议,保证了系统运行的稳定可靠。
关键字:
STM32单片机分布式数据采集RS485Modbus协议硬件设计sTM32单片机STM32单片机是ST公司在业界最先推出的基于ARMCortexM3内核的,专为高性能、低成本、低功耗的嵌入式应用设计的32位微控制器。
ARMCortexM3内核支持Thumb一2指令集,具有更高的指令效率和更强的性能,能完成单周期乘法和硬件除法。
STM32单片机带有众多高性能的外设,内置大容量的Flash和SRAM。
具有丰富的通信接口,如IIC、SPI、US、CAN、USB、以太网等。
同时,还有l2位的ADCDDAC模块,以及DMA控制器,尤其适用于高速、大容量的分布式数据采集系统。
以STM32F103VC为例,它包含3个12位的ADC、12通道的DMA控制器,及多达11个定时器。
还包含标准和先进的】3个通信接口:
多达2个I2C、3个SPI、5个USART、一个USB、一个SDIO-个CAN|ll。
STM32系列徽控制器的工作频率为72MHz,最新的F一2产品达到了120MHz。
S1M32系列微控制器的性能比市场上的8l6位单片机有了大幅提高,同时它的价格相对传统的32位ARM处理器和DSP却是低廉的,这使得原本那些用8位单片机不能完成的或者以前必须用昂贵的DSP来实现的处理都可以用STM32系列微控制器来实现。
RS485总线RS485总线以构造简单、技术成熟、造价低廉、便于维护等特点广泛应用于工业现场中。
R$485总线采用平衡发送和差动接收方式实现通信,具有很高的通信可靠性,同时使用一主带多从的通信方式,最多可接256个从设备。
RS485总线的电气接口具有两种,一种是四线制的接口,另一种是二线制的接口l11,图1是二线制的RS485总线拓扑图。
从图中可以看出在总线的两端跨接了两个电阻,这两个电阻叫做终端电阻。
它的阻值必须与电缆特性阻抗相匹配,一般为120欧。
终端电阻是用于消除信号反射带来的信号失真,短距低速时可在一端加,长距离或高速时必须两端同时加。
同时总线上通过加入了总线偏置电阻分别上拉和下拉了一根信号线和地线,使总线在空闲时处于稳定的状态。
RS485总线的二条信号线形成一对平衡双绞线,可以实现半双工的通信,即任何时刻总线上只有一个设备处于发送数据的状态。
RS485总线传输速率最高可达到lOMbpS,最大距离为l300111。
为了保证通信的可靠性和传输距离,传输速率一般不要设置太高,传输电缆采用带屏蔽的多芯铜双绞线。
系统由一个主设备和若干从设备组成。
各个从设备通过AD转换器采集传感器数据,然后通过RS485总线传送到主设备;主设备可就地显示各个从设备采集的数据,也可通过串口或USB传到上位机。
所有主设备和从设备都采用STM32Fl03芯片控制。
其中,主设备的硬件框图如图2所示。
从设备相比主设备做了简化,主要功能是利用STM32片上集成AD转换器采集数据,以及串口3进行RS485通讯。
RS485接口电路主要由低功耗的半双工RS485收发器MAX3485组成,符合RS485串行协议的电气规范,数据传输速率可达l0MbpS。
它可以使STM32单片机通过USART串口方便地接入到RS485总线网络中,电路如图3所示。
其中,PB1O和PB11引脚分别对应STM32单片机USART3的发送和接收,PB13f1PB14用于控制RS485数据通讯的传输方向。
软件设计RS485总线只是定义网络的物理层,对网络的上层并没有规定,可以根据实际工程的需要来定义上层的协议。
本文采用在工业中广泛使用的MOdbUS协议来进行主设备和各个从设备之间的通信。
ModbustYModbus协议具体的物理层没有规定,可以是R$232也可以是RS485或其它。
Modbus协议按主从方式进行网络通信,即个系统中只有一个主设备,所有的操作都是主设备发起。
其他从设备根据主设备查询时提供的数1目服控制撕囊图1二线制的RS485总线拓扑结构图2主设备硬件框图据信息作出相应的回应。
主设备可以单独与每个从设备通信,也能以广播方式与所有从设备通信。
从机和从机之间无法通信。
在Modbus协议中,采用主机查询和从机回复的消息结构。
Modbus帧格式如图4所示31。
地址码表明由用户设置地址的从机将接收由主机发送来的消息,每个从机都必须有唯一的地址,并且只有复合地址码的从机才能相应回送;查询消息中的功能码告知被选中的从设备要执行何种功能,ModbuS协议的功能码比较多,包括公共功能码、用户定义功能码和保留功能码等。
在分布式数据采集系统中一般只是使用3号功能码,用来读取各个从设备中GND图3RS485接口电路图储存AD转换结果的数据;数据段包含了从设备执行该功能需要的信息,这些信息可以是起始地址、数据长度和具体数值;校验域(CRC或LRC)为主从设备提供了一种验证消息内容是否正确的方法。
在从设备的回应消息中,功能码是对查询消息中功能码的回应,数据段包含从设备收集的数据。
如果有错误发生,功能码将指出是锚误回应消息,同时数据段包含了描述此错误信息的代码。
MOdbuS协议有ASCII和RTU(RemoteTermiFlalUnit)两种传输模式。
ASCII模式传输的都是可见的竺!
竺l竺!
竺!
l塑垦!
:
!
竺!
I!
竺图4Modbus帧格式ServoControI65一工业通信ASCII字符,RTU传输的数据每一个字节ASCII模式都要用两个字节来传输,比如RTU传输一个十六进制数0xA5,ASCII就需要传输A和5的ASCII码:
0x41和0x35两个字节,这样它的传输的效率就比较低。
如果所需要传输的数据量较小可以考虑使用ASCII协议,如果所需传输的数据量比较大,一般采用RTU传输模式效率高,并使用CRC错误校验。
在一个Modbus网络上的所有设备,都必须选择相同的传输模式和串口参数。
系统采用的传输波特率都设为9600bps。
循环冗余码(CRC)包含两个字节。
它由传输设备计算后加入到消息中。
接收设备重新计算收到消息的CRC码,并与接收到的CRC域中的值比较,如果两值不同,则有误。
CRC码的计算方法是:
是先预置一个全为1的16位寄存器,然后逐步对数据中的每8位进行处理。
CRC码计算时只用每个字符中的8Bit数据,起始位和停止位以及奇偶校验位均不参与计算。
计算CRC码的步骤为:
步骤l:
预置I6位寄存器为0xFFFF(即全为1),此寄存器为CRC寄存器;步骤2:
把第一个8位数据与CRC寄存器的低位相异或,结果放于CRC寄存器;步骤3:
把寄存器的内容右移一位,用0填补最高位,检查最低位;步骤4:
如果最低位为1:
CRC寄存器与多项式A001(1010000000000001)进行异或,如果最低位为0:
则不进行:
步骤5:
重复步骤3和4,直到右移8次,完成整个8位数据的处理;步骤6:
重复步骤2到步骤5,进行下一个8位数据的处理;步骤7:
最后得到的CRC寄存器值即为CRC码。
CRC码值添加到消息中时,低字节先加入,然后放高字节。
下面是获得66ServoControlr一CRC校验码的C语言程序实现:
UDSignedshortGetCRCValue(constcharpSendBuf,intnEnd)UriSignedshortwCrc=0xFFFF;Ior(iriti=0;iriErid;i+)wCrc=(Llnsignedshort)pSendBufi】:
for(intJ=0;j=l;wCrc=0xA001;elSewCrc=1;1)returnwCrc;主设备和从设备程序设计主设备和从设备都是依照Modbus协议来编写通信程序。
主设备需要主动发起网络中的通信,即依次向各个从设备发送命令,而各个从设备根据接收到的命令做出相应的回应。
主设备的程序处在一个死循环中,一直在查询各个从设备,等待从设备回应的数据,并进行处理。
为保证系统的可靠性,程序还设置了两个超时检测,其中一个用来检测从设备回应超时,另一个用来检测一帧数据的结束,因为整个Modbus报文帧必须以连续的字符流发送,当超过一定的间隔没有字符接收,就认为报文结束了。
主设备的程序流程如图5所示。
从设备一直处在接收的模式下,当它接收到一帧数据时,首先比较命令中的地址和自己的地址是不是一致,如果不是就丢弃这一帧数据,继续等待数据。
如果地址匹配,则根据数据帧中的命令做出相应的操作,然后向RS485总线上发送一帧数据作为回应。
从设备的程序流程如图6所示。
图5主设备的程序流程图图6从设备的程序流程图由于每个从设备的地址是唯一的,所以主设备发送一帧数据后,只有一个从设备会回应,这样就不会造成多个设备同时向总线发送数据的情况。
同时从设备数据采集时利用S讧32单片机的DMA控制器,以DMA方式进行AD采集数据和传输,而不需要内核的干预。
这些采集到的数据就作为回应帧中的数据,通过RS485总线传给远程主设备。
下面是设置STM32的AD工作在DMA方式下的在C语言程序实现:
vul6ADCConvertedValue:
;#defineADC1DRAddress(u32)0x4001244c)ADC1数据寄存器的存储映射地址voidADC_Configuration(void)ADCInitTypeDefADCInitStructure;ADCInitStructureADCMode=ADCModeIndependent;ADCInitStructureADC_ScanConvMode=ENABLE:
ADCInitStructureADC_ContinuousConvMode=ENABLE:
ADCInitStructureADCExternalTrigConv=ADCExternalTrigConvNone;ADCInitStructureADCDataA1ign=ADCDataA1ignRight:
ADCInitStructureADCNbrOfChannel=1:
ADCI13it(ADC1,&ADC_InitStructure);ADCRegularCharlnelConfig(ADC1,ADCChannel8,1,ADCSampleTime55Cycles5);ADC1【)MACmd(ADC1,ENABLE);狠与DMA关联使能ADCIDMAADCCmdIDc、,ENABLE使能开启ADCiADC_ResetCalibration(ADC1);重置校准while(ADCGetResetCalibrationStatus(ADC1);等待重置校准完成ADCStartCalibration(ADC1):
开始ADC1校准while(ADCGetCalibrationStatus(ADC1);等待校准完成ADCS0ftwareStartConvCmd(ADCl,ENABLE);毫动ADC转换voidADClDM_AInit(void)ffDMAInitrypeDefDMAInitStructure;DMA_DeInit(DMA1Channel1);复位开启DMAl的第一通道(伺月受控制DMAInitStructureDMAPeriphera1BaseAddrADC1一DRAddress:
DMAInitStructureDMPeripheralDataSize=DMlAPeriphera1DataSizeHalfWord:
DMAInitStructureDMAMemoryBaseAddr=(u32)&ADCConvertedValue;DMAInitStructureDMADIR=DM_ADIRPeripheralSRC:
DMAInitStructureDMAM2MDMAM2MDisable:
DMAInitStructureDMAMemoryDataSizeDMAMemoryDataSizeHalfWord;DMAInitStruCtUreDMAMemoryInc=DMAMemoryIncDisable:
DMAI13itStructureDMAPeripheralInc=DM|APeripheralInc_Disable:
DMAInitStructureDMAMode:
DMAModeCircular:
DMAInitStructureDMAPrioritY=DMAPriority;DMAInitStructureDMABufferSizc=l:
DMAInit(DMA1一Charlnel1,&DMAI13itStructure);DMACmd(DMA1Channel1,ENABLE);注意要在复位与初始化函数RCCConfiguration中使能ADC1IDMA时钟。
当一块子设备采样多路通道时,如果在初始化ADC之前使能DMA,就会出现数据通道错位现象。
最好将ADC初始化放在DMA初始化之前,同时将启动ADC转换语句:
)cSoftwareStartConvCmd(ADCl,ENABLE)从ADC初始化函数中移到DMA初始化函数DMACmd(DMAIChannel1,ENABLE)语句的后面,这样就不会出现数据通道错位现象【。
系统实现本文所设计的分布式数据采集系统主设备如图7所示,通过RS485总线可以连接若干从设备。
这些从设备是实际的远程测量单元,用于数据的实时采集并向RS485总线主设备传送采集到的数据。
主设备的液晶屏可以显示这些从设备采集的信号值,也可以通过RS232或USB上传给PC机。
以挂接两个从设备进行数据采集和传输为例,图8为PC机端显示的信号值。
系统性能稳定,能长时间无差错地实现分布式数据采集。
(下转第84页)ServoControl67应用与方案本文设计选用的小型汽油发电机额定功率为2KVA,峰值输出功率为22KVA,发电机输出的三相交流电电压为230V330V,输出频率为350Hz600Hz,基本功率因数为10,油箱容量为l2L,在不加油的情况下可以持续运行l0个小时,此发电机具有体积小,能量转化效率高的特点。
为了满足要求,逆变电源有如下特性:
频率变换功能,将输入电压的频率变成所需的频率50Hz。
电压变换功能,将输入电压变成所需的电压220V。
逆变电源输出电压畸变率低于3,电磁干扰小,抗干扰能力强。
利用MATLAB软件进行仿真,仿真参数和指标如下:
直流母线电压取400V;逆变电源额定输出为220V50Hz的正弦波交流电;滤波器:
滤波电容C=238uF;电阻负载为R=l0Q;开关频率为为125KHz;采样周期lms。
由仿真结果可见逆变电源输出电压峰峰值为310V,有效值为220V,电压频率5OHz。
在扰动发生的第一个周期,数字PID控制器先对系统进行调节作用;一个采样周期后,重复控制器对系统误差进行调节,使系统稳态误差更小。
采用数字PID和重复控制相结合的复合控制算法,逆变电源电压畸变降到了3以下。
结论本文所提出的逆变电源系统采用交一直一交变换模式,引入数字PID和重复控制相结合的复合控制算法,不仅使系统具有较快的动态响应特性,稳态误差小,而且也满足了小型汽油发电机逆变电源的性能指标,具有一定的实用性。
作者简介段利君(1986一)男硕士研究生,主要研究方向是现代自动化装备与控制技术。
参考文献1】胡书举,李建林便携式发电机用整流器的控制策略及实现电气传动,2008,8
(1):
3536【2】DMDivan,InverterTopologiesandControlTechniquesforSinusoidalOutputPowerSupply,IEEEAPEC9l,PP81873】丁道红电力电子技术【M】北京:
航空工业出版社,199244王永刘,志强,刘福贵一种新型实用的IGBT驱动电路IJ徽计算机信息200t(9)f5】Ooh,TaeYDng,Ryoo,JuneRaeRobuststabiiityconditionandanalysisonsteadystatetrackiraerrorsofrepetitivecontr,1systems【J1Internation
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 STM32 单片机 RS485 总线 分布式 数据 采集 系统 设计