基于AVR单片机的485通信系统设计.docx

上传人:b****3 文档编号:4231505 上传时间:2022-11-28 格式:DOCX 页数:23 大小:170.18KB
下载 相关 举报
基于AVR单片机的485通信系统设计.docx_第1页
第1页 / 共23页
基于AVR单片机的485通信系统设计.docx_第2页
第2页 / 共23页
基于AVR单片机的485通信系统设计.docx_第3页
第3页 / 共23页
基于AVR单片机的485通信系统设计.docx_第4页
第4页 / 共23页
基于AVR单片机的485通信系统设计.docx_第5页
第5页 / 共23页
点击查看更多>>
下载资源
资源描述

基于AVR单片机的485通信系统设计.docx

《基于AVR单片机的485通信系统设计.docx》由会员分享,可在线阅读,更多相关《基于AVR单片机的485通信系统设计.docx(23页珍藏版)》请在冰豆网上搜索。

基于AVR单片机的485通信系统设计.docx

基于AVR单片机的485通信系统设计

 

基于AVR单片机的485通信系统设计

摘要:

现在的社会是一个数字化的时代,多机通信系统的应用已经广泛渗透到人们生活的方方面面,在科学研究的军事技术领域、文化艺术领域、工程设计领域都有它的应用。

通过通讯方式交换信息、资源共享已经成为了一种必然的趋势。

为了使系统中的多个计算机之间的数据通信都可以实现,它们必须根据实际需要并且按照某种形式的网络来进行,工程中经常用的是使一个完整的主站发送,然后正确的从多机通信模式接收的信号,同时要防止总线上的信号冲突。

本文讨论了用ATmega16AVR单片机来控制RS485串行接口与主机系统进行数据交换,ATmega16为核心芯片,它与MAX485转换器连接实现远距离传输,同时ATmega16作为主控芯片控制按键电路与数据显示电路,系统主要由主机控制模块、通信模块、数据输入模块、数据显示模块和模数转换模块五个部分组成,实现了利用RS-485实现单片机通信,通过键盘实现从机的选择、发送数据,从机显示发送的数据。

该系统是一个单片机发送另一个单片机接收的单向、平衡传输标准,具有强抗干扰能力,易于使用,易于维护,操作简单等优点,在现实生活中也拥有广泛的应用。

关键字:

多机通信、RS485接口、AVR单片机

Designof485CommunicationSystembasedon

AVRMicro-controller

Abstract:

Today'ssocietyisadigitalera,theapplicationofmuch-machinecommunicationsystemshavebeenwidelyseepedintothescientificresearchinallfields,suchas:

militarytechnology,cultureandthearts,engineeringandpeople'sdailylife.Bymeansofcommunicationtoexchangeinformation,shareresourceshasbecomeaninevitabletrend.Tomakethesystemindatacommunicationbetweenmultiplecomputeraremet,theymustbecomposedaccordingtotheactualneedssomeformofnetworkengineeringisoftenusedtomakeacompletemastersendsandreceivessignalsfromthemuch-machinecommunicationmode,correctandpreventthesignalcollisiononthebusisguaranteed;ThisarticlediscussestheuseATmega16AVRmicro-controllertocontrolRS485serialinterfacewiththehostsystemfordataexchange,ATmega16corechip,whichisconnectedmakeremotedistancetransmissiontruthandMAX485converters,whileATmega16asthemainchipcircuitcontrolbuttonsanddatadisplaycircuit,systemismainlycontrolledbythehostmodule,communicationmodule,datainputmodule,datadisplaycomponentmodules,andanalog-digitalconversionmodulefiveparts,wecanusetheRS-485communicationbetweenSCM,realizedthroughthekeyboardtoselectthemachinefromsendingdata,thehostdisplaysendingdata.Thesystemisasingle-chipmicro-controllerreceivingsendinganotherway,balancedtransmissionstandard,hasastronganti-jammingcapability、iseasytouse、easytomaintain、operateandsimple,inreallife,alsohasawiderangeofapplications.

Keywords:

much-machinecommunication、RS485protocol、AVRmicro-controller

基于AVR单片机的485通信系统设计

1引言

在一个基于单片机的数据采集和实时控制系统的微控制器系统中,通过计算机接口的RS232接口与计算机之间命令和数据传送,我们可以检测和控制生产现场。

由于计算机发送的RS-232的距离很短,不超过30m,所以如果需要进行远距离的数据传输和控制时,这个时候我们就可以选择使用MAX485的接口转换芯片使RS-232协议转换为RS-485协议,进行远距离传输。

RS-232不能在多点通信系统中使用,而只能在通信系统之间的点对点中使用,并且这些限制所有使用RS-232的系统都必须满足。

而RS-485的通信协议通常是半双工的、双向的,该协议的特别之处在于,允许不止一个驱动器和接收器同时连接在总线上,其中每个驱动器都可脱离总线。

2系统总体方案确定

2.1设计方案选择

方案一:

基于AVR单片机的485通信系统,使用的电路是:

利用端口转发形式的网络接口电路并且同时使用总线型的系统网络拓扑结构等进行单片机通信系统的设计。

RS485构成的多机通信系统采用主从配置;主机控制从机,从机不采取从微控制器主动发送命令或数据,全部由主机MCU控制;并在多机系统中,只有一个主机,从机之间的各站不能彼此通信,如果有需要被交换的信息的话,也必须由主机转发。

方案二:

基于单片机的485通信系统的设计,我们利用的是单片机的串行通讯端口,以完成两个终端之间相互通信的功能。

经比较:

方案一的系统比较容易扩展且提高系统的稳定性,不但能够实现主机和从机这两者之间的通信,而且能实现从机和从机间的通信;与方案一比较,方案二拥有较强的抗干扰能力、同时通信距离较远,而且也可以完成主机与从机的通信,但不能实现从机之间的通信。

所以采用方案一。

2.2设计的内容以及要求

2.2.1设计的内容

设计一个基于AVR单片机的485通信系统

2.2.2设计的要求

1.使用键盘输入数据并且用数码管显示要传输的数据;

2.AVR单片机串口与RS-485总线连接,从而将数据发送给从机,然后再显示出来。

图2.1系统总体方案的设计图

 

3系统的组成及其工作的原理

3.1系统的组成

首先,系统主要由数据输入模块、模数转换模块、主机控制模块和数据显示模块以及通信模块这五个模块组成。

系统总体框图如下图所示:

图3.1系统框图

在这个系统中,主要的核心部分是通信主机,它的功能主要是完成对数据的处理以及运算等;而数据的输入模块则主要是完成对数据的输入,并且所有人机交换的数据都是从这一模块中输入的;接下来是数据的显示模块,这一模块主要是完成通信从机的数据显示;而通信模块呢就是使数据的接受和发送得以完成,以实现数据的远距离传输。

3.2工作原理

基于AVR单片机的485通信系统设计的原理是:

利用数模转换模块或者键盘输入模块通过P3口或者P1口将数据输入到ATmega16单片机主机里,ATmega16单片机主机利用MAX485芯片将数据传输到AVR单片机从机中,然后显示出来。

4硬件电路方案设计

4.1系统硬件的介绍

本设计硬件开发平台采用ProtelDXP2004。

其中文版有时也叫altiumdesignersummer。

ProtelDXP2004不仅具有Protel旧版所具有的功能,而且Protel软件的最初的设计领域也被延伸了,它不仅功能更加完善了、界面更加灵活了,而且在仿真及PLD电路设计等方面均具有重大的改进。

而且它拥有非常灵活的用户界面,可以使用户清楚明了的知道每个菜单的功能。

所以新的软件不会给使用者们带来不便,而且同时PCB制作门槛也被降低了,只要经过一段时间的培训,一块合格的PCB板就一定不算是难事了。

4.2主机电路控制模块

图4.1主机电路控制模块

AVR单片机是一种增8位微控制器,同时它拥有增强内置的高速精简指令集,它是由ATMEL公司在1997年开发的。

AVR单片机不但应用在仪器仪表、通信设备、计算机外设以及工业实时控制等方面,而且在日常生活,如家用电器领域也有广泛应用。

随着AVR单片机的横空出世,彻底打破了旧的设计格局,不仅废除了机器周期,而且抛弃了以往只追求指令完备的做法;指令集中占大多数的单周期指令都是将内容丰富的操作数与操作码安排在一字之中,同时使用精简的指令集并且以字作为指令长度单位,它的取指周期很短,同时又能够提前取出指令以及能够完成流水作业这样的功能,因此它能够高速的执行指令。

当然这种速度上的升跃,并不是必然的,它是以高可靠性作为其后盾才得以实现的。

4.2.1ATmega16AVR单片机介绍

AVR单片机的计数器在它的内部,它是由电源上电启动的,当给系统复位引脚复位上电之后,我们就可以延迟MCU开始正式读取指令执行程序所用的时间这是使用AVR内部的RC看门狗定时器实现的。

而这种延时启动的特性,能使MCU才正式开始执行程序,当然这只有在系统电源以及外部电路都达到稳定以后才能实现,这不仅可以提高系统工作的可靠性,而且同时还可以减少外加的复位延时电路的使用。

 

AVR系列的单片机有不同的型号,在此我们选择了系列型号为16的同时片内容量为16KB的单片机为主芯片。

系统主芯片是本系统的核心芯片,因为系统的要求是:

芯片能够灵活的处理所传输的数据,而且要求性能稳定并且价格低廉,因此我们需要选择一个合适的芯片。

ATmega16是一种功耗很低的单片机。

因为它本省具有很高级的指令集并且拥有单时钟周期的指令执行时间,所以ATmega16单片机的可以达到很高的数据吞吐率,可以达到1MIPS/MHz,因此是解决系统在功耗与处理速度这两者间冲突的行之有效的方法。

因为ATmega16AVR的内核拥有32个通用工作寄存器,而且所有寄存器我们都可以直接与逻辑运算单元连接,所以我们就可以只用一条指令就可以在一个时钟周期内同时访问两个独立的寄存器。

ATmega16具有16K字节系统内部可编程Flash,32个通用的输入/输出口线以及32个通用工作寄存器和512字节EEPROM,支持片内编程与调试,具备JTAG接口,片内/外中断,三个具有比较模式的定时器/计数器,可编程串行USART,8路10位可编程增益可选差分输入级的AD转换器,一个SPI串行的端口,并且具有起始条件检测器的通用串行接口,同时还具备片内振荡可编程看门狗定时器以及六个可以通过软件选择的省电模式,这是非常厉害的。

同时ATmega16具有一系列并且很完整的编程以及系统开发的工具,它包含了:

C语言编译器、评估板和仿真器以及程序调试器/软件仿真器。

本芯片是用ATMEL存储器技术生产的,这个芯片具有高密度非易失性。

片内ISPFlash也可以有其他的编程方式,如我们能够选择运行于AVR内核之中的引导程序来完成编程。

也允许程序存储器通过ISP串行接口,或者也可以用通用编程器进行编程。

这款单片机在产品中得到了大量的使用。

本设计就用这款。

4.3数据显示模块

因为系统事实要求传输的简单的数据,所以采用数码管显示就可以满足指标要求。

我们通常所说LED显示器,一般是由七个发光二极管组成,所以我们也称它为七段数码管,其二极管排列形状如下图所示。

我们可以通过控制七个发光二极管中,哪些发光,哪些不发光,然后显示不同的字母、数字以及其他符号。

发光二极管在LED显示器有两种完全不同的接法,下面来介绍一下这两种接法:

(1)共阳极接法就是公共阳极是由发光二极管的所有阳极连接在一起组成的。

在用的时候,把公共阳极接上电源+5V。

这样,当在阴极端输入低电平时它的发光二极管就能够导通发亮了,而输入高电平是则不亮。

(2)而共阴极接法就是说它的公共阴极是由发光二极管的阴极连在一起而组成的。

在用的时候,把公共阴极接地,所以发光二极管就可以导通发亮了。

假如我们在阳极端输入高电平的时候,二极管就发光,而输入低电平时就不发光。

在此,我们采用的是八段共阴极数码管显示。

表3-1八段数码管的字型代码如下图:

4.4键盘输入模块

图4.2键盘输入模块

本次课题采用的是矩阵式键盘,它的突出优点是I/O端口的重复使用率很高,又可以循环操作,不但如此,而且在扫描键盘时占用CPU的时间很少,操作又比较灵活,矩阵键盘控制状态多,编写程序较方便,故此模块采用的是矩阵式键盘。

4.5通信电路模块

图4.3通信电路模块

MAX485接口芯片是由Maxim公司开发的一种RS485芯片。

RS-485是美国电气工业协会(EIA)制定的的多点通信标准,它可以进行多点间的通信而且采用的是利用平衡双绞线的传输线的标准。

同时它使用差分信号传输;最大传输距离可以达到120公里,而且它拥有低至±200MV的接收的灵敏度以及最大传输速率,高达2.5Mb/s。

因而,RS-485协议设置为高灵敏度,多点通信,远程等的设置协议。

MAX485芯片采用单一电源电压+5V供电,同时它的额定工作电流为300微安,而且它可以采用半双工通讯的方式,可以将TTL电平转换为RS-485电平。

MAX485芯片的结构和引脚都是很简单的,它的内部含有一个驱动器和一个接收器。

DI端为驱动器的输入端,而RO端为接收器的输出端,它与单片机相接时只要分别与单片机的TXD引脚以及RXD引脚相连就可以了,/RE端为接收的使能端,DE端为发送的使能端,由于MAX485工作状态是在半双工,因此我们仅仅需要使用一个信号就可以同时控制MAX485的接收和发送了。

因此我们要满足远距离通信的性能指标,在本模块采用MAX485芯片就可以了。

4.5.1RS-485协议 

RS232和RS485这两种通信协议是一种很有典范的串行通讯标准,虽然它们给予了阻抗和电压定义,但他们没有对软件协议进行定义。

RS485的特性包括一下几个方面:

(1)RS-485的电气特性:

假如有两条线他们之间的电压差为+(2-6)V时,表示一个逻辑“1”;两条线之间的电压差为-(2-6)V表示一个逻辑“0”。

如果接口信号的电平比RS-232的接口信号电平降低了,在这个时候芯片接口电路处于不容易被损坏的状态,而且它的电平和TTL电平兼容,这个时候我们就可以很容易地用TTL电路与其连接。

(2)RS485通讯距离高达1219M的,传输速率为10MB/秒,传输速率反比于距离传输,只有传输速率在100Kb/s的情况下,才能够实现最大通信距离,如果需要传送一个更大的距离,您需要添加485中继器。

RS-485总线可以支持在一般32个节点,如果使用一个专用芯片485则最多可以达到400个节点。

(3)RS485接口是由平衡驱动器和差分接收器组成的一个接口,抗共模干扰是比较强的,这就是说拥有良好的抗噪性能。

因为RS-485接口具有很好的抗噪声性能、远的传输距离以及多站能力等,这些优点就使它成为被首先选择的串行接口,由于RS485接口组成的半双工网络只需用二根连线就可以了,所以所有的RS485的接口均可以采用屏蔽双绞线进行传输。

4.6从机控制模块

4.6.1单片机最小系统

图4.4最小系统图

ATmega16单片机的最小系统主要包括电源电路、振荡电路和复位电路等。

图中的复位电路是由按键复位和上电复位这两部分组成的。

只要最小脉冲宽度低于复位低电平持续的时间时触发复位过程就被触发,就算此时没有时钟信号处于运行的状态。

而且当外加信号等于或大于复位门限电压时,这个时候延时周期就开始了。

延时结束后MCU就开始启动。

时钟电路是给通信主机提供正常工作时序不可或缺的部分是时钟电路,只有在同一个时序下主机才能完成正常的工作。

而主芯片的内部的振荡器是由一个反相放大器构成的,可以由它产生时钟。

时钟的产生通常有两种方式,即内部方式和外部方式。

上图给出的是内部方式。

5软件设计

5.1IARFORAVR软件的介绍

在所有AVR的编译器中,虽然编译效率最高的编译器是IARforAVR,可是每件事情都不会是十全十美的,所以相对来说IARforAVR的设置项也很多,如果我们使用不当就会出现很多没见过的问题。

下面来介绍一下需要注意的几个问题。

(1)关于堆栈的设置问题

首先,关于GCC和IAR分配堆栈的方法是不一样的,IAR是先分配堆栈空间,这就是说我们定义了一个全局数组把它作为堆栈空间,而堆栈的初始化则是堆栈空间的最高地址;而GCC就不需要预先分配堆栈,它是把RAM所余下的空间自动设置为堆栈空间,RAM最高地址为堆栈初始。

IARForSAM8默认的堆栈是32字节,不够用的话,就要增大,但是增大到多少比较合适呢?

首先呢,把你的程序编译,这样就可以看到程序到底用了多大本身的RAM。

然后呢我们需要再查看芯片的Datasheet,这样我们就可以知道芯片总共有多大的RAM了。

 

 

举个例子,好了,现在我们就能够知道还余下多少RAM了,就是208-142=66(Byte)。

在前面我们所说的IAR的CSTACK,NEAR_HEAP和RSTACK都是最初分配好的,占用的存储空间是不变的,就是说等于设定了一个全局数组,而IAR的堆栈策略与GCC的堆栈策略是完全不同的,GCC的堆栈大小并不是早先就已经分配好了的,它是把SRAM里面所余下的空间当成堆栈空间。

如果是GCC,那么编译器就会自动把余下的RAM设置为数据的堆栈空间。

(2)关于代码的优化

当我们在使用IAR开发C语言程序的时候,开发环境就会给出一个优化的选项,总共有4档,分别是None、Low、Medium以及High档。

但是我们在使用时应该知道,不是在所有情况下都能够进行优化,在某些时候优化后就不能正常运行了,比如说在没有优化时运行的代码。

(3)关于输入输出端口的位操作

和KEIL差不多,在IARForAVR中我们也可以选择直接进行位操作,就这一方面来说它要比ICCAVR好的多。

(4)关于内存模型

在AVR_IARC/C++编译器中,我们可以选择一种特定的存储模式,如memorymodel(记忆模式),进行设置一些访问方法为默认的存储器访问方法。

总共有三种可以使用的存储模式,分别为Tiny,Small和Large模式。

哪种模式可以使用需要看你的处理器选项。

假如你不指定一种存储模式,编译器就会在设定v0、v1、v2、v3、v5选项下默认为Tiny,并且-v4和-v6选项下的访问方法为Small。

5.2通信协议

5.2.1串行通信协议RS232和RS485的比较

RS-232与RS-485标准只对接口的电气特性做出规定,而不涉及接插件、电缆或者协议等,并且在这个基础上我们可以建立自己的高层通信协议。

RS-232与RS-485都是典型的串行数据接口标准,都是由电子工业协会(EIA)制订并发布的,RS-232在1962年发布,EIA又于1983年在RS-232基础上升级了RS-485通信协议的标准,并且添加了多点以及双向通信的能力,就是说允许不止一个发送器同时连接在一条总线上,并且能够同时增加发送器的驱动能力以及改善冲突的保护特性。

5.2.2通信过程   

一次完整的通信过程可以分为3个部分:

主机处理输入数据、通信以及从机显示输入的数据。

第一部分,主机判断输入的键值,并且将其进行打包处理;第二部分是通信阶段,即是把数值经过打包处理好的发送给寄存器,然后再从寄存器发送给接收机;第三部分是接收机显示部分,把打包好的数据处理之后再还原成原来的数据,然后通过查表以数码管的形式显示出来;此时接收机清除接收缓冲区及相关变量,准备与主机下次通信。

任何一次完整的通信过程都是由发送机即主机方发起的,从机在无键值输入的情况下处于接收状态。

5.3主机程序

5.3.1主程序总流程图

多机通信的软件设计主要分为:

系统初始化、确定主从机的关系、主机发送数据以及从机接收数据这四大部分;而且每个功能模块都是通信系统不可或缺的,只有这些都具有主机才能够很好的对外的部信息进行采集、分析以及解决等。

下面来介绍一下这几个部分。

 

1.系统初始化:

系统初始化包括串口初始化以及显示模块初始化。

主要实现串口中断的开启、显示模块初始化、定时器的选择以及其工作方式的选择、总中断的开启以及串行口工作方式的选择等功能。

2.有键按下:

通信双方在进行通信的时候需要确定双方的主从关系,然后相应的键盘按下,则会显示所传输的数据。

 

3.键值处理:

在这一部分,通信主机会发送信号给通信从机,并且通信主机发送的数据经过处理后再传输给从机。

     

4.发送及显示数据:

需要发送的数据需要经过处理之后才能发送给从机。

 

5.关闭显示:

从机显示完数据之后我们就可以关闭显示,这时就不需要再传输数据和显示数据。

 

6.从机接收数据:

这一部分功能比较容易,只要能够完成从机不断的接收主机发送的数据的就可以了。

图5.1主程序流程图

 

5.3.2键盘输入的子程序

在初始化之后程序需要不断检测矩阵键盘的状况,当检测到有键按下时,在消抖之后就可以开始处理输入的数据了。

确定是哪个按键按下之后,我们就可以用相对来说方便一点传输的16进制的数值来替换它了。

5.3.3用数码管显示子程序

 

图5.2数码管显示子程序的流程图

5.4从机程序

5.4.1从机总流程图

图5.3从机主流程图

5.4.2接收并且显示主程序

在从机接收到主机传来的信息以后,经过处理然后在从机的数码管上显示出来。

图5.4接收部分流程图

6实验调试和测试结果与分析

先利用Altium进行仿真,看能否满足要求,若满足要求后,再将写好的主机程序和从机程序分别烧录进两个单片机里,主从两个单片机的一个引脚控制RS485使能端,然后再接上数据输入输出两根导线,打开电源之后,单片机的数码管显示模块处于显示的状态;再将采集电压的开关闭合,然后按下其中的任意一个键时从机的数码管显示模块显示键盘输入的键值,但是在改变滑动电阻器的阻值时,与从机相连的数码管显示模块的数值没有改变,证明串行通信成功。

然后进行几次反复的按键输入,我们就可以确认单片机是能够用半双工的方式来进行串行通信的。

总结

此次的设计的内容是是

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

当前位置:首页 > IT计算机 > 互联网

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

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