南京邮电大学电子设计竞赛-控制类试题-搬运货物过程模拟_第1页
南京邮电大学电子设计竞赛-控制类试题-搬运货物过程模拟_第2页
南京邮电大学电子设计竞赛-控制类试题-搬运货物过程模拟_第3页
南京邮电大学电子设计竞赛-控制类试题-搬运货物过程模拟_第4页
南京邮电大学电子设计竞赛-控制类试题-搬运货物过程模拟_第5页
已阅读5页,还剩10页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

“TI杯”2013年南京邮电大学电子设计竞赛复赛暨全国大学生电子设计竞赛选拔赛试题(C题)控制类题目名称:搬运货物过程模拟小组成员: B11011322侯文元 B11011316孙兆强 B11011317张志凡二0一三年四月六日摘要随着智能自动化技术的发展和传感器技术的发展,各种各样的智能设备给人们的生活带来巨大的便利,尤其是具有各种功能的智能小车开始走进千家万户。我们组的小车系统采用模块化的设计方案,该方案以STC89C52RC为核心,运用灰度循迹传感器模块来控制小车的行走路线,使用测速传感器即槽型光耦模块来测量小车的运行速度,通过L298N两直流电机驱动模块来控制小车的运行状态。对于电源部分,为了满足既可以提供足够的电能又不至于电压过高的要求,我们用一节9V层积电池串联四节1.5V普通电池组成电源,再经过一个电压转换模块输出5V左右的电压。而对于显示部分,我们采用1602液晶显示屏,可以实时显示小车运行时间与路程,车体我们选择了亚克力平台小车。该智能小车具有很好的循迹能力,并且定位准确,运行稳定可靠。并且有很强的应用价值,可用于生活中简单的货物搬运。关键字:STC89C52RC单片机 灰度循迹传感器 槽型光耦 L298N两直流电机驱动 电源转换 LCD1602速度,时间,路程检测一 系统总体方案与论证1602液晶显示A,B点检测单片机 电源转换模块小车运动姿态调整控制电机驱动控制根据题目要求,将系统划分为若干个基本模块。根据各个模块的功能要求,分别有以下一些设计方案:1.循迹检测模块 方案一:采用不调制的反射红外发射接收电路。但是由于用直流电供电,发射管工作电流不宜过大,且易受外界环境的光源干扰。 方案二:采用调制的反射式红外接收器电路。这种方案可以大大提高其信噪比,大幅度地减少外界干扰,提高瞬间的发射电流,达到较好的检测目的。但专用芯片PC1373的灵敏度以及所用的电感不易调整。 方案三:利用专用的反射式红外传感器件,可以方便地实现实时监控,有效地防止误触发,灵敏度容易控制。基于上述考虑,拟采用方案三作为循迹检测模块电路。2.小车控制模块 方案一:采用通用的51单片机作为主控制器。51单片机通用灵活、价格低廉、使用方便,但此单片机字长有限,数据处理能力很弱,处理速度较慢,资源不够丰富,需要扩展较多的外围电路,降低了系统的可靠性,增加了制作的费用,难以满足本设计要求。 方案二:EasyARM1138 人机界面扩展板是专门为广州致远电子有限公司开发的EasyARM1138开发板量身定制的一款人机界面的扩展板。该扩展板方案使用了基于ST7920控制器的中文图形12864的LCD和44矩阵键盘,丰富的人机界面完全能够满足用户的要求。此方案给用户提供了完整的硬件设计原理图,PCB图,软件调试例程,LCD模拟SPI软件包,键盘管理芯片ZLG7289模拟SPI软件包。用户在选用了这个方案后,将会大大缩减产品开发周期,提高产品设计的可靠性。 综合比较以上两个方案,本系统选择方案二。 电机驱动3.电机驱动电机驱动方案一:采用专用芯片L298N作为电机驱动芯片,L298N是一个具有高电压大电流的全桥驱动芯片,它相应频率高,一片L298N可以分别控制两个直流电机,而且还带有控制使能端。用该芯片作为电机驱动,操作方便,稳定性好,性能优良。 方案二:对于直流电机用分离元件构成驱动电路,结构简单,价格低廉,在实际应用中很广泛,但在应用中不够稳定。 方案三:采用达林顿管组成的H型PWM电路,用单片机控制达林顿管使之工作在占空比可调的开关状态,可精确调整电动机的转速。这种电路工作在饱和截止模式下,一般用起来不大经济,且难于控制。 由于电力电子器件只工作在开关状态,主电路损耗较小,要求精度较高,所以选择方案一。4.电源模块方案一:直接采用多节1.5号干电池供电,但此方案难以供出5V的直流电源给单片机,且体积庞大,接线麻烦。方案二:采用两节层积电池加一个3V+5V电源转换模块给L298N的逻辑部分和单片机,灰度传感器,光耦测速传感器供电,采用一节层积电池给L298N的电源部分供电。经检验,方案二较好,能提供较多的3V和5V电压二系统的具体设计与实现1.小车的控制模块基本思想:如下图所示为自制小车运动赛道(从A到B为前进,B到A为后退),本方案在小车的前部安装有三个灰度传感器,当小车从A出发后,通过三个传感器的协同工作来控制小车不偏离中间黑线。当小车由A驶向B时,若小车左偏,左轮不转,右轮前进;若小车右偏,右轮不转,左轮前进,若三个传感器同时感受到黑色时,小车的轮子发生反转,反转过程中的姿态控制同理。可设置一个计数的变量来统计小车运动方向转换次数的奇偶性,从而决定小车的轮子转的方向。A B题目中要求小车有两种运动方式,即在A,B处不停与在A,B处停两秒,为了简化系统,我们组设计的小车在前两次往返过程中不停,此项要求考查的是小车的速度,同时测验小车行驶的稳定性,而小车以运货速度行驶考察的是小车的循迹能力与程序的设计。2.显示模块.题目中要求显示运动速度,运动时间,运动方向与循环次数,1602液晶屏足以完成此项任务。运动时间的显示比较简便,此处不再赘述,只需做一个时钟即可,显示在屏幕的最左上角,运动方向的显示只需判断计数变量的奇偶性,用一个条件语句来决定显示A还是B,路程的显示需要统计光耦开关正负脉冲变化的次数,根据比例关系换算成相应的路程,把此路程写进液晶屏。本题的难点在于速度的显示,设计测速程序的思路是利用定时器T1进行定时,定时器T1设置为8位自动重装模式,加载时间为50ms,也就是每过50ms定时T1就会发生一次中断。20个50ms正好一秒钟的时间,然后计算这一秒钟内有多少个脉冲,最后根据公式,计算一秒钟内有多少个脉冲,处理后1通过1602液晶屏显示出来。外部中断的作用是接受光电传感器的脉冲信号,然后在单位时间内累加脉冲次数,送到定时器T1中断服务去处理3电源模块J1JP2J2JP3图 1 电源模块如图所示,左边 JP1、J1、J2 为电源输入端;JP2、JP3(3.3V/5V端)为电源输出端。JP1、J1:输入电压范围:5-18V;超过电压范围将会导致 U1 损坏。JP1 与 J1 电源输入没有正负极区别。5V 输出,电流小于JP2:3.3V 输出,电流小于 800mA;JP3:1.5A.JP1 与 J1 为两种不同的接口方式,输入时任选一种方式;即可在 JP2与 JP3 端输出 3.3V 与 5V 电压;输出电压由 SW1 开关控制。J2:由计算机 USB 提供 5V 供电,JP2 就可以输出 3.3V。D5 是二极管保护作用;三设计单元电路四系统软件设计系统软件完成对传感器采集的数据进行处理,实现小车行走的智能化,包括数据显示,方向自动调整,路程计算等模块。1. 小车循迹与往返程序:2.3. #include 4. #define uint unsigned int5. uint a,i,j,k;6.7. sbit P1_0=P10;/左轮正 8. sbit P1_1=P11;/左轮负 9. sbit P1_2=P12;/右轮正 10. sbit P1_3=P13;/右轮负 11. sbit P1_4=P14;/中间灰度传感器 12. sbit P1_5=P15;/左边灰度传感器 13. sbit P1_6=P16;/右边灰度传感器 14. /sbit P1_7=P17/测速传感器 15.16. void delay(i)/延时函数 17. 18. for(j=i;j0;j-)19. for(k=110;k0;k-);20. 21. void xunji();22. main()23. 24. a=0;25. P1_0=1;26. P1_1=0;27. P1_2=1;28. P1_3=0;29. while(a=10)30. 31. xunji();32. while(P1_5=0&P1_4=0&P1_6=0)/小车反转 33. a+;34. if(a%2=1)35. P1_0=0;36. P1_1=1;37. P1_2=0;38. P1_3=1;39. delay(500);40. 41. else if(a%2=0)42. 43. P1_0=1;44. P1_1=0;45. P1_2=1;46. P1_3=0;47. delay(500);48. 49. 50. 51.52. P1_0=1,P1_1=1;53. P1_2=1,P1_3=1;54. while(1);55. 56.57.58. void xunji ()59. if(a%2=0)60. if(P1_5=0&P1_4=1&P1_6=1)/前进时小车右偏 61. P1_0=1;62. P1_1=1;63. P1_2=1;64. P1_3=0;65. 66. else if(P1_6=0&P1_4=1&P1_5=1)/前进时小车左偏 67. P1_0=1;68. P1_1=0;69. P1_2=1;70. P1_3=1;71. 72. if(a%2=1)73.74. if(P1_5=0&P1_4=1&P1_6=1)/后退时小车右偏 75. P1_0=1;76. P1_1=1;77. P1_2=0;78. P1_3=1;79. 80. else if(P1_6=0&P1_4=1&P1_5=1)/后退时时小车左偏 81. P1_0=0;82. P1_1=1;83. P1_2=1;84. P1_3=1;85. 86. 87. 2.液晶显示程序与速度计算程序:#include #include /Keil外部函数库包含文件_nop_函数在此库中 #define uint unsigned int #define uchar unsigned char void delayXms(uint ); /声明Xms延时函数 void delay1ms(void); /声明1ms延时函数 /*变量定义*/ uint i,m,n,z; uint h=5, l=5; uchar bai1,shi1,ge1,bai2,shi2,ge2,bai3,shi3,ge3; long int s,s1,s2,M1,M2,f; /*液晶屏控制口定义*/ sbit RS=P20; /寄存器选择位将RS位定义为P2.0引脚 sbit RW=P21; /读写选择位将RW位定义为P2.1引脚 sbit E =P22; /使能信号位将E位定义为P2.2引脚 /*初使化显示数组定义*/ uchar dis1=Fr: Hz PWM: %; uchar dis2=Speed: mm/s; /*X毫秒延时函数*/ void delayXms(uint ms) uint k; for(k=0;kms;k+) delay1ms(); void delay1ms(void) uint j; for(j=0;j=120;j+) _nop_(); /*关于液晶显示函数*/ uchar lcd_busy() /*判断液晶模块的忙碌状态*/ bit result; RS=0; RW=1; E=1; _nop_(); 智能仪表综合训练说明书 37 _nop_(); _nop_(); _nop_(); result = (bit)(P0&0x80); E=0; return result; void lcd_wcmd(uchar cmd) /*写指令数据到LCD*/ while(lcd_busy(); RS=0; RW=0; E=0; _nop_(); _nop_(); P0=cmd; _nop_(); _nop_(); _nop_(); _nop_(); E=1; _nop_(); _nop_(); _nop_(); _nop_(); E=0; void lcd_pos(uchar pos) /*指定字符显示的实际地址*/ lcd_wcmd(pos|0x80); void lcd_wdat(uchar dat) /*将数据(字符的标准ASCII码)写入液晶模块*/ while(lcd_busy(); RS=1; RW=0; E=0; P0=dat; _nop_(); _nop_(); _nop_(); _nop_(); E=1; 智能仪表综合训练说明书 38 _nop_(); _nop_(); _nop_(); _nop_(); E=0; void LcdInit() /*LCD1602初始化函数*/ delayXms(12); lcd_wcmd(0x38); delayXms(4); lcd_wcmd(0x38); delayXms(4); lcd_wcmd(0x38); delayXms(4); lcd_wcmd(0x0c); delayXms(4); lcd_wcmd(0x06); delayXms(4); lcd_wcmd(0x01); delayXms(4); /*定时器1初使化函数*/ void T1_Init() TMOD = 0x10; /定时器1设置为8位自动加载模式 ET1=1; /开定时器中断 EA=1; /打开总中断 IP=0x04; /设置中断优先级 TH1 = (65535-50000)/256; /初使加载50毫秒 TL1 = (65535-50000)%256; /*外部中断初使化函数*/ void INT_Init() IT0 = 1; /设置外部中断0为下降沿触发 IT1 = 1; /设置外部中断1为下降沿触发 EX0 = 1; /开外部中断0 EX1 = 1; /开外部中断1 EA = 1; /开总中断 /*外部中断函数*/ void my_INT0(void) interrupt 0 智能仪表综合训练说明书 39 M1=M1+; /每中断一次变量加1 void my_INT1(void) interrupt 2 M2=M2+; /每中断一次变量加1 /*定时器1中断函数*/ void timer1() interrupt 3 TR1=0; /停止T1 TH1 = (65535-50000)/256; /求整放在高8位 TL1 = (65535-50000)%256; /求余放在低8位 n=n+1; /n+ if(n=20) /定时1秒20个50ms为1秒 f=(M1+M2)/2; /平均频率 shi1=(f/10)+48; /外部中断0在1秒钟中断的次数十位显示 ge1=(f%10)+48; /外部中断0在1秒钟中断的次数个位显示 z=100*h/(h+l); /占空比计算公式 bai2=(z/100)+48; /PWM百位显示 shi2=(z%100/10)+48; /PWM十位显示 ge2=(z%100%10)+48; /PWM个位显示 s1=M1/100.00*3.14*65; /1秒钟小车左轮走s1毫米车轮胎直径为65MM s2=M2/100.00*3.14*65; /1秒钟小车右轮走s2毫米车轮胎直径为65MM s=(s1+s2)/2; /平均路程 bai3=(s/100)+48; /百位转换成字符 shi3=(s%100/10)+48; /十位转换成字符 ge3=(s%100%10)+48; /个位转换成字符 n=0; /定时器中断次数归

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论