1、深圳大学期末考试试卷开/闭卷开卷A/B卷 N/A课程编号1303270001 1303270002 课程名称EDA技术与实践(2)学分2.0命题人(签字) 审题人(签字) 2015 年 10 月 20 日题号一二三四五六七八九十基本题总分附加题得分评卷人设计考试题目:完成一个集成电路或集成系统设计项目 基本要求: 2-3位同学一组, 完成一个完整的集成电路设计项目或是一个集成系统设计项目。规格说明:1. 题目自定。1) 集成电路设计项目i. 若为IC设计项目需要完成IC设计的版图。ii. 若采用FPGA实现数字集成电路设计,需要进行下板测试。2) 集成系统设计项目,需使用FPGA开发板或嵌入式
2、开发板,完成一个完整的集成系统作品。3) 作品需要课堂现场演示,最后提交报告,每个小组单独一份报告,但需阐述各个成员的工作。2. 评分标准:评价好较好一般未完成完成度40302515演示效果30252015报告评分302520152015年第二学期,建议作品内容: 完成一个行走机器人,基本要求o 2-8只脚o 能行走o 可以用单片机,嵌入式,FPGA方案一、 设计目的:通过设计一个能够走动的机器人来增加对动手能力,和对硬件电路设计的能力,增强软件流程设计的能力和对设计流程实现电路功能的能力,在各个方面提升自己对电子设计的能力。二、 设计仪器和工具:本设计是设计一个能走动的机器人,使用到的仪器和
3、工具分别有: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中输出第一个和第二个pw
4、m信号的高电平时,首先开始时,把信号S1、S2都置1,然后比较两个高电平时间,先定时时间短的高电平时间,把高电平时间短的那个信号置0,再定时两个高电平时间差,到时把高电平时间长的按个信号置0,然后,定时(2.5-较长那个高电平时间),在第二个2.5ms开始时,把S3、S4置1,接下来和上面S1、S2一样,以此类推,在六个2.5ms 中输出12路pwm信号来控制舵机。原理图如图1.第一个2.5ms0 2.5通过超声模块来控制机器人前进、后退、向前的左转、向前的右转、向后的左转、向后的右转几个动作。控制模块电路,D0,D1,D2,D3分别为超声接受模块的输出,输出为高电平,要加NPN作为开关。四、
5、 设计步骤:1、 设计好硬件电路,焊接51单片机的最小系统和各个硬件电路。2、 设计好软件的流程图,如图2。3、 写产生12路控制舵机的pwm信号的程序并在proteus中测试,如 图3。4、 设计出行走步态,四脚机器人的步态是采用对角的相互前进来实现的,如图4。5、 写出流程图中各个模块的软件,包括前进函数、后退函数、左转和 右转的函数,并逐个烧到单片机中测试。6、按流程图把各个函数组合到主函数中,完成所有软件的编写,并烧到单片机中测试,并不断的调试。开始 初始化扫描控制按键处理控制按键机器人行走 结束图2.流程图 开始图3.在proteus里测试并调试pwm信号初始状态:先迈一对脚 迈另一
6、对并另一对支撑 身体前进图4,行走步态五、 遇到的问题及解决:1、 此设计的pwm信号输出使用定时器来产生每个信号的高电平和低电平,每次定时时间到,都会会关掉定时器并执行中断函数,在此过程中会消耗一定的时间,等到给定时器赋值下一次定时时间并开始定时时,就会产生一定的时间延时,造成每次高电平时间都会变长一点,且总的加起来会使20ms周期变长,因此,需要稍微减小高电平的定时时间,并结合proteus仿真确定最准确值。2、 由于机器人的四个脚都是自己组装的,可能会有存在不平衡和对称,当对角的两只脚同时向前迈同一个角度时,会使机器人向一个方向偏转而不沿直线前进,这时要结合实际测试来调整机器人的各个脚的
7、前迈角度来使机器人平衡的沿直线前进,比如,一只脚迈多点,另一边的脚迈少点。六、心得与体会:通过这次设计,我更加的熟悉基本的硬件电路和软件的设计,特别是软件的流程图设计。更加熟悉软硬件电路结合的测试与调试。六、实验实物图:设计代码:#include#define uchar unsigned char#define uint unsigned intuint pwm12,p_min1,p_max1,p_min2,p_max2,p_min3,p_max3,p_min4,p_max4,p_min5,p_max5,p_min6,p_max6,p1,p2,p3,p4,p5,p6,p11,p21,p31,
8、p41,p51,p61;/高电平带宽sbit s0=P20;/12路输出信号sbit s1=P21;sbit s2=P22;sbit s3=P23;sbit s4=P24;sbit s5=P25;sbit s6=P26;sbit s7=P27;sbit s8=P06;sbit s9=P04;sbit s10=P02;sbit s11=P00;sbit up=P10;sbit right=P14;sbit left=P12;sbit down=P16;uchar s_num,f,b,r,l,back_flag;forward_flag;void back();/后退void forward();
9、 /前进void back_right();/后右转 、前左转void back_left(); /后左转、前右转 void scan_key();/遥控监控void labor_init();/机器人的初始状态void delay(uint i) /延时函数,延时一秒uint j;for(i;i0;i-)for(j=110;j0;j-);void init(void)/中断初始函数TMOD=0x01;TR0=1;ET0=1;EA=1;void rate(uint p12)/pwm的排序函数p_min1=(p0p1?(p0):(p1);p_min2=(p2p3?p2:p3;p_min3=(p4
10、p5?p4:p5;p_min4=(p6p7?p6:p7;p_min5=(p8p9?p8:p9;p_min6=(p10p11?p10:p11;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/2
11、56;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(pwm0pwm1)s0=0;elses1=0;TH0=-p11/256;TL0=-p11%256;s_num+;break;case 2:s2=1; s3=1; TH0=-p_min2/256; T
12、L0=-p_min2%256; s_num+; break;case 3:if(pwm2pwm3)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(pwm4pwm5)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+
13、; break;case 9:if(pwm6pwm7)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(pwm8pwm9)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:i
14、f(pwm10pwm11)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;i12;i+)pwmi=1500;void labor_init()/机器人的初始状态motor_init1();l=1;f=1;r=1;b=1;back_flag=0;forward_flag=
15、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();pwm8=pwm8+300;pwm9=pwm9-250;pwm2=pwm2+150;pwm3=pwm3-150;pwm7=pwm7+50;/pwm0=pwm0-80;/pwm5=pwm5+80;/pwm11=pwm11-30;rate(pwm);delay(5
16、00);pwm3=pwm3+320;pwm8=pwm8-200;pwm4=pwm4+600;pwm5=pwm5+600;pwm6=pwm6+600;pwm7=pwm7+600;rate(pwm);delay(300);pwm4=pwm4-600;pwm5=pwm5-600;pwm6=pwm6-600;pwm7=pwm7-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;pwm3=pwm3-320;pwm8=pwm8+200
17、;pwm2=pwm2-270;pwm9=pwm9+320;pwm1=pwm1-600;pwm0=pwm0-600;pwm10=pwm10-600;pwm11=pwm11-600;rate(pwm);delay(300);pwm1=pwm1+600;pwm0=pwm0+600;pwm10=pwm10+600;pwm11=pwm11+600;rate(pwm);delay(500);pwm2=pwm2+270;pwm9=pwm9-320;pwm3=pwm3+320;pwm8=pwm8-200;pwm4=pwm4+600;pwm5=pwm5+600;pwm6=pwm6+600;pwm7=pwm7+6
18、00;rate(pwm);delay(300);pwm4=pwm4-600;pwm5=pwm5-600;pwm6=pwm6-600;pwm7=pwm7-600;rate(pwm);delay(500);if(P1!=0xff)forward();void back_right()motor_init1();pwm8=pwm8+50;pwm9=pwm9-50;/pwm2=pwm2+150;/pwm3=pwm3-150;pwm7=pwm7+100;/pwm0=pwm0-80;/pwm5=pwm5+80;/pwm11=pwm11-30;rate(pwm);delay(300);pwm3=pwm3-7
19、0;pwm8=pwm8-70;pwm4=pwm4+600;pwm5=pwm5+600;pwm6=pwm6+600;pwm7=pwm7+600;rate(pwm);delay(300);pwm4=pwm4-600;pwm5=pwm5-600;pwm6=pwm6-600;pwm7=pwm7-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_f
20、lag=1)l=1;back_right();if(f=0)f=1;forward();if(b=0)b=1;back();pwm3=pwm3+70;pwm8=pwm8+70;pwm2=pwm2-70;pwm9=pwm9-70;pwm1=pwm1-600;pwm0=pwm0-600;pwm10=pwm10-600;pwm11=pwm11-600;rate(pwm);delay(300);pwm1=pwm1+600;pwm0=pwm0+600;pwm10=pwm10+600;pwm11=pwm11+600;rate(pwm);delay(500);pwm2=pwm2+70;pwm9=pwm9+7
21、0;pwm3=pwm3-70;pwm8=pwm8-70;pwm4=pwm4+600;pwm5=pwm5+600;pwm6=pwm6+600;pwm7=pwm7+600;rate(pwm);delay(300);pwm4=pwm4-600;pwm5=pwm5-600;pwm6=pwm6-600;pwm7=pwm7-600;rate(pwm);delay(300);void back_left()motor_init1();pwm8=pwm8+50;pwm9=pwm9-50;/pwm2=pwm2+150;/pwm3=pwm3-150;pwm6=pwm6+50;pwm7=pwm7+100;/pwm0
22、=pwm0-80;/pwm5=pwm5+80;/pwm11=pwm11-30;rate(pwm);delay(300);pwm3=pwm3+70;pwm8=pwm8+70;pwm4=pwm4+600;pwm5=pwm5+600;pwm6=pwm6+600;pwm7=pwm7+600;rate(pwm);delay(300);pwm4=pwm4-600;pwm5=pwm5-600;pwm6=pwm6-600;pwm7=pwm7-600;rate(pwm);delay(300);while(1)if(r=0)if(back_flag=1)r=1;back_right();if(forward_fl
23、ag=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();pwm3=pwm3-70;pwm8=pwm8-70;pwm2=pwm2+70;pwm9=pwm9+70;pwm1=pwm1-600;pwm0=pwm0-600;pwm10=pwm10-600;pwm11=pwm11-600;rate(pwm);delay(300);pwm1=pwm1+600;pwm0=pwm0+600;pwm10=
24、pwm10+600;pwm11=pwm11+600;rate(pwm);delay(500);pwm2=pwm2-70;pwm9=pwm9-70;pwm3=pwm3+70;pwm8=pwm8+70;pwm4=pwm4+600;pwm5=pwm5+600;pwm6=pwm6+600;pwm7=pwm7+600;rate(pwm);delay(300);pwm4=pwm4-600;pwm5=pwm5-600;pwm6=pwm6-600;pwm7=pwm7-600;rate(pwm);delay(300);void forward()forward_flag=1;back_flag=0;motor_
25、init1();pwm2=pwm2-150;pwm3=pwm3+220;pwm8=pwm8+10;pwm11=pwm11-20;rate(pwm);delay(500);pwm3=pwm3-300;pwm8=pwm8+300;pwm4=pwm4+600;pwm5=pwm5+600;pwm6=pwm6+600;pwm7=pwm7+600;rate(pwm);delay(300);pwm4=pwm4-600;pwm5=pwm5-600;pwm6=pwm6-600;pwm7=pwm7-600;rate(pwm);delay(300);while(1)if(r=0)r=1;back_left();if
26、(l=0)l=1;back_right();if(b=0)b=1;back();if(f=0)f=1;pwm3=pwm3+300;pwm8=pwm8-300;pwm2=pwm2+300;pwm9=pwm9-280;pwm1=pwm1-600;pwm0=pwm0-600;pwm10=pwm10-600;pwm11=pwm11-600;rate(pwm);delay(300);pwm1=pwm1+600;pwm0=pwm0+600;pwm10=pwm10+600;pwm11=pwm11+600;rate(pwm);delay(500);pwm2=pwm2-300;pwm9=pwm9+280;pwm3=pwm3-300;pwm8=pwm8+300;pwm4=pwm4+600;pwm5=pwm5+600;pwm6=pwm6+600;pwm7=pwm7+600;rate(pwm);delay(300);pwm4=pwm4-600;pwm5=pwm5-600;pwm6=pwm6-600;pwm7=pwm7-600;rate(pwm);delay(500);if(P1!=0xff)back();void main(void)labor_init(); (注:专业文档是经验性极强的领域,无法思考和涵盖全面,素材和资料部分来自网络,供参考。可复制、编制,期待你的好评与关注)