您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 企业文化 > 第7讲:第六章--机器人的距离检测
Slide1DEPUSH机器人的距离检测深圳市德普施科技有限公司SHENZHENDEPUSHTECHLONOGYCO.,LTD机器人的距离检测第六章Slide2DEPUSH机器人的距离检测本讲摘要1.用IRLED/探测电路检测距离(定时/计数器的使用)2.测试扫描频率3.尾随小车4.条纹带跟踪Slide3DEPUSH机器人的距离检测用IRLED/探测电路检测距离用红外传感器探测道路探测灵敏度与频率关系图Slide4DEPUSH机器人的距离检测定时/计数器以前所用延时方法:1.for()函数2._nop_()函数更精确延时:定时/计数器AT89S52的定时/计数器可以分为定时器模式和计数器模式。这两种模式没有本质上的区别,均使用二进制的加一计数:当计数器的值计满回零时能自动产生中断的请求,以此来实现定时或者计数功能。它们的不同之处在于定时器使用单片机的时钟来计数,而计数器使用的是外部信号。Slide5DEPUSH机器人的距离检测定时/计数器定时/计数器的控制,两个特殊功能寄存器——TCON和TMOD位符号描述TCON.7TF1定时器1溢出标志位。由硬件置位,由软件清除。TCON.6TR1定时器1运行控制位。由软件置或清除:置1为启动;置0为停止。TCON.5TF0定时器0溢出标志位。TCON.4TR0定时器0运行控制位。TCON.3IE1外部中断1边沿触发标志。TCON.2IT1外部中断1类型标志位。TCON.1IE0外部中断0边沿触发标志。TCON.0IT0外部中断0类型标志位。TCON控制寄存器定时器控制寄存器,可进行位操作,低四位与定时器无关。Slide6DEPUSH机器人的距离检测定时/计数器位名字定时器描述7GATE1门控制。当被置为1时,只有为高电平时,定时器才开始工作。61定时/计数器选择位:1=计数器;0=定时器5M11模式位1(见下表)4M01模式位03GATE0定时器0的门控制位20定时器0的定时/计数选择位1M10定时器0的模式位10M00定时器0的模式位0TMOD模式寄存器TC/INTTC/定时器模式寄存器,不能进行位操作,只能通过字节传送指令来设定各个状态。Slide7DEPUSH机器人的距离检测定时/计数器M1M0模式000011102113TMOD模式寄存器每个定时/计数器都有一个16位的寄存器Tn(n=0或1)来控制计数长度,由高8位THn和低8位TLn组成并用来设初值。共四种定时模式。Slide8DEPUSH机器人的距离检测定时/计数器13位定时器模式(模式0)定时器高字节(THx)与低字节(TLx)的低5位共同构成1个13位定时器。低字节高3位未使用。计数值随时钟脉冲增加,当计数值从FFH溢出回到00H时,TFx被置1。16位定时器模式(模式1)除工作在16位以外,与模式0没有什么不同。Slide9DEPUSH机器人的距离检测定时/计数器8位自动重载模式(模式2)低字节(TLx)作为1个8位定时器工作,高字节用于保存重载数。当计数值超过FFH回零时,不仅TFx被置1,同时THx载入TLx,定时器重新开始工作,如此循环。Slide10DEPUSH机器人的距离检测定时/计数器分立定时器模式(模式3)定时器1在该模式下不工作。Slide11DEPUSH机器人的距离检测定时/计数器定时器初值计算定时/计数值是在设置初值的基本上加法计数。设程序要运行的数值为CC,初值为TC,计数最大值为2n,则:TC=2n-CC例如:定时1ms要运行的数值CC=1ms/1us=1000,在模式0下最大计数值2n=213=8192则定时器初值TC=2n-CC=7192=0x1C18,即THx=0x1C,TLx=0x18Slide12DEPUSH机器人的距离检测定时/计数器例程:TimeApplication.c#includeAT89X52.H#includestdio.hvoidinitial(void);//子函数声明voidmain(void){initial();//调用定时/计数器初始化函数while(1);//等待中断}/*==初始化定时/计数器函数==*/voidinitial(void){IE=0x82;//开总中断EA,允许定时器0中断ET0TCON=0x00;//停止定时器,清除标志TMOD=0x02;//工作在定时器0的模式2中TH0=0x38;//设置重载值TL0=0x38;//设置定时器初值TR0=1;//启动定时器0}//中断服务程序voidTIMER(void)interrupt1//中断服务程序,1是定时器0的中断号{P1_0=~P1_0;//P1_0的值取反}Slide13DEPUSH机器人的距离检测定时/计数器#includeAT89X52.H#includestdio.hAT89X52.H对一些标识符进行了声明,如P1_0、IE、TCON等stdio.h对常用的一些IO函数进行了声明,如printf()等头文件uart.h已包含了这些头文件。voidinitial(void);//子函数声明voidmain(void){initial();//调用定时/计数器初始化函数while(1);//等待中断}函数定义若在main之后,则在main之前应加上该函数的声明。Slide14DEPUSH机器人的距离检测定时/计数器/*==初始化定时/计数器函数==*/voidinitial(void){IE=0x82;TCON=0x00;TMOD=0x02;TH0=0x38;TL0=0x38;TR0=1;}“/*”和“*/”必须成对使用,注释在它们之间的内容。“//”仅仅对它所在的一行起注释作用。TCON=0x00;停止定时器,并清除了中断标志TMOD=0x02;M1=0且M0=0,定时器0选择模式2TH0=0x38;TL0=0x38;设置计数初值和重载值。TR0=1;启动定时器0。Slide15DEPUSH机器人的距离检测定时/计数器中断中断即发生了某种情况(事件),使得CPU暂时中止当前程序的执行,转去执行相应的处理程序。中断驱使系统能够在同一时间处理许多任务。中断与子程序有些相似:CPU执行另一个程序——子程序——然后返回主程序。单片机AT89S52有5个中断源:2个外部中断源;2个定时器中断;1个串口中断。每个中断源可以单独允许或禁止,通过修改可位寻址的专用寄存器IE(允许中断寄存器)实现Slide16DEPUSH机器人的距离检测定时/计数器位符号描述(1=使能,0=禁止)IE.7EA全局允许/禁止IE.6未定义IE.5ET2允许定时器2中断IE.4ES允许串口中断IE.3ET1允许定时器1中断IE.2EX1允许外部中断1IE.1ET0允许定时器0中断IE.0EX0允许外部中断0IE(中断使用)寄存器简表IE=0x82;EA=1且ET0=1,打开了全局和定时器0的中断IEEAET00x8210000010Slide17DEPUSH机器人的距离检测定时/计数器中断优先级AT89S52的中断分为2级,高和低。允许拥有高优先级的中断源中断系统正在处理的低优先级的中断源。中断的优先级由高到低依次为:外部中断0,定时器0,外部中断1,定时器1,串口中断,定时器2中断。Slide18DEPUSH机器人的距离检测定时/计数器中断函数中断函数是通过按规定语法格式定义的一个函数,语法格式如下:返回值函数名([参数])interruptm[usingn]{……}m:中断号。定时器0的中中断号为1;n:寄存器组。在多中断的情况下,使用该参数进行任务切换。不用该参数,则默认使用寄存器组0,即n=0。voidTIMER(void)interrupt1{P1_0=~P1_0;//P1_0的值取反}Slide19DEPUSH机器人的距离检测测试扫描频率探测灵敏度与频率关系图38500Hz灵敏度最高,越往两边,灵敏度越差频率越低,探测距离越远Slide20DEPUSH机器人的距离检测测试扫描频率例程:TestLeftFrequencySweep.cintmain(void){uart_Init();timer_init();printf(ProgamRunning!\n);printf(FREQENCYETECTED\n);while(1){Get_lr_Distances();printf(distanceLeft=%d\n,leftdistance);printf(-----------------\n);delay_nms(3000);}}Slide21DEPUSH机器人的距离检测测试扫描频率voidtimer_init(void){IE=0x82;//开总中断EA,允许定时器0中断ET0TMOD|=0X01;//定时器0工作在模式1:16位定时器模式}TMODM1M0|0x0101IEEAET00x8210000010IE=0x82TMOD|=0X01Slide22DEPUSH机器人的距离检测测试扫描频率voidGet_lr_Distances(){unsignedintcount;leftdistance=0;//初始化左边的距离for(count=0;count5;count++){FreqOut(frequency[count]);//发射频率irDetectLeft=LeftIR;printf(irDetectLeft=%d,irDetectLeft);if(irDetectLeft==1)leftdistance++;}}unsignedintfrequency[5]={33050,35700,38460,40400,42370};假设物体在区域3,则前3个频率均无法探测到物体,即irDectLeft为1,所以leftdistance为3Slide23DEPUSH机器人的距离检测测试扫描频率voidFreqOut(unsignedintFreq){time=256-(50000/Freq);//根据频率计算初值TH0=0XFF;//高八位设FFTL0=time;//低八位根据公式计算TR0=1;//启动定时器delay_nus(800);//延时TR0=0;//停止定时器}fttime500000655361012616实际上,time值并未占满低八位,即高八位未用到,所以你可以这样简化计算:高八位设0xFF,低八位根据n=8计算。Slide24DEPUSH机器人的距离检测测试扫描频率voidTimer0_Interrupt(void)interrupt1//定时器中断{LeftLaunch=~LeftLaunch;//取反,高低电平转换TH0=0xFF;//重新设值TL0=time;}模式1不具备自动重载功能,所以要重新设值。Slide25DEPUSH机器人的距离检测测试扫描频率如果检测结果irDetectLeft为1,即没有发现物体,则距离leftdistance加1。循环描述,当5个频率描完后,可根据leftdistance的值来判断物体离机器人的大致距离。Slide26DEPUSH机器人的距离检测尾随小车引导车尾随车如果尾随车落在后面,它必须能察觉并加速。如果尾随车距离引导车太近,它也要能察觉并减速。如果当前距离正好合适,它会等待直到测量距离变远或变近Slide27DEPUSH机器人的距离检测尾随小车控制系统当一个机器被设计用来自动维持某一数值,比如距离、压力或液位等,它一般都包含一个控制系统。这些系统有时由传感器和阀门组成,或者由传感器和电机组成。在机器人里面,由传感器和连续旋转电机组成。还必须有某些处理器可以接受传感器的测量结果并把它们转化为机械运动。必须对处理器编程来基于传感器的输入做出决定,从而控制机械输出。闭环控制和开环控制。Slide28DEPUSH机器人的距离检测尾随小车右伺服电机比例控制方框图Rightservooutput=(Rightdistancesetpoint–Measuredrightdistance)*Kp+Center
本文标题:第7讲:第六章--机器人的距离检测
链接地址:https://www.777doc.com/doc-3987836 .html