资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,第八讲,模块化机电系统设计实验-中,结构组装与运动规划编程,组装实例介绍,全向运动小车,带机械手,组装实例介绍,四足机器人,组装实例介绍,自动追光的,4,足机械爬虫,组装实例介绍,自主避碰小车,控制卡及C程序编译环境简介,我们的MultiFLEX控制器的控制核心采用的是Atmel公司的Mega128高档单片机。,AVR系列单片机是Atmel生产的一种具有双总线结构的RISC(精简指令系统计算机)单片机,它相对于传统的CISC(复杂指令系统计算机)单片机而言,具有较短的指令周期和较快的运行速度。此外,AVR单片机还具有片内FLASH、片内看门狗定时器、片内同步/异步串行接口、片内定时器/计数器、片内数模转换器等多种内部资源。,上述这些特点使采用AVR单片机的应用系统不仅具有运行速度快、结构简单、功能强大的特点,而且具有高可靠性和良好的经济型。,控制卡及C程序编译环境简介,AVR的程序编译软件比较多,比较著名的有ICC AVR、WinAVR、CodeVersionAVR、IAR等等。,以上软件各有优势:,ICCAVR具有良好的基于windows的集成开发环境,有人性化的代码生成向导,而且价格低廉(相对于keil,IAR而言)、升级速度快,在国内有双龙电子提供技术支持。,WinAVR是基于GCC的一个免费软件,网上有大量的教程以及源代码可供参考(比较有名的有ouravr等),很多人认为它没有良好的集成开发环境而弃之不用,实际上它会自动嵌入到ATMEL公司的官方开发软件AVRStudio中,AVRStudio的良好集成开发环境使得用GCC进行程序开发变得异常简单。,和ICCAVR相比,其主要优势在于完全免费,有很多现成的函数可调用,网上可利用资源丰富等优点;后两者国内使用较少,在此不做介绍。,本课程将以WinAVR+AVRStudio作为编译环境进行程序设计。,WinAVR以及AVRStudio软件的安装,首先打开实验指导书配套光盘,在“MultiFLEX控制卡AVR MCU开发资料”目录下,打开“WinAVR”文件夹,双击“WinAVR-20060421-install.exe”完成WinAVR的安装;,然后打开“AVR Studio”文件夹,根据文件夹里面的安装说明进行AVRstudio的安装,并将其升级到最新版本。,请先安装WinAVR再安装AVRStudio,这样WinAVR才能自动嵌入到AVRStudio中。,用AVRStudio建立一个工程,如何用AVRStudio建立一个新工程呢?首先打开我们刚刚安装好的AVRStudio,会出现如下窗口:,用AVRStudio建立一个工程,点击选框1中的按钮可以新建一个工程,点击选框2中的按钮可以打开一个工程,选框3是最近你所打开的文件,你可以选中快速将其打开。在这里,我们点击1(NewProject),会出现如下窗口:,用AVRStudio建立一个工程,如何用AVRStudio建立一个新工程呢?首先打开我们刚刚安装好的AVRStudio,会出现如下窗口:,用AVRStudio建立一个工程,在此窗口中我们可以设置关于新工程的一些基本信息。在选框1(ProjectType)中,第一项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进行下一步设置,会弹出如下窗口:,用AVRStudio建立一个工程,在此窗口中我们可以设置一些关于计算机调试的一些信息。在选项框1之中我们设置程序调试平台,在此我们选择AVRSimulator。在选项框2中我们可以选择单片机类型,你可以根据实际需要选择,在此我们选择ATmega128(本实验以创意之星控制板为平台,所以选择创意之星的控制核心ATmega128,AVRStudio可以进行软件模拟单片机的运行过程,但本书中不作介绍)。选择完成后我们点击Finish,这样一个新工程就初步建立了。然后会出现如下窗口。,其中选框1为菜单栏,选框2为工具栏,选框3为工程管理树,选框4为程序编辑栏,选框5为编译信息栏。,用AVRStudio建立一个工程,作为我们的第一个代码实验,我们可在选框4中输入如下程序:,#include/我们的第一个程序,#defineBEEP_ONPORTG|=_BV(PG3)/蜂鸣器发声,/Gcc中的_BV()类似于ICC中的BIT()函数,以上语句就是把PORTG的8个引脚中的第4个引脚置1,#defineBEEP_OFFPORTG&=_BV(PG3)/蜂鸣器停止发声,int main(void),int i,j;,PORTG=0;,DDRG=0 xff;,while(1),for(i=0;i0 xFF;i+),for(j=0;j0 xFF;j+);,BEEP_ON;,for(i=0;i0 xFF;i+),for(j=0;j0 xFF;j+);,BEEP_OFF;,/本实验的源代码在配套光盘“实验指导书第八章实验程序源代码8.2”文件夹,用AVRStudio建立一个工程,然后在菜单栏选择“ProjectConfiguration Options”,用AVRStudio建立一个工程,弹出如下窗口:,在控制核心工作频率(Frequency)一栏输入14745600,由于创意之星采用的晶振是此频率,故如此设置。其他选项均采用默认设置即可,然后点击确定。,用AVRStudio建立一个工程,保存文件,然后在菜单栏选择“BuildBuild”(或者按F7),如图所示:,用AVRStudio建立一个工程,在编译信息栏会出现相应的编译信息,显示是否有错误,本实验编译结果如下:,其中显示“Build succeeded with 0 Warnings”说明我们编译正常通过,这时,在我们当初设置的工程所在的文件夹的default文件夹“D:testtestdefault”里会出现很多新文件,这些都是程序编译的结果,其中有个test.hex 文件是程序烧写文件,将这个文件经过烧录软件下载至MultiFlex控制板后程序就能运行,至于如何烧写我们将在后面进行介绍。,将*.hex文件烧录至MultiFlex控制卡中,我们介绍了怎么建立一个工程以及如何生成.hex烧写文件,那么怎么将此文件烧录制控制卡中呢,我们将就此进行介绍。,教师已经将Pony Prog软件安装到实验用计算机上.打开Pony Prog软件,界面如下图所示:,将*.hex文件烧录至MultiFlex控制卡中,由于“创意之星”配置的是并行下载线,所以我们应该选择Parallel,在下拉选项中选择AvrISPI/O,如上图所示,其他选项按其默认设置,不予更改,然后点击“OK”完成设置。,然后我们进行目标芯片的选择:点击“DeviceAVR micro”,在弹出的选项框中选择ATmega128,如下图所示,这样我们就完成了目标芯片的选择。,将*.hex文件烧录至MultiFlex控制卡中,现在我们用并口下载线将电脑和MultiFlex控制卡进行连接。下图是“创意之星”提供的并口下载线以及其线序:,将*.hex文件烧录至MultiFlex控制卡中,下图是MultiFlex控制卡的功能区域图,将下载线的5针插头与其中的H区的5针插头相连接,注意线序,连接完成后给控制卡通上电源(程序烧写过程中不允许断电,请确保电源的可靠性)。,用AVRStudio建立一个工程,然后在刚才打开的PonyProg2000中点击“FileOpen Device File”或者点击图标 打开我们前面生成的test.hex文件(应该在“D:testtestdefault”文件夹中),然后点击然后点击“CommandWrite All”或者点击图标,然后程序就会开始烧写至控制卡里面,烧写过程如下图:,将*.hex文件烧录至MultiFlex控制卡中,当PonyProg2000显示烧写成功时,我们的第一个实验程序就顺利的烧写进MultiFlex控制卡中了.,正常情况下我们会听到控制卡蜂鸣器发出急促的“嘟嘟嘟”的声音,如果没有任何现象请你检查以上步骤是否按要求完成或者检查下载线有没有插反、控制卡是否正常供电,修改有问题的地方后再生成hex文件进行烧录,直至蜂鸣器出现规则的嘟嘟声为止。,这个简单程序的功能就是让控制卡产生蜂鸣声,MultiFlex控制卡系统程序简介,下面我们将介绍MultiFlex控制卡的程序总体结构以及介绍如何编写用户自己的c语言程序实现对机器人的控制。,通过第七章的实验,相信大家已经非常熟悉如何使用电脑对创意之星进行控制。实际上,我们通过电脑设置的命令会通过电脑串口传递给MultiFlex控制卡,控制卡通过内部程序程序实现命令,进而实现对机器人的控制,那么控制卡具体是怎么工作的呢?,MultiFlex控制卡系统程序简介,MultiFlex控制卡的工作流程图如图所示:,MultiFlex控制卡系统程序简介,MultiFlex控制卡的工作流程:,控制卡通电,控制卡首先读取控制卡功能选择拨码开关的用户设置情况,然后进行系统的初始化(具体设置规则请回顾1.3.4MultiFlex控制卡简要说明),控制卡根据用户设置判断是执行用户下载到控制卡的动作序列还是将各关机回复到初始位置等待上位机(电脑)的命令:,如果是用户下载到控制卡的动作序列,控制卡将循环执行该序列,直到接收到上位机的命令为止;,如果是回复到初始位置等待上位机命令,则控制卡将使机器人各关节处于初始位置,然后等待上位机的指令。,然后控制卡就一直进行“等待命令,执行上位机指令,等待命令”循环。,MultiFlex控制卡系统程序简介,MultiFlex控制卡的工作流程:,由于整个控制卡的控制程序比较复杂,并且设计到很多单片机最根本的知识(如波特率设置,io口设置,中断等)还有数据结构方面的知识,对于初学者想弄明白可能需要花上一个月甚至更多的时间,所以在此不对其源程序进行具体剖析,同学们可在每次做完实验之余,或着利用课余时间自己研究,不懂的多查阅资料(建议大家研究透彻,将此卡的系统程序研究透彻之后基本上你就可以进行AVR单片机的基础开发了)。,MultiFlex控制卡的C语言程序编写,在本节,我们将学习如何调用Usertask.h中声明的函数实现对舵机,电机,控制卡IO口、AD口、蜂鸣器的控制。,MultiFlex控制卡的C语言程序编写,编写C程序实现对12路舵机的控制,用“创意之星”机器人套件搭建的机器人的主要关节都是由舵机驱动的,那么怎么用c语言直接控制舵机运动呢,我们将在本小节进行介绍。,在打开我们前面8.3.2里拷贝到电脑上的工程文件(“D:创意之星8.3.1控制卡原始程序MultiFlex.aps”)后我们选择USERTASK.C对其进行编辑。输入如下程序,注释部分可以不输入(源程序参见实验指导书配套光盘“实验指导书第八章实验程序源代码8.48.4.1编写C程序实现对12路舵机的控制”下的USERTASK.C文件),MultiFlex控制卡的C语言程序编写,编写C程序实现对12路舵机的控制,然后打开SYSTASK.C文件,将处于最后的main()函数进行细微改动。,位于SYSTASK.C末尾的main()函数应该如下所示:,intmain(void),Sys_Init();/单片机初始化,WORK_LED_ON;,while(1),system_task();/系统任务,接收串口发送命令进行相应控制,user_task();/用户自己编写的任务,MultiFlex控制卡的C语言程序编写,编写C程序实现对12路舵机的控制,分析代码我们会发现控制卡开机后会先初始化,打开工作状态指示灯,然后不断的执行系统函数system_task()和用户函数user_task(),而system_task()函数的功能就是实现8.3.1介绍的控制卡功能,而user_task()则是我们自己编写的函数。,为了能让我们所写的控制函数能够直接的、可靠的通过控制卡对机器人的各种执行器进行控制,我们最好把系统函数给屏蔽掉,即在system_task()前面加上“/”。修改后的main()函数如下所示:,MultiFlex控制卡的C语言程序编写,编写C程序实现对12路舵机的控制,修改后的main()函数如下所示:,intmain(void),Sys_Init();/单片机初始化,WORK_LED_ON;,while(1),/system_task();/系统任务,接收串口发送命令进行相应控制,user_task();/用户自己编写的任务,MultiFlex控制卡的C语言程序编写,编写C程序实现对12路舵机的控制,将从配套光盘“实验指导书第八章实验程序源代码8.3”里拷贝过来的“8.3.1控制卡原始程序”文件夹的项目文件MultiFlex.aps中如上修改Usertask.c文件后,按F7将整个工程进行编译,生成MultiFlex.hex文件(该文件应该在“D:创意之星8.3.1控制卡原始程序”的default文件夹内,后面的实验中不再说明)。,然后我们用“创意之星”套件中的并口下载线将电脑的并口与MultiFlex控制卡的程序下载口连接,并将4个舵机分别接到控制卡的PWM0PWM3上(舵机连接方法见第六章),然后给控制卡通电、,并且将前面生成的MultiFlex.hex文件烧写至MultiFlex控制卡中,具体烧写方法参见8.2.4。,MultiFlex控制卡的C语言程序编写,编写C程序实现对12路舵机的控制,如果操作正确,我们会看见4路舵机呈周期性运动。,如果发现异常请检查程序或者连线,一般来说程序中常出先的错误是:,命令末尾的英文半角分号“;”误用成了汉字的全角分号“;”,少了语句中少了“”或者“”;,连线常出现的错误是舵机控制线插反,或者是程序下载线插反,又或者是我们忘了给控制卡通电。,请大家仔细检查错误,排除错误后重新编译工程,生成MultiFlex.hex文件后重新烧录至控制卡中,直到与控制卡相连的舵机呈周期性运动为止。,至此我们就顺利完成了用c语言实现机器人关节(在这里用舵机实现)运动控制的实验。,MultiFlex控制卡的C语言程序编写,编写C程序实现对12路舵机的控制,实验作业:,发挥想象力,编写c语言程序,让我们第七章中组装的某个机器人(包含多个舵机)按照一定的动作运动。,注意:,舵机目标角度参数取值应在0-180之间,速度参数取值应在0-255之间,delay()函数参数值范围在0-255之间,MultiFlex控制卡的C语言程序编写,编写C程序实现对4路电机的控制,电机是机器人非常重要的组成部件之一,我们已经知道了怎样用“创意之星”机器人套件提供的上位机程序通过控制卡对电机进行控制,那么怎么样用过编写c语言文件对电机进行操作呢?,在本实验以及后面的实验中,我们都只讨论怎么对USERTASK.C进行编辑,其余步骤跟8.4.1相同,不再赘述。,对四路电机进行控制的USERTASK.C如下所示(源程序参见实验指导书配套光盘“实验指导书第八章实验程序源代码8.48.4.2编写C程序实现对4路电机的控制”文件夹下):,MultiFlex控制卡的C语言程序编写,编写C程序实现对4路电机的控制,整个程序运行的结果为电机1、3以最大速度正转3s,同时电机2、4以最大速度反转3s;然后电机1、2、3、4在2.6s内均匀减速至0,然后定顿1s。整个工程编译后电机将按以上规律循环运动。,将“创意之星”套件中配置的4个直流伺服电机分别与控制卡的M1-M4插口相连接(线序参见第六章),将从配套光盘“实验指导书第八章实验程序源代码8.3”里拷贝过来的“8.3.1控制卡原始程序”文件夹的项目文件MultiFlex.aps中如上修改Usertask.c文件后,按F7进行编译,生成MultiFlex.hex文件后将其烧录至控制卡中,观察实验结果。如果运动结果和以上分析所得结果不同的话请检查程序以及连线,特别注意程序中分号及括号的是否为半角以及电机有没有插反,排除错误后再将程序编译,烧录至控制卡中,直至得到正确的结果为止。,MultiFlex控制卡的C语言程序编写,编写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为端口编号)。,MultiFlex控制卡的C语言程序编写,编写C程序实现对16路I/O的读写,DDRX说明X端口的输入输出状态,例如:如PORTA=0 x0F=0000 1111,则引脚PA0-PA3均为输出(1为输出),引脚PA4-PA7均为输入(0为输入)。,PORTX说明X端口的输入输出的具体信息,例如:当PORTA=0 x0F时,若PORTA=0X33=0011 0011,则引脚PA0、PA1为输出,且输出信号为高(1);引脚PA2、Pa3为输出,但输出信号为低(0);PA4、PA5为输入且输入有效;至于PA6、PA7虽然DDRA已经将其设置为输入,但是PORTA使其输入无效,所以PA6、PA7的输入信号读不出来。,PINX为输入端口的具体信息(PINX只能读取不能写入),例如:当DDRA=0 x0F,PORTA=0 x33时,如果读取PINA即char temp=PINA,则temp=-XX0011,其中为输入的引脚只有PA4-PA7,PA4与PA5状态为XX,X为输入信号,而PA6、PA7的输入为-,-为一个不确定的数。,MultiFlex控制卡的C语言程序编写,编写C程序实现对16路I/O的读写,以上是只是关于端口寄存器的一个简略介绍(如果读者想了解更多相关知识,请参考相关资料,推荐黄任的AVR单片机与CPLD/FPGA综合应用入门,北京航空航天大学出版社).,方便大家看懂源程序,对于MultiFlex控制卡,我们已经在系统程序里面进行了处理,同学们只需要调用相关的函数即可对控制卡的IO0-IO15这16个引脚进行控制。,对控制卡I/O口进行控制的USERTASK.C源程序参见实验指导书配套光盘“实验指导书第八章实验程序源代码8.48.4.3编写C程序实现对16路IO口的控制”:,MultiFlex控制卡的C语言程序编写,编写C程序实现对16路I/O的读写,整个实验的运行结果应为:当开关(碰撞传感器)未按下时,所有LED灯点亮,当开关持续按下时,led灯循环点亮。,将“创意之星”套件中配置的4个led灯分别与控制卡的IO0-IO3插口相连接(连接方法见第六章),将1个碰撞开关与控制卡的IO15插口相连接,给控制卡通电。,在AVRStudio中将从配套光盘“实验指导书第八章实验程序源代码8.3”里拷贝过来的“8.3.1控制卡原始程序”文件夹的项目文件MultiFlex.aps中如上修改Usertask.c文件后,按F7进行编译,生成MultiFlex.hex文件后将其烧录至控制卡中,观察实验结果。,如果运动结果和以上分析所得结果不同的话请检查程序以及连线,特别注意程序中分号及括号的是否为半角以及led灯有没有插反,排除错误后再将程序编译,烧录至控制卡中,直至得到正确的结果为止。,MultiFlex控制卡的C语言程序编写,编写C程序实现对16路I/O的读写,实验作业:,发挥想象力,编写c语言程序,让我们的led灯按照一定的规则(不同于跑马灯)闪烁。,MultiFlex控制卡的C语言程序编写,编写C程序实现对路A/D口的读写,A/D口(ADC模拟/数字信号转换器)是MultiFlex控制卡的又一重要组成部分之一。在上一小节介绍的I/O口是单片机读取传感器信息以及驱动执行器的一个重要组成部分,但是I/O口只支持数字信号(0、1),那么对于输出模拟信号的传感器,我们想要读取它的输出信息,我们就需要用到A/D口。,MultiFlex控制卡的C语言程序编写,编写C程序实现对路A/D口的读写,A/D口可以进行数字信号与模拟信号的转化,在这里我们仅简单介绍A/D口的模拟信息采集过程:传感器输出的模拟信号到达A/D口后,单片机会对输入的连续模拟信号进行定时采集,进而得到一系列时间间隔一定的离散信号,用这些离散的点信号来代替以前连续的曲线信号,由于两次采集之间的时间间隔极短,所以由连续信号转化为离散信号的误差极小,在普通工程应用领域我们可以忽略两者之间的误差。,由于现在数字信息处理技术日益发达,现在已有非常成熟的算法对A/D采集的离散数据进行滤波,以及幅频、相频分析,进而讲获取的信息用于自动化控制。,我们从自然界获取的信号大多是连续的(温度,光强,电压),对这些信号的处理有着广泛而深远的意义,所以A/D口的使用极为广泛。,MultiFlex控制卡的C语言程序编写,编写C程序实现对路A/D口的读写,下面将介绍如何使用C语言编写程序对MultiFlex控制卡的A/D口进行操作,获取外部的光强信息,进对舵机进行操作,使舵机的运动速度与外部光强成正比。,对控制卡I/O口进行控制的USERTASK.C如下所示(源程序参见实验指导书配套光盘“实验指导书第八章实验程序源代码8.48.4.4编写C程序实现对7路AD口的控制”):,MultiFlex控制卡的C语言程序编写,编写C程序实现对路A/D口的读写,下面将介绍如何使用C语言编写程序对MultiFlex控制卡的A/D口进行操作,获取外部的光强信息,进对舵机进行操作,使舵机的运动速度与外部光强成正比。,对控制卡I/O口进行控制的USERTASK.C源程序参见实验指导书配套光盘“实验指导书第八章实验程序源代码8.48.4.4编写C程序实现对7路AD口的控制”):,MultiFlex控制卡的C语言程序编写,编写C程序实现对路A/D口的读写,整个实验的运行结果应为:开机后,舵机在0-180度之间往复运动,其运动速度与外部光照强度成正比(外部光照强度通过光强传感器采集,采集频率2Hz)。我们可以用手遮住或用光照光强传感器,观察现象。,MultiFlex控制卡的C语言程序编写,编写C程序实现对路A/D口的读写,将“创意之星”套件中配置的舵机(1个)与控制卡的PWM0插口相连接,将1个光强传感器与控制卡的AD0插口相连接(连接方法见第六章),给控制卡通电。,在AVRStudio中将USERTASK.C编写完毕后,按F7进行编译,生成MultiFlex.hex文件后将其烧录至控制卡中,观察实验结果。,如果运动结果和以上分析所得结果不同的话请检查程序以及连线,特别注意程序中分号及括号的是否为半角以及传感器线、舵机线有没有插反,排除错误后再将程序编译,烧录至控制卡中,直至得到正确的结果为止。,如用MultiFlex控制卡采集外部电压信息,请确保外部电压输入值5V(本卡AD基准电压值),否则有可能造成硬件损坏!,在选项框1之中我们设置程序调试平台,在此我们选择AVRSimulator。,4编写C程序实现对7路AD口的控制”):,以上是只是关于端口寄存器的一个简略介绍(如果读者想了解更多相关知识,请参考相关资料,推荐黄任的AVR单片机与CPLD/FPGA综合应用入门,北京航空航天大学出版社).,C如下所示(源程序参见实验指导书配套光盘“实验指导书第八章实验程序源代码8.,传感-决策-控制综合实验,首先我们来简单了解一下AVR单片机与I/O口有关的寄存器。,用AVRStudio建立一个工程,C末尾的main()函数应该如下所示:,修改后的main()函数如下所示:,传感-决策-控制综合实验,首先我们的机器人在没有遇到障碍物的时候会一直向前运动。,编写C程序实现对路A/D口的读写,MultiFlex控制卡的C语言程序编写,编写C程序实现对路A/D口的读写,传感-决策-控制综合实验,传感-决策-控制综合实验,通过前面的实验,我们已经知道如何通过编写c程序操纵MultiFlex控制卡的A/D口、I/O口、PWM口、M口,并且学会了如何通过这些接口获取传感器信息,进行简单决策后控制led、电机、舵机等。,前面的例子比较简单并且相对独立,在下面我们将要进行传感-决策-控制综合实验里,我们将综合利用前面介绍的各种函数,让我们第七章里只能进行步态重复的部分机器人拥有简单的人工智能。,对四路电机进行控制的USERTASK.,首先我们来简单了解一下AVR单片机与I/O口有关的寄存器。,发挥想象力,编写c语言程序,让我们第七章中组装的某个机器人(包含多个舵机)按照一定的动作运动。,C末尾的main()函数应该如下所示:,编写C程序实现对路A/D口的读写,下面将介绍如何使用C语言编写程序对MultiFlex控制卡的A/D口进行操作,获取外部的光强信息,进对舵机进行操作,使舵机的运动速度与外部光强成正比。,1控制卡原始程序MultiFlex.,MultiFlex控制卡的C语言程序编写,Sys_Init();/单片机初始化,PORTG=0;,输入如下程序,注释部分可以不输入(源程序参见实验指导书配套光盘“实验指导书第八章实验程序源代码8.,首先我们来简单了解一下AVR单片机与I/O口有关的寄存器。,MultiFlex控制卡的C语言程序编写,WinAVR是基于GCC的一个免费软件,网上有大量的教程以及源代码可供参考(比较有名的有ouravr等),很多人认为它没有良好的集成开发环境而弃之不用,实际上它会自动嵌入到ATMEL公司的官方开发软件AVRStudio中,AVRStudio的良好集成开发环境使得用GCC进行程序开发变得异常简单。,用AVRStudio建立一个工程,然后打开“AVR Studio”文件夹,根据文件夹里面的安装说明进行AVRstudio的安装,并将其升级到最新版本。,我们可以用手遮住或用光照光强传感器,观察现象。,传感-决策-控制综合实验,自主避障全向运动机器人,在第七章的7.7节里我们搭建了一个全向运动机器人,在本实验中我们将对它进行简单改装,为其加上红外传感器,让我们的全向运动机器人拥有自动避障功能。,传感-决策-控制综合实验,自主避障全向运动机器人,在第七章的7.7节里我们搭建了一个全向运动机器人,在本实验中我们将对它进行简单改装,为其加上红外传感器,让我们的全向运动机器人拥有自动避障功能。首先对其进行结构改装,将其机械手部分去掉,加装蔽障用的红外传感器.,传感-决策-控制综合实验,自主避障全向运动机器人,改装后的全向运动机器人的各个舵机以及电机与控制卡的连接顺序以及开机后各舵机的初始位置依然同7.7的全向运动机器人一样,不做改动(机器手部分忽略),而加上的两个红外传感器则分别插在控制卡的IO口-0以及IO口-1上。至此我们的机器人就改装完毕了。,传感-决策-控制综合实验,自主避障全向运动机器人-逻辑分析(程序框架),“创意之星”的红外传感器探测距离20cm,当此距离之内有障碍物的话传感器输出电平会发生变化,首先我们的机器人在没有遇到障碍物的时候会一直向前运动。,当传感器检测到障碍物之后,由于传感器自生延时以及处理器的需要处理时间,所以机器人会由于惯性继续向前运动一段距离,我们就需要机器人推后一定的补偿距离,以保证和障碍物之间的距离为一个确定的范围。,传感-决策-控制综合实验,自主避障全向运动机器人-逻辑分析(程序框架),其次机器人会根据检测到障碍物的传感器不同而采取不同的策略:如果是左边传感器检测到障碍物之后,机器人应该向右转避开障碍物;如果是右边的传感器检测到障碍物的话机器人应该向左转;如果两个传感器都有障碍物的话机器人应该随机采取一个旋转方向(为简化程序,我们假设此时机器人仍向右转)。并且机器人左转与右转的角度不应该相同,否则在特殊情况下机器人会陷入死循环,在一个地方不停的循环的左转右转。请大家思考一下什么情况下机器人会陷入死循环。,当机器人转向后,如果机器人前方仍然有障碍物的话机器人应该重复后退专项操作,如果前方已经没有障碍物的话机器人应该继续向前引动。,传感-决策-控制综合实验,自主避障全向运动机器人-逻辑分析(程序框架),经过分析后,我们得到了如下逻辑:,
展开阅读全文