基于STM32单片机的RS485总线分布式数据采集系统设计_精品文档.pdf

上传人:b****2 文档编号:3177247 上传时间:2022-11-19 格式:PDF 页数:5 大小:319.32KB
下载 相关 举报
基于STM32单片机的RS485总线分布式数据采集系统设计_精品文档.pdf_第1页
第1页 / 共5页
基于STM32单片机的RS485总线分布式数据采集系统设计_精品文档.pdf_第2页
第2页 / 共5页
基于STM32单片机的RS485总线分布式数据采集系统设计_精品文档.pdf_第3页
第3页 / 共5页
基于STM32单片机的RS485总线分布式数据采集系统设计_精品文档.pdf_第4页
第4页 / 共5页
基于STM32单片机的RS485总线分布式数据采集系统设计_精品文档.pdf_第5页
第5页 / 共5页
亲,该文档总共5页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

基于STM32单片机的RS485总线分布式数据采集系统设计_精品文档.pdf

《基于STM32单片机的RS485总线分布式数据采集系统设计_精品文档.pdf》由会员分享,可在线阅读,更多相关《基于STM32单片机的RS485总线分布式数据采集系统设计_精品文档.pdf(5页珍藏版)》请在冰豆网上搜索。

基于STM32单片机的RS485总线分布式数据采集系统设计_精品文档.pdf

工业通信基于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=0xA0

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 农林牧渔 > 农学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1