单片机实现RS485的通信毕业论文.docx
- 文档编号:13778326
- 上传时间:2023-06-17
- 格式:DOCX
- 页数:27
- 大小:726.51KB
单片机实现RS485的通信毕业论文.docx
《单片机实现RS485的通信毕业论文.docx》由会员分享,可在线阅读,更多相关《单片机实现RS485的通信毕业论文.docx(27页珍藏版)》请在冰点文库上搜索。
单片机实现RS485的通信毕业论文
本科毕业论文
题 目:
单片机实现RS485的通信
学生:
学号:
院〔系〕:
专业:
入学时间:
年 月
导师:
职称/学位:
副教授/博士
导师所在单位:
完成时间:
年 月
单片机实现RS485的通信
摘要
在工业控制自动化领域,智能装置之间的通信占有重要的地位,RS485这种串行通信方式在工控自动化领域应用非常广泛,这种远距离通信可以采集远程信息和远程数据,实现远程控制和远程调节。
本文首先介绍了RS485通信标准,然后在此根底上设计了通信协议,并且提出了具体的通信实现方案。
系统使用STC89C52RC为主控芯片,以MAX485芯片实现RS485收发功能,并且加上键盘输入和LCD显示功能,最终完成主站和子站的一套小型远程控制方案。
关键词:
RS485;工控自动化;总线;协议
AKindofImplementationMethodofRS485CommunicationWithMCU
Abstract
Inthefieldofindustrialcontrolautomation,communicationbetweensmartdevicesisveryimportant.TheserialcommunicationinterfaceRS485iswidelyappliedinthefieldofindustrialcontrolautomation.Remotecommandandremotedatacanbetransportedbyaestablishedconnection.Sowecanrealizeremotecontrolandremotemonitoringbycommunication.ThisarticlefirstintroducestheRS485communicationstandard,andthenintroducesthedesignofcommunicationprotocol,finallyputsforwardaspecificimplementationschemeofcommunication.ThissystemusesSTC89C52RCasmaincontrolchip,MAX485asRS485transceiver,andcombinedwithkeyboardinputmoduleandLCDmodule.Thissystemisasmallremotecontrolsolutionbetweenmainandsubstations.
Keywords:
RS485;industrialcontrolautomation;bus;protocol
1.绪论
1.1.RS485简介
RS485,又叫EIA-485,是美国电子工业协会EIA制定的一种串行物理接口标准。
一般采用两线制传输,利用两线间的电压差进行数据传输。
RS485可以满足通信距离远,抗干扰能力大,传输速率高的要求。
通过RS485总线连接的智能设备可以形成网络拓扑,满足了网络信息化的需要。
一台主机可以同时控制多台从机,这种一对多的主从通信方式极大的提高了通信的效率,也节省了通信本钱。
RS485通信的特点如下:
〔1〕逻辑“1〞以两线间的电压差为+(2~6)V表示;逻辑“0〞以两线间的电压差为-(2~6)V表示,接口信号电平与TTL电平兼容。
[2]
〔2〕RS485最大的通信距离约为1200m,最大传输速率为10Mbps,如果需传输更长的距离,需要加485通信中继器。
[2]
〔3〕RS485接口抗干扰性能好,由于采用平衡驱动器和差分接收器的组合,使得它的抗共模干扰能力增强。
〔4〕RS485仅仅规定了接受端和发送端的电气特性,它对数据协议未做规定,因此在通信方案中的协议要另行设计,但必须满足RS485的物理传输要求。
〔5〕可以采用两线制,半双工通信方式,信息可以双向传输,但不能同时进行数据的收发。
也可以采用四线制,全双工通信方式,这样就可以实现同时收发数据。
RS485一般采用两线制,主从半双工通信,手拉手串联接线方式。
连接图如下所示:
图1:
RS485连接图
如图1所示,采用手拉手接线方式,可以在总线上挂接一个主站和多个从站,实现一站对多站的通信方式。
在实际应用中,实现RS485电平转换的有多种芯片,最为典型的为MAX485芯片,本设计也将采用MAX485芯片实现RS485的发送与接收过程,具体实现见本文第3章节。
1.2.单片机的选型
单片机是一种集成电路芯片,是采用超大规模集成电路技术把具有数据处理能力的CPU、RAM、ROM、多种I/O、定时计数器和终端系统等功能集成到一块硅片上所构成的小型计算机系统。
单片机具有多种通信接口,可以方便的实现通信。
本设计中采用STC89C52RC型号单片机,STC89C52RC单片机是由宏晶科技设计的8位增强型51单片机,拥有8KB的FLASH程序存储区,512byte的RAM,1个UART接口,3个定时/计数器,4个8bit双向I/O口。
对于本次设计,此型号单片机可以满足要求。
1.3.通信协议简介
通信协议是指通信双方完成数据通信传输所必须遵循的规那么和约定。
协议定义了数据单元的格式、信息发送和接收的时序等,从而确保网络中数据顺利地传送到正确的地方。
通信协议相当于是通信双方共同的语言,是通信过程中不可或缺的一局部。
由于RS485属于物理层的接口标准,它没有规定任何数据协议,本次设计的通信协议在物理层上要符合RS485的传输要求,遵从半双工、主从通信的规那么。
Modbus作为一个问答式通信协议,是全球第一个真正用于工业现场的总线协议,它具有如下特点[1]:
〔1〕作为一项标准、开放的协议,用户可以免费地使用,不会侵犯知识产权。
〔2〕支持多种电气接口〔如RS485〕,并且还能在各种介质上传送〔如双绞线、光纤、无线等〕。
〔3〕帧格式简单、紧凑,协议内容通俗易懂,用户可以很容易的使用。
通过以上特点可以看出,Modbus能够适应RS485的传输要求,所以本次设计的通信协议是在Modbus的根底上,进行了适当的改变所完成的。
1.4.研究内容和意义
本文将依次介绍RS485和基于Modbus所设计的通信协议,然后提出具体系统设计方案,包括系统电路图和程序设计流程图,最终实现一套小型主从式的一点对多点远程智能控制方案。
2.通信协议设计
2.1.Modbus协议
2.1.1.Modbus介绍
Modbus是一种串行通信协议,它是由Modicon在1979年创造的,是全球第一个真正用于工业现场的总线协议,Modbus协议如今交由分布式自动化接口组织进行管理,为Modbus今后的开展奠定了根底。
Modbus是应用于电子控制器上的一种通用协议。
通过此协议,网络上的控制器和其它各种智能设备之间就可以实现通信,它逐渐成为了一种通用工业标准。
通过该协议,不同厂商生产的控制设备可以连成一个网络,进行集中监控。
Modbus支持多种传输网络,它所支持的网络包括串行链路和标准以太网等。
Modbus协议的标准连接方式为串行链路连接方式,多数Modbus设备通过串口RS485两线制接口进行通信。
Modbus串行链路协议是一个主/从协议,可以实现由一个主站和多个子站进行通信的功能。
它是OSI模型第二层上的链路层传输协议,串行链路上的客户机由主节点提供,效劳器由从节点提供。
在同一时刻,只有一个主节点连接于总线,一个或多个子节点(最大编号为247)连接于同一个串行总线。
Modbus通信总是由主节点发起,子节点在没有收到来自主节点的请求时,从不会发送数据,子节点之间从不会互相通信。
主节点在同一时刻只会发起一个Modbus事务处理。
请求/应答过程如图1所示:
图2:
Modbus请求/应答过程图[1]
2.1.2.Modbus帧格式
对于Modbus串行链路存在两种传输模式,ModbusRTU模式和ModbusASCII模式。
ModbusRTU模式是一种采用二进制表示数据的方式,ModbusASCII模式是一种人类可读的、采用ASCII码值表示数据的方式。
RTU格式采用循环冗余校验的校验方式,而ASCII格式采用纵向冗余校验的校验方式。
配置为RTU模式的节点和配置为ASCII模式的节点不可以互相通信。
(1)ModbusRTU模式
表1:
ModbusRTU模式
子节点地址
功能码
数据
CRC〔循环冗余〕校验
1字节
1字节
0到252字节
2字节〔CRC低|CRC高〕
注:
报文帧由时长至少为3.5个字节时间的空闲间隔区分,RTU模式帧最大尺寸为256字节。
CRC的计算:
初始对一个16位存放器预装全1,每个8位字节与存放器中的值相异或,然后结果向最低有效位(LSB)方向移动1位,而在最高有效位(MSB)上填充零。
然后提取并检查LSB:
如果LSB为1,那么存放器中的值与一个固定的预设值相异或;如果LSB为0,那么不进行任何操作,这个过程将重复直到执行完8次移位。
完成每个字节的最后一次移位及相关操作后,下一个8位字节与存放器的当前值相异或,然后又同上面描述过的一样重复8次。
当所有报文中的字节都运算之后得到的最终值,就是CRC的值。
〔2〕ModbusASCII模式
表2:
ModbusASCII模式
起始
地址
功能码
数据
LRC〔纵向冗余〕
结束
:
字符
2字符
2字符
0到2*252字符
2字符
CR,LF
注:
ModbusASCII帧的最大尺寸为513个字符。
LRC的计算:
对一帧报文中的所有的连续8位字节相加,忽略任何进位,然后求出其二进制补码。
计算过程不包括起始“冒号〞和结尾CR,LF字符。
在ASCII模式,LRC的结果被ASCII编码为两个字节并放置于ASCII模式报文帧的结尾,CR和LF之前。
2.2.基于Modbus的协议设计
2.2.1.传输规那么设计
根据本课题的要求,通信协议设计在Modbus的根底上做了如下的延伸和改变:
(1)取消了播送功能。
(2)功能码做了适当改变,采用自定义的功能码。
(3)校验方式采用简单加校验。
(4)对于命令帧,加校验从地址码开始算起。
(5)对于数据帧,加校验从数据起始字节开始算起。
(6)帧起始和结束由空闲3.5个字节来区分。
(7)对于数据传输时,为了便于屏幕显示,直接发送ASCII格式的字符。
(8)子站收到异常命令,将不做响应,主站会以超时处理。
(9)字节发送是从LSB开始发送,8位数据位,1位停止位,无校验位。
主站状态图如下所示:
图3:
主站状态图
如上图3所示,主站是主动发起通信的一方,开机启动初始化后进入空闲状态,只有当按下功能键后才会进行相应的动作或者启动通信;当主站主动发起通信请求后,将启动响应超时计时,并进入等待应答状态;在等待应答状态下,只有接收到期望子节点应答后才会进入应答处理,否那么将以超时出错处理;当应答处理结束或者超时出错处理结束后,主站又将恢复到空闲状态。
子站状态图如下所示:
图4:
子站状态图
如上图4所示,子站开机启动初始化后进入空闲状态,子站从不主动发送数据,只有在收到主节点的通信请求后,才对请求进行检查,对检查正确的数据帧才会进行处理和应答,否那么将以格式化错误进行处理,不做任何响应,并且返回至空闲状态。
2.2.2.设置单点命令
功能码:
0x06
主站功能:
命令
主站所发送的帧格式如下表所示:
表3:
设置单点命令帧
子站地址
功能码
单点命令
加校验
1字节
0x06
1字节
1字节
子站功能:
命令确认
子站所发送的帧格式如下表所示:
表4:
单点命令确认帧
子站地址
功能码
单点命令
加校验
1字节
0x06
1字节
1字节
此功能由主站发送LED灯控制命令至子站,并等待子站回发命令确认,子站收到命令后,对命令进行校验,校验成功后执行操作并发送命令确认至主站。
单点命令:
用来控制子站LED灯的亮灭,低四个比特位〔0~1〕为0表示熄灭,为1表示点亮;高四个比特位〔1~8〕用来标识子站LED位置。
2.2.3.设置数据命令
功能码:
0x01
主站功能:
命令
主站所发送的帧格式如下表所示:
表5:
设置数据命令帧
子站地址
功能码
数据长度
数据
加校验
1字节
0x01
1字节
0到15字节
1字节
子站功能:
命令确认
子站所发送的帧格式如下表所示:
表6:
数据命令确认帧
子站地址
功能码
数据长度
加校验
1字节
0x01
1字节
1字节
此功能由主站发送显示数据至子站,并等待子站的命令确认,子站收到数据后进行校验,校验成功将在LCD上显示数据,并发送命令确认至主站。
命令和命令确认帧所传输的数据为ASCII格式的字符数据。
2.2.4.召唤状态信息
功能码:
0x03
主站功能:
召唤
主站所发送的帧格式如下表所示:
表7:
召唤状态信息帧
子站地址
功能码
状态数目
加校验
1字节
0x03
0x08
1字节
子站功能:
响应
子站所发送的帧格式如下表所示:
表8:
状态信息响应帧
子站地址
功能码
状态数目
状态信息
加校验
1字节
0x03
1字节
8字节
1字节
此功能由主站发送召唤状态信息的命令至子站,并等待子站的数据响应,子站收到命令后进行校验,校验成功后搜集子站状态信息并回发响应数据至主站。
状态信息:
8个字节分别表示子站8个LED的状态信息,每个字节的低四个比特位〔0~1〕为0表示LED状态为熄灭,为1表示LED状态为点亮;高四个比特位〔1~8〕用来标识子站LED位置。
2.2.5.召唤数据信息
功能码:
0x02
主站功能:
召唤
主站所发送的帧格式如下表所示:
表9:
召唤数据信息帧
子站地址
功能码
数据类型
加校验
1字节
0x02
0x00
1字节
子站功能:
响应
子站所发送的帧格式如下表所示:
表10:
数据信息响应帧
子站地址
功能码
数据长度
数据
加校验
1字节
0x02
1字节
0到15字节
1字节
此功能由主站发送召唤数据信息,并等待子站的数据响应,子站收到命令后进行校验,校验成功后收集数据并回发数据信息响应至主站,主站收到响应后在LCD上显示。
子站响应帧所传输的数据为ASCII格式的字符数据。
3.系统设计
3.1.系统功能
1.主站:
主站是远控中心,通过RS485总线与多个子站相连,通过设置子站的地址,可以与指定地址的子站进行通信,实现远方控制。
〔1〕主站设置通信地址功能,通过设置子站地址确定要通信的子站。
〔2〕主站召唤LED状态功能,发送召唤单点信息命令。
〔3〕主站召唤远方数据功能,发送召唤数据信息命令。
〔4〕主站设置单点命令控制子站LED灯。
〔5〕主站设置远方数据命令传输数据至子站的LCD显示。
〔6〕主站LCD显示功能,用于显示子站LED灯状态信息和数据信息。
〔7〕主站键盘输入功能,用于控制和数据输入。
〔8〕主站RS485收发功能,用于与子站通信。
2.子站:
子站是受控站,可以由主站控制,当然也拥有本地控制功能,同一时刻只能允许其中一种控制方式,以防止远方命令与本地命令的冲突。
〔1〕子站本地控制功能,可以手动配置子站地址。
〔2〕子站本地控制LED灯。
〔3〕子站本地控制LCD上显示的数据。
〔4〕子站接收主站的召唤命令,并响应数据。
〔5〕子站接收主站的控制命令,解析命令、完成操作后并返回命令确认。
〔6〕子站LCD显示功能,用于显示LED灯状态和数据信息。
〔7〕子站键盘输入功能,用于控制和数据输入。
〔8〕子站LED灯模块,此模块为受控模块。
〔9〕子站RS485收发功能,用于与主站通信。
3.2.系统硬件设计
硬件电路由以下模块组成:
RS485收发模块、LCD液晶模块、键盘输入模块〔对于子站还有LED模块〕。
系统硬件框图如下所示:
图5:
系统硬件框图
3.2.1.RS485收发模块
本设计采用Maxim设计生产的MAX485芯片来实现RS485收发功能。
MAX485是一款低功耗的RS485收发器,可以实现最高2.5Mbps的传输速率。
其内部结构图如下所示:
图6:
MAX485芯片内部结构图[6]
MAX485与STC89C52RC芯片的连接电路图如下所示:
图7:
MAX485与STC89C52RC的连接电路图
3.2.2.LCD液晶模块
液晶模块采用的是1602LCD液晶模块,LCD按照显示内容划分,可以分为段式LCD、字符式LCD和点阵式LCD三种。
其中字符式LCD以其廉价,显示丰富、美观,使用方便等特点,日渐成为LED数码管的理想替代品。
本设计采用字符式1602LCD显示模块。
字符式LCD专门用于显示数字、字母、图形符号以及少量自定义符号。
这类显示器集成了LCD控制器、点阵驱动器、字符存储器在一块板子上,再与液晶屏一起组成一个显示模块。
“LCD1602〞其中的“16〞代表每行可以显示16字,“02〞代表可以显示2行。
1602型LCD的主要技术参数表如下所示:
表11:
LCD1602技术参数
显示容量
16*2个字符
芯片工作电压
4.5V~5.5V
工作电源
2.0mA〔5.0V〕
模块最正确工作电压
5.0V
字符尺寸
2.95*4.35mm
LCD1602模块的实物图如下所示:
图8:
LCD1602实物图
LCD1602与STC89C52RC的连接图如下所示:
图9:
LCD1602模块与STC89C52RC的连接图
3.2.3.键盘输入模块
本设计的输入模块采用4*4矩阵键盘,由4个I/O线作为行线,4个I/O线作为列线组成的键盘。
当输入按键比拟多的情况下,矩阵键盘可以有效提高单片机I/O口的利用率。
其连接原理图如下所示:
图10:
矩阵键盘
矩阵键盘与51单片机的P1口相连接,通过扫描确定按键的键值。
本设计采用了查表法扫描方式,对P1口先置0xf0,然后读取扫描值,再对P1口置0x0f,然后读取扫描值,两次扫描值相位或后得到键编码值,通过查表后得到键值。
3.2.4.子站的LED灯模块
子站拥有自己的LED灯模块,此模块包括8个LED发光二极管,是受控模块,受子站和主站的命令控制亮灭。
LED发光二极管采用共阳极连接,当51单片机的控制I/O口置低电平时,LED灯亮,否那么,LED灯熄灭。
LED灯模块电路图如下所示:
图11:
LED灯模块
3.2.5.实际电路图
系统的实际电路图设计如下所示:
图12:
系统实际电路图
3.3.系统软件设计
3.3.1.主站程序设计
主站程序包括主函数循环、响应帧接收模块、数据/命令帧发送模块、协议解析模块、数字按键控制模块。
〔1〕主函数工作流程
图13:
主站main函数流程图
主站的main函数流程图如图13所示,主站在上电初始化以后,会循环检查是否有完整的接收帧,是否有按键按下,是否有发送帧。
采用中断接收数据的方式,假设检测到一帧接收完毕后,帧接收标志位置位,主函数会进行数据解析并在LCD上显示;假设检测到有按键按下,会按照按键的特定功能进行特定的处理,比方设置地址功能、发送命令功能或者写入数据功能;假设待发送的数据写入完成会置位数据写入完成标志,主函数检测到以后进行数据帧的打包和发送。
〔2〕响应帧接收模块流程
图14:
主站响应帧接收流程图
主站响应帧接收流程如图14所示,通过4ms定时器的中断来判断是否接收完一帧数据。
根据协议,以超过3.5个空闲字符时间来区分帧起始和帧结束,本设计定义为4ms时间。
〔3〕命令/数据帧发送模块流程
图15:
主站命令/数据帧发送流程图
命令/数据帧通过按键功能发送,当发送键按下后,主控芯片启动发送流程,如图15所示,帧发送开始的同时启动Timer2定时器,用于子站响应超时计时,当160ms内未收到子站的响应或者确认帧,那么主站以超时处理。
〔4〕帧解析模块流程
图16:
主站帧解析流程图
主站的帧解析流程如图16所示,当接收完一帧数据后,启动解析过程,首先判断地址是否与主站通信的子站地址相匹配,然后判断功能码,针对不同的功能码,将进行不同的帧解析处理。
〔5〕数字按键控制模块流程
图17:
主站数字按键控制流程图
按键控制流程如图17所示,按键分为数字按键和功能按键,功能按键包括地址输入键,命令输入键,以及数据输入键和发送键,数字按键能够输入从0~9的数字。
3.3.2.子站程序设计
子站程序模块包括主函数循环、按键功能模块、数据帧接收模块、解析与应答模块。
〔1〕主函数流程
图18:
子站main函数流程图
子站main函数流程如图18所示,子站上电初始化后,循环扫描数据帧和按键动作,当接收一帧数据时,将对数据进行处理;当有按键动作时,对动作进行处理。
子站的通信功能模块中,子站从来都不主动发送数据,只有在收到主站的召唤或者命令后对其进行响应和应答,而响应和应答过程在数据解析模块中实现。
子站的本地控制功能模块中,通过按键功能控制LED灯的亮灭,同时也有数据输入功能和地址配置功能。
〔2〕按键功能模块流程
图19:
子站按键功能流程图
子站的按键功能如图19所示,功能按键包括地址输入键、数据输入键和数据确认键,而数字键可以输入0~9的数字。
〔3〕数据帧接收模块流程
图20:
子站帧接收流程图
子站的帧接收流程如图20所示,与主站的接收过程一致,此处不再赘述。
〔4〕帧解析与应答模块流程
图21:
子站帧解析与应答流程图
子站的帧解析与应答流程如图21所示,子站从不主动发送数据,它只对主站发来的命令或者数据进行确认或者响应。
解析过程首先对地址进行验证匹配,地址匹配后才进行下面的解析,下一步针对不同的功能码进行不同向主站发送不同确实认帧或者响应帧,然后根据命令或者数据进行不同的控制操作。
3.4.编译和调试
本设计编译程序使用的是Keiluvision3,编译主站和子站的界面如下所示:
图22:
主站编译结果
图23:
子站编译结果
串口调试程序采用的是串口大师1.1版本,主站和子站的调试过程类似,本文只举例介绍子站的调试过程。
下面用串口大师1.1程序模拟主站发送召唤状态信息指令到子站,其他命令的调试过程均与此类似,本文将不再赘述。
首先把子站程序生成的hex文件下载到子站板上,通过子站的控制系统设置子站地址为11。
图24:
子站启动界面
图25:
设置地址
地址设置完成后通过子站的控制系统写入LCD显示数据1156,并置LED灯1号和4号亮。
图26:
显示界面
接下来就要模拟通信,利用串口大师发送针对子站地址的命令,发送0x0b,0x03,0x08,0x16,将会接收子站的响应信息。
调试
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 单片机 实现 RS485 通信 毕业论文