当前位置:文档之家› “创意之星”模块化机器人实验指导书(实验版)

“创意之星”模块化机器人实验指导书(实验版)

电子科技大学“创意之星”模块化机器人实验机械电子工程学院2010 年3 月目录实验一MULTIFLEX控制卡编程实验 (1)实验二多自由度串联式机械手 (10)实验三简易四足机器人 (15)实验四轮式机器人运动控制实验 (19)实验五机器人传感系统实验 (24)实验六自主避障机器人实验 (27)实验七追光的机器爬虫 (37)实验八开放性实验:设计自己的机器人 (48)实验一MultiFLEX 控制卡编程实验实验目的(1)了解MultiFLEX控制卡的基本结构;(2)了解WinAVR+AVRStudio编译环境的使用;(3)了解C 语言环境下编写控制程序,并编译、下载到MultiFLEX 控制器中执行的流程(4)熟悉关于AVR 单片机的io 口有关的寄存器的概念、作用(5)理解函数gpio_mode_set(),write_gpio(),read_gpio()的定义,掌握其用法(6)熟悉并掌握利用2 中的3 个函数控制MultiFLEX 控制卡的16 路IO 口实验环境:UP-MRcommander 控制软件实验器材:计算机1台MultiFLEX 控制卡1块控制卡电源线1根串口下载线1根232电缆1根USB转232电缆1根舵机4个舵机延长线4根实验步骤1 WinAVR 以及AVRStudio 软件的安装首先大家打开实验指导书配套光盘,在“MultiFLEX 控制卡\AVR MCU 开发资料”目录下,打开“WinAVR”文件夹,双击“WinAVR-20060421-install.exe”完成WinAVR 的安装;然后打开“AVR Studio”文件夹,根据文件夹里面的安装说明进行AVRstudio 的安装,并将其升级到最新版本。

注意:请先安装WinAVR 再安装AVRStudio,这样WinAVR 才能自动嵌入到AVRStudio 中。

2 用3AVRStudio 建立一个工程首先打开我们刚刚安装好的AVRStudio,会出现如下窗口:点击选框1 中的按钮可以新建一个工程,点击选框2 中的按钮可以打开一个工程,选框3 是最近你所打开的文件,你可以选中快速将其打开。

在这里,我们点击1(NewProject),会出现如下窗口:在此窗口中我们可以设置关于新工程的一些基本信息。

在选框1(Projec tType)中,第一项AtmelAVRAssembler 指汇编工程文件,第二项AVRGCC 指建立后的文件为C 语言工程文件,在此我们选择AVRGCC(如果没有安装WinAVR 则此处不会出现AVRGCC 选项)。

在选框2 中,我们可以确定工程名(Project name)以及初始文件名(Initial file),在此我们不妨均取名为test。

在选项框3 中,我们可以确定工程所在的文件夹位置,在此我们不妨将路径设为D:\test。

在选项卡2 中如果选中Create folder,则会在3 中确定的文件夹中新建一个以工程名为文件夹名的文件夹,所有与该工程有关的文件会放在此文件夹内;在选项卡2 中选中Create initial file 会生成一个初始.c 文件,方便我们编写程序。

以上设定完成后我们点击Next 进行下一步设置,会弹出如下窗口:在此窗口中我们可以设置一些关于计算机调试的一些信息。

在选项框1 之中我们设置程序调试平台,在此我们选择AVRSimulator。

在选项框2 中我们可以选择单片机类型,你可以根据实际需要选择,在此我们选择ATmega128(本实验以创意之星控制板为平台,所以选择创意之星的控制核心ATmega128,AVRStudio 可以进行软件模拟单片机的运行过程,但本书中不作介绍)。

选择完成后我们点击Finish,这样一个新工程就初步建立了。

然后会出现如下窗口。

其中选框1 为菜单栏,选框2 为工具栏,选框3 为工程管理树,选框4 为程序编辑栏,选框5 为编译信息栏。

作为我们的第一个代码实验,我们可在选框4 中输入如下程序:#include <avr/io.h>#define BEEP_ON PORTG |= _BV(PG3)#define BEEP_OFF PORTG &= ~_BV(PG3)int main(void){int i,j;PORTG = 0;DDRG = 0xff;while(1){for(i=0;i<0xFF;i++){for(j=0;j<0xFF;j++);}BEEP_ON;for(i=0;i<0xFF;i++){for(j=0;j<0xFF;j++);}BEEP_OFF;}}然后在菜单栏选择“Project——》Configuration Options”会弹出如下窗口:在控制核心工作频率(Frequency)一栏输入14745600,由于创意之星采用的晶振是此频率,故如此设置。

其他选项均采用默认设置即可,然后点击确定。

保存文件,然后在菜单栏选择“Build——》Build”(或者按F7),如下图所示:在编译信息栏会出现相应的编译信息,显示是否有错误,其中显示“Build succeeded with 0 Warnings…”说明我们编译正常通过,这时,在我们当初设置的工程所在的文件夹的default 文件夹“D:\test\test\default”里会出现很多新文件,这些都是程序编译的结果,其中有个test.hex 文件是程序烧写文件,将这个文件经过烧录软件下载至MultiFLEX 控制板后程序就能运行,至于如何烧写我们将在后面进行介绍。

3 将*.hex 文件烧录至MultiFLEX 控制卡中首先我们要安装烧写软件PonyProg2000,打开实验指导书配套光盘,在“\MultiFLEX 控制卡\AVR MCU 开发资料\ponypro ”目录下,运行ponyprogV206f.exe,安装完毕后运行,有两个提示会出现,都选择确认,最终正确运行的PonyProg2000 如下图所示:首先我们应该对软件进行总线时序校准,在Setup 中选择Calibration 即可。

然后进行下载方式设置,点击“Setup——》InterfaceSetup”5“创意之星”模块化机器人实验会出现如下窗口:由于“创意之星”配置的是并行下载线,所以我们应该选择Parallel,在下拉选项中选择AvrISPI/O,如上图所示,其他选项按其默认设置,不予更改,然后点击“OK”完成设置。

然后我们进行目标芯片的选择:点击“Device——》AVR micro”,在弹出的选项框中选择ATmega128,如下图所示,这样我们就完成了目标芯片的选择。

现在我们用并口下载线将电脑和MultiFLEX 控制卡进行连接。

下图是“创意之星”提供的并口下载线以及其线序:6下图是MultiFLEX 控制卡的功能区域图,将下载线的5 针插头与其中的H 区的5 针插头相连接,注意线序连接完成后给控制卡通上电源(程序烧写过程中不允许断电,请确保电源的可靠性)。

然后在刚才打开的PonyProg2000 中点击“File——》Open Device File”或者点击图标打开我们前面生成的test.hex 文件(应该在“D:\test\test\default”文件夹中),然后点击“Command——》Write All”或者点击图标,然后程序就会开始烧写至控制卡里面。

当PonyProg2000 显示烧写成功时我们的第一个实验程序就顺利的烧写进MultiFLEX 控制卡中了,正常情况下我们会听到控制卡蜂鸣器发出急促的“嘟嘟嘟”的声音,如果没有任何现象请你检查以上步骤是否按要求完成或者检查下载线有没有插反、控制卡是否正常供电,修改有问题的地方后再生成hex 文件进行烧录,直至蜂鸣器出现规则的嘟嘟声为止。

4 编写C 程序实现对16 路I/O 口的控制I/O 口(In/Out 口)是数字电路的重要组成部分之一,通过I/O 口,我们可以控制端口的电平变化,也可以对端口的电平信息进行读取。

在机器人人领域对I/O 口的操作更是无处不在,那么针对创意之星的MultiFLEX 控制卡我们怎么通过编写c 与程序对其I/O 口进行操作呢,我们将在本小节对其进行介绍。

首先我们来简单了解一下AVR 单片机与I/O 口有关的寄存器。

AVR 单片机与I/O 口有关的寄存器有3 个:PORTX,DDRX,PINX(X 为端口编号)。

DDRX 说明X 端口的输入输出状态,例如:如PORTA=0x0F=0000 1111,则引脚PA0-PA3均为输出(1 为输出),引脚PA4-PA7 均为输入(0 为输入)。

PORTX 说明X 端口的输入输出的具体信息,例如:当PORTA=0x0F 时,若PORTA=0X33=00110011,则引脚PA0、PA1 为输出,且输出信号为高(1);引脚PA2、Pa3 为输出,但输出信号为低(0);PA4、PA5 为输入且输入有效;至于PA6、PA7 虽然DDRA 已经将其设置为输入,但是PORTA 使其输入无效,所以PA6、PA7 的输入信号读不出来。

PINX 为输入端口的具体信息(PINX 只能读取不能写入),例如:当DDRA=0x0F,PORTA=0x33时,如果读取PINA 即char temp=PINA,则temp=--XX0011,其中为输入的引脚只有PA4-PA7,PA4 与PA5 状态为XX,X 为输入信号,而PA6、PA7 的输入为--,-为一个不确定的数。

方便大家看懂源程序,对于MultiFLEX 控制卡,我们已经在系统程序里面进行了处理,同学们只需要调用相关的函数即可对控制卡的IO0-IO15 这16 个引脚进行控制。

实验准备:1.控制卡的IO0-I03 分别与4 个LED 灯连接2.控制卡的I015 与1 个碰撞传感器(实质上是一个开关)连接3.控制卡与电脑之间用并口下载线正确连接4.控制卡电源线正确连接实验程序:#include "Public.h"#include "Usertask.h"void user_task(void){uint8 io_in; uint8io_out;uint8 temp8; uint16temp16;gpio_mode_set(0x00FF);write_gpio(0xFF00);while(1){temp16 = read_gpio();io_in = (uint8)(temp16>>8);temp8=(io_in&0x80);if(temp8==0){ io_out=0x01;while(io_out){write_gpio(~((uint16)io_out));delay(5);//延时5×20MS=0.1sio_out<<=1;write_gpio(~((uint16)io_out));delay(5);}}else write_gpio(0xFF00);}}实验总结整个实验的运行结果应为:当开关(碰撞传感器)未按下时,所有LED 灯点亮,当开关持续按下时,led 灯循环点亮。

相关主题