机电一体化实习-宝贝车总结报告.doc_第1页
机电一体化实习-宝贝车总结报告.doc_第2页
机电一体化实习-宝贝车总结报告.doc_第3页
机电一体化实习-宝贝车总结报告.doc_第4页
机电一体化实习-宝贝车总结报告.doc_第5页
已阅读5页,还剩61页未读 继续免费阅读

下载本文档

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

文档简介

机电一体化综合训练实习报告班级 姓名 学号 指导教师 长春工程学院2010年12月 目录一 实习环境 21. 硬件环境 22. 软件环境 2二 伺服电机调零 3三 宝贝车的基本巡航动作 6四 单片机输入接口与机器人触觉导航13五 单片机输入接口与机器人红外导航19六 光敏电阻传感器导航28七 距离检测35八 单片机输入接口与机器人校园游41九 实习总结(顾邦平) 53十 实习总结(孟林昆) 60实习环境1.硬件环境:计算机一台、龙人宝贝车套装(实验主板1块、AT89S52芯片1个、ISP下载线1根、RS232串口线 1根、连续旋转伺服马达2套、机器人运动底盘(带后轮)1 套、电池盒(带五号电池4节)1个、驱动轮(带防滑皮套)2个、线路板联接柱子4根、柱子(连接触觉传感器)2根、盘头螺钉22 颗、螺母18 颗、沉头螺钉4颗、螺钉4颗、螺丝刀1把尖嘴钳1把、跳线1袋、红色LED 2个、触须2条、排针2颗、电阻220k4个、电阻470k10个、电阻1k 4个、电阻2k 4个、电阻10k 4个、L-1L1(红外LED)4只、1938(红外探测器)4只、三极管4个、LCD模块1个),校园游线路板、试车跑道。2.软件环境:Keil uVision2 、ISP软件、串口调试终端。宝贝机器人实习(模拟生产线实习)1评阅实习任务:伺服电动机调零 时间: 2009.8.10-2009.8.23 地点 工程训练中心201 一.任务目的与要求1.1目的 掌握伺服电动机工作原理,完成伺服电动机的标定。1.2要求. 认真学习研究伺服电动机的工作原理和工作特点。. 能够熟练的运用伺服电动机实现相应运动。二.实习过程 1.电机调零:冯老师告诉我们我们这次的宝贝车实习所使用的电机是舵机,下面就是老师给我们讲的关于舵机的工作原理,只有明白了舵机的工作原理,我们才能理解我们为何要调零。舵机工作的原理:舵机是一种位置伺服的驱动器,适用于那些需要角度不断变化并可以保持的控制系统。其工作原理是:控制信号由接收机的通道进入信号调制芯片,获得直流偏置电压。它内部有一个基准电路,产生周期为20ms,宽度为1.5ms的基准信号,将获得的直流偏置电压与电位器的电压比较,获得电压差输出。最后,电压差的正负输出到电机驱动芯片决定电机的正反转。当电机转速一定时,通过级联减速齿轮带动电位器旋转,使得电压差为0,电机停止转动。首先我们进行舵机的测试,看看我们所使用的伺服电动机是不是在高电平持续1.5ms,低电平持续20ms,并且电平按照上面的时间周期变化下,宝贝车的轮子是否转动,如果轮子不转动说明电机不需要进行零点的标定,如果轮子转动说明电机需要进行零点标定。2.下面是测试电机是否需要标定的程序:#include #include int main(void)while(1) uart_Init();P1_0 = 1;delay_nus(1500); P1_0 = 0;P1_1 = 1;delay_nus(1500);P1_1 = 0;delay_nms(20);3.该程序的执行过程P1_0口高低电平输出到右侧电动机,P1_1口的高低电平输出到左侧的电动机;首先初始化串口,然后通过单片机使得P1_0口输出高电平,并保持高电平持续1.5ms,再给使得P1_1口输出低电平,同理也通过程序使得单片机的P1_0口至高电平,保持高电平持续时间为1.5ms,然后给P1_0口至低电平,保持P1_1和 P1_0的低电平时间为20ms,按照这样的周期将上面两口输出脉冲信号分别输入到左右两侧伺服电机,由上面的伺服电机原理可以知道,此时获得的电压差应该为0,并且伺服电机不转动,但是实验中我们发现我们的伺服电动机有轻微的震动。我们通过伺服电机标定旋钮,用螺丝刀对伺服电机进行调节;调节的目的是使伺服电机的内部基准电路产生周期为20ms,宽度为1.5ms的基准信号,以保证伺服电机不转动,这时候要我们轻微转动调零的螺丝刀,在实验中我们有时候动作过大,使伺服电机由原来的顺时针转动变化为逆时针转动,由上面的原理可以知道是因为我们的转动过大所以使得电压差的正负性发生了改变,所以试验中我们调节零点花费了不少的时间。三实习中的问题与分析1.实习中我们遇到的主要的问题就是宝贝车在进行零点的标定的时候,有时候我们的螺丝刀轻轻一转伺服电机就有原来的顺时针变成逆时针或者由原来逆时针转动变为顺时针转动,我们开始也对这百思不得其解,回去翻阅有关伺服电机方面的书籍可是书上讲的只是伺服电机理论知识并没有讲到我们所需要的知识,后来我们实在解决不了了,我们就问实验老师老师跟我们讲了我们所使用的是舵机,老师简单的跟我们讲了舵机的工作原理,老师告诉我们网上可以查到舵机的具体的工作原理,我们回去上网收索了有关舵机的工作原理,在老师的讲解和网上收索的资料我们弄明白了舵机的工作原理,弄明白了舵机的工作原理我们才明白我们调节的实际上是舵机内部的基准电路,使内部基准电路产生的脉冲量是高电平持续时间为1.5ms低电平持续时间为20ms的脉冲量,我们在实验的时候通过单片机给舵机提供的是高电平持续时间为1.5ms低电平持续时间为20ms的脉冲量,当我们拧过了的时候有可能内部的基准电路产生的脉冲量是高电平持续时间低于1.5ms或者高电平持续时间高于1.5ms的脉冲量,所以在对伺服电机进行标定的时候会出现电机由原来的正转变为下面的反转,所以进行标定的时候需要我们的耐心。 四关于舵机的思考 通过对舵机原理的了解,我们还询问了教数控技术的冯老师,冯老师告诉我们伺服系统的标定方式很多,有的是通过调整伺服系统的阻尼比实现电机的零点的标定,这跟自动控制原理也有很紧密的关系,所以机电一体化的实习告诉我们我们需要综合运用多种理论课程来解决现实问题。 我们俩讨论认为舵机可以运用在扳手之中,我们有时候用了很大的力气却没有讲螺丝拧下来或者用了很大力气却没有讲螺丝拧紧,这里我们可以运用舵机来进行控制,正如这里的宝贝车一样,实现扳手的自动化。五本任务中用到的相关课程在电机的调零任务中我们主要需要掌握的课程是单片机,伺服电机技术,在这里伺服电机的技术尤为重要,在没有弄明白我们所使用的伺服电机的工作原理之前我们只是在稀里糊涂的对伺服电机进行调零,为了弄明白本实验中所使用的伺服电机,我们翻阅了数控技术等关于伺服电机的书籍,伺服系统在数控机床中的运用十分广泛所以我们通过对伺服电机的调零任务的实习,让我们对伺服电机有了更多的了解,伺服电机的调零方式很多可以通过阻尼比也可以通过脉冲进行调节,在我们的实习任务之中我们所使用的伺服电机是舵机一种位置伺服的驱动器,为此我们需要通过老师的讲解和查阅书籍以及利用网络资源来了解舵机的工作原理,这次实习明显的锻炼了我们综合运用各方面的信息解决问题的能力。宝贝机器人实习(模拟生产线实习)2评阅实习任务:宝贝车的基本巡航动作 时间: 2009.8.10-2009.8.23 地点:工程训练中心201 一.任务目的与要求1.1目的通过宝贝车基本巡航动作任务,使我们明白宝贝车的前进、后退、转弯等个基本运动动作的实现方法和原理,为进一步实现宝贝车的复杂运动打好基础。1.2要求. 认真学习分析宝贝车各个基本动作的工作过程和工作原理。. 掌握编写程序来控制宝贝车的各个运动的方法。二.实习过程 我们在对宝贝车进行过调零后接下来我们主要的工作是熟悉宝贝车的基本巡航动作以及如何实现这些基本的巡航动作为后面的实习做好准备,宝贝车的基本巡航动作有前进,后退,转弯等基本动作,只有熟悉了这些基本动作后我们才可以运用宝贝车的这些基本的巡航动作实现后续的实验。 1.宝贝车的前进动作下面我们首先来熟悉宝贝车的前进动作,前进是宝贝车最基本的动作,前进动作主要靠的是右边的轮子的顺时针旋转,左边的轮子逆时针旋转来实现的。其实质就是运用脉冲信号来对舵机进行控制的。 前进的基本程序如下: #include #include int main(void) int counter; uart_Init(); printf(Program Running!n); for(counter=0;counter130;counter+)/运用for循环实现宝贝车运行的时间 P1_1=1; delay_nus(1700); /给P1_1口设置高低电平来控制左边的轮子的转向 P1_1=0; P1_0=1; delay_nus(1300); /给P1_0口设置高低电平来控制右边的轮子的转向 P1_0=0; delay_nms(20); while(1); /利用while循环实现宝贝车的连续运动由上面的调零我们知道我们所使用的宝贝车用的是舵机即一种位置伺服的驱动器,该电机的基本工作原理如下:控制信号由接收机的通道进入信号调制芯片,获得直流偏置电压。它内部有一个基准电路,产生周期为20ms,宽度为1.5ms的基准信号,将获得的直流偏置电压与电位器的电压比较,获得电压差输出。最后,电压差的正负输出到电机驱动芯片决定电机的正反转。在我们的前进程序之中我们利用单片机的P1_1口给左边的轮子设置高电平1并让高电平的时间保持1700us,然后在给P1_1设置低电平并让低电平的时间保持20ms这就是一个周期内的脉冲量,该脉冲量通过舵机的接收机的通道进入信号调制芯片,获得直流偏置电压,该电压与内部的基准电路产生的电压进行比较,产生个电压差,利用该电压实现电机的逆时针转动,在我们所使用的舵机里面当输入的高电平是1.7ms的时候,舵机实现的是逆时针的转动。我们所编写的前进程序中通过程序给P1_0口输入高电平并保持高电平持续的时间为1.3ms,然后在通过程序给P1_0口输入低电平并保持低电平的持续时间为20ms这就是一个周期内的脉冲量,该脉冲量通过舵机的接受机的通道进入信号调制芯片,获得直流偏置电压,该电压与内部的基准电路产生的电压进行比较,产生个电压差,利用该电压差实现右边的轮子的顺时针的转动,我们所使用的舵机内部设置的电路就是当输入的信号的高电平持续的时间是1.3ms的脉冲量的时候实现顺时针的转动,我们所编写的程序就是利用舵机的这种工作原理实现宝贝车的前进,在这里面单片机的控制相当重要,单片机的P1_0口的电路图如下图2-1:单片机的P1口的工作原理:单片机的四个口内部都有自己的电路,单片机的P1口是作为通用的I/O接口使用的,当P1口作为时候,由内部发出了一个时钟信号,将内部总线上的高电平读入P1.X的锁存器,使场效应管处于截至的状态。因为此时由于P1端口内部有上拉电阻使引脚的电平被拉到高电平,但是它能够被外部输入信号的低电平拉低,不会对输入的信号数据产生影响,单片机就是通过这样的原理实现了对外部高低电平的采集,来对高电平进行处理的。因为P1口是一个准双向口,P1口也可以对外输出信号,因为此时单片机能够向外部提供推拉电流负载,无须再接上上拉电阻。这就是P1口用作输入输出接口的简要工作原理。宝贝车的前进就是通过程序控制单片机按照程序的要求向舵机的接收机的通道输入控制信号,利用舵机内部电路实现宝贝车的前进动作。宝贝车的前进程序看似简单,但是宝贝车的前进充分运用了单片机的内部电路与舵机的内部电路,只有这样才实现了宝贝车的前进运动。2.宝贝车的后退动作熟悉了宝贝车的前进动作后我们来了解宝贝车的后退动作,下面是宝贝车的后退的程序:前进的基本程序如下: #include #include int main(void) int counter; uart_Init(); printf(Program Running!n); for(counter=1;counter=65;counter+)/向后 P1_1=1; delay_nus(1300); P1_1=0; P1_0=1; delay_nus(1700); P1_0=0; delay_nms(20); while(1); 宝贝车的后退程序的执行过程以及舵机内部的控制过程以及单片机的控制过程基本类同,在这里我们不在叙述,只是后退的时候利用单片机发射脉冲量使右边的轮子逆时针转动,左边的轮子顺时针转动罢了。3.宝贝车的右转弯熟悉了宝贝车的直线行走的程序以及直线行走的控制过程,下面我们来了解下宝贝车的右转弯的程序:右转弯的基本程序如下: #include #include int main(void) int counter; uart_Init(); printf(Program Running!n); for(counter=1;counter=65;counter+)/右转弯 P1_1=1; delay_nus(1700); P1_1=0; P1_0=1; delay_nus(1500); P1_0=0; delay_nms(20); while(1); 宝贝车的右转弯程序,我们利用的是右转不转左轮绕着右轮转动实现宝贝车的右转弯,左轮子的舵机以及单片机的控制与上面讲的相同,再此我们不再叙述,这里我们主要讲述下右轮的静止的控制,在这里我们通过程序控制单片机给P1_0口先设置高电平并保持高电平的持续时间为1.5ms,然后接着运用程序给P1_0输入低电平并保持低电平的持续时间为20ms,这就是一个周期内的脉冲量,这个脉冲量,通过舵机的接收机的通道进入信号调制芯片,获得直流偏置电压,并于舵机内部的基准电路产生的电压进行比较,产生一个电压差,利用这个电压差进行控制电机的转动,因为输入的信号是高电平持续时间为1.5ms低电平持续时间为20ms的脉冲量,而内部基准电路产生的脉冲也是高电平持续时间为1.5ms低电平持续时间为20ms的脉冲量,所以产生的电压差为0所以这个时候右边的轮子保持静止。当然宝贝车的右转弯方式不止上面一种,还有两个轮子均转弯的控制方式,基本原理同上面类似在这里我们就不在叙述了。4.宝贝车的左转弯熟悉了宝贝车的直线行走的程序以及直线行走的控制过程,下面我们来了解下宝贝车的左转弯的程序:左转弯的基本程序如下: #include #include int main(void) int counter; uart_Init(); printf(Program Running!n); for(counter=1;counter=65;counter+)/左转弯 P1_1=1; delay_nus(1500); P1_1=0; P1_0=1; delay_nus(1300); P1_0=0; delay_nms(20); while(1); 宝贝车的左转弯的程序和右转弯的程序差不多,在这里我们是利用单片机控制舵机实现左边的轮子静止,而右边的轮子通过单片机控制实现顺时针转动,具体的控制过程我们在此不在叙述,因为舵机控制过程以及单片机控制过程,我们在上面已经叙述过,当然左转弯的实现方式还可以是两个轮子同时转动在这里我们就不在具体的叙述。5.宝贝车的匀加速,恒速,匀减速熟悉了宝贝车的前进,后退,转弯等程序以及控制后我们再熟悉下宝贝车运动过程中的匀加速,恒速,匀减速的程序以及控制原理。匀加速,恒速,匀减速的程序:#include #include int main(void) int pulseCount; uart_Init(); printf(Program Running!n); for(pulseCount=10;pulseCount=200;pulseCount=pulseCount+1) P1_1=1; delay_nus(1500+pulseCount); P1_1=0; P1_0=1; delay_nus(1500-pulseCount); P1_0=0; delay_nms(20); for(pulseCount=1;pulseCount=0;pulseCount=pulseCount-1) P1_1=1; delay_nus(1500+pulseCount); P1_1=0; P1_0=1; delay_nus(1500-pulseCount); P1_0=0; delay_nms(20); 程序流程图如下图2-2:6.流程图分析由上面的流程图可知这个程序的实现方式很简单,主要就是顺序执行,首先是小车开始匀加速运动,然后小车匀速运动,最后是小车匀减速运动。7.程序分析小车的匀加速,匀速,匀加速运动的控制过程:在程序之中我们首先定义了一个变量pulseCount来控制高电平的持续时间,在匀加速的过程中,我们首先通过程序给P1_1口设置高电平通过for循环控制高电平的持续时间从1.5ms不断的增加,在给P1_1口设置低电平并保持低电平的持续时间为20ms,这就是一个高电平持续时间不断增加的脉冲量,然后通过舵机接收机的通道进入信号调制芯片,获得直流偏置电压,因为高电平的持续时间不断的增加,但是内部电路产生的脉冲的高电平持续时间保持在1.5ms左右,所以这两个信号产生的电压差不断增加实现了左边的轮子速度增加,右边的轮子通过for循环控制脉冲量的高电平的持续时间,因为右边的轮子的脉冲量的高电平的持续时间从1.5ms不断减少在这里减少的速度同左边的轮子增加的速度是一样的,所以这个脉冲量输入到舵机内部,与内部脉冲产生的电压差不断增加实现了右边的轮子的速度不断的增加,所以通过for循环控制脉冲量的高电平的持续时间进而控制了宝贝车的速度的匀速增加,恒速的控制过程与上面介绍的前进一样在此就不在叙述,匀减速的过程与匀加速的过程差不多在这里也不在叙述。以上就是宝贝车的基本的巡航动作,通过对上面的巡航动作的掌握,我们熟悉了宝贝车是如何通过单片机控制脉冲量的输入以及舵机是如何对输入的脉冲量进行控制,进而产生控制作用使得宝贝车实现相应的动作,这为我们以后的实习打下了基础。三实习中遇到的问题与问题的分析1. 安装好ISP后下载程序时候按照图示的设置选择AT89S52后怎么也写不进去程序在检查过线路之后也不能写进程序,但是选择ATMEGA8(L)后却可以写进程序,这个问题开始的时候困扰了我们很久,后来我们对比新机器和旧机器才发现原来我们的机器人有两个单片机系统一块是AT89S52一块是ATMEGA8(L)那天只是我们把线接到了ATMEGA8(L)那块单片机上面,在烤程序的时候设置中却选择了AT89S52那块单片机,所以烤不进程序,所以这个问题的出现告诉我们要仔细观察实验板,正确的连接线路,同时也提醒我们在以后的实习之中一定要细心。2实习中我们需要利用单片机对伺服电机进行控制,但是我们在实验的时候只是知道怎么去接电路但是却没有掌握单片机是如何进行信号的控制的,因此我们查阅了单片机方面的书籍看单片机P1等口的内部电路,了解单片机内部电路的元器件以及内部电路是如何工作的,当然我们阅读书本还是遇到了很多的问题剩下的问题我们主要是问的老师才明白单片机的各个口的基本工作过程,通过这样我们掌握了单片机的各个口是如何进行控制的。四本任务中用到的相关课程我们在实习宝贝车的基本巡航动作的时候,主要运用到了单片机,c语言等方面的知识,其中单片机的作用更加突出,在这里我们用到单片机的P1口的1和0引脚来控制伺服电机的相应的动作进而实现宝贝车的基本的巡航动作,在这里我们需要弄明白单片机的P1口的内部基本电路这样我们才能掌握是如何给P1口的1和0引脚施加高低电平产生脉冲去控制舵机的,所以宝贝车基本巡航动作的实习,让我们学到更多的单片机内部电路方面的知识,这也是为后面的实习打下基础。评阅宝贝机器人实习(模拟生产线实习)3实习任务:单片机输入接口与机器人触觉导航 时间: 2009.8.10-2009.8.23 地点:工程训练中心201 一.任务目的与要求1.1目的通过对本章的学习,掌握如何用单片机的输入/输出接口来采集触须传感器的送来的外部信号,通过接口进入计算机(或者单片机),由计算机或单片机根据反馈信息进行计算和决策,生成控制命令,从而通过输出接口去控制宝贝车的左右伺服电机,进而控制宝贝机器人的各种运动,并且完成所给宝贝车任务。1.2要求. 触须传感器作为输入反馈与AT89S52单片机的编程实现触须导航。. 正确运用 C 语言进行编写程序。. 认真学习教材内容,设计电路并编程实现触须导航二.实习过程1.触须传感器通过对本章节知识的学习,我们认真学习并总结了触须传感器工作原理,其工作原理图如图3-1,工作过程分析如下:图3-1触须传感器工作原理图如图3-1所示:触须传感器是一种接触型的传感器,或者可以说是机械式的传感器,因为其工作是依靠触须是否与障碍物的碰撞使其触须开关闭合,从而改变电路输出端P2-3的高低点评状态,所以实现了信号的采集与输出。首先,当触须没有碰到障碍物时,触须开关处于断开状态,输出端P2-3与VCC有相同的点位,处于高电平1;当触须碰到障碍物并使触须开关闭合导通时,输出端P2-3处于低电平0状态。所以,触须是否碰撞,决定了触须传感器输出端的两种输出状态,这两种不同的状态被单片机接收,并进行相应计算和决策,然后发出控制命令,控制宝贝车的伺服电机,从而使宝贝车实现预定的运动。2. 触须传感器工作电路在掌握了触须型传感器的工作原理后,我们给宝贝车前方左右各安装了上述的触须传感器,为了准确的将各触须传感器采集的信号输送到单片机进行控制,我们设计了如图3-2的触须导航工作电路图。图3-2 触须导航工作电路图如图1-2所示,左侧触须传感器将采集到的信号以高低电平的形式输送给单片机AT89S52的P2-3口,右侧触须传感器将采集到的信号以高低电平的形式输送给单片机AT89S52的P1-4口,单片机进行相应计算和决策,发出控制命令信号,通过P1-1和P1-0口分别控制宝贝车左右伺服电动机,完成预定运动。单片机AT89S52对所采集到的信号要进行计算与决策,这时候我们要编写程序来控制单片机对采集到的信号如何计算和决策。为了实现编程,我们拟定了宝贝车遇到各种情况的相应动作,具体是:左右触须都未碰到障碍时宝贝车一直前进,左右触须都碰到障碍时宝贝车后退掉头在前进,只有一侧触须碰到障碍物则宝贝车后退转向另一侧在前进。具体程序与程序流程图如下:3.程序:#include#includeint P1_4state(void)return (P1&0x10)?1:0;int P2_3state(void)return (P2&0x08)?1:0;void Forward(void) /直走子程序P1_1=1; /左伺服电机全速逆时针运动delay_nus(1700);P1_1=0;P1_0=1; /右伺服电机全速顺时针运动delay_nus(1300);P1_0=0;delay_nms(20);void Left_Turn(void) /双轮左转90子程序int i;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);void Right_Turn(void) /双轮右转90子程序int i;for(i=1;i=26;i+)P1_1=1; /左伺服电机全速逆时针运动delay_nus(1700);P1_1=0;P1_0=1; /右伺服电机全速顺时针运动delay_nus(1700);P1_0=0;delay_nms(20);void Backward(void) /后退子程序int i;for(i=1;i=65;i+)P1_1=1; /左伺服电机全速顺时针运动delay_nus(1300);P1_1=0;P1_0=1; /右伺服电机全速逆时针运动delay_nus(1700);P1_0=0;delay_nms(20);int main(void) /主程序uart_Init();printf(Program Running!n);while(1)if(P1_4state()=0)&(P2_3state()=0) /如果两胡须同时碰到Backward(); /向后子程序Left_Turn(); /向左子程序Left_Turn(); /向左子程序else if(P1_4state()=0) /否则如果右胡须碰到Backward(); /向后子程序Left_Turn(); /向左子程序else if(P2_3state()=0) /否则如果左胡须碰到Backward(); /向后子程序Right_Turn(); /向右子程序else /否则胡须都没有碰到Forward(); /向前子程序4.程序流程图:(见下页图3-3触须导航程序流程图)图3-3触须导航程序流程图5.程序流程分析如下:首先是对程序进行初始化,然后进入主程序,让小车前进,并且检测左右触须传感器采集回来的信号;根据触须传感器工作原理,如果左右采集到的分别是0、0,则说明两侧触须均碰到障碍,调用一个后退子程序Backward(),在调用两个双轮左转90子程序Left_Turn(),完成宝贝车掉头,然后继续检测;如果左右采集到的分别是1、0,则说明只有右侧碰到障碍,调用一个后退子程序Backward(),在调用一个双轮左转90子程序Left_Turn(),然后继续检测;如果左右采集到的分别是0、1,则说明只有左侧碰到障碍,调用一个后退子程序Backward(),在调用一个双轮右转90子程序Right_Turn(),然后继续检测;如果左右采集到的分别是1、1,则说明没有碰到障碍,调用直走子程序,然后继续检测。通过上述过程实现了宝贝车的行走并且避让障碍物。6.电机的动作通过程序对宝贝彻底控制,其实质是通过单片机分别控制左右两个伺服电机的分运动来实现的。让宝贝车左右伺服电机一个顺时针一个逆时针运动,就可以实现宝贝的直线行走;让宝贝车左右伺服电机同时顺时针或同时逆时针运动,便可以实现宝贝车的左转或右转,实质就是控制伺服电机的转动来实现宝贝车的运动。三实习过程中的问题1.在做胡须导航的时候,经常会发生小车在没有碰到障碍物的时候小车乱转弯,通过观察发现胡须在经常碰到障碍物的时候使得胡须与面包板中的电路导通使得小车总觉得感应到了碰到障碍物所以小车经常在那里乱转弯所以要对胡须进行调整,这样小车才能正确的利用胡须进行导航。四本任务中用到的相关课程 触须传感器的导航实习主要运用到了的相关知识有单片机,信号检测技术在这里面对单片机和信号检测技术的结合运用要求很好,首先由传感器检测出信号传回单片机,单片机在根据传回的信号进行控制决策宝贝车究竟要执行什么样的动作,通过本次的实习让我们对传感器的工作原理有了更多的了解,对单片机有了更加深刻的认识。 宝贝机器人实习(模拟生产线实习)4评阅实习任务:单片机输入接口与机器人红外导航 时间: 2009.8.10-2009.8.23 地点:工程训练中心201 一.任务目的与要求1.1目的掌握如何用单片机的输入/输出接口来采集红外传感器的送来的外部信号,通过接口进入计算机(或者单片机),由计算机或单片机根据反馈信息进行计算和决策,生成控制命令,从而通过输出接口去控制宝贝车的左右伺服电机,进而控制宝贝机器人的各种运动,并且完成所给宝贝车任务。1.2要求. 红外传感器作为输入反馈与AT89S52单片机的编程实现触须导航。. 正确运用 C 语言进行编写程序。. 认真学习教材内容,设计电路并编程实现红外导航二.实习过程 1.红外传感器这次我们将使用红外传感器对宝贝车进行导航,红外传感器的工作原理电路图如图4-1所示。工作过程分析如下:图4-1 红外传感器原理图。由该工作原理图我们知道当我们通过程序控制单片机的内部电路给P1_3口输出高电平此时三极管被导通,LED开始发光,当发射出来的光被障碍物反射回来的时候被光敏二极管所接受光敏二极管被导通此时输出低电平表示前面有障碍物,如果发射出去的光没有被反射回来,光敏二极管没有接受到光此时光敏处于截止的状态此时输出的是高电平,表示前面没有障碍物。2. 红外传感器的电路掌握了红外传感器的工作原理后,我们给宝贝车前方左右各安装了上述的红外传感器,为了将两个红外传感器采集的信号输送到单片机进行控制,我们设计了如图4-2的红外导航工作电路图:图4-2 红外导航工作电路图由该电路图我们知道单片机的P1口的1和0引脚控制左侧和右侧的伺服电机,P1口的2和3引脚控制左边的红外传感器,P3的5和6引脚控制右边的红外传感器,当通过给单片机的P1口的3引脚和P3口的6引脚设置高电平时候三极管被导通此时两边的IR LED开始发出红外线,如果前方没有障碍物红外光没有被反射回来此时光敏二极管接受不到光处于截止的状态此时输出高电平,说明前方没有障碍物,如果前面有障碍物的话红外光被反射回来被光敏二极管所接受,二极管处于导通状态此时输出低电平表示前方有障碍物。3.下面是单片机的P1口的某引脚的内部电路图(如图4-3)图4-3 P1口某引脚的内部电路图单片机的四个口内部都有自己的电路,单片机的P1口是作为通用的I/O接口使用的,当P1口作为时候,由内部发出了一个时钟信号,讲内部总线上的高电平读入P1.X的锁存器,使场效应管处于截至的状态。因为此时由于P1端口内部有上拉电阻使引脚的电平被拉到高电平,但是它能够被外部输入信号的低电平拉低,不会对输入的信号数据产生影响,单片机就是通过这样的原理实现了对外部高低电平的采集,来对高电平进行处理的。因为P1口是一个准双向口,P1口也可以对外输出信号,因为此时单片机能够向外部提供推拉电流负载,无须再接上上拉电阻。这就是P1口用作输入输出接口的简要工作原理。由上面的工作电路图我们可以知道在这里我们是把单片机的P1口的1和0引脚用作输出接口的,用来控制左右两侧的伺服电机。我们用P1口的2和3引脚来控制左侧的红外传感器,2和3引脚分别用作输入和输出功能。4.下面是单片机的P3口的某引脚的内部电路图(如图4-4)图4-4 P3口某引脚的内部电路图单片机的四个口内部都有自己的电路,单片机的P3口具有第二功能的信号输入和输出,单片机的P3口的第一功能与P1口的功能一样,在这里我们就不再叙述,单片机的第二功能用作输入线时候,口锁存器必须先写1,上面就是单片机的P3口的简要的工作原理。由上面的工作电路图我们可以知道我们用的P3口的3和6引脚控制右边的红外传感器,3和6引脚分别用作输出和输入功能。5.下面是红外传感导航的程序流程图(如图4-5所示)图4-5红外导航程序流程图我们根据程序流程图编写出了程序,并进行了宝贝车的调试,使宝贝车按照我们的程序进行运动。6.下面是我们所编写的程序:#include#include#include#define LeftIR P1_2 /左边红外接收连接到P1_2#define RightIR P3_5 /右边红外接收连接到P3_5#define LeftLaunch P1_3 /左边红外发射连接到P1_3#define RightLaunch P3_6 /右边红外发射连接到P3_6void IRLaunch(unsigned char IR)int counter;if(IR=L) /左边发射for(counter=0;counter38;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) /右边发射for(counter=0;counter38;counter+)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_();void Forward(void) /向前行走子程序P1_1=1;delay_nus(1700);P1_1=0;P1_0=1;delay_nus(1300);P1_0=0;delay_nms(20);void Left_Turn(void) /左转子程序int i;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);void Right_Turn(void) /右转子程序int i;for( i=1;i=26;i+)P1_1=1;delay_nus(1700);P1_1=0;P1_0=1;delay_nus(1700);P1_0=0;delay_nms(20);void Backward(void) /向后行走子程序int i;for( i=1;i=65;i+)P1_1=1;delay_nus(1300);P1_1=0;P1_0=1;delay_nus(1700);P1_0=0;delay_nms(20);int main(void)int irDetectLeft,irDetectRight;uart_Init();printf(Program Running!n);while(1)IRLaunch(R); /右边发射irDetectRight = RightIR; /右边接收IRLaunch(L); /左边发射irDetectLeft = LeftIR; /左边接收if(irDetectLeft=0)&(irDetectRight=0) /两边同时接收到红外线Backward();Left_Turn();Left_Turn();else if(irDetectLeft=0) /只有左边接收到红外线Backward();Right_Turn();else if(irDetectRight=0) /只有右边接收到红外线Backward();Left_Turn();elseForward();7.程序流程图分析:由程序流程图我们知道首先是运行宝贝车,然后开始检测传感器的状态,如果左右两侧都检测到障碍物的话那么就调用后退子程序,在调用两次左转90度子程序,然后在返回去继续检测传感器的状态,如果检测到的状态不是两侧都有障碍物那么就继续检测传感器的状态,如果检测出来的是左侧有障碍物右侧没有障碍物,那么就调用后退子程序,并调用右转子程序,然后返回去继续检测传感器的状态,如果检测的状态不是左侧有障碍物那么就继续检测传感器的状态,如果检测的是右侧有障碍物左侧没有障碍物,那么就调用左转子程序在返回去检测传感器的状态,如果检测到的不是右侧没有障碍物那么就继续检测传感器的状态,如果检测到的是两侧都没有障碍物直接返回去在检测传感器的状态,如果检测到的不是两侧都没有障碍物也直接返回去继续检测传感器的状态,以上就是程序的主要流程,我们按照我们的程序流程图编写程序并对宝贝车进行调试。8.程序流程分析:首先我们定义了红外发射的函数,然后定义了向前走,左转,右转,向后走的子函数,在主函数中,首先调用红外发射的子函数,然后把传感器的状态赋予两个变量,然后开始检测左右两侧的红外传感器的状态,如果检测出来的状态是全0说明两边都有障碍物,开始调用向后走的子函数,然后两次调用左转90度的子函数,实现宝贝车遇到障碍物后的

温馨提示

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

评论

0/150

提交评论