open宝贝车培训-技术讲解_第1页
open宝贝车培训-技术讲解_第2页
open宝贝车培训-技术讲解_第3页
open宝贝车培训-技术讲解_第4页
open宝贝车培训-技术讲解_第5页
已阅读5页,还剩38页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

-龙人宝贝Open教育机器人宝贝车简介双控制器(C51和AVR)教学板两个连续旋转的舵机开放的实验面包板丰富的传感器配置教学板内容概述建立编程开发环境安装调试让宝贝车动起来利用传感器导航建立编程开发环境C51单片机

KeiluVision

AVR单片机WINAVRISP程序下载SLISP串口调试工具建立编程开发环境安装keil,尝试建立一个新的工程建立编程开发环境安装ISP下载程序建立编程开发环境串口调试工具建立编程开发环境串口线----连接在电脑的串口,可以通过单片机将信息输出到串口调试工具中ISP下载线接在电脑的并口上,通过ISP下载软件可以将程序下载到单片机系统调试接上两个伺服舵机到教学板的P1_0和P1_1电机口,进行舵机的调零系统调试舵机的特性如何连接舵机有三个连接引脚,一个+5V的电源,一个地,以及一个信号系统调试舵机的特性如何控制在接上+5V电源后,舵机运动的速度和方向由脉冲信号的时序决定,宝贝车上使用的舵机时序特点是高电平从1.3ms到1.5ms,低电平为20ms时电机为顺时针旋转,高电平1.5ms到1.7ms电机逆时针旋转。高电平持续1.3ms,低电平持续20ms,电机全速顺时针旋转。系统调试舵机的特性如何控制高电平持续1.7ms,低电平20ms,电机全速逆时间旋转。高电平持续1.5ms,低电平20ms,电机保持不动系统调试关于调零为此我们需要做一下工作给单片机一个程序,让接电机信号的P1_0和P1_1口按保持不动的脉冲输出高低电平信号。打开电源,使用我们提供的小十字起轻轻的转动调零口,使电机静止下来。刚刚出产的电机并不能正确的按照时序工作,需要调零,调零就是在给定电机高脉冲1.5ms的情况下,保持电机不动。让宝贝车动起来认识一下AT89S52AT89SC52单片机由4个口,P0,P1,P2,P3来进行外围扩展和控制。4个P口的每个引脚都可以做普通I/O使用。此外一些引脚还有第二功能。P0和P2口可以组成16位的外部地址总线,用于以总线方式扩展外部器件。P3口I/O引脚都有地二功能,主要有串口收(RXD)发(TXD)信号口;两个外部中断信号(INT0和INT1)口;外部脉冲计数信号(T0和T1)口等,具体可以参考相关资料或书籍。让宝贝车动起来准备好调零的程序打开第二章BothServoClockwise这个例程#include<BoeBot.h>#include<uart.h>intmain(void){ uart_Init(); //初始化串口

printf("TheLEDsconnectedtoP1_0andP1_1areblinking!\n"); while(1) { P1_0=1; //P1_0输出高电平

P1_1=1; //P1_1输出高电平

delay_nus(1300); //延时500ms P1_0=0; //P1_0输出低电平

P1_1=0; //P1_1输出低电平

delay_nms(20); //延时20ms }}让宝贝车动起来分析这个程序头文件#include<BoeBot.h>包含了两个延时函数#include<uart.h> 包含了串口的驱动串口初始化uart_Init();初始化串口控制部分控制部分在一个while(1)下的无限循环中让宝贝车动起来根据时序写程序让电机引脚为高电平

P1_0

=

1;

P1_1

=

1;让高电平1.5ms(1500us)

delay_nus(1500);让电机引脚为低电平

P1_0

=

0;

P1_1

=

0;让低电平保持20ms

delay_nms(20);循环

让宝贝车动起来关于单片机C语言编程基于C语言的单片机编程除了要遵守C语言的语法外,针对不同单片机的特点,对C语言做了一些扩展。如:对存储区间定义的关键字data,bdata,idata,pdata,xdata。对中断行为的关键字扩展interrupt

位变量,可重入关键字等程序中使用P1_0来表示P0口的第一个引脚,这是因为程序包含的AT89X52.H这个头文件中将引脚的地址通过宏定义成容易记忆的符号,单片机的其他器件也是这样表示的,具体请参考AT89X52.H这个头文件,以及相关资料。让宝贝车动起来调零将代码考到我们新建的工程中,修改程序中延时函数参数1300为1500,编译程序。将生成的.HEX文件下载到单片机。将电源开关打开到2,用十字起分别调整两个电机的调零口,直到电机完全不转动为止。根据安装手册安装好宝贝车,接下编写程序来让车完成前进、后退、左转、右转等基本运动。让宝贝车动起来编写基本运动程序目标分析由于两个电机对称安装,只要是两个是两个轮子想相反的方向以相同的速度运动,车就会像一个方向像运动。语言实现使右边电机顺时针旋转,向P1_0口输出连续的高电平为1.3ms低电平为20ms的脉冲信号使左边电机逆时针旋转,向P1_1口输出连续的高电平为1.7ms低电平为20ms的脉冲信号让宝贝车动起来编写程序修改之前的调零程序的电机控制部分重新编译程序,并将生产的.HEX文件下载到单片机 P1_0=1; //P1_0输出高电平

delay_nus(1300); //延时500ms P1_0=0; //P1_0输出低电平

P1_1=1; //P1_1输出低电平 delay_nus(1500); P1_1=0; //P1_1输出高电平

delay_nms(20); //延时20ms让宝贝车动起来建立一个向前的运动函数供以后使用函数命名为ForwardvoidForward(void){ P1_1=1; delay_nus(1700); P1_1=0; P1_0=1; delay_nus(1300); P1_0=0; delay_nms(20);}让宝贝车动起来编写其他运动程序,并且封装成函数要让小车以不同方式运动,只需要通过调整信号高电平脉冲时间,以控制电机以不同的方向和速度运动即可.左转,只要两个高电平同为1300,再通过控制脉冲周期的次数来决定小车左转的速度.右转,只要两个高电平同为1700,再通过控制脉冲周期的次数来决定小车右转的速度.后退刚好与前进相反即可让宝贝车动起来用FOR语句控制转动角度程序在for中执行26次,使小车左转约90度voidLeft_Turn(void){inti;for(i=1;i<=26;i++) { P1_1=1; delay_nus(1300); P1_1=0; P1_0=1; delay_nus(1300); P1_0=0; delay_nms(20); }}让宝贝车动起来总结在编写程序的时候我们新明确任务,再逐步分解成我们容易使用的语言描述的任务。现在我们拥有了几个可以使小车运动的函数。我们可以把这些函数组织起来,做成一个运动的头文件,以供以后使用。形成自己的函数库,在编写程序的时候,我们可以把一些好用的小模块编写成通用的函数,以供需要时使用。最后再来看一个完整的例子ForwardLeftRightBackward在开始下一部分之前单片机C语言编程的一些特点总结While(1),很多时候我们希望单片机能够连续的做一些事情,如让电机运动,不断的扫描I/O口以检测信号,通常在做完一些变量声明,以及初始化工作后我会将控制程序放在一个无限循环中。Delay函数,单片机很多时候都会用到这个函数以等待一些事情完成,或按照某个时序控制I/O。利用传感器导航有了基本的运动基础,现在需要让小车通过传感器来感知外部的世界,并完成智能的运动。下面的内容包括以下几个方面通过外部信息来进行智能的运动的构思使用红外探测传感器完成红外线避障总结利用传感器导航1、感知外部信息2、分析处理信息3、做出智能决策4、执行决策利用传感器导航使用红外线探测器感知外部信息红外线探测器的原理红外线接收器像机器人的眼睛,它能够“看见”

980nm波长的红外线通过,接收器里面还带一个滤波器,接受38.5KHZ的电信号。接收到信号后引脚电平由高变低。(10)红外线发射器在接通电源之后发射980nm波长的红外线,所以只要使发射器一秒钟发射38,500次的红外光就能得到接收器能识别的信号。利用传感器导航认识需要使用的电子元器件红外线接收器、发射器三极管利用传感器导航在面包板上搭建好电路利用传感器导航编写红外线探测器驱动使用红外线探测器只要使红外线发射器以38.5khz发射红外线即可。从时序来分析,只要按照下面的时序来变化引脚电平利用传感器导航参照调零的程序来写红外发射驱动红外线触发信号接在P1_3上面发射完成马上检查红外线接收器信号红外线接收器件接在P1_2上这样就完成了一次收发过程!for(counter=0;counter<38;counter++){ P1_3=1; delay_nus(13); P1_3=0; delay_nus(13);}irDetectLeft

=

P1_2state();利用传感器导航delay_nus函数的不精确性由于调用函数本身是要消耗时间,所以为了有更精确,我们要修改一下程序的延时部分。Int

i

=

39;While(--i)

{RightLaunch=1;_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();RightLaunch=0;_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();}_nop_();在intrins.h这个头文件中。表示执行一条空指令。使用一连串的_nop_();来代替delay_nus();即可。记住加入instrins.h这个头文件。利用传感器导航完整的函数voidIRLaunch(unsignedcharIR){intcounter;if(IR=='L') for(counter=0;counter<38;counter++)//左边发射

{LeftLaunch=1;_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();LeftLaunch=0;_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();}if(IR=='R')。。。。。。。。。。

利用传感器导航测试你的红外线传感器编译程序,下载程序到教学板。打开串口调试程序,连接串口线利用传感器导航写出完整的程序现在我们将运动部分的函数加到程序中来按照之前的构思一步步完成程序感知外部信息处理得到的信息

IRLaunch('R');//右边发射

irDetectRight=RightIR;//右边接收

IRLaunch('L');//左边发射

irDetectLeft=LeftIR;//左边接收利用传感器导航写出完整的程序分析并处理得到的信息并作出决策得到的信息是左边和右边的红外线接收器的状态左边红外线信号右边红外线信号外部状态分析行为策略11两边都没有检测的信号前方没有障碍物。前进10右边有障碍物左转一定角度01左边有障碍物右转一定角度00两边(前方)有障碍物后退一段距离,转180度利用传感器导航写出完整的程序执行决策主要在决策的条件下执行之前的运动函数就可以了,这里我们用了一组if

…..

else

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论