基于单片机的简易寻迹小车设计
小车的具体运行状况如表4-1所示。
表4-1:小车运行状况表
左轮转速 左2传感器 左1传感器 右1传感器 右2传感器 右轮转速 30 5 5 50 60 0 0 0 1 0 0 其它 0 1 1 0 0 其它 0 0 0 1 1 其它 0 0 0 0 1 其它 30 50 60 5 5 0 运行方式 直行 左转 加速左转 右转 加速右转 停止 4.3.2 定时器中断程序流程图
利用51单片机的T0定时计数器,让单片机P2口的P2.4和P2.5引脚输出占空比不同的方波, 然后经驱动芯片放大后控制直流电机。程序开始时,初始化定时器TO,设置定时定时计数器若干时间(本次设计采用0.1ms)中断一次, 就使P2.4或P2.5产生一个高电平或低电平。中断程序流程图如图4.4所示
图4.4 定时器中断程序流程图
20
基于单片机的简易寻迹小车设计
6.结束语
论文首先介绍了自动寻迹小车设计的背景和要求,讨论了小车实现的可能。然后论文讨论了自动寻迹小车的结构,其主要由传感器模块,控制器模块和电动小车模块组成,对各个模块的功能进行了介绍画出整体原理图。并对各个模块的设计方案进行了对比分析,并确定了各个模块主要成分的设计方案。
论文对自动寻迹小车的系统进行了分析和设计,包括系统硬件分析、软件分析。对小车的系统功能设计及模块划分做了进一步介绍。
硬件方面,针对自动寻迹小车的特点和对系统的功能要求,选用了红外线传感器收集数据,选用AT89C51作为控制器,选用了L298N作为直流电机的驱动芯片。并对每个模块的功能和硬件组成进行了详细介绍,并画出了主要元器件的应用原理图。展示小车自动寻迹全部实现细节,包括红外线传感器如何对路面情况进行采集和传输,AT89C51 如何查询路面情况并由此对电动机进行控制,小车如何转弯等。
软件方面,画出程序流程图。利用C语言进行编程,使得程序具有可读性。作者对整个程序经模块化划分,把整个程序划分成主程序﹑定时子程序、障碍检测程序﹑寻迹子程序构成。使得程序具有了可移植性。
总的来说,此次毕业设计完成了任务书规定的各项要求,在学习C语言、proteus等的基础上,进一步学习并实践了程序编写、调试,原理图的制作,成功的完成了设计。既学习了不少新的知识和技术,由亲身体验软件设计、开发的过程,个人觉得收获颇丰。
当然,这次设计还只是一个初级产品,还可以从以下几方面进一步完善: (1)智能调速。
本系统中只实现了以较低的速度前进。若用PWM,步进电机等实现小车,可以使小车直道高速行驶,在弯道低速行驶。大大提高小车速度。
(2)多种传感器结合。
本系统中只用了红外线传感器。这对环境和路面有严格要求。可以把超声波传感器、热红外传感器等加入系统,增加小车识别路面的能力,提高小车的实用性。
(3)电源。
本设计使用的是4节普通5号电池供电。供电能力有限。且电动机和单片机是同一电源。可以安装多电压电源,使电动机和单片机分开供电
21
基于单片机的简易寻迹小车设计
参考文献
[1]王化祥,张淑英.传感器原理及应用[M].天津:天津大学出版社,1999 [2]李群芳.单片微型计算机与接口技术[M].北京:电子工业出版社,2001 [3] 宋健,姜军生,赵文亮. 基于单片机的直流电动机PWM 调速系统[J ] . 农机化研究,2006 , (1) :102 - 103.
[4] 边春元,李文涛,江杰,杜平. C51单片机典型模块设计与应用.机械工业出
版社;2008.4
[5] 李华. MCS- 51 系列单片机实用接口技术[M].北京:航空航天大学出版社,
2003
[6] 楼然苗.51 单片机设计实例[M].北京:航空航天大学出版社,2005.8 [7] 王晶,翁显耀,梁业宗 自动寻迹小车的传感器模块设计.武汉理工大学自动
化学院 湖北武汉
[8] 刘迎春. 传感器原理设计与应用[M] . 长沙:国防科技大学出版社,1992. [9] 何立民,单片机应用系统设计,北京:航天航空大学出版社,2~5,46~50 [10] 李广弟,单片机基础,北京:北京航空航天大学出版社,2001,56~64 [11] Jierey J,Radar C M,Radar C M,Gold B.A digital frequeney synthesizer. IEEE Trans on Audio Eltroacount[J],1971,august1971:48–57
[12] 陈伯时,电力拖动自动控制系统,第二版,北京:机械工业出版社,2000年
6月,127~130
[13]Altera Corporation. Cyelone Device Handbook[Z],1999:307–345
[14]Advanced Digital Design With the Verilog HDL by Michael D.Ciletti.Publishing House of Electronics Industry[Z],2004:46–165
[15] 何希才,新型实用电子电路400例,电子工业出版社,2000年,60~65 [16] 赵负图,传感器集成电路手册,第一版,化学工业出版社,2004,590~591 [17] 张毅刚,彭喜元,新编MCS-51单片机应用设计,第一版,哈尔滨工业大学
出版社,2003,25~27,411~417
22
基于单片机的简易寻迹小车设计
附件
#include
#define uchar unsigned char #define uint unsigned int
unsigned char zkb1=0 ; //**左边电机的占空比**// unsigned char zkb2=0 ; //**右边电机的占空比**// unsigned char t=0; //**定时器中断计数器**// sbit RSEN1=P1^0; sbit RSEN2=P1^1; sbit LSEN1=P1^2; sbit LSEN2=P1^3; sbit IN1=P2^0; sbit IN2=P2^1; sbit IN3=P2^2; sbit IN4=P2^3; sbit ENA=P2^4; sbit ENB=P2^5; sbit START1=P2^6; sbit ERROR1=P2^7;
//****************延时函数****************// void delay_1ms(uint d) {
uint i; while(d--)
for(i=0;i<75;i++); }
//**********初始化定时器,中断***********// void init()
{ TMOD=0x01;
TH0=(65536-100)/256; TL0=(65536-100)%6; EA=1; ET0=1; TR0=1; }
//***********中断函数+脉宽调制***********// void timer0() interrupt 1 { if(t ENA=0; if(t ENB=0; t++; 23 基于单片机的简易寻迹小车设计 if(t>=100) {t=0;} TH0=(65536-100)/256; TL0=(65536-100)%6; } //******************直行******************// void qianjin() { zkb1=30; zkb2=30; } //***************左转函数1***************// void turn_left1() { zkb1=5; zkb2=50; } //***************左转函数2***************// void turn_left2() { zkb1=5; zkb2=60; } //***************右转函数1***************// void turn_right1() { zkb1=50; zkb2=5; } //***************右转函数2***************// void turn_right2() { zkb1=60; zkb2=5; } //***************出错***************// void turn_ERROR() { EA=0; ET0=0; TR0=0; zkb1=0; zkb2=0; while(1) { START1=1; ERROR1=0; ENA=0; ENB=0; } } //***************循迹函数*****************// void xunji() 24