你的位置:首页 > 微处理器 > DSP > PIC > AVR > 正文
设计干货精选:AVR单片机工业控制方案合集
来源: 作者:ONeal 2014/12/24 15:18:00 人气:88
内容导读:
AVR单片机是1997年由ATMEL公司研发出的增强型内置Flash的RISC(Reduced Instruction Set CPU) 精简指令集高速8位单片机。可以广泛应用于计算机外部设备、工业实时控制、仪器仪表、通讯设备、家用电器等各个领域。本文为大家介绍基于AVR单片机的工业电子设计方案,包括机器人,智能小车等。

  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循环检测的指示灯流程

  结束语

  按照本文提供的方法优化后的设计,可以满足大多数的多通道输入/输出系统的控制系统的需要,整个系统的设计主要在于建立一个菜单树,将对应的节点编号,再编写对应的节点处理函数即可。这种设计使得程序的开发、维护都很容易,具有较强的可扩展性和可移植性。

标签:
商品推荐



相关文章
阅读排行
最近更新
推荐阅读