APP下载

应用AVR 开发智能移动机器人的控制系统

2010-07-25杨进

微型电脑应用 2010年6期
关键词:子程序控制电路计数器

杨进

0 引言

智能移动机器人集成了机械、电子、计算机、自动控制、人工智能等多学科的研究成果,在当前机器人研究领域具有突出地位[1]。目前,基于集散控制理论的嵌入式分层控制方法,在机器人系统的开发中广泛应用。其核心思想就是“集中管理、分散控制”,既要处理大量的信息,又要实时地控制系统的运行。它可以满足系统通用性强、系统组态灵活、控制功能完善、数据处理方便、安装简单规范化、调试方便及运行安全可靠的要求。

ATmega8L微处理器是一款高性能、低功耗的8位AVR微处理器,采用先进的RISC结构[2]。ATmega8L具有:8K字节的系统内可编程Flash,擦写寿命达10000次;512字节的EEPROM,擦写寿命达100000次;1K字节的片内SRAM;两个具有独立预分频器8位定时器/计数器,其中之一有比较功能;一个具有预分频器、比较功能和捕捉功能的16位定时器/计数器;6路10位逐次比较式ADC(PDIP封装);独立振荡器的实时计数器RTC;3通道PWM;两个可编程的串行USART等[3]。

本文中,采用ATmega8L微处理器,作为智能移动机器人的控制核心,采用光电编码器、光纤放大器、光电开关等传感器,作为信息反馈器件,基于嵌入式分层控制方法,设计出移动机器人的控制系统。采用AVR-GCC编译软件[4]编程,实现该机器人在不为人干预的情况下,自动找到运行的路径,并在行进的过程中自动避开障碍物,体现出一定的智能性。同时,通过遥控模块,还可以实现人工遥控模式的运行方式。下面将详细介绍机器人控制系统的结构重点,并重点分析信息管理层的控制电路及机器人自动寻迹功能的实现原理。

1 智能移动机器人控制系统的结构

移动机器人的控制系统,采用嵌入式分层控制[5]的系统结构:主、从控制器,都是采用ATmega8L微处理器;主控制器接收控制指令,并采集光纤放大器和光电开关所反馈的环境信息,经过一系列的逻辑处理,得到对应的电机速度控制值;从机则接收主机所传给的速度目标值,并实时控制电机的转动速度;在两级控制间,通过DMX512串行通信协议,实现数据准确稳定地传输。

如图1所示,左侧结构框图为信息管理层的结构。左侧光纤放大器和右侧光纤放大器分别反馈回一个模拟量信号,该信号将随所探测到的颜色变化而变化。ATmega8L微处理器,通过内部10位模数转换器采集这两个信号,并转换成数字量。设定一个阀值,微处理器将对分别对高于和低于该阀值的信号赋予一个逻辑量,用于区别轨迹区域和背景区域,从而识别出运行的轨迹。而光电开关将发射红外线,经障碍物反射,被传感器检测到,从而发生开关信号的变化,微处理器将根据逻辑阵列,确定障碍物相对机器人的方向,并调用避障子程序躲避该障碍物。另外遥控模块将向主控制器传递遥控指令,主要包括速度的设置和运行模式的切换等。

图1 机器人控制系统的结构图

右侧结构图为伺服控制层,存在一个速度控制环。伺服控制系统的执行元件为直流旋转电机,系统的控制量是电机的转速。反馈元件采用旋转式光电编码器,反馈信号为光电编码器的脉冲信号(A、B两相)。以ATmega8L微处理器作为计算控制单元,并在程序中设定速度采样频率为2K赫兹左右。在每个采样周期内,微处理器计数编码器反馈的脉冲数。通过比较A、B两相脉冲状态的变化并计数脉冲数,得到实时的速度值,再与目标速度数据比较,经过离散PID调解器计算,求得对电机的控制字。该控制字将修改单片机输出的PWM信号的占空比值,并通过OC1A和OC1B输出两路PWM信号。经过对应的两路H桥驱动电路放大后,改变了两路电机的电枢电压有效值,从而实现速度的闭环控制。

2 控制电路

图2为信息管理层的控制电路。其中,系统供电为12伏直流电源,12伏电压是作为电机的驱动电压,也是光电开关的额定工作电压。通过3端稳压块LM7805获得稳定的5伏电压,为ATmega8L微处理器提供额定的工作电压。ATmega8L微处理器使用8M赫兹晶振作为时钟源,采用上电复位方式。为作为控制核心的ATmega8L微处理器,通过PC0~PC3口接收光电开关的开关信号[6],获得障碍物的信息;通过ADC4、ADC5引脚接收光纤放大器反馈的模拟量信号,并转换成数字量,从而获得轨迹的信息;通过PB0、PB1和PC2~PC7八个I/O口接收遥控模块传递下来的控制指令。并且,主微处理器通过RXD、TXD引脚和伺服控制层的从机实现串行通信,向伺服控制层发送电机速度目标值,接收伺服控制层返回的电机运行实时情况。另外,电路中设计有ISP接口,可以使用通用的AVR ISP编程器很方便地下载程序。

3 智能寻迹控制

本文所开发的机器人,可以自动寻找由特定颜色所描绘的轨迹。在控制电路中,两个光纤放大器分别反馈一个模拟量信号,并转换成数字量。单次转换的结果如下:

式中,VIN为被选中引脚的输入电压,VREF为参考电压。0x000代表模拟地电平,0x3FF代表所选参考电压的数值减去1LSB[7]。

电路中设计为ADC6和ADC7单端输入,通过微处理器内部定时/计数器0设定1毫秒的采样时间,每隔一个采样周期采集一路的信息。程序中首先需要T0和ADC做相应的初始化。具体程序及注释如下。

1. T/C0 初始化:

2. ADC初始化程序:

图3 定时器0比较中断子程序流程图

定时/计数器0采用CTC工作模式,通过比较中断准确定时1ms。其比较中断子程序完成光纤放大器信号的读取和最初的数据处理任务。在CTC工作模式下,当计数器0的数值TCNT0等于OCR0(值为0x7C)时计数器自动清零。这个模式使得用户很容易地控制比较匹配输出的频率,也简化了外部事件计数的操作。

在定时器0比较中断子程序中,轨迹的信息已被整理为TRACK变量的数值,其有效数据为TRACK的最低两位。当主程序初始化TRACK为0x00后,轨迹的信息只有四个数据,分别是:0x00、0x01、0x02、0x03。其中0x01和0x02为刚刚偏离轨迹,0x01为左侧偏离,0x02为右侧偏离。数值0x03则表示机器人运行在轨迹上。而数值0x00所代表的运行状态就不是那么直接能判断的,需要和上一个采样周期的状态进行比较,才能得出结论。在自动寻迹子程序中还定义了一个静态变量OLD_TRACK,用于保存上一个采样周期的状态。当OLD_TRACK为0x01时,则当前的TRACK(0x00)表示严重偏离轨迹的左侧;当OLD_TRACK为0x02时,则当前的TRACK(0x00)表示严重偏离轨迹的右侧。

在自动寻迹子程序中,通过对TRACK变量的数值进行逻辑判断,从而确定机器人相对轨迹的方向,并输出响应的速度控制量给伺服控制层。如上面程序流程图所示,当TRACK发生变化时,输出也将改变。如果偏出轨迹左侧,则控制电机使机器人右转;如果偏出轨迹右侧,则控制电机使机器人左转;没有偏出,则以设定好的速度前进。

图4 自动寻迹子程序流程图

4 实验

按电路图完成系统控制电路的制作。如图5所示,机器人通过车载蓄电池供电,由两块控制电路板控制,一块为按图2所设计的信息控制电路,另一块为伺服控制电路。使用WinAVR软件按流程图编写好程序后,通过ISP下载线将机器码,分别下载到两个ATmega8L微处理器中。在图5中,a图为机器人自动沿黄色描绘的迹线运动,b图为机器人自动沿着墙体运行。

图5 机器人自动运行

5 结论

本文基于AVR微控制器开发出一台智能移动机器人,实验结果显示,机器人能够可靠地自动避开障碍物并找到自己运行的目标。通过伺服驱动,机器人能平稳较快速地前行。本文中的机器人,具有清晰的控制系统结构,而且开发的成本低廉,所以该机器人的技术,尤其适用开发自动化教学设备。同时,该机器人技术,还可以广泛应用于自动设备的开发。

[1]徐国华,谭民.移动机器人的发展现状及其趋势[J].机器人技术与应用, 2001(3): 7-14.

[2]徐玉,韩波,李平.基于 AVR 的舵机控制器设计[J].工业控制计算机, 2004(11):38-40. Xu Yu,Han Bo,Li Ping,The Design of AVR Based Servo Controller[J], Industrial Control Computer, 2004(11):38-40.

[3]http://www.atmel.com/, ATmega8芯片数据官方手册[M].http://www.atmel.com/, ATmega8 Datasheet

[4]马潮,詹卫前,耿德根. ATmega8原理及应用手册[M].第5版,北京:清华大学出版社, 2003:7-8

[5]韩大鹏,韦庆.机器人控制器的一种模块化设计方法[J].微计算机信息,2005(5):3-4.Han Da Peng,Wei Qing,A Design Method Via Modularization for Controllers of Mobile Robots[J], Microcomputer Information, 2005(5):3-4.

[6]阎石.数字电子技术基础(第四版),高等教育出版社,1998.11

[7]沈文,Eagla lee,詹卫前. AVR单片机C语言开发入门指导[M].北京:清华出版社,2003.

猜你喜欢

子程序控制电路计数器
采用虚拟计数器的电子式膜式燃气表
关于74LS90计数器的Multisim仿真分析
2017款本田雅阁车控制电路(二)
2014款雷克萨斯CT200h车控制电路(一)
2018款别克GL8车控制电路(二)
2016款迈腾B8L车控制电路(一)
算盘是个“小气鬼”
浅谈子程序在数控车编程中的应用
光电脉冲计数器的制作与性能优化
子程序在数控车加工槽中的应用探索