AVR单片机是1997年由ATMEL公司研发出的增强型内置Flash的RISC(Reduced Instruction Set CPU) 精简指令集高速8位单片机。可以广泛应用于计算机外部设备、工业实时控制、仪器仪表、通讯设备、家用电器等各个领域。本文为大家介绍基于AVR单片机的工业电子设计方案,包括机器人,智能小车等。
基于AVR单片机的灭火机器人设计与实现
1 引言
机器人竞赛是近年来迅速开展起来的一种对抗活动,它涉及人工智能、机械、电子、传感器、精密机械等诸多领域。通过竞赛可以培养学生的创新意识、动手能力、团队写作能力等。其中灭火比赛是开展范围最广、影响最大的机器人竞赛项目之一。
比赛规则为模仿生活中消防员灭火,机器人从H点出发,在四个房间内寻找任意摆放的蜡烛,并且设法将其灭掉。比赛场地的墙壁高33cm,材质为木板,颜色为黑色。尺寸如图1所示。对于比赛,得的分越低成绩越好。另外根据选择的模式不同,计分时要乘上相应的系数。
2 系统硬件设计
2.1 系统总体设计
系统以ATmega32单片机为核心,它是一种基于增强RISC结构的、低功耗的8位单片机。其特点为:①片内具有32K字节的可编程 Flash;2K字节的片内SRAM数据存储器;1024个字节片内在线可编程EEPROM数据存储器。②片内含JTAG接口。③外围接口。两个带有分别独立、可设置预分频器的8位定时器/计数器;一个16位定时器/计数器;四个通道的PWM输出;8路10位ADC;32个可编程的I/O口。④低功耗,最高工作频率为16MHz。
根据灭火比赛的规则要求,配以碰撞传感器、灰度传感器、火焰传感器和红外传感器。通过两路PWM控制两只电机以驱动灭火机器人,另外一路灭火电机由I/O口通过光电耦合器直接驱动。
2.2 系统电源部分
系统采用单电源供电电路时比较简单,但是考虑到电动机起动瞬间电流很大,会造成电源电压不稳,影响单片机和输入电路工作的稳定性和可靠性,因此采用双电源供电方案。将电机电源和单片机电源完全隔离。单片机以及传感器电路使用8V供电,电动机使用12V供电。提高电动机的供电电压,可以提高机器人的运行速度,从而可以提高灭火的成绩。
2.3 电机驱动部分
机器人需要控制在一个合适的速度行驶,在灭火的过程中既要以较快的速度找到火源,又要防止因为碰撞而影响比赛的成绩。小车的速度是由两只直流电机控制。 L298驱动芯片是性能优越的小型直流电机驱动芯片之一。它可被用来驱动两个直流电机或者是双极性步进电机。在6—46V的电压下,可以提供2A的额定电流。L298还有过热自动关断功能,并有反馈电流检测功能。为保证L298正常工作,建议加装片外续流二极管。由ATmega32单片机直接输出两路 PWM驱动L298N。改变PWM调制脉冲占空比,可以实现精确调速。脉冲频率对电机转速有影响,脉冲频率高连续性好,但带负载能力差;脉冲频率低则反之。通过PD2和PD3两根I/O口线来控制电机的转动方向。
2.4 传感器部分
灭火比赛需要机器人在尽量不碰撞墙壁的基础上尽可能快地找到蜡烛并将火灭掉。在完成任务的过程中首先需要不碰撞墙壁,然后需要判断前方是否有火焰。在找到火焰后需要判断蜡烛旁边的白线。如果碰撞墙壁的话,需要机器人能检测出来并进行处理,不然就会发生机器人卡死的情况,那就不能完成任何任务。
图5所示为红外传感器的发射和接收电路。红外射管采用脉宽调制(PWM)驱动,工作在38KHz的频率下,减少发射电路的功耗。脉冲发生器由 NE555构成,通过外部的电位器R1来调节占空比和脉冲频率,由于红外肉眼不可见,所以电路中加入一个LED指示灯来指示红外发射管是否在工作。该 LED和红外发射管串联,当红外发射管正常工作时,该LED灯会点亮。接收电路采用西门子公司生产的红外专用集成接收芯片SFH506-38,它只有接收到38KHZ的脉冲波时才会作用。它内部集成了选项、滤波、放大电路,对外只有3个引脚:①脚为信号输出端;②脚为接地端;③脚为电源端,所以使用起来非常方便,效果比较理想。
灰度传感器是模拟传感器,有一只发光二极管和一只光敏电阻,安装在同一面上。灰度传感器利用不同颜色的检测面对光的反射程度不同,光敏电阻对不同检测面返回的光其阻值也不同的原理进行颜色深浅检测。
火焰传感器是模拟传感器。它利用红外敏感型元件对红外信号强度的检测并将其转换为机器人可以识别的信号,从而来检测火焰信号。火焰传感器可以用来探测波长在700nm~1000nm范围内的红外线,探测角度为60º;,其中红外线波长在880nm附近时,其灵敏度达到最大。
碰撞传感器使用碰撞开关,通过I/O口可直接作为数字量输入。
2.5 LCD显示及其它电路
液晶显示器以其微功耗、体积小、显示内容丰富、超薄轻巧的诸多优点,在袖珍式仪表和低功耗应用系统中得到越来越广泛的应用。这里采用2行16个字的DM-162液晶模块,通过与单片机连接、编程,完成显示功能。
3 灭火机器人软件设计
场地的四个房间内的任何地方都有可能摆放蜡烛,所以机器人必须能够实现搜索所有的房间,而且在行走的过程中不允许碰撞墙壁。找到火源后,通过灭火装置迅速将火灭掉。根据以上的要求设计机器人的灭火逻辑如图8所示。
机器人采用左手走规则,左手走规则是指机器人始终沿着左面的墙壁行走,一直走完全程。在行走的过程中按照起点、一号房间、二号房间、三号房间、四号房间的顺序搜索火源并灭火。机器人首先读取传感器信息,然后对传感器的信息进行判断。如果发现火源,则进入灭火子程序,该子程序完成趋光、灭火等功能。
4 结论
本文根据灭火比赛规则的要求,基于单片机及传感器原理,以AVR单片机ATmega32为控制核心,小型直流电机作为驱动元件,设计出一种价格低廉、简单实用的灭火机器人。通过简单的修改,可以将此机器人用于其它的竞赛项目。
针对市场上大多数教学无人车设计采用单片机单一控制导致其功能扩展性弱、灵活度低等问题,设计了一种基于Atmega128单片机和无线通信的智能教学无人车控制系统,该系统包括PC机控制部分和无人车控制部分,通过PC控制端软件可以经无线通信模块实现对无人车的准确运动控制。实验结果表明,系统工作稳定,无人车在遇到干扰的情况下顺利完成货物运输、环境勘察、敌我识别、打击等功能,控制效果理想。
基于AVR的智能教学无人车控制系统设计
智能教学无人车是一种履带式移动机器人,目前市场上的无人车大多采用单片机对其进行控制,其优点是体积小,成本低,结构简单,但仅仅依靠单片机远不能使无人车在复杂多变的工作环境中进行及时调整,并且极大地限制了其功能的扩展。基于此不足,本设计主要利用PC机与无人车的无线通信,使无人车在PC机无线指令下完成前进、后退、转弯、打击、生命值显示、调速和自动行驶等功能,并通过车载摄像头实时获取无人车所处环境信息,实现了远程监控。在执行任务时,如遭遇敌方车辆干扰通信,无人车在抵御干扰信号同时进行敌我识别,适时作出反击。
1设计原理
教学无人车控制系统由上位机(PC)控制部分和下位机(教学无人车)控制部分组成。系统结构框图如图1所示。
系统工作原理为:打开教学无人车电源时,Atmega128单片机通过语音模块使扬声器发出启动提示。当上位机无线控制台及PC端软件准备好后,PC端控制软件通过USB口向无线控制台单片机发出指令,使其配置无线模块相关寄存器,芯片进入指令发射模式;下位机由Atmega128单片机控制,在接收到上位机的指令后通过其集成的PWM外设模块产生2路PWM波和4条转向控制线经电机驱动模块增大驱动能力后控制左右2个电机产生相应的动作。例如,当PC端发出“左转”的指令时,下位机的无线模块接受成功后会自动返回接受成功应答信号。接着Atmega128单片机通过PA口控制L298P,使左侧电机反向转动,右侧电机正向转动,从而实现左转的功能;当PC端发出“打击”指令时,Atmega128则通过PE5口使红外发射管发出相应码制的红外进攻信号;当PC端发出“自动行驶”指令时,Atmega128结合接收霍尔传感器采集回来的数据,通过相应算法来协调左右两侧的电机,使坦克完成直线行走、转过固定角度,行驶固定距离等功能。教学无人车通过连接到PE5口的红外传感器感应对方无人车的攻击信号。如果接收到红外信号,PE5口会输入固定码制的信号,此时主控芯片会将生命参数减一并熄灭一个LED灯,当所有LED灯都被熄灭后,主控模块会通知语音芯片发出阵亡提示,无人车停止一切动作。
2硬件电路设计
教学无人车控制系统硬件电路设计包括PC端无线控制台部分和下位机无人车控制部分的硬件设计。
2.1 PC端无线控制台部分
硬件设计无线控制台部分由PC机、STC12LE5A60S2单片机、NRF24L01无线模块及PL2303组成。PC端控制台软件通过USB口向 STC12LE5A60S2发出指令,使其通过SPI串行通信协议配置NRF24L01的相关寄存器,随后芯片进入发射模式,将上位机指令转发给下位机。其设计电路图如图2所示。
2.2下位机无人车控制部分
硬件设计下位机硬件由MCU模块、电机驱动模块、传感器模块、无线模块、语音模块、LED生命值显示模块以及电源模块组成。
2.2.1 MCU模块
MCU模块以Atmega128单片机为核心,Atmega128单片机是一款高性能、低功耗的AVR 8位微处理器,处理速度可达1 MIPS/MHz,应用先进的RISC结构,特别是具有I2C、SPI、PWM、RS232串口、ADC、定时器等功能十分全面的外设。该单片机通过 SPI串行通讯接口与无线模块连接,通过通用可编程I/O接口与电机驱动模块、语音模块、红外发射管和接收管连接。
2.2.2电机驱动模块
电机驱动模块用于驱动直流电机,采用L298P电机驱动芯片。L298P是SGS公司的产品,为20管脚的专用电机驱动芯片,内含二个H—Bridge的高电压、大电流双全桥式驱动器,接收标准TTL逻辑准位信号,可驱动46 V、2 A以下的步进电机和直流电机,具有高电压、高电流的特点。电路设计如图3所示。
Enable控制电机停转,接到单片机的PE3、PFA口上,由这两个I/O口产生PWM波控制电机转动。input1—input4控制电机的正反转,接到单片机的PA0-PA3口上。OUT1、OUT2和OUT3、OUT4之间分别接2个直流电机。
2.2.3传感器模块
传感器模块包括红外模块和霍尔模块两部分。
红外模块包含接收和发射两个功能模块。红外接收模块由一个红外接收管构成,接收对方车辆发射的红外攻击信号。当系统接收到进攻信号时,PE6引脚上会出现一个高电平,触发一次外部中断,在中断服务程序中处理并判断红外数据。如果确认为进攻信号,则使生命值变量减一,同时熄灭一个LED灯。发射模块由一只红外发射管和一个三极管组成,红外攻击信号经过三极管放大后由红外发射管发出。攻击信号为8位数据,当收到进攻指令时,发射模块将程序中设定好的8位数据按位发出。
霍尔模块由两只霍尔传感器和四片磁铁组成,用于测速,以实现调速、自动行驶等功能。磁铁正反安放在左右两个电机减速箱的二级齿轮的边缘上。当教学无人车行驶时,电机带动齿轮转动,两片磁铁就会交替从霍尔元件下面经过,由于两片的磁场方向不同,就会使霍尔元件内部的电子发生不同的偏转,这样,二级齿轮每转过一周就会使霍尔元件产生一个脉冲信号,构成闭环系统。主控芯片接收脉冲信息,通过不同算法可控制两电机完成不同的控制要求。
2.2.4语音模块
语音模块由WT588D语音芯片和SPI寻址的8M ROM芯片及其外围电路组成。使用前将需要播放的语音烧写在ROM芯片中。语音模块使用三线串口控制模式,这种控制模式由CS,DATA,CLK 3条通信线组成,分别连接到Atmega128的PC0、PC1、PC2 3个I/O口。控制时序根据标准SPI通信方式。
2.2.5无线模块
无线模块主要包括NRF24L01和Atmega128.NRF24L01采用FSK调制,内部集成NORDIC公司自家的Enhanced Short Burst协议,可实现点对点或是1对6的无线通信,无线通信速度可达2.4 Gbps,并可以通过配置其寄存器实现调频传输。主控芯片通过SPI协议配置NRF24L01的相关寄存器来完成对无线模块的初始化和数据的传输。无线模块的SPI信号线对应的接到Atmega128的PB0-PB3 4个I/O口上,CE端接到PE2,利用Atmega128内部集成的SPI功能进行通信。无线模块电路设计如图4所示。
3软件设计
软件设计包括控制端软件的设计和终端软件的设计。
3.1控制端软件设计
无人车控制台的主控软件将键盘指令转化为控制码发往下位机,控制小车的动作并显示下位机发来的状态信息???。该软件利用Labview串口通讯将键盘指令转化为二进制字符串送到上位机。利用模拟SPI的方式,通过STC12LESA60S2配置NRF24L01的寄存器使其处于发射模式。当收到PC串口发送的数据时,NRF24L01在单片机的控制下将数据逐位发出。设计的控制端软件如图5所示。
3.2终端软件设计
教学无人车的终端软件主要包括无线接收程序、驱动控制程序等。程序中定义变量Life为生命值标识,定义Date为小车的控制标识,定义函数Motor()为电机控制函数。流程图如图6所示,主要分为以下步骤:
1)小车启动后,首先初始化各I/O口、系统中断、SPI接口以及NRF24L01的相关寄存器。小车的无线模块配置为接收模式。
2)下位机接收到无线信号后会产生一个中断,将数据通过SPI送到Atmega128中。在控制程序中,用多分支选择结构switch—case判断Date的值,通过调用Motor()函数控制电机做出相应动作。
3)接收到红外信号时,经判断若为有效信号,则使生命值标识Life减一。同时判断当前的Life值,设置PA口的值控制LED灯(生命值)的显示。
4结束语
文中进行了一种基于Atmega128单片机和无线通信的无人车控制系统设计。实验结果表明,教学无人车在无障碍区域无线通信有效传输距离可达 80~100米,利用车载摄像头可以实时获取无人车所处环境信息,实现远程监控。其创新点是采用了PC控制模式和单兵运行模式两种方式对无人车进行控制,极大地增强了无人车的功能性和环境适应能力。在实际对抗演练中,无人车在遇到干扰的情况下顺利完成货物运输、环境勘探、反击敌方车辆等功能,取得了良好的控制效果。该设计可广泛应用于短途货运客运、应急救援、恶劣环境下自动作业等领域。
基于AVR单片机的控制系统设计
引言
现在许多的系统都采用了多通道Input/Output的设计,控制系统的设计也日趋复杂、庞大,所以有必要将控制电路单独分离出来。过去许多系统均采用 C51系列单片机作为控制电路,但其功能有限,电路设计较为复杂、影响了系统的稳定性,也不易扩展。本文介绍的AVR单片机由美国ATMEL公司生产,采用RISC指令集,内置RAM及可以擦写数千次的FLASH,采用哈佛结构,速度较快。ATmega128为此系列中功能最强大的一款,用于设计控制系统能适应现时复杂系统的要求。
系统硬件设计框架
硬件系统主要由CPU(AVR单片机)、人机操作和显示接口(液晶显示、键盘、指示灯和蜂鸣器)、通信接口组成。系统框图如图1所示
图1系统硬件设计框图
CPU为核心处理器件,通过I/O接口方式或A/D总线方式与液晶、显示键盘、指示灯和蜂鸣器交互,作者实现了两个版本,分别采用I/O方式和A/D总线方式。通信接口主要用到了UART接口和扩展的网络接口。其中UART提供了RS-232和RS-485接口,RS-232提供全双工单对单通信同时,而 RS-485以主/从方式与系统的多个部分通信,可用于多通道的输入输出设备。该芯片本身并不带网络接口,通过扩展一个W3100A连接RT- L8201(L)芯片,实现TCP/IP协议栈,从而使设备可以接入LAN,实现在LAN内的远程控制管理和监控。
系统软件结构
系统软件体系分为几个部分:
(1)系统的循环检测部分,用于检测各通道的系统设备工作是否正常,出现异常时则通过三色指示灯报警(绿色代表正常,红色代表异常,黄色为中间状态)。
(2)系统的设置部分,接受用户按键,用户可以在GUI上设置希望设置的参数。
(3)网络接口部分,此时单片机系统不参与设置,主要功能将网络部分获得的数据导至各通道。软件系统的核心部分在于菜单结构的设计。
本系统采用一种基于节点编号的三叉树状菜单的设计。将整个菜单看作一个菜单树,每个界面对应于树中的一个节点,父节点为当前菜单的上一级菜单;右节点为当前菜单的“兄弟”菜单,亦即上级菜单的其余子菜单。
我们采用对节点编号的方式将整个菜单树串起来,通过识别节点编号(ID)就能知道该节点处于哪一级菜单,同时也便于我们将菜单数初始化。编号方式:每级子菜单的编号为上级父菜单ID乘以10再加上该级子菜单在上级菜单中对应的子项号(1,2,3.),我们将根节点ID编号为1,则根节点菜单的子菜单对应的 ID分别为11,12,13.ID为11的节点的下级菜单ID为:111,112,113.一个树型结构菜单的结构和ID编号的实例如图2所示。
Typedef structmenu{ long ID; / /当前菜单ID void ( * disp laymenu) ( long i, unsigned char j) ; / /当前菜单对应处理函数char cur; / /当前菜单子项char total; / /子菜单总数structmenu * up, * down, * right; / /毗邻子菜单}MENU;
图2 一个菜单树的实例
对于用户按键操作切换不同的菜单时,我们只需修改一个指向对应菜单节点的全局菜单节点指针即可。当用户按下“ESC”键时,菜单指针指向当前节点的父节点,按下“Enter”键时,则指针指向对应节点的子节点。
用于AVR单片机的RAM空间较小,只有4KB,我们需设计一种合理而简洁的数据结构,我们将菜单的数据结构定义为(C语言实现)。
图3 menuselect函数的流程图
将菜单分为显示型菜单和功能性菜单,显示型菜单项用于切换各级菜单,功能型菜单则执行最底层菜单所对应的操作,total变量为0则表示为功能型菜单,大于0则表示选择型菜单。通过菜单的ID,即可以知道当前菜单的显示位置和内容,将此信息放在对应的displaymenu函数中可以节省数据空间,不用对于功能型菜单建立额外的ID与处理函数间的对应关系表,从而实现功能型菜单和显示型菜单的一致性操作。一个供参考的执行函数可以写作:
if(g_pmenu->total>0)
{ g_pmenu=menuselect(g_pmenu,Key);} else {(g_pmenu->displaymenu)(g_pmenu->ID,g_pmenu->cur);}
其中menuselect函数用于切换对应的菜单子项,按键为“UP”键和“DOWN”键时,只需修改g_pmune->cur即可;按下 “ENTER”键时,则g_pmenu=g_pmenu->down,再根据cur值,g_pmenu=g_pmenu->right;按下 “ESC”键,则g_pmenu=g_pmenu->up.
这种设计使得代码数据量变得较小,同时增强了程序的扩展性,需要增加或修改菜单项时,不论是功能型菜单还是执行性菜单,只需要修改对应的菜单结构的数组即可,而不必修改对应的执行代码。经过这样的简化后,发现对于菜单数较多的多通道输入/输出系统,系统RAM区还是不够用。对于一个8输入通道的系统,每个通道的参数设置项可能多达40项,总菜单节点大于300个,每个节点占用14B,则整个菜单节点所占的RAM已超过4K,所以这种方式还是需要进一步改进。
注意到多通道的参数设置项完全相同,ID为111,112,118的菜单分支完全一样,ID为121和122的菜单分支也完全相同。可以定义一种 Sibling菜单,从而删去ID为112~118以及ID为122的菜单节点和子节点(虚线框所示),其上级菜单(ID为11和ID为12)的项目中的 total值均变为1.为了区别不同的通道分支,有两种实现办法:
一种处理方法采用全局变量
增加一个g_CODER_Channel_Number的全局变量,用于保存当前的通道号。在menuselect函数中,增加一个针对本系统设计的一个判断,当ID为11时,则不修改对应的g_pmenu->cur,而是直接修改变量g_CODER_Channel_Number,进入对应的显示函数后,直接根据g_CODER_Channel_Number判断通道号,从而输出对应的值。这种方法不需要改变系统设计的结构,但需要针对不同的系统修改主处理函数menuselect.
另一种处理方法在菜单结构中增加一个MenuSibling结构,定义为
typedef struct _menuSibling{
signedcharcur;signedchartotal;}SIBLING;同时对应的菜单结构修改为typedefstructmenu{……
SIBLINGSibling;}MENU;
这样,ID为11的结构项的Sibling.total为8,Sibling.cur为当前的子菜单项。判断到total>0且 Sibling.total>0时,可知其下一级菜单为SIB2LING菜单,此时以前需修改cur想的操作则修改Sibling.cur即可。这种设计下,每个节点增加了2B的空间,但是保证的程序的一致性,对于不同的系统其设计基本一致。
以上菜单项的设计用于系统设置部分,当退出系统设置时,即进入系统循环检测部分。单片机通过RS-485接口检测各个通道是否正常,当正常时则显示为绿灯,出现异常则显示为红灯,黄灯为中间状态。指示灯的流程参见图4.
图4循环检测的指示灯流程
结束语
按照本文提供的方法优化后的设计,可以满足大多数的多通道输入/输出系统的控制系统的需要,整个系统的设计主要在于建立一个菜单树,将对应的节点编号,再编写对应的节点处理函数即可。这种设计使得程序的开发、维护都很容易,具有较强的可扩展性和可移植性。
基于AVR单片机的有害气体红外感应及语音警示控制系统
引言
利用红外感应系统感应附近有无有害气体,当红外感应系统感受到有有害气体接近时,送出持续一段时间的高电平;单片机通过开启中断,启动语音芯片,单片机通过串口通信,从上位机提取的有害气体参数提示给附近人体,并经过与安全值的比较判定当前环境是否安全。对语音芯片的使用,先将必要的文字、数字信息录制进去,放音时,通过单片机自动寻址,把实时参数读取出来。为便于以后系统改进或移植到其他系统,可设计录音、放音电路,通过切换录制不同内容。系统设计友好、方便,给人的信息也更加直接。
1系统总体设计方案
在气体浓度是现有可利用的数据的基础上,考虑了系统的衔接性和可移植性。系统总体方案见图1。
本系统分为四大模块:核心控制模块、语音电路模块、红外感应模块以及数据的读取。在气体浓度为现有可利用资源的前提下设计了系统如何进行读取控制。核心控制模块采用单片机作为控制器件,配合适当的外围电路,控制整个系统的运行。红外感应模块以一个红外传感器为核心,配置一定的信号处理电路,往单片机发信号。语音电路以语音芯片为核心,设计了录音、放音两种电路。
1.1核心控制模块的设计
核心控制器件选用了单片机,其最小系统构成如图2所示。
该模块是系统的核心,当红外感应系统感应到人体,会送出中断信号,单片机得到信号后执行中断,通过串口通信读取气体浓度,然后到语音芯片寻址,并控制语音模块把气体浓度报告出来。除了基本的外围电路,核心控制模块外主要应用了中断、串行通信和基本的输入、输出功能。
本系统中上位机通过串口实现与单片机通信,然后由单片机进行处理,单片机接受红外信号后,控制语音芯片工作,播放相应的语音信息。可选的单片机较多,如AVR、AT89C51等。采用单独的控制芯片的好处是减少主控芯片(CPLD)的工作量,提高系统的性能。我们选用了AVR单片机。AVR是基于RISC(精简指令集计算机)结构的单片机,简称AVR单片机,该系列单片机在吸收PIC及8051单片机优点的基础上,进行了重大改进。与普通的51系列单片机相比,AVR单片机有很多优点。首先给人最直观的就是具有JTAG边界扫描、仿真、编程功能,不会造成以往仿真通过而脱机不行的现象。
1.2红外感应模块的设计
该模块相对简单,核心用了红外传感器,只把信号进行了简单处理,送给单片机的中断即可,见图3。
1.3数据读取方式的设计
对数据的读取有两种方法:一种是直接与硬件电路结合,16位二进制数据读取过来,进行整理还原;另一种是通过串口通信,把已经由上位机整理好的数据,通过RS-232协议读取过来。显然,较第1种方法,通过串口的方式避免了对数据重复整理,编程更简单。对整个项目而言,设计更合理,缩短了开发周期。
本系统采用的是串行数据通信方式,接口为RS-232串口,实验证明这种通信方式简单易行,符合本系统要求。本系统采用的是半双工配置,它要求下位机和主机控制器双方都具有独立的发送和接收能力。
接收/发送时钟用来控制通信设备接收/发送字符数据速度,该时钟信号通常由微机内部的时钟电路产生。接收数据时,接收器在接收时钟的上升沿对接收数据采样,进行数据位检测。发送数据时,发送器在发送时钟的下降沿将移位寄存器的数据串行移位输出。
接收/发送时钟频率与波特率有如下关系:
式中:Fe为接收/发送时钟频率;n为频率系数,n=1,16,64;vc为收/发波特率。
接收/发送时钟的周期Tc与发送的数据位宽Td之间的关系是:
式中:n=1,16,64。
若取n=16,那么异步传送接收数据实现同步的过程如下:接收器在每一个接收时钟的上升沿采样接收数据线,当发现接收数据线出现低电平时就认为是起始位的开始,以后若在连续的8个时钟周期(因n=16,故Td=16Tc)内检测到接收数据线仍保持为低电平,则确定它为起始位(不是干扰信号)。通过这种方法,不仅能够排除接收线上的噪声干扰,识别假起始位,而且能够相当精确地确定起始位的中间点,从而提供一个准确的时间基准。从这个基准算起,每隔 16Tc采样一次数据线,作为输入数据。一般来说,从接收数据线上检测到一个下降沿开始,若其低电平能保持nTc/2(半位时间),则确定为起始位,其后每间隔nTc时间(一个数据位时间)在每个数据位的中间点采样。
2通信软件设计
系统通信软件由下位机、主机控制器通信软件和上位机监控软件3部分组成。下位机通信软件功能主要是接收主机控制器发送过来的信号,针对各下位机地址发送应答信号,再根据主机控制器发来的控制信号做出相应的反应,随后发送主机控制器所需数据。其通信功能使用了单片机的串行中断和查询收发状态标志位的方法实现。下位机平时对各监控点进行数据采集并定时存储,当有串行中断时执行串行中断服务程序,判别是否为本机的地址信息,地址信息与本机地址相符时,转为接收控制命令,并执行相应的操作;地址信息与本站地址不符时则退出中断。下位机通信流程图如图4所示。
主机控制器的通信软件实现功能主要包括呼叫各从机(下位机),并向各从机发送查询控制命令。其工作过程为:控制器发送需呼叫的从机的地址,然后等待接收从机的应答信号,若应答信号正确即发送控制命令,若应答信号不正确则重新发送需呼叫的地址,并等待接收应答信号,接收到应答信号后接收下位机发送的数据,存储在相对应的数据存储区并在LCD(液晶显示器)显示屏中显示出来。对同一从机多次呼叫而在规定时间内无应答信号或应答信号不正确,则提示错误信息。图5为主机控制器通信流程图。
上位机监控软件由Visual C++编写,具有良好的可视效果,功能包括数据查询、数据存储、串口通信设置、视频监控、图表显示(单机、多机)等。上位机的数据来自主机控制器,其通过RS-232串口网络传送给上位机,它的接口与RS-485网络的接口是并行的,标准接口有25条线、4条数据线、11条控制线、3条定时线、7条备用和未定义线,但常用的只有9根。
3结束语
针对该系统,除了可以使用自己设计的上位机软件进行调试,还可以利用一个简单的串口调试器来实现。该系统覆盖了单片机技术及一部分模拟、数字电路的知识,系统具有一定的操控性、工作稳定、实现容易、成本低,具有很高的使用价值,在系统建成后,运行结果表明系统工作稳定可靠,在工业控制领域有着广阔的前景。
基于AVR处理器的CAN总线应用
1 前 言
现场总线是当前工业总线领域中最活跃的一个领域, CAN 总线是工业数据总线领域重要的现场总线之一。CAN 是Contro ller Area N etw ork的缩写, 是国际标准化的串行通信协议。在当今的汽车产业中, 出于对安全性、舒适性、方便性、低公害、低成本的要求, 各种各样的电子控制系统被开发出来。由于这些系统之间通信所用的数据类型及对可靠性的要求不尽相同, 由多条总线构成的情况很多, 线束的数量也随之增加。为减少线束的数量、通过多个LAN进行大量数据的高速通信, 1986年德国电气商博世公司开发出面向汽车的CAN 通信协议。而今CAN 在欧洲已是汽车网络的标准协议。CAN 的初衷是为了解决汽车里多种复杂数据的通信, 后来证实在很多工业领域也能应用自如。
2 CAN 总线特性及当今状况
CAN 总线与其他通讯网络的不同之处在于: 报文传送中不包括目标地址, 以全网广播为基础, 各接收站根据报文中反映数据性质的标识符过滤报文;强化了对数据安全性的关注, 满足控制系统较高的数据需求。它具有如下显着特征: 极高的总线利用率、低成本、高速的数据传输速率、远距离传输、可靠的错误处理和检错机制、可根据报文的ID决定接收或屏蔽该报文, 节点在错误严重的情况下具有自动退出总线的功能等等。
CAN 总线所需完善的通信协议可由CAN 控制器芯片和接口芯片实现, 大大降低了系统的开发难度、组成成本、缩短了开发周期, 其高性能高可靠性以及灵活的设计受到人们的重视, 应用也越来越广泛。目前比较流行的控制器芯片是飞利浦公司的SJA1000和收发器芯片TJA1050。
由于近几年来 CAN 总线技术逐步在我国推广开来, CAN 总线技术的独特特点 传输数据的可靠性和实时性, 已获得国际自动化控制领域的认可,其应用前景十分光明。国内推动CAN 总线技术进步的应用事例不断扩展, 积极促进了我国自动化技术的进步。由于CAN 总线本身的特点, 其应用范围己经扩展到过程工业、机械工业、数控机床、医疗机械、家用电器及传感器等领域, 而在电梯控制系统中, 主板需要接收不同楼层呼梯、轿厢里呼梯、调整电梯运行参数等多路信号, 因此CAN 总线的优势明显。如图1所示。
图1 CAN总线应用拓扑结构
3 集成CAN 控制器的ARM 微处理器
CAN 总线基于一组严格的协议, 一般来说在主CPU 外接一个专用CAN 控制器以实现。由于近年来微处理器的迅速发展, 出现了很多功能强大的集成CAN 控制器的CPU, 使得在CAN 总线应用上又简便了一些。而在价格上, 集成CAN 总线的微处理器和一般处理器加上专用CAN 控制器芯片的价格相当, 所以, 集成CAN 总线的微处理器必然成为今后CAN 总线应用的趋势。NXP 公司生产的ARM结构LPC2294就是其中一款流行的带CAN 总线控制器的CPU。它是基于一个支持实时仿真和跟踪的32位ARM7TDM I- S CPU 的微控制器, 并带有256k字节嵌入的高速Flash 存储器。极低的功耗、多个32位定时器、8路10位ADC、4路CAN以及多达9个外部中断使它们特别适用于工业控制, 因此,LPC2294也可作为电梯控制系统的主控制器。
4 集成CAN 控制器的高端8位AVR
上文提到, 电梯控制系统需要处理多路信息, 而且它们可能是具有不同传输速率的, 因此需要使用不同通道的CAN 总线控制器。对于控制系统, 必须具有可操作性, 考虑到要减轻主CPU 的负担, 因此,设计一个简单的操作系统对主系统进行操作, 而数据的交换方式就是采用CAN 总线传输, 此文中称这个操作系统为副系统。副系统相对比较简单, 其功能主要包括: ! 和主板进行信息交换; ? 具有按键供输入; # 具有显示信息的显示器。针对功能的需要和程序的体积, 选用了ATMEL公司近年力推的8位AVR控制器at90can128。
at90can128是一种基于AVR 增强型R ISC结构的低功耗CMOS 8位单片机。通过执行一个单时钟周期的高效指令, AT90CAN128每MH z能达1M IPS,这就可让系统设计人员将功率损耗与处理速度优化。AVR内核具有丰富的指令集并带有32个通用目的工作寄存器。32 个寄存器全都直接连到运算逻辑单元( ALU ) , 允许两个独立的寄存器在一个时钟周期执行单个指令的方式访问。其结果就是, 采用这种结构的速度比常规的R ISC单片机快10倍的同时代码效率更高。它除了拥有一般AVR 处理器的AD 模块, SPI模块外, 还集成CAN 控制器, 为搭建基于CAN 通信的系统提供了便利。控制结构如图2所示。
图2 at90can128的CAN控制结构。
对于复杂的CAN 通信协议, 在此不详述, 以下就at90can128的CAN控制器使用作介绍。
a t90can128的CAN 控制器提供了所有有利于消息管理的硬件, 对于每个要发送或接收的信息都是通过一个叫做消息对象( message ob ject) 的东西来封装起来的。在对模块初始化的时候, 程序会指定哪些消息要发送, 哪些消息要接收, 只有那些约定好标识符的消息才能被正确无误地交换。另外, 对于接收到的远程帧, 控制器会进行相应的自动回复。
所以在这种方式下, 相对于最原始的CAN 控制方式, CPU 的负担大大减小了。用户可以根据自身要求, 通过对相关寄存器进行配置达到自己的要求。
而在发送消息之前, 必须初始化几个字段:
其中IDT 是标识符字段, IDE 是标识符扩展使能选择, RTRTAG是远程传输请求, DLC 是数据长度代码, RBnTAG 是保留字段( n = 0, 1) , MSG 是指向相应MOB的CAN 数据。当MOB 的发送指令执行后, MOB 就会准备发送一个数据或者是一个远程帧。接着, CAN 通道就会扫描各个MOB, 寻找到优先级最高的MOB, 将其发送出去。当传送成功后,MOB 状态寄存器CANSTMOB 中的TXOK 位就会置位。而最重要的是, 对于每一次新的数据传输都必须重新对相关寄存器初始化, 否则无法正常工作。
接收消息之前所要做的初始化步骤基本相同,只是多了IDMSK 和IDEMSK 标识符掩码的设置。
以下就给出基于AVR at90can128CAN 总线接口初始化以及发送、接收功能模块的关键代码及注解(见图3)。
图3 电梯系统主板与调试器之间的CAN通信
CAN 初始化:
CANGCON | = 0X01;
for( i= 0; i< 15; i+ + )
{
CANPAGE = i< < 4; / /将15个MOB 都初始化一次
CANCDMOB = 0;
CANSTMOB= 0;
CAN IDT1= 0;
CAN IDT2= 0;
……
for( j= 0; j< 8; j+ + )
CANMSG= 0;
CANBT1= 0X1E; / /设置CAN 传输波特率, 16分频
CANBT2= 0X40;
CANBT3= 0X49;
CANPAGE = ( 0< < 4) ; / /选择MOB0作为接收MOB, 并设定标识码
CAN IDT1= 0X00;
CAN IDM1= 0X00;
……
CANPAGE = ( 1< < 4); / /选择MOB1作为发送MOB, 并设定标识码
CAN IDT1= 0X00;
……
}
发送模块代码:
CANPAGE = ( 1< < 4); / /选定MOB1
If( ( CANGSTA& 0X10) = = 0) / /查询CAN 状态寄存器的TXBSY 位, 为0, 则可以发送
for( i= 0; i< 8; i+ + )
{
CANMSG= my _dada[ i] ; / /将要发送的数据装入数据寄存器中, 共8 by te
CANCDMOB | = 0X48; / /发送
}
接收模块代码是类似的, 设计思路都是在判断发送允许标志之后, 如果允许, 就将数据装入到指定的MOB中, 而每个MOB 一个发送周期一共可以发送8byte的数据。而CAN 总线的另一端是NXP公司LPC2294的CAN总线外围, 其结构和原理都差不多。
当然, 在寄存器设置中会有一点差别, 但只要两个CPU 约定好数据帧的标识符编号是什么, 传输速率相同, 就可以进行数据交换了。由于篇幅有限,LPC2294的CAN接口设置在此就不作介绍了。
最后给出了CAN 总线应用CPU 外部的硬件原理参考图, 如图4所示。
5 CAN 总线收发器TJA1050硬件连接图
图中CAN 收发器为NXP公司的TJA1050, TXD和RXD分别连接到CPU 的CAN接口, CANL和CANH 则为与另一个CPU 连接的总线, CANL 和CANH 之间电阻值约为120欧姆, 开关S可以作为CAN 总线的硬件启用开关。另外, 如果在抗干扰要求高的场合, 可以对TXD 和RXD使用光电隔离。
图4 CPU 外围收发器的硬件原理图。
6 结束语
基于at90can128的CAN 总线模块设计的电梯系统调试器, 经过长时间的检验, 使用良好, 通信正常无误。在众多的现场总线当中, CAN 总线凭借其优秀的特性已经为越来越多的工程人员认同和偏爱, 而随着越来越多的高端CPU 对CAN 控制器的集成和综合成本的下降, CAN 总线的使用必定会越来越普遍, 其中集成CAN 控制器的8位AVR 也会受到越来越多人的青睐。
评论
查看更多