您现在的位置是:首页 > 单片机

基于MC68HC08系列单片机的机器人追跑控制系统设计

2020-05-30 05:03:10

本文设计了一种基于摩托罗拉MC68HC08系列单片机的机器人追跑控制系统,用于研究机器人之间的简单互动。

移动机器人行为描述   

    在此系统中,我们将两个移动机器人一个命名为“猫”,一个命名为“鼠”。当两个机器人都无法接收到对方发出的信号时,机器人“猫”以S形前进,机器人“鼠”在原地进行180度摆动;当机器人“猫”检测到机器人“鼠”发出的信号时,以直线追向机器人“鼠”的方向,而机器人“鼠” 同时接收到“猫”的信号,以直线向前移动,以躲避“猫”的追赶,直至逃出“猫”的接收范围,重复无法接收到信号时的行为;如果“猫”在一段时间内都无法发现“鼠”的存在,就发出声音报警。在整个过程中,由于环境未知,“猫”和“鼠”都有避障控制,而且可以根据不同的行为状态,播放不同的音乐。

系统硬件设计   

    “猫”、“鼠”两个机器人的电路设计基本相同,都是由单片机系统、红外收发模块、电机控制模块和语音模块构成,其不同是红外线发射管和接收管阵列的排列有所不同。单片机选用Motorola公司的8位微处理器M68HC908GP32(42管脚封装);红外收发模块使用PT2262和放大器组成的简单红外线收发电路;电机控制模块选用L293D进行电机驱动;语音模块选用ISD25120控制放音。另外,系统地电源模块使用12V干电池。   

单片机系统   

    MC68HC08系列中的单片机是Motorola公司1999年推出的8位微控制器,具有速度快、功能强、功耗小及价格等特点。

    我们在设计中选用的M C68H C908GP32单片机是MC68HC08系列微控制器的第一 批产品,其特点是片内资源丰富、高性能,低价位,且具有多种保护功能,适用于各种数据处理平台搭建。在这里我们主要用它完成红外信息融合、电机控制及语音播放控制。

    设计中,两个机器人上单片机的主要端口设置相同,如表1所示。另外避碰的三个触点开关控制为PTB0、PTB6、PTA7。   

红外收发模块   

    红外发射模块使用PT2262和红外发射管阵列构成的红外发射电路。红外接收电路使用红外接收管阵列和放大器组成。接收到的信号输入至单片机的PTB7端口,经过A/D转换后,送入处理器,以控制机器人的行为转换。

电机控制模块   

    电机驱动电路采用基于双极性H-桥型脉宽调整方式PWM的集成电路L293D。L293D具有很多优点,如电流连续;电机可四角限运行;电机停止时有微振电流,起到“动力润滑”作用,消除正反向时的静摩擦死区;低速平稳性好等。L293D通过内部逻辑生成使能信号。H-桥电路的输入量可以用来设置马达转动方向,使能信号可以用于脉宽调整(PWM)。另外,L293D将2个H-桥电路集成到1片芯片上,这就意味着用1片芯片可以同时控制2个电机。

    机器人有三个车轮,两个使用电机控制,另一个为万向轮,因此使用1片L293D进行控制即可。将两路PMW控制信号分别接至两路电机控制的使能引脚EN12和EN34,通过调整PWM的占空比可以调整电机的转速。将电机正反转控制线分别接入IN1、IN2、IN3和IN4,,通过写入不同的值控制两个电机的正转和反转。   

语音模块   

    为了区别移动机器人的各个不同状态,我们使其在做出不同动作的同时,可以播放不同的声音。为了达到这个目的,语音控制部分选用语音芯片ISD25120。ISD25120的录放时间为120秒,录音最多能分600段。只要在分段录/放音操作前(不少于300纳秒),给地址A0"A9赋值,录音及放音功能均从设定的起始地址开始。

    在设计时,除了用单片机控制ISD25120的复位和触发端外,使用四位I/O控制芯片的放音起始地址。在初始化时,分别将两个机器人的不同信息写入语音芯片的A0"A3,选择放音;在动作过程中,在行为发生改变时,写入新的信息,改变放音选择,播放不同音乐。   

系统软件设计   

    系统软件主要由主程序模块、中断服务程序模块、语音控制模块和运动规划模块等部分组成。整个系统的软件部分采用汇编语言编写。

结论   

    经过实验证明,两个机器人在不受外界干扰的情况下,能够正确地完成追跑动作。此设计为研究机器人之间简单互动提供了试验平台。在以后的研究中,通过改变传感器位置及内部程序,可以改变二者间的互动关系,例如协作等,进行更深的研究。 <script type=text/javascript> funcTIon ImgZoom(Id)//重新设置图片大小 防止撑破表格 { var w = $(Id).width; var m = 650; if(w < m){return;} else{ var h = $(Id).height; $(Id).height = parseInt(h*m/w); $(Id).width = m; } } window.onload = funcTIon() { var Imgs = $("content").getElementsByTagName("img"); var i=0; for(;i