您好,欢迎访问三七文档
二、直流小车总结1、直流小车任务(1)、直流小车基本动作(2)、直流小车测速(3)、四路循迹(4)、小车避障(5)、红外遥控(6)、蓝牙遥控(7)、超声波测距2、直流小车控制原理直流电机由定子和转子两部分组成,通过向转子中的绕组通入直流电,线圈边上受到电磁力,产生转矩。通过换向器和电刷使其受到一种方向的交变转矩。PWM调速,是直流电机常用的调速方法,其原理为:给直流电机输入占空比可调的方波,当电平为1时电机转动,电平为0时电机停止。通过改变脉冲周期的占空比可以改变电机转速。两个电极与电源正接或反接,可以使其正转或反转。本次实习采用的为L293D电机驱动器,其上的电机控制信号有两类:EN1:使能信号,选用一路PWM连接EN1引脚,通过调整PWM占空比来调节转速。IN1、IN2:电机转动方向控制信号,IN1、IN2分别为1,0时,电机正转,反之,电机反转。3、直流小车具体完成任务及改进Ⅰ、直流小车基本动作每个直流电机需要3个控制信号EN1、IN1、IN2,EN1是使能信号。选用一路pwm连接EN1引脚,通过调整pwm的占空比可以调整电机的转速,IN1、IN2为电机转动方向的控制信号。直流电机正反转逻辑表如下:IN1IN2EN1电机001100110101010100001111不转不转不转不转不转正转反转不转直流小车基本运行代码(以小车前进为例):#defineLeft_moto_go{P1_0=1,P1_1=0,P1_2=1,P1_3=0;}//左边两个电机向前走#defineRight_moto_go{P1_4=1,P1_5=0,P1_6=1,P1_7=0;}//右边两个电机向前走voidrun(void){Left_moto_go;//左电机往前走Right_moto_go;//右电机往前走}Ⅱ、四路循迹四路循迹的原理如下:循迹模块探头的发射红外线,如果探头不在黑线上,则反射回来的光被接收端接收,接收端导通,输出端接地,电压为0。若探头在黑线上,则反射光被黑带吸收,接收端没有收到信号,不导通,电压为5V。四个输出口分别接在P3.4到P3.7处,四输出口对应如下左右其中两个电机状态。四路循迹逻辑表P3_4P3_5P3_6P3_7状态1010110010111010011101111010前进前进前进左转右转后退前进Ⅲ、小车避障小车避障可以使用两种传感器:一是将2个避障探头和2个循迹探头组合安装在一起,此使用方式和循迹传感器一样,二是NPN型可调红外开关,检测到目标时是低电平输出,正常状态时是高电平输出,输出外加上一个上拉电阻即可连在I/O口上。对应关系如下:无障碍————直走左侧有障碍——后退,右转右侧有障碍——后退,左转前方有障碍——后退小车避障时,转弯过程要一定时间,因此在程序中加入延时程序delay(),延时越长,转弯角度越大。我们所完成的避障是利用可调红外开关完成的。3个可调红外开关分别检测左60º,中间位置以及右60º方向上是否有障碍,其逻辑表如下:三路避障逻辑表Left_1_redGo_redRight_1_red状态000101110010101101001101后退/右转后退/右转后退/右转后退/左转后退/右转后退/右转后退/左转前进附录2:三路避障程序如下(pwm波调速):#includeAT89x51.H#defineLeft_1_ledP3_7#defineRight_1_ledP3_6#definego_ledP3_5#defineen1P3_0#defineen2P3_1#defineen3P3_2#defineen4P3_4#defineLeft_moto_go{P1_0=1,P1_1=0,P1_2=1,P1_3=0;}#defineLeft_moto_back{P1_0=0,P1_1=1,P1_2=0,P1_3=1;}#defineLeft_moto_Stop{P1_0=0,P1_1=0,P1_2=0,P1_3=0;}#defineRight_moto_go{P1_4=1,P1_5=0,P1_6=1,P1_7=0;}#defineRight_moto_back{P1_4=0,P1_5=1,P1_6=0,P1_7=1;}#defineRight_moto_Stop{P1_4=0,P1_5=0,P1_6=0,P1_7=0;}unsignedinta=0;unsignedintb=30;/*******************************************/voiddelay(unsignedintk){unsignedintx,y;for(x=0;xk;x++)for(y=0;y2000;y++);}/*********************************************/voidPWM()interrupt1//定义pwm波{TH0=(65536-50000)/256;TL0=(65536-50000)%256;a++;en1=0;en2=0;en3=0;en4=0;if(a=40){a=0;}if(a=b){en1=1;en2=1;en3=1;en4=1;}}voidrun(void)//前进{Left_moto_go;Right_moto_go;}voidbackrun(void)//后退{Left_moto_back;Right_moto_back;}voidleftrun(void)//左转{Left_moto_back;Right_moto_go;}voidrightrun(void)//右转{Left_moto_go;Right_moto_back;}voidstoprun(void)//停止{Left_moto_Stop;Right_moto_Stop;}/*--主函数--*/voidmain(void){intt=50;TMOD=0x01;TH0=(65536-50000)/256;TL0=(65536-50000)%256;EA=1;ET0=1;TR0=1;run();while(1){if(Left_1_led==1&&Right_1_led==1&&go_led==1)//左中右都没有障碍{while(--t){run();delay(500);}}/******************************************/elseif(Left_1_led==0&&Right_1_led==0&&go_led==0)//左中有障碍,右边没有障碍{while(--t){backrun();delay(500);}while(--t){rightrun();delay(500);}}/********************************************/elseif(Right_1_led==0&&Left_1_led==1&&go_led==1)//左中没有障碍,右边有障碍{while(--t){backrun();delay(500);}while(--t){leftrun();delay(500);}}/**********************************************/elseif(Left_1_led==0&&Right_1_led==1&&go_led==1)//右中无障碍,左边有障碍{while(--t){backrun();delay(500);}while(--t){rightrun();delay(500);}}/*********************************************/elseif(Left_1_led==0&&Right_1_led==0&&go_led==1)//左右有障碍,中间有障碍{while(--t){backrun();delay(500);}while(--t){rightrun();delay(500);}}/*********************************************/elseif(Left_1_led==0&&Right_1_led==0&&go_led==0)//左中右都有障碍{while(--t){backrun();delay(500);}while(--t){rightrun();delay(500);}}/********************************************/elseif(Left_1_led==1&&Right_1_led==0&&go_led==0)//右中有障碍,左边没有障碍{while(--t){backrun();delay(500);}while(--t){leftrun();delay(500);}}/******************************************/elseif(Left_1_led==1&&Right_1_led==1&&go_led==0)中间有障碍,两边没有障碍{while(--t){backrun();delay(500);}while(--t){rightrun();delay(500);}}}}Ⅳ、红外遥控在控制板上插上红外一体化接收头,规定小车的前进、后退、左转、右转控制键对应遥控器的前、后、左、右按键,当按键按下后,遥控器的红外发光二极管发射调制的指令信号,主控板芯片连接的红外一体接收头接收到该信号后,转换为相应的电信号,然后送至放大器,单片机就会收到中断请求,然后进行解码。利用switch-case语句进行控制,从而使小车进行不同的运动。红外遥控程序流程图如下:其中,Im[2]为遥控键值,0x0e,0x1a,0x0a,0x1e,0x05分别表示按下红外遥控器的前进,后退,左键,右键,中键。关于直流小车心得:在进行直流小车编程时,我们试图将红外遥控与三路避障程序融合,最终获得了成功。在进行循迹编程时,发现小车速度太快,小车在遇到弯道时,会因速度大冲出弯道。通常程序做法有两种,一种是通过普通延时程序delay来控制小车速度,另外一种是通过pwm调速,改变小车速度。驱动硬件模块的EN1,EN2恰好可以控制I/O口输出高低电平的效用。故,我们尝试了以pwm波进行降速的方法,最终也实现了对循迹小车的降速。
本文标题:直流小车修改版
链接地址:https://www.777doc.com/doc-2171217 .html