自动往返小车设计改.docx
- 文档编号:3947216
- 上传时间:2022-11-26
- 格式:DOCX
- 页数:18
- 大小:303.16KB
自动往返小车设计改.docx
《自动往返小车设计改.docx》由会员分享,可在线阅读,更多相关《自动往返小车设计改.docx(18页珍藏版)》请在冰豆网上搜索。
自动往返小车设计改
HefeiUniversity
2015年合肥学院电子设计竞赛
项目报告
项目名称:
自动往返小车设计
作者姓名:
王飞130503301913自动化卓越班
朱丽娟130503302413自动化卓越班
陈中海130503303013自动化2班
指导教师:
完成时间:
目录
摘要:
-1-
关键词:
-1-
一、设计任务-2-
二、系统方案论证与分析-2-
2.1主控芯片选择-3-
2.2电机及驱动模块-4-
2.3路面黑带检测模块-4-
2.4电源选择-4-
2.5控制单元模块-5-
2.6数码管显示模块-5-
三、程序设计-6-
3.1初始化-6-
3.1.1时钟初始化-6-
3.1.2端口初始化-7-
3.1.3PWM初始化-8-
3.1.4实时中断初始化-9-
3.1.5周期性定时中断初始化-9-
四、小结-10-
五、参考书目-10-
附1:
-12-
附2:
仪器设备清单-13-
附3:
主函数及中断服务子函数代码-14-
摘要:
本系统以FreescaleMC9S12XS128MCU为核心控制模块,附以外围电路,采用激光管和接收管进行信号检测和循线运动;通过CodewarriorIDE在线Debug进行调试,实现自动往返小车设计。
综合运用单片机技术、自动控制理论、传感器检,使小车自动借助传感器识别路面环境以及行驶状态,运用单片机的运算和处理能力来实现小车的自动加速、限速、减速、定时、原地转向倒车、左转、右转、显示行驶时间等控制。
关键词:
MC9S12XS128MCU,自动控制,电动小车,PWM调速,传感器
一、设计任务
设计并制作一个能自动往返于起跑线与终点线间的小汽车,不能用人工遥控(包括有线和无线遥控),其行驶线路满足所需的要求。
跑道宽度0.5米,表面贴有白纸,两侧有挡板,挡板与地面垂直,其高度不低于20厘米。
在跑道的B,C,D,E,F,各点处画有2厘米粗黑线。
各段长度如图所示。
要求
分区控制:
如(图1)所示:
图1跑道示意图
车辆从起跑线出发(出发前,车体不得超过起跑线),到达终点线后停留10秒,然后自动返回起跑线(允许倒车返回)。
往返一次的时间应力求最短(从合上汽车电源开始计时)。
到达终点线和返回起跑线时,停车位置离起跑线和终点线偏差应最小(以车辆中心点与终点线或起跑线中心线之间距离作为偏差的测量值)
D-E间为限速区,车辆往返均要求低速通过,通过时间不得少于8秒,但不允许在限速区内停车。
二、系统方案论证与分析
根据设计任务要求,并且根据我们自己的需要而附加的功能,该系统的总体框图可分为几个基本的模块,框图如(图1)所示:
、
图2-1小车系统框图
2.1主控芯片选择
针对此次设计的要求,以性能和熟悉程度为最重要的考虑指标,选择飞思卡尔公司的16位单片机MC9S12XS128。
此MCU功能强大,具有高速I/O口、8路8位PWM输出通道,16通道AD转换4路定时通道、时钟发生模块,控制精度高,灵敏度强,适于进行实时过程控制。
缺点是价格较贵,引脚众多且密集,搭建载板难度大。
系统电路图:
2.2电机及驱动模块
方案一:
采用电阻网络或数字电位器调整电动机的分压,从而达到调速的目的。
但是电阻络只能实现有级调速,而数字电阻的元器件价格昂贵。
更主要的问题在于一般电动机的电阻较小,但电流很大;分压不仅会降低效率,而且很难实现。
方案二:
采用继电器对电动机的开或关进行控制,通过开关的切换对小车的速度进行调整。
方案的优点是电路较为简单,缺点是继电器的响应时间慢,机械结构易损坏,寿命较短,可靠性不高。
方案三:
采用达林顿管TIP4组成的PWM电路。
用单片机控制达林顿管使之工作在占空比可调的状态,精确调整电机转速。
方案四:
采用L298N来控制电机的正转和反转来实现小车的前进和后退。
加上单片机的程序PWM,实现整车的加速与减速,精确小车的速度。
基于上述理论分析,拟选择方案四。
2.3路面黑带检测模块
黑带检测的原理是:
红外光线照射到路面并反射,由于黑带和白纸的系数不同,可根据接的红外线的强弱判断是否到达黑带。
方案一:
可见光发光二极管与光敏二极管组成的发射—接收电路。
这种方案的缺点在于其他环境光源会对光敏二极管的工作产生很大的干扰,一旦外界光亮条件改变,很可能造成误判和漏判;虽然产生超高亮发光二极管可以降低一定的干扰,但这又将增加额外的功率损耗。
方案二:
反射式的红外发射—接收器。
由于采用红外管代替普通可见光管,可以降低环境干扰。
基于上述理论分析,拟选择方案二。
2.4电源选择
方案一:
所有器件采用电源供电,这样供电电路比较简单;但是由于电动机启动瞬时电流很大,会造成电压不稳,干扰严重,缺点十分明显。
方案二:
双电源供电,将电动机驱动电源与单片机以及周边电路电源完全隔离,这样做虽然不如单电源方便灵活,但可以将电动机驱动所造成的干扰彻底消除,提高了系统的稳定性。
基于上述理论分析,拟选择方案二。
2.5控制单元模块
方案一:
采用纯数字电路
该方案外部检测采用光电转换,系统控制部分采用数字电路译码对小车电动机两端电压调整,来控制小车的运行。
时间和行程用加法器进行计数。
此系统的设计将会使电路过于复杂,调试时需要改变硬件电路,机动性差。
方案二:
用单片机控制
用光电检测不同的信号,并经单片机对其处理,传送给L298信号,使其控制电机的正转和反转,配合PWM程序控制,来实现加速减速和刹车。
通过单片机内部定数器/计数器进行定时、计数,在用单片机串行输入/输出口进行显示控制。
此方案电路成熟、工作稳定、容易实现控制。
为能更好的实现题目的各种设计要求,所以我们选用第二种方案。
用单片机进行控制。
其工作框图如下:
2.6数码管显示模块
显示电路:
3、程序设计
程序流程图
3.1初始化
3.1.1时钟初始化
voidClock_Init(void)//设定fBUS=40MHZ
{CLKSEL_PLLSEL=0;//关闭内部锁相环时钟,进行相关设置
SYNR=0X49;//VCOFRQ[7:
6];SYNDIV[5:
0]SYNR寄存器构成,高位至低位fOSC为外部晶振频率16MHZ
//fVCO(压控振荡器时钟频率)=2*fOSC*(SYNDIV+1)/(REFDIV+1)
//VCOCLKFrequencyRangesVCOFRQ[7:
6]压控振荡器时钟频率范围选择
//32MHz<=fVCO<=48MHz00
//48MHz //Reserved10 //80MHz REFDV=0X83;//REFFRQ[7: 6];REFDIV[5: 0]REFDV寄存器构成高位至低位 //fREF=fOSC/(REFDIV+1)参考电压公式 //REFCLKFrequencyRangesREFFRQ[7: 6]参考电压频率范围选择 //1MHz<=fREF<=2MHz00 //2MHz //6MHz //fREF>12MHz11 POSTDIV=0X00;//POSTDIV[4: 0],只有低五位可用 //fPLL(内部锁相环时钟频率)=fVCO/(2×POSTDIV) //IfPOSTDIV=$00thenfPLLisidenticaltofVCO(dividebyone) //fBUS(总线频率即系统时钟频率)=fPLL/2 while(CRGFLG_LOCK==0);//等待内部锁相环时钟频率达到稳定,即CRGFLG_LOCK==1 CLKSEL_PLLSEL=1;//使能内部锁相环时钟,自定义系统时钟频率设定完毕 } 3.1.2端口初始化 voidPORT_Init(void) { DDRA=0XFF; PORTA=0XFF; DDRB=0XFF; PORTB_PB4=1; PORTB_PB5=1; PORTB_PB6=1; PORTB_PB7=1; DDRS=0B11111000; PTS_PTS3=1;//BUZZER PTS_PTS4=1;//ZHIXINGLED PTS_PTS5=1; PTS_PTS6=1;//JIGUANGHUIDU PTS_PTS7=1;//CHUANGANHUIDU } 3.1.3PWM初始化 voidPWM_Init(void)//单通道输出 { PWME=0X00;//关闭通道进行设置 PWMPRCLK=0X02;//分频总线时钟 //低位PCKA[0: 2]高位PCKB[0: 2] //此处4分频 PWMSCLA=2;//选择比例因子分频A时钟CLOCKSA=CLOCKA/(2*PWMSCLA) PWMSCLB=5;//选择比例因子分频B时钟CLOCKSB=CLOCKB/(2*PWMSCLB) PWMCTL=0X00;//选择是否级联0不级联1级联 PWMCLK=0X03;//选择各个通道时钟0原时钟1S时钟 PWMPOL=0Xf7;//选择初始极性0低电平1高电平 PWMCAE=0X00;//选择对齐方式0左对齐1中心对齐 PWMPER0=200;//输出两路5kHZ的PWM波 PWMDTY0=L;//初始化时全速前进120慢速150中速 PWMPER1=200;// PWMDTY1=R; PWMPER2=222; PWMDTY2=56; PWMPER3=222; PWMDTY3=56; PWME=0X0f;//使能输出通道此处输出5kHZ } 3.1.4实时中断初始化 voidRTI_Init(void)//实时中断初始化函数设置中断时间为1ms {RTICTL=0X83;//超时周期设置 //第七位RTDECRTDEC=1十进制;RTDEC=0二进制 //第0到第6位位RTR[0: 6] //RTR[3: 0]位一组,RTR[6: 4]为一组 //两组加权相乘,确定分频数 //时钟源为fOSC=16MHZ //详细对应关系见XS128英文数据手册P244-P246 CRGINT_RTIE=1;//使能RTI实时中断 } 3.1.5周期性定时中断初始化 voidPIT_Init(void)//周期性定时中断模块初始化函数 { PITCFLMT=0X00;//关闭PIT模块,进行相关设置 PITCE_PCE0=0; PITCE_PCE1=1; PITMUX=0X00;//选取微定时基准时钟0 PITMTLD0=199;//装载微定时基准时钟0的计数初始值 PITLD0=49999;//装载16位定时通道0计数初始值 PITLD1=49999;//定时器1用于10秒停车计时 PITINTE=0X07;//使能16位定时通道超时中断 PITCFLMT=0X80;//使能PIT模块超时周期=(PITMTLD+1)*(PITLD+1)/fBUS //此处为0.25s //时钟源来自总线时钟 } 四、小结 历时四天的电子设计竞赛设计报告已经完成。 经过自己不断的搜索努力以及同学、学长学姐们的耐心指导和热情帮助,本设计已经基本完成。 在这段时间里,学长学姐、同学严谨的治学态度和热忱的工作作风令我十分钦佩,他们的指导使我受益非浅。 同时校图书馆的开放也为我的设计提供了大量的实习资料。 通过这次设计竞赛设计,使我深刻地认识到学好专业知识的重要性,也理解了理论联系实际的含义,并且检验了大学的学习成果。 虽然在这次设计中对于知识的运用和衔接还不够熟练,但是我将在以后的工作和学习中继续努力、不断完善。 这段时间的设计是对过去所学知识的系统提高和扩充的过程,为我今后的发展打下了良好的基础。 由于自身水平有限,设计中一定存在很多不足之处,敬请各位老师批评指正。 五、参考书目 《《模拟电子技术》,高吉祥著,电子工业出版社; 《数字电子技术》,高吉祥著,电子工业出版社; 《单片机自学笔记》,范红刚等著,北京航空航天大学出版社; 《C程序设计》,谭浩强著,清华大学出版社; 《C语言开发技术详解》,戴建华等编著,电子工业出版社; 《单片机的C语言》,姜志海、赵艳雷编著,电子工业出版社; 《单片机原理及嵌入式系统开发》张阳等著,电子工业出版社 附1: 元件 数量 MC9S12XS128单片机最小系统板 1块 LM7805稳压芯片 1片 万用板 3块 连接线 若干 直流电机 2个 车轮及固定支架 2套 L298N芯片 1块 16V充电电池 1个 激光管及接收管 3套 四位数码管 1个 支架 若干 滚轮轮 1个 74LS138 1片 排针 若干 电阻 若干 电容 若干 排线 若干 按钮开关 1个 附2: 仪器设备清单 数字万用表; 电焊工具; 电钻。 附3: 主函数及中断服务子函数代码 voidinterrupt7RTI_ISR(void)//中断编号为7 {if(PTS_PTS2==1)//ALWAYSHIGH {cishu=cishu+1; PTS_PTS6=0; PTS_PTS3=0; if(count==3) {if(cishu>200) {count=count+1; //start=0; PTS_PTS6=1; PTS_PTS3=1; PWMDTY0=L; PWMDTY1=R; while(PTS_PTS2==1); cishu=0; } } else {if(cishu>79) {count=count+1; //start=0; PTS_PTS6=1; PTS_PTS3=1; if(count==6) {count=0; for(delay=0;delay<50000;delay++) {for(del=0;del<10;del++); } CRGINT_RTIE=0; PITCE_PCE0=1; PWMDTY0=0; PWMDTY1=0; loop=loop+1; if(loop==2) { PITCE_PCE1=0; } } else {if(count==3) {PWMDTY0=L1; PWMDTY1=R1; } else {if(count==5) {PWMDTY0=LMID; PWMDTY1=RMID; } else {PWMDTY0=L; PWMDTY1=R; } } } while(PTS_PTS2==1); cishu=0; } } } else {cishu=0; } if(PTS_PTS0==0) {PORTB_PB0=0; PORTB_PB1=1; PORTB_PB2=0; PORTB_PB3=0; PTS_PTS4=0; } else {PTS_PTS4=1; } if(PTS_PTS1==0) { PORTB_PB0=0; PORTB_PB1=0; PORTB_PB2=0; PORTB_PB3=1; PTS_PTS5=0; } else {PTS_PTS5=1; } ((PTS_PTS0==1)&&(PTS_PTS1==1)) {PORTB_PB0=0; PORTB_PB1=1; PORTB_PB2=0; PORTB_PB3=1; } CRGFLG_RTIF=1;//中断标志位写1清零 } voidinterrupt66PIT0_ISR(void) { i=i+1; if(i==4) {time=time+1;//计数1秒 i=0; if(time==10) {time=0; PWMDTY0=L; PWMDTY1=R; PORTB_PB0=0; PORTB_PB1=1; PORTB_PB2=0; PORTB_PB3=1; for(delay=0;delay<10000;delay++) {for(del=0;del<400;del++); } if(PTS_PTS0==0) {PORTB_PB0=0; PORTB_PB1=1; PORTB_PB2=1; PORTB_PB3=0; } else { PORTB_PB0=1; PORTB_PB1=0; PORTB_PB2=0; PORTB_PB3=1; } for(delay=0;delay<4000;delay++) {for(del=0;del<900;del++); } PORTB_PB0=0; PORTB_PB1=1; PORTB_PB2=0; PORTB_PB3=1; /*for(delay=0;delay<10000;delay++) {for(i1=0;i1<1500;i1++); }/ PITCE_PCE0=0; CRGINT_RTIE=1; if(loop==2) {second=0; loop=0; PITCE_PCE1=1; } } } PITTF_PTF0=1; } voidinterrupt67PIT1_ISR(void) {basic=basic+1; if(basic==4) {second=second+1; basic=0; } PITTF_PTF1=1; } voidmain(void) {DisableInterrupts; Clock_Init(); PORT_Init(); RTI_Init(); PWM_Init(); PIT_Init(); PORTB_PB0=0; PORTB_PB1=1; PORTB_PB2=0; PORTB_PB3=1; EnableInterrupts; for(;;) {if(loop==2) {Time_Display(); }else {Black_Display(); }} }
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 自动 往返 小车 设计
![提示](https://static.bdocx.com/images/bang_tan.gif)