当前位置:文档之家› 基于单片机的四足机器人

基于单片机的四足机器人

—-可编辑修改,可打印——别找了你想要的都有!精品教育资料——全册教案,,试卷,教学课件,教学设计等一站式服务——全力满足教学需求,真实规划教学环节最新全面教学资源,打造完美教学模式深圳大学期末考试试卷开/闭卷开卷A/B卷N/A课程编号13032700011303270002 课程名称EDA技术与实践(2)学分2.0命题人(签字) 审题人(签字) 2015 年10 月20 日设计考试题目:完成一个集成电路或集成系统设计项目基本要求:2-3位同学一组,完成一个完整的集成电路设计项目或是一个集成系统设计项目。

规格说明:1.题目自定。

1)集成电路设计项目i.若为IC设计项目需要完成IC设计的版图。

ii.若采用FPGA实现数字集成电路设计,需要进行下板测试。

2)集成系统设计项目,需使用FPGA开发板或嵌入式开发板,完成一个完整的集成系统作品。

3)作品需要课堂现场演示,最后提交报告,每个小组单独一份报告,但需阐述各个成员的工作。

2.评分标准:2015年第二学期,建议作品内容:完成一个行走机器人,基本要求o2-8只脚o能行走o可以用单片机,嵌入式,FPGA方案一、设计目的:通过设计一个能够走动的机器人来增加对动手能力,和对硬件电路设计的能力,增强软件流程设计的能力和对设计流程实现电路功能的能力,在各个方面提升自己对电子设计的能力。

二、设计仪器和工具:本设计是设计一个能走动的机器人,使用到的仪器和工具分别有:sg90舵机12个、四脚机器人支架一副、单片机最小系统一个、电容电阻若干、波动开关一个、超声遥控模块一对、杜邦线若干、充电宝一个。

三、设计原理:本次设计的机器人是通过51单片机控制器来控制整个电路的。

其中,舵机的控制是通过产生一个周期为20毫秒的高电平带宽在0.5到2.5ms之间的pwm信号来控制。

12路Pwm信号由单片机的定时器来产生。

51单片机产生12路pwm信号的原理是:以20毫秒为周期,把这20毫秒分割成8个2.5ms,因为,每个pwm信号的高电平时间最多为2.5ms,然后在前六个2.5ms中分别输出两个pwm信号的高电平,例如,在第一个2.5ms中输出第一个和第二个pwm信号的高电平时,首先开始时,把信号S1、S2都置1,然后比较两个高电平时间,先定时时间短的高电平时间,把高电平时间短的那个信号置0,再定时两个高电平时间差,到时把高电平时间长的按个信号置0,然后,定时(2.5-较长那个高电平时间),在第二个2.5ms开始时,把S3、S4置1,接下来和上面S1、S2一样,以此类推,在六个2.5ms 中输出12路pwm信号来控制舵机。

原理图如图1.通过超声模块来控制机器人前进、后退、向前的左转、向前的右转、向后的左转、向后的右转几个动作。

控制模块电路,D0,D1,D2,D3分别为超声接受模块的输出,输出为高电平,要加NPN作为开关。

四、设计步骤:1、设计好硬件电路,焊接51单片机的最小系统和各个硬件电路。

2、设计好软件的流程图,如图2。

3、写产生12路控制舵机的pwm信号的程序并在proteus中测试,如图3。

4、设计出行走步态,四脚机器人的步态是采用对角的相互前进来实现的,如图4。

5、写出流程图中各个模块的软件,包括前进函数、后退函数、左转和右转的函数,并逐个烧到单片机中测试。

6、按流程图把各个函数组合到主函数中,完成所有软件的编写,并烧到单片机中测试,并不断的调试。

图2.流程图图3.在proteus里测试并调试pwm信号图4,行走步态五、遇到的问题及解决:1、此设计的pwm信号输出使用定时器来产生每个信号的高电平和低电平,每次定时时间到,都会会关掉定时器并执行中断函数,在此过程中会消耗一定的时间,等到给定时器赋值下一次定时时间并开始定时时,就会产生一定的时间延时,造成每次高电平时间都会变长一点,且总的加起来会使20ms周期变长,因此,需要稍微减小高电平的定时时间,并结合proteus仿真确定最准确值。

2、由于机器人的四个脚都是自己组装的,可能会有存在不平衡和对称,当对角的两只脚同时向前迈同一个角度时,会使机器人向一个方向偏转而不沿直线前进,这时要结合实际测试来调整机器人的各个脚的前迈角度来使机器人平衡的沿直线前进,比如,一只脚迈多点,另一边的脚迈少点。

六、心得与体会:通过这次设计,我更加的熟悉基本的硬件电路和软件的设计,特别是软件的流程图设计。

更加熟悉软硬件电路结合的测试与调试。

六、实验实物图:精选资料设计代码:#include<reg51.h>#define uchar unsigned char#define uint unsigned intuintpwm[12],p_min1,p_max1,p_min2,p_max2,p_min3,p_max3,p_min4,p_max4,p_min5,p_ma x5,p_min6,p_max6,p1,p2,p3,p4,p5,p6,p11,p21,p31,p41,p51,p61;//高电平带宽sbit s0=P2^0;//12路输出信号sbit s1=P2^1;sbit s2=P2^2;sbit s3=P2^3;sbit s4=P2^4;sbit s5=P2^5;sbit s6=P2^6;sbit s7=P2^7;sbit s8=P0^6;sbit s9=P0^4;sbit s10=P0^2;sbit s11=P0^0;sbit up=P1^0;sbit right=P1^4;sbit left=P1^2;sbit down=P1^6;uchar s_num,f,b,r,l,back_flag;forward_flag;.void back();//后退void forward(); //前进void back_right(); //后右转、前左转void back_left(); //后左转、前右转void scan_key();//遥控监控void labor_init();//机器人的初始状态void delay(uint i) //延时函数,延时一秒{uint j;for(i;i>0;i--)for(j=110;j>0;j--);}void init(void)//中断初始函数{TMOD=0x01;TR0=1;ET0=1;EA=1;}void rate(uint p[12])//pwm的排序函数{p_min1=(p[0]<=p[1]?(p[0]):(p[1]))-40;精选资料p_max1=p[0]>p[1]?(p[0]):(p[1]);p_min2=(p[2]<=p[3]?p[2]:p[3])-64;p_max2=p[2]>p[3]?p[2]:p[3];p_min3=(p[4]<=p[5]?p[4]:p[5])-64;p_max3=p[4]>p[5]?p[4]:p[5];p_min4=(p[6]<=p[7]?p[6]:p[7])-64;p_max4=p[6]>p[7]?p[6]:p[7];p_min5=(p[8]<=p[9]?p[8]:p[9])-64;p_max5=p[8]>p[9]?p[8]:p[9];p_min6=(p[10]<=p[11]?p[10]:p[11])-64;p_max6=p[10]>p[11]?p[10]:p[11];p1=p_max1-p_min1-21;p2=p_max2-p_min2-42;p3=p_max3-p_min3-42;p4=p_max4-p_min4-42;p5=p_max5-p_min5-42;p6=p_max6-p_min6-42;p11=2400-p_max1;p21=2400-p_max2;p31=2400-p_max3;p41=2400-p_max4;p51=2400-p_max5;p61=15500-p_max6;TH0=-p_min1/256;TL0=-p_min1%256;s_num=0;s0=1;.s1=1;init();}void scan_key(){if(P1!=0xff){delay(5);if(up==0){f=0;}if(down==0)b=0;if(right==0)r=0;if(left==0)l=0;}}void time0() interrupt 1 //中断产生12路pwm信号{TR0=0;精选资料switch(s_num){case 0:if(pwm[0]<=pwm[1]){if(pwm[0]==pwm[1]){s0=0;s1=0;s_num++;TH0=-(p1-0)/256;TL0=-(p1-0)%256;break;}elses0=0;}elses1=0;TH0=-p1/256;TL0=-p1%256;s_num++;break;case 1:if(pwm[0]>pwm[1])s0=0;elses1=0;TH0=-p11/256;TL0=-p11%256;s_num++;break;case 2:s2=1;s3=1;TH0=-p_min2/256;.TL0=-p_min2%256;s_num++;break;case 3:if(pwm[2]<=pwm[3]){if(pwm[2]==pwm[3]){s2=0;s3=0;s_num++;TH0=-p2/256;TL0=-p2%256;break;} elses2=0;}elses3=0;TH0=-p2/256;TL0=-p2%256;s_num++;break;case 4:if(pwm[2]>pwm[3])s2=0;elses3=0;TH0=-p21/256;TL0=-p21%256;s_num++;break;case 5:s4=1;s5=1;TH0=-p_min3/256;精选资料TL0=-p_min3%256;s_num++;break;case 6:if(pwm[4]<=pwm[5]){if(pwm[4]==pwm[5]){s4=0;s5=0;s_num++;TH0=-p3/256;TL0=-p3%256;break;} elses4=0;}elses5=0;TH0=-p3/256;TL0=-p3%256;s_num++;break;case 7:if(pwm[4]>pwm[5])s4=0;elses5=0;TH0=-p31/256;TL0=-p31%256;s_num++;break;case 8:s6=1;s7=1;TH0=-p_min4/256;.TL0=-p_min4%256;s_num++;break;case 9:if(pwm[6]<=pwm[7]){if(pwm[6]==pwm[7]){s6=0;s7=0;s_num++;TH0=-p4/256;TL0=-p4%256;break;} elses6=0;}elses7=0;TH0=-p4/256;TL0=-p4%256;s_num++;break;case 10:if(pwm[6]>pwm[7])s6=0;elses7=0;TH0=-p41/256;TL0=-p41%256;s_num++;break;case 11:s8=1;s9=1;TH0=-p_min5/256;精选资料TL0=-p_min5%256;s_num++;break;case 12:if(pwm[8]<=pwm[9]){if(pwm[8]==pwm[9]){s8=0;s9=0;s_num++;TH0=-p5/256;TL0=-p5%256;break;} elses8=0;}elses9=0;TH0=-p5/256;TL0=-p5%256;s_num++;break;case 13:if(pwm[8]>pwm[9])s8=0;elses9=0;TH0=-p51/256;TL0=-p51%256;s_num++;break;case 14:s10=1;s11=1;TH0=-p_min6/256;.TL0=-p_min6%256;s_num++;break;case 15:if(pwm[10]<=pwm[11]){if(pwm[10]==pwm[11]){s10=0;s11=0;s_num++;TH0=-p6/256;TL0=-p6%256;break;} elses10=0;}elses11=0;TH0=-p6/256;TL0=-p6%256;s_num++;break;case 16:if(pwm[10]>pwm[11])s10=0;elses11=0;TH0=-p61/256;TL0=-p61%256;s_num++;break;case 17:s0=1;s1=1;精选资料s_num=0;TH0=-p_min1/256;TL0=-p_min1%256;break;}scan_key();TR0=1;}void motor_init1()//给所有信号都设高电平时间为1.5毫秒{uchar i;for(i=0;i<12;i++)pwm[i]=1500;}void labor_init()//机器人的初始状态{motor_init1();l=1;f=1;r=1;b=1;. back_flag=0;forward_flag=0;rate(pwm);//delay(200);while(1){if(r==0){r=1;back_right();}if(l==0){l=1;back_left();}if(f==0){f=1;forward();}if(b==0){b=1;back();}}精选资料}void back(){back_flag=1;forward_flag=0;motor_init1();pwm[8]=pwm[8]+300;pwm[9]=pwm[9]-250;pwm[2]=pwm[2]+150;pwm[3]=pwm[3]-150;pwm[7]=pwm[7]+50;//pwm[0]=pwm[0]-80;//pwm[5]=pwm[5]+80;//pwm[11]=pwm[11]-30;rate(pwm);delay(500);pwm[3]=pwm[3]+320;pwm[8]=pwm[8]-200;pwm[4]=pwm[4]+600;pwm[5]=pwm[5]+600;pwm[6]=pwm[6]+600;pwm[7]=pwm[7]+600;rate(pwm);delay(300);pwm[4]=pwm[4]-600;. pwm[5]=pwm[5]-600;pwm[6]=pwm[6]-600;pwm[7]=pwm[7]-600;rate(pwm);delay(300);while(1){if(r==0){r=1;back_right();}if(l==0){l=1;back_left();}if(f==0){f=1;forward();}if(b==0)b=1;pwm[3]=pwm[3]-320;pwm[8]=pwm[8]+200;pwm[2]=pwm[2]-270;精选资料pwm[9]=pwm[9]+320;pwm[1]=pwm[1]-600;pwm[0]=pwm[0]-600;pwm[10]=pwm[10]-600;pwm[11]=pwm[11]-600;rate(pwm);delay(300);pwm[1]=pwm[1]+600;pwm[0]=pwm[0]+600;pwm[10]=pwm[10]+600;pwm[11]=pwm[11]+600;rate(pwm);delay(500);pwm[2]=pwm[2]+270;pwm[9]=pwm[9]-320;pwm[3]=pwm[3]+320;pwm[8]=pwm[8]-200;pwm[4]=pwm[4]+600;pwm[5]=pwm[5]+600;pwm[6]=pwm[6]+600;pwm[7]=pwm[7]+600;rate(pwm);delay(300);pwm[4]=pwm[4]-600;pwm[5]=pwm[5]-600;pwm[6]=pwm[6]-600;pwm[7]=pwm[7]-600;.rate(pwm);delay(500);if(P1!=0xff)forward();}}void back_right(){motor_init1();pwm[8]=pwm[8]+50;pwm[9]=pwm[9]-50;//pwm[2]=pwm[2]+150;//pwm[3]=pwm[3]-150;pwm[7]=pwm[7]+100;//pwm[0]=pwm[0]-80;//pwm[5]=pwm[5]+80;//pwm[11]=pwm[11]-30;rate(pwm);delay(300);pwm[3]=pwm[3]-70;pwm[8]=pwm[8]-70;pwm[4]=pwm[4]+600;pwm[5]=pwm[5]+600;pwm[6]=pwm[6]+600;精选资料pwm[7]=pwm[7]+600;rate(pwm);delay(300);pwm[4]=pwm[4]-600;pwm[5]=pwm[5]-600;pwm[6]=pwm[6]-600;pwm[7]=pwm[7]-600;rate(pwm);delay(300);while(1){if(r==0){if(back_flag==1){r=1;back_right();}if(forward_flag==1){r=1;back_left();}}if(l==0). {if(back_flag==1){l=1;back_left();}if(forward_flag==1){l=1;back_right();}}if(f==0){f=1;forward();}if(b==0){b=1;back();}pwm[3]=pwm[3]+70;pwm[8]=pwm[8]+70;pwm[2]=pwm[2]-70;pwm[9]=pwm[9]-70;pwm[1]=pwm[1]-600;精选资料pwm[0]=pwm[0]-600;pwm[10]=pwm[10]-600;pwm[11]=pwm[11]-600;rate(pwm);delay(300);pwm[1]=pwm[1]+600;pwm[0]=pwm[0]+600;pwm[10]=pwm[10]+600;pwm[11]=pwm[11]+600;rate(pwm);delay(500);pwm[2]=pwm[2]+70;pwm[9]=pwm[9]+70;pwm[3]=pwm[3]-70;pwm[8]=pwm[8]-70;pwm[4]=pwm[4]+600;pwm[5]=pwm[5]+600;pwm[6]=pwm[6]+600;pwm[7]=pwm[7]+600;rate(pwm);delay(300);pwm[4]=pwm[4]-600;pwm[5]=pwm[5]-600;pwm[6]=pwm[6]-600;pwm[7]=pwm[7]-600;rate(pwm);delay(300);.}}void back_left(){motor_init1();pwm[8]=pwm[8]+50;pwm[9]=pwm[9]-50;//pwm[2]=pwm[2]+150;//pwm[3]=pwm[3]-150;pwm[6]=pwm[6]+50;pwm[7]=pwm[7]+100;//pwm[0]=pwm[0]-80;//pwm[5]=pwm[5]+80;//pwm[11]=pwm[11]-30;rate(pwm);delay(300);pwm[3]=pwm[3]+70;pwm[8]=pwm[8]+70;pwm[4]=pwm[4]+600;pwm[5]=pwm[5]+600;pwm[6]=pwm[6]+600;pwm[7]=pwm[7]+600;rate(pwm);delay(300);精选资料pwm[4]=pwm[4]-600;pwm[5]=pwm[5]-600;pwm[6]=pwm[6]-600;pwm[7]=pwm[7]-600;rate(pwm);delay(300);while(1){if(r==0){if(back_flag==1){r=1;back_right();}if(forward_flag==1){r=1;back_left();}}if(l==0){if(back_flag==1){l=1;.back_left();}if(forward_flag==1){l=1;back_right();}}if(f==0){f=1;forward();}if(b==0){b=1;back();}pwm[3]=pwm[3]-70;pwm[8]=pwm[8]-70;pwm[2]=pwm[2]+70;pwm[9]=pwm[9]+70;pwm[1]=pwm[1]-600;pwm[0]=pwm[0]-600;pwm[10]=pwm[10]-600;pwm[11]=pwm[11]-600;精选资料rate(pwm);delay(300);pwm[1]=pwm[1]+600;pwm[0]=pwm[0]+600;pwm[10]=pwm[10]+600;pwm[11]=pwm[11]+600;rate(pwm);delay(500);pwm[2]=pwm[2]-70;pwm[9]=pwm[9]-70;pwm[3]=pwm[3]+70;pwm[8]=pwm[8]+70;pwm[4]=pwm[4]+600;pwm[5]=pwm[5]+600;pwm[6]=pwm[6]+600;pwm[7]=pwm[7]+600;rate(pwm);delay(300);pwm[4]=pwm[4]-600;pwm[5]=pwm[5]-600;pwm[6]=pwm[6]-600;pwm[7]=pwm[7]-600;rate(pwm);delay(300);}}.void forward(){forward_flag=1;back_flag=0;motor_init1();pwm[2]=pwm[2]-150;pwm[3]=pwm[3]+220;pwm[8]=pwm[8]+10;pwm[11]=pwm[11]-20;rate(pwm);delay(500);pwm[3]=pwm[3]-300;pwm[8]=pwm[8]+300;pwm[4]=pwm[4]+600;pwm[5]=pwm[5]+600;pwm[6]=pwm[6]+600;pwm[7]=pwm[7]+600;rate(pwm);delay(300);pwm[4]=pwm[4]-600;pwm[5]=pwm[5]-600;pwm[6]=pwm[6]-600;pwm[7]=pwm[7]-600;精选资料rate(pwm);delay(300);while(1){if(r==0){r=1;back_left();}if(l==0){l=1;back_right();}if(b==0){b=1;back();}if(f==0)f=1;pwm[3]=pwm[3]+300;pwm[8]=pwm[8]-300;pwm[2]=pwm[2]+300;pwm[9]=pwm[9]-280;. pwm[1]=pwm[1]-600;pwm[0]=pwm[0]-600;pwm[10]=pwm[10]-600;pwm[11]=pwm[11]-600;rate(pwm);delay(300);pwm[1]=pwm[1]+600;pwm[0]=pwm[0]+600;pwm[10]=pwm[10]+600;pwm[11]=pwm[11]+600;rate(pwm);delay(500);pwm[2]=pwm[2]-300;pwm[9]=pwm[9]+280;pwm[3]=pwm[3]-300;pwm[8]=pwm[8]+300;pwm[4]=pwm[4]+600;pwm[5]=pwm[5]+600;pwm[6]=pwm[6]+600;pwm[7]=pwm[7]+600;rate(pwm);delay(300);pwm[4]=pwm[4]-600;pwm[5]=pwm[5]-600;pwm[6]=pwm[6]-600;pwm[7]=pwm[7]-600;rate(pwm);精选资料delay(500);if(P1!=0xff)back();}}void main(void){labor_init();}. THANKS !!!致力为企业和个人提供合同协议,策划案计划书,学习课件等等打造全网一站式需求欢迎您的下载,资料仅供参考。

相关主题