版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
机电一体化综合训练实习总结一、舵机车总结1、实习任务与要求舵机车的实习任务主要是通过理解舵机运行的原理,提高自我的动手能力,编写程序使舵机车实现用传感器以探测周边环境、基于传感器信息作出决策、操作带动轮子旋转的电机控制宝贝车运动、与用户交换信息,从而更好的掌握89C52单片机。2、总结实习内容2.1巡航控制编程使宝贝车做一些根本的动作:向前、向后、左转、右转和原地旋转。宝贝车向前走:P1_1=1;delay_nus(1300);P1_1=1;P1_0=0;delay_nus(1700);P1_0=0;delay_nms(20);宝贝车向后走:P1_1=1;delay_nus(1300);
P1_1=1;P1_0=0;delay_nus(1700);P1_0=0;delay_nms(20);宝贝车原地左转:P1_1=1;delay_nus(1300);P1_1=0;P1_0=1;delay_nus(1300);P1_0=0;delay_nms(20);宝贝车原地右转:P1_1=1;delay_nus(1700);P1_1=0;P1_0=1;delay_nus(1700);P1_0=0;delay_nms(20);2.2机器人触觉导航胡须电路原理下列图所示为胡须电路原理图,当胡须没有被触动,连接胡须的I/O管脚的电压是5V;当胡须被触动时,I/O短接到地,所以I/O管脚的电压是0V。微控制器启动或复位时,所有的I/O插脚缺省为输入。也就是说,连接到胡须的I/O管脚会自动作为输入。作为输入,如果I/O脚上的电压为5V〔胡须没有被触动〕,那么其相应的存放器中的相应位存储1;如果电压为0V〔胡须被触动〕,那么存储0。、胡须检测到障碍物时编程:if((P1_5state()==0)&&(P2_3state()==0))//两个胡须同时检测到障碍物时,后退,再向左转180度{Back_Up();Turn_Left();
Turn_Left();}elseif(P1_5state()==0){Back_Up();Turn_Right();}elseif(P2_3state()==0)//右边胡须检测到障碍物时,后退,再向左转90度{Back_Up();Turn_Left();}else //没有胡须检测到障碍物时,向前走Forward();对LED胡须测试电路编程:#include<uart.h>intP1.5state(void)//获取P1.5 的状态{return(P1&0x20);}intP2.3state(void)//获取P2.3 的状态{return(P2&0x08);}intmain(void)
{while(1){if(P1.5state()==0)
P1.0=0;P1.0=1;;if(P2.3state()==0)
P1.1=0;elseP1.1=1;delay_nms(50);}}通过胡须导航让宝贝车行走,当在其路线上遇到障碍物时,它将后退、旋转并向另一个方向行走。编程如下:#include<BoeBot.h>
#include<uart.h>
intP1_5state(void)
{return(P1&0x20)?1:0;}intP2_2state(void){return(P2&0x08)?1:0;}voidForward(void)
{P1_1=1;delay_nus(1700);
P1_1=0;P1_0=1;delay_nus(1300);
P1_0=0;delay_nms(20);}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);}}voidRight_Turn(void)
{inti;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);}}voidBackward(void)
{inti;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);}}intmain(void)
{uart_Init();printf("ProgramRunning!\n");
intcounter;for(counter=1;counter<=1000;counter++)//开始/复位信号
{P1_4=1;delay_nus(1000);
P1_4=0;delay_nus(1000);}while(1)
{if((P1_5state()==0)&&(P2_3state()==0))
{Backward(); //向后Left_Turn(); //向左Left_Turn(); //向左}elseif(P1_5state()==0){Backward(); //向后Right_Turn(); //向右}elseif(P2_3state()==0)
{Backward(); //向后Left_Turn(); //向左}elseForward(); //向前}}程序中,前行走中的每两个脉冲之间检查胡须的状态。意味着,宝贝车在向前行走的过程中,每秒检查障碍物大概43次。因为每个全速前进的脉冲都使得宝贝车旋转大约半厘米。只发送一个脉冲,然后回去检查胡须的状态是一个好主意。每次程序从Forward()返回后,程序再次从while循环的开始处执行,此时if…else语句会再次检查胡须的状态。2.3用光敏电阻进行导航光探测线路工作原理如下列图所示,为光敏电阻的光探测线路。设定为输入的I/O口实际上并不需要5V来使其输入存放器的值为1,任何大于1.5V的电压都会使其存放器的值为1。同样的,I/O口也不是需要0V来使其输入存放器的值为0,任何小于1.5V的电压都会使其存放器的值为0。由于光敏电阻的阻值随着光照的强弱而改变,Vo点的输出电压也随之改变:当R增大时,Vo会减小;当R减小时,Vo会增大。Vo正是当微控制器的I/O口作为输入口时检测到的电压。如果电路连接到P1_5,当Vo的值大于1.5V时,P1存放器的第6位为1,当Vo的值小于1.5V时,P1存放器的第6位为0。试验无阴影编程如下:#include<BoeBot.h>#include<uart.h>intP1_5state(void)
{return(P1&0x20)?1:0;}intP2_3state(void){return(P2&0x08)?1:0;}voidForward(void)
{P1_1=1;delay_nus(1700);
P1_1=0;P1_0=1;delay_nus(1300);
P1_0=0;delay_nms(20);}voidLeft_Turn(void){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);}}voidRight_Turn(void)
{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);}}voidBackward(void)
{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);}}intmain(void)
{uart_Init();printf("ProgramRunning!");for(counter=1;counter<=1000;counter++)//开始/复位信号
{P1_4=1;delay_nus(1000);P1_4=0delay_nus(1000);}while(1)
{if((P1_5state()==0)&&(P2_3state()==0))
{Backward();//向后
Left_Turn();//向左
Left_Turn();//向左
}elseif(P1_5state()==0)
{Backward();//向后Right_Turn();//向右
}elseif(P2_3state()==0)
{Backward();//向后
Left_Turn();//向左
}elseForward();//向前}}手电筒光束引导宝贝车测试和校正宝贝车机器人的光传感器,使它能够识别环境光和手电筒光束。编程使机器人跟随指向它前方外表的手电筒光束行走。编程如下:#include<BoeBot.h>#include<uart.h>intmain(void)
{unsignedintcount;UnsignedinttimeLeft,timeRight;
uart_Init();while(1){TH0=TL0=0;TMOD=TMOD|0x01;
P1_5=0;delay_nms(300);
P1_5=1;TR0=1;while((P1&0x20)==0);count=TH0;count=count<<8;
count=count+TL0;
timeLeft=count;TH0=TL0=0;TMOD=TMOD|0x01;
P2_3=0;delay_nms(300);
P2_3=1;TR0=1;while((P2&0x08)==0);count=TH0;count=count<<8;
count=count+TL0;
timeRight=count;printf("L%dus\n",timeLeft);
printf("R%dus\n",timeRight);
delay_nms(50);}}2.4红外线导航红外探测工作原理:宝贝车机器人上建立的红外物体探测系统在许多方面就像汽车的前灯。当汽车前灯的射出的光从障碍物体反射回来时,你的眼睛发现障碍物体,然后你的大脑处理这些信息,并据此控制你的身体引导汽车。宝贝车机器人使用红外线两极管LED作为前灯。发射红外光,在一些情况下,红外线从物体反射从机器人前进的方向折回。宝贝车机器人的眼睛是红外检测器。红外检测器发出信号来说明它们是否检测到从物体反射回的红外线。上图所示为红外发射电路,编程使宝贝车探测避开障碍物,编程如下:intmain(void){bitirDetectLeft,irDetectRight;inti,counter;uart_Init();printf("ProgramRunning!\n");for(counter=1;counter<=1000;counter++)//开始/复位信号{P1_3=1;delay_nus(1000);P1_3=0;delay_nus(1000);}while(1){IRLaunch('R');irDetectRight=RightIR;//右边接收IRLaunch('L');irDetectLeft=LeftIR;//左边接收if((irDetectLeft==0)&&(irDetectRight==0))//两边同时接收到红外线{Backward();Left_Turn();Left_Turn();}elseif(irDetectLeft==0)//只有左边接收到红外线{Backward();Right_Turn();}elseif(irDetectRight==0)//只有右边接收到红外线{Backward();Left_Turn();}elseForward();}}2.5实习过程在做舵机车的过程中,用C语言编程时,我遇到的问题是我按照电路图接好电路好,程序一直都下载不进去,但是我检查线路没有发现有问题,最后我发现原来我的下载器坏了,不起作用了。换了新的下载器后,终于能正常下载了,宝贝车也能正常动作了。2.6总结通过做宝贝车这次实验,让我对C52单片机的编程有了进一步的掌握,而且我觉得我自己真正的把以前自己学的C语言编程与实际结合起来了。在做这次实验的过程中,遇到问题,解决问题,不仅提高了我们的动手能力,也让我积极的面对问题,解决问题,而不是像以前那样手足无措了。2.7展望这次实验让我觉得机电一体化是真正的将机械与电子的有机结合,在实验的过程中很好的能让我把所学的知识加以稳固,加深我对C51单片机的理解。我相信在不久的将来,机电系统的开展会让我们的生活变得更加方便。二、直流电机小车总结1、实习任务与要求按所给的实验图连线,然后用C语言编写程序,下载到C52单片机,使直流电机小车实现红外寻迹、蓝牙摇控、红外遥控、超声波避障、测速等功能。2、总结实习内容2.1红外寻迹红外寻迹传感器原理寻迹传感器通常采用红外的方式,红外管发射出来的红外光通过地面〔白色〕反射回来,在接收管里收到信号,一旦碰到黑线,那么红外光都被吸收,接收管没有接收到信号,从而得知传感器是否压线,从而调整小车运行方向。红外寻迹编程如下:#include<AT89x51.H>#defineLeft_1_ledP3_4 //P3_4接四路寻迹模块接口第一路输出信号即中控板上面标记为OUT1#defineLeft_2_ledP3_5 //P3_5接四路寻迹模块接口第二路输出信号即中控板上面标记为OUT2 #defineRight_1_ledP3_6 //P3_6接四路寻迹模块接口第三路输出信号即中控板上面标记为OUT3#defineRight_2_ledP3_7 //P3_7接四路寻迹模块接口第四路输出信号即中控板上面标记为OUT4#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;} //右边两个电机停转unsignedcharpwm_val_left=0;unsignedcharpush_val_left=1;//左电机占空比10/40unsignedcharpwm_val_right=0;unsignedcharpush_val_right=1;//右电机占空比10/40bitRight_moto_stop=1;bitLeft_moto_stop=1;/************************************************************************/ //延时函数 voiddelay(unsignedintk){unsignedintx,y; for(x=0;x<k;x++) for(y=0;y<2000;y++);}/************************************************************************///前速前进voidrun(void){Left_moto_go; Right_moto_go;}/*********************************************************************/ /*--主函数--*/ voidmain(void){delay(100); //延时一段时间run();while(1) /*无限循环*/ {//有信号为0没有信号为1if(Left_2_led==0&&Right_1_led==0)run();else { if(Right_1_led==1&&Left_2_led==0) //右边检测到黑线 { Left_moto_go; //左边两个电机正转 Right_moto_back; //右边两个电机反转} if(Left_2_led==1&&Right_1_led==0) //左边检测到黑线 { Right_moto_go; //右边两个电机正转 Left_moto_back; //左边两个电机反转 }}}}2.2蓝牙摇控工作原理:通过Android智能下载配套的Android软件控制小车运行,Android用内置蓝牙与蓝牙无线模块配对,发出指令,蓝牙无线模块接收其指令。当单片机接收到蓝牙无线模块传来的指令,执行相应解码动作,从而控制小车。用C语言编程如下:#include<AT89x51.H>#defineLeft_1_ledP3_4 //P3_2接四路寻迹模块接口第一路输出信号即中控板上面标记为OUT1#defineLeft_2_ledP3_5 //P3_3接四路寻迹模块接口第二路输出信号即中控板上面标记为OUT2 #defineRight_1_ledP3_6 //P3_4接四路寻迹模块接口第三路输出信号即中控板上面标记为OUT3#defineRight_2_ledP3_7 //P3_5接四路寻迹模块接口第四路输出信号即中控板上面标记为OUT4#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;} //右边两个电机停转#defineleft'C'#defineright'D'#defineup'A'#definedown'B'#definestop'F'charcodestr[]="收到指令,向前!\n";charcodestr1[]="收到指令,向后!\n";charcodestr2[]="收到指令,向左!\n";charcodestr3[]="收到指令,向右!\n";charcodestr4[]="收到指令,停止!\n";bitflag_REC=0;bitflag=0;unsignedchari=0;unsignedchardat=0;unsignedcharbuff[5]=0;//接收缓冲字节/************************************************************************/ //延时函数 voiddelay(unsignedintk){unsignedintx,y; for(x=0;x<k;x++) for(y=0;y<2000;y++);}/************************************************************************///字符串发送函数 voidsend_str()//传送字串{ unsignedchari=0; while(str[i]!='\0') { SBUF=str[i]; while(!TI); //等特数据传送 TI=0; //去除数据传送标志 i++; //下一个字符 } } voidsend_str1()//传送字串{ unsignedchari=0; while(str1[i]!='\0') { SBUF=str1[i]; while(!TI); //等特数据传送 TI=0; //去除数据传送标志 i++; //下一个字符 } } voidsend_str2()//传送字串{unsignedchari=0; while(str2[i]!='\0') { SBUF=str2[i]; while(!TI); //等特数据传送 TI=0; //去除数据传送标志 i++; //下一个字符 } } voidsend_str3()//传送字串{ unsignedchari=0; while(str3[i]!='\0') { SBUF=str3[i]; while(!TI); //等特数据传送 TI=0; //去除数据传送标志 i++; //下一个字符 } } voidsend_str4()//传送字串{ unsignedchari=0; while(str4[i]!='\0') { SBUF=str4[i]; while(!TI); //等特数据传送 TI=0; //去除数据传送标志i++; //下一个字符 } }/************************************************************************///前速前进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;//右电机往前走}//STOPvoidstoprun(void){Left_moto_Stop;//左电机往前走 Right_moto_Stop;//右电机往前走}/************************************************************************/voidsint()interrupt4 //中断接收3个字节{if(RI) //是否接收中断{RI=0;dat=SBUF;if(dat=='O'&&(i==0))//接收数据第一帧{buff[i]=dat;flag=1;//开始接收数据}elseif(flag==1){i++;buff[i]=dat;if(i>=2){i=0;flag=0;flag_REC=1;}//停止接收} }}/*********************************************************************/ /*--主函数--*/ voidmain(void){ TMOD=0x20;TH1=0xFd; //11.0592M晶振,9600波特率TL1=0xFd;SCON=0x50;PCON=0x00;TR1=1; ES=1;EA=1;while(1) /*无限循环*/ { if(flag_REC==1) // { flag_REC=0; if(buff[0]=='O'&&buff[1]=='N') //第一个字节为O,第二个字节为N,第三个字节为控制码 switch(buff[2]) { caseup: //前进 send_str(); run(); break; casedown: //后退 send_str1(); backrun(); break; caseleft: //左转 send_str2(); leftrun(); break; caseright: //右转 send_str3(); rightrun(); break; casestop: //停止 send_str4(); stoprun(); break;}} }} 2.3红外遥控红外遥控原理:红外遥控的发射电路是采用红外发光二极管来发出经过调制的红外光波;红外接收电路由红外接收二极管、三极管或硅光电池组成,它们将红外发射器发射的红外光转换为相应的电信号,再送后置放大器。发射机一般由指令键(或操作杆)、指令编码系统、调制电路、驱动电路、发射电路等几局部组成。当按下指令键或推动操作杆时,指令编码电路产生所需的指令编码信号,指令编码信号对载波进行调制,再由驱动电路进行功率放大后由发射电路向外发射经调制定的指令编码信号。接收电路一般由接收电路、放大电路、调制电路、指令译码电路、驱动电路、执行电路(机构)等几局部组成。接收电路将发射器发出的已调制的编码指令信号接收下来,并进行放大后送解调电路,解调电路将已调制的指令编码信号解调出来,即复原为编码信号。指令译码器将编码指令信号进行译码,最后由驱动电路来驱动执行电路实现各种指令的操作控制〔机构〕。红外遥控小车原理,即红外遥控发射出相应编码,被一体化接收头复原出信号,再由单片机执行相应的解码动作,从而控制小车行进。用C语言编程如下:#include<AT89x51.H>#defineLeft_1_ledP3_4 //P3_2接四路寻迹模块接口第一路输出信号即中控板上面标记为OUT1#defineLeft_2_ledP3_5 //P3_3接四路寻迹模块接口第二路输出信号即中控板上面标记为OUT2 #defineRight_1_ledP3_6 //P3_4接四路寻迹模块接口第三路输出信号即中控板上面标记为OUT3#defineRight_2_ledP3_7 //P3_5接四路寻迹模块接口第四路输出信号即中控板上面标记为OUT4#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;} //右边两个电机停转#defineImax14000//此处为晶振为11.0592时的取值,#defineImin8000//如用其它频率的晶振时,#defineInum11450//要改变相应的取值。#defineInum2700#defineInum33000unsignedcharf=0;unsignedcharIm[4]={0x00,0x00,0x00,0x00};unsignedcharshow[2]={0,0};unsignedlongm,Tc;unsignedcharIrOK;/************************************************************************/ //延时函数 voiddelay(unsignedintk){unsignedintx,y; for(x=0;x<k;x++) for(y=0;y<2000;y++);}/************************************************************************/ //外部中断解码程序voidintersvr1(void)interrupt2using1{Tc=TH0*256+TL0;//提取中断时间间隔时长TH0=0;TL0=0;//定时中断重新置零if((Tc>Imin)&&(Tc<Imax)){m=0;f=1;return;}//找到启始码if(f==1){if(Tc>Inum1&&Tc<Inum3){Im[m/8]=Im[m/8]>>1|0x80;m++;}if(Tc>Inum2&&Tc<Inum1){Im[m/8]=Im[m/8]>>1;m++;//取码}if(m==32){m=0;f=0;if(Im[2]==~Im[3]){IrOK=1;}elseIrOK=0;//取码完成后判断读码是否正确}//准备读下一码}}/************************************************************************///前速前进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;//右电机往前走}//STOPvoidstoprun(void){Left_moto_Stop;//左电机往前走 Right_moto_Stop;//右电机往前走}/*********************************************************************/ /*--主函数--*/ voidmain(void){m=0;f=0;IT1=1;EX1=1;TMOD=0x11;TH0=0; TL0=0;TR0=1; EA=1;delay(100); while(1) /*无限循环*/ {if(IrOK==1){switch(Im[2]) {case0x0e:run(); //前进break;case0x1a:backrun(); //后退break;case0x0a:leftrun(); //左转break; case0x1e:rightrun(); //右转break; case0x05:stoprun(); //停止break; default:break;}IrOK=0;} }}2.4超声波避障工作原理通过超声波发射装置发出超声波,根据接收器接到超声波时的时间差就可以知道距离了。这与雷达测距原理相似。超声波发射器向某一方向发射超声波,在发射时刻的同时开始计时,超声波在空气中传播,途中碰到障碍物就立即返回来,超声波接收器收到反射波就立即停止计时。〔超声波在空气中的传播速度为340m/s,根据计时器记录的时间t,就可以计算出发射点距障碍物的距离(s),即:s=340t/2〕。用C语言编程如下:voidmain(void){TMOD=0X11; TH1=(65536-100)/256; //100US定时 TL1=(65536-100)%256; TH0=0; TL0=0; TR1=1;ET1=1; ET0=1; EA=1;delay(100);push_val_left=14; //舵机归中while(1) /*无限循环*/ {if(timer>=1000) //100MS检测启动检测一次 { timer=0; StartModule();//启动检测Conut(); //计算距离if(S<20) //距离小于20CM { stoprun(); //小车停止 COMM(); //方向函数 } else if(S>30) //距离大于,30CM往前走 run(); } }}2.5测速测速原理:当小车需要测量往驶速度,或是测量小车往驶距离时,需要用的模块〔与码盘一起配合使用〕。码盘上面有一格一格的“小洞”,码盘一般是20格,就是把360分为20小格即18度/格。配合测速模块就可以输出电信号,供应单片机计数,从而计算出码盘速度与行走距离。用C语言编程如下:/*--主函数--*/ voidmain(void){TMOD=0X01;TH0=(65536-2000)/256; //2MS定时TL0=(65536-2000)%256; TR0=1; ET0=1;EX0=1; //开启外部中断0IT0=1; //下降沿有效 EA=1;run(); while(1) { //有信号为0没有信号为1if(Left_2_led==0&&Right_1_led==0)run();else { if(Right_1_led==1&&Left_2_led==0) //右边检测到黑线 { Left_moto_go; //左边两个电机正转 Right_moto_back; //右边两个电机反转} if(Left_2_led==1&&Right_1_led==0) //左边检测到黑线 {Right_moto_go; //右边两个电机正转 Left_moto_back; //左边两个电机反式开始转 } }}}2.6实习过程在做直流电机小车的过程中,在按原理图接好线以后,我发现各个局部根本都可以实现其功能,但唯一觉得循迹这一功能很难实现。在确定不是接线问题后,我发现问题产生的原因是红外传感器的灵敏度出了问题。继而顺逆时针调节传感器灵敏度,可经过一下午的调节仍没效果,后来在同学的帮助下才解决这一问题。2.7总结通过做这次直流电机小车实验,在读程序的过程中,发现自己有些语句没有读懂,这表达了我对C51单片机的学习还不够完善,还不够深入。但是这一过程让我对机电一体化系统的设计产生浓厚的兴趣。在做实验的过程中,我觉得所设计的直流电机小车的寻迹并不是很精确,只要传感器的精度稍微不准确,就会产生很大的偏差。2.8展望在做完直流电机这一实验以后,我觉得收获很大,不仅稳固了知识,也对机电一体化系统有了更深入的学习。对于直流电机小车的设计,我觉得如果能够将寻迹这一功能设计的更准确那就将会更好。三、步进电机小车总结1、实习任务与要求要求会连接电路图,编写程序使步进电机小车实现前进、后退、左转、右转、红外避障、红外寻迹等功能。2、实习内容步进电机工作原理步进电动机是一种将电脉冲信号转换成角位移或线位移的机电元件。步进电动机的输入量是脉冲序列,输出量那么为相应的增量位移或步进运动。正常运动情况下,它每转一周具有固定的步数;做连续步进运动时,其旋转转速与输入脉冲的频率保持严格的对应关系,不受电压波动和负载变化的影响。由于步进电动机能直接接受数字量的控制,所以特别适宜采用微机进行控制。
2.1步进电机小车动作步进电机小车前进C语言编程如下:voidmain(void){delay(10);timer1_init(); while(1) { move_left(10,0,1); move_right(10,1,1); }}voidtimer1_serve()interrupt3{ TH1=(65536-100)/256; TL1=(65536-100)%256; n=n+1; if(n==speed) { clk_left=~clk_left; clk_right=~clk_right; n=0; }}步进电机小车后退C语言编程如下:voidmain(void){delay(10);timer1_init(); while(1){ move_left(10,1,1); move_right(10,0,1); }}voidtimer1_serve()interrupt3{ TH1=(65536-100)/256; TL1=(65536-100)%256; n=n+1; if(n==speed) { clk_left=~clk_left; clk_right=~clk_right; n=0; }}步进电机小车左转C语言编程如下:voidmain(void){delay(10);timer1_init(); while(1) { move_left(10,1,1); move_right(10,1,1); delay(200);//可以通过延时时间控制转弯角度. stop(); while(1); }}voidstop(){ TR1=0;}voidtimer1_serve()interrupt3{ TH1=(65536-100)/256; TL1=(65536-100)%256; n=n+1; if(n==speed) { clk_left=~clk_left; clk_right=~clk_right; n=0; }}步进电机小车右转C语言编程如下:voidmain(void){delay(10);timer1_init(); while(1) { move_left(10,0,1); move_right(10,0,1); delay(200);//可以通过延时时间控制转弯角度. stop();while(1); }}voidstop(){ TR1=0;}voidtimer1_serve()interrupt3{ TH1=(65536-100)/256; TL1=(65536-100)%256; n=n+1; if(n==speed) { clk_left=~clk_left; clk_right=~clk_right; n=0; }}2.2红外避障功能工作原理在一定范围内,如果没有障碍物,发射出去的红外线,因为传播距离越远而逐渐减弱,最后消失。如果有障碍物,红外线遇到障碍物,被反射到达传感器接收头。传感器检测到这一信号就可以确认正前方有障碍物,并送给单片机,单片机进行一系列的处理分析,协调小车两轮工作,躲避障碍物动作。C语言编程如下:voidmain(void){delay(10);timer1_init(); while(1) { if(ir_left==0&&ir_mid==0&&ir_right==0)//以下是三个红外传感器的八种状态和对应的运动方式 { move_left(15,0,1); move_right(15,0,1); delay(800); } if(ir_left==0&&ir_mid==0&&ir_right==1) { move_left(15,0,1); move_right(15,0,1); delay(400); } if(ir_left==0&&ir_mid==1&&ir_right==0) { move_left(15,0,1); move_right(15,0,1); delay(800); } if(ir_left==0&&ir_mid==1&&ir_right==1) { move_left(15,0,1); move_right(15,0,1); delay(400); } if(ir_left==1&&ir_mid==0&&ir_right==0) { move_left(15,1,1); move_right(15,1,1); delay(400); } if(ir_left==1&&ir_mid==0&&ir_right==1) { move_left(15,0,1); move_right(15,0,1); delay(800); } if(ir_left==1&&ir_mid==1&&ir_right==0) { move_left(15,1,1); move_right(15,1,1); delay
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 弘扬塞罕坝精神-加快建设美丽XX
- 2026-2030空气清新器行业市场发展分析及发展趋势与投资研究报告
- 2026年高校辅导员《就业指导》培训试卷(冲刺押题)
- 2026年人教版小学语文四年级下册第6单元说明文阅读理解题库
- 山东电动汽车充电桩定制指南按需配置与安装要点
- 教育孩子感悟心得有关教育孩子的心得体会篇
- 2026年云计算网络安全工程师职业技能水平考核试卷及答案
- 2025年最-新计算机等级考试四级网络工程师试题与答案
- 2025年人工智能训练师三级理论(带答案)
- 语文教师年终期末工作总结范文
- 2026年秋季开学小学防震减灾开学第一课
- 2026年继电保护专业岗位考核题库(附答案)
- (2026 秋季版)新人教 PEP 六年级上册英语单元词汇表(含音标 + 默写练习 + 参考答案)
- 消毒供应室追溯系统
- 乡镇消防安全知识培训课件
- 中建钢结构工程质量通病防治图册2020版
- 人体生理功能PPT(高职护理)完整全套教学课件
- 04SG519-2 多高层建筑钢结构节点连接
- GB/T 22344-2008包装用聚酯捆扎带
- 幼儿园中班课件:《调皮的风》
- 吹灰器教学讲解课件-
评论
0/150
提交评论