电动汽车课程设计智能小车.docx
《电动汽车课程设计智能小车.docx》由会员分享,可在线阅读,更多相关《电动汽车课程设计智能小车.docx(24页珍藏版)》请在冰豆网上搜索。
![电动汽车课程设计智能小车.docx](https://file1.bdocx.com/fileroot1/2023-1/23/86f21fad-d598-44f4-abe8-8d03c2d493d4/86f21fad-d598-44f4-abe8-8d03c2d493d41.gif)
电动汽车课程设计智能小车
工业自动化学院
《电动汽车》实习报告
(2014-2015学年第二学期)
实习题目:
智能小车设计
姓名:
学号:
班级:
指导老师:
实习时间:
2016年6月20日—2016年7月1日
成绩:
电动汽车实习任务书
一、设计题目
智能小车设计
二、设计主要内容
(1)广泛查找文献资料,认真研究,反复论证,精心设计技术方案。
(2)严格遵守各项纪律,勤奋学习,认真思考,敢于挑战困难并勇于创新。
(3)较为深入的掌握51单片机的体系结构、指令系统、编程方法,初步了解51单片机应用系统的软硬件开发方法及手段,较熟练地掌握51单片机几种重要的片内外设的基本原理及编程方法,初步掌握51单片机外围电路的扩展方法。
(4)在现有车模的基础上,以51单片机构成小车控制核心,同时加装声光电、红外线、超声波传感器、LED显示等外围设备,实现对小车的速度、位置、运行状况的实时测量,并将测量数据传送至处理器进行处理,然后由处理器根据所检测的各种数据实现对电动车的智能控制;
(5)设计的智能小车应该能够实时显示时间、速度、里程,具有自动寻迹、寻光、避障功能,可程控行驶速度、前进、后退、准确定位停车。
并有相应的声光电设备发出相关的提示或警示信息。
(6)遥控方式可自选,系统通过遥控器可以控制小车的行驶方向、速度、起停等运行状态,要求要达到一定的控制精度、距离及范围,小车行驶速度应达到3m/s以上。
(7)分析结果,独立撰写设计总结报告陈述自己的观点,格式应严格遵守学校规范。
内容尽量翔实,其中必须要有自己独立的见解和认识。
三、原始资料
硬件资源:
小车底盘、51单片机系统板、PC机。
设计指导资料:
51单片机系统板配套光盘
四、要求的设计成果
(1)在现有车模的基础上,以51单片机构成小车控制核心,同时加装声光电、红外线、超声波传感器、LED显示等外围设备,实现对小车的速度、位置、运行状况的实时测量,并将测量数据传送至处理器进行处理,然后由处理器根据所检测的各种数据实现对电动车的智能控制。
(2)撰写说明书,要求简洁、通顺,格式规范,设计方案正确,实现技术路线明确,论述内容完整、清楚、规范,数据、资料真实可靠,软件程序运行良好。
(3)要求有完整的电路设计原理图及软件源代码。
五、进程安排
(1)第1天:
任务布置及相关知识讲解
(2)第2-3天:
资料查阅与方案制定
(3)第4-8天:
硬件设计、程序编制与调试阶段
(4)第9天:
撰写设计报告
(5)第10天:
答辩与考核阶段
课程设计成绩评定表
成
绩
评
定
项目
比例
得分
平时成绩
30%
答辩考核成绩
10%
实习报告成绩
60%
总评成绩(百分制记分)
100%
评定等级
优良中及格不及格
指导教师(签名):
2016年7月1日
第1章设计任务
(1)熟悉使用DXP2004软件制作智能小车的PCB电路图。
(2)了解小车的主要硬件模块组成及原理。
(3)理解实现智能小车各功能的程序及掌握单片机程序的烧写方面;
(4)设计一个智能小车,要求能够遥控实现启动,停止,前进,后退,左转,右转。
(5)小车速度可调。
当发生故障时,按下故障报警按钮,蜂鸣器响,提醒故障。
(6)小车能够实现循迹功能,按照道路循迹行驶,车速较高,摆动幅度较小,过弯道时,车身稳定性保持良好,没有明显存在冲出轨道的趋势。
(7)根据个人能力设计人机交互界面,例如发光管,数码管,液晶显示屏显示等,表示小车工作状态。
可加装超声波测距,躲避障碍物等功能。
第2章总体方案设计
2.1总体方案的设计思路
图2.1总体设计思路
2.2总体方案设计
2.2.1控制器模块介绍
根据设计要求,我认为此设计属于多输入量的复杂程序控制问题。
采用单片机作为整个系统的核心,用其控制行进中的小车,以实现其既定的性能指标。
充分分析我们的系统,其关键在于实现小车的自动控制,而在这一点上,单片机就显现出来它的优势——控制简单、方便、快捷。
这样一来,单片机就可以充分发挥其资源丰富、有较为强大的控制功能及可位寻址操作功能、价格低廉等优点。
因此,这种方案是一种较为理想的方案。
针对本设计特点——多开关量输入的复杂程序控制系统,需要擅长处理多开关量的标准单片机,而不能用精简I/O口和程序存储器的小体积单片机,D/A、A/D功能也不必选用。
根据这些分析,我选定了P89C51RA单片机作为本设计的主控装置,51单片机具有功能强大的位操作指令,I/O口均可按位寻址,程序空间多达8K,对于本设计也绰绰有余,更可贵的是51单片机价格非常低廉。
在综合考虑了传感器、两部电机的驱动等诸多因素后,我们决定采用一片单片机,充分利用STC89C52单片机的资源。
2.2.2电机驱动工作原理
采用功率三极管作为功率放大器的输出控制直流电机。
线性型驱动的电路结构和原理简单,加速能力强,采用由达林顿管组成H型桥式电路。
用单片机控制达林顿管使之工作在占空比可调的开关状态下,精确调整电动机转速。
这种电路由于工作在管子的饱和截止模式下,效率非常高,H型桥式电路保证了简单的实现转速和方向的控制,电子管的开关速度很快,稳定性也极强,是一种广泛采用的 PWM调速技术。
现市面上有很多此种芯片,我选用了L298N。
这种调速方式有调速特性优良、调整平滑、调速范围广、过载能力大,能承受频繁的负载冲击,还可以实现频繁的无级快速启动、制动和反转等优点。
因此决定采用使用功率三极管作为功率放大器的输出控制直流电机。
2.2.3寻迹模块工作原理
采用三只红外对管,一只置于轨道中间,两只置于轨道外侧,当小车脱离轨道时,即当置于中间的一只光电开关脱离轨道时,等待外面任一只检测到黑线后,做出相应的转向调整,直到中间的光电开关重新检测到黑线(即回到轨道)再恢复正向行驶。
现场实测表明,小车在寻迹过程中有一定的左右摇摆不定,虽然可调试,摇摆情况会显著变好,但依然存在,且对速度也会有相应的影响。
2.2.4遥控模块工作原理
红外遥控器共有5个有效信号键位:
分别为左、右、前、后、停止。
遥控控制信号由红外遥控器发出,由STC89C52RC单片机上的红外接收器接受控制信号,经单片机内部计算分析后,将执行指令发给电机,使小车完成我们预想的动作。
经多次试验与调试发现,红外接收的有效灵敏距离大致在3米左右,超过极限距离,则会明显出现小车控制苦难的情况,同时环境也是干扰小车红外控制的一个重要因素。
第3章系统硬件设计
3.1系统的硬件组成
设计的主要硬件组成有:
单片机开发板、遥控器、小车底盘、驱动电机、万向轮、PC机、液晶显示屏、超声波模块等。
3.2STC89C52单片机介绍
STC89C52RC单片机是宏晶科技推出的新一代高速/低功耗/超强抗干扰的单片机,指令代码完全兼容传统8051单片机,12时钟/机器周期和6时钟/机器周期可以任意选择。
主要特性如下:
●增强型8051单片机,6时钟/机器周期和12时钟/机器周期可以任意选择,指令代码完全兼容传统8051。
·
●工作电压:
5.5V~3.3V(5V单片机)/3.8V~2.0V(3V单片机)。
·
●工作频率范围:
0~40MHz,相当于普通8051的0~80MHz,实际工作频率可达48MHz。
·
●用户应用程序空间为8K字节 ·
●片上集成512字节RAM
●通用I/O口(32个),复位后为:
P1/P2/P3/P4是准双向口/弱上拉,P0口是漏极开路输出,作为总线扩展用时,不用加上拉电阻,作为I/O口用时,需加上拉电阻。
·
●ISP(在系统可编程)/IAP(在应用可编程),无需专用编程器,无需专用仿真器,可通过串口(RxD/P3.0,TxD/P3.1)直接下载用户程序,数秒即可完成一片。
·
●具有EEPROM功能。
·
●具有看门狗功能。
●共3个16位定时器/计数器,即定时器T0、T1、T2。
●外部中断4路,下降沿中断或低电平触发电路,Power Down模式可由外部中断低电平触发中断方式唤醒。
●通用异步串行口(UART),还可用定时器软件实现多个UART
●工作温度范围:
-40~+85℃(工业级)/0~75℃(商业级)。
·
●PDIP封装
STC89C52RC单片机的工作模式 ·
●掉电模式:
典型功耗<0.1μA,可由外部中断唤醒,中断返回后,继续执行原程序,掉电模式可由外部中断唤醒,适用于水表、气表等电池供电系统及便携设备。
·
●空闲模式:
典型功耗2mA。
●正常工作模式:
典型功耗4Ma~7mA。
时钟电路
STC89C52内部有一个用于构成振荡器的高增益反相放大器。
定时元件通常采用石英晶体和电容组成的并联谐振回路。
晶体振荡频率可以在1.2~12MHz之间选择,电容值在5~30pF之间选择,电容值的大小可对频率起微调的作用。
图3.1时钟电路
复位及复位电路
复位是单片机的初始化操作。
其主要功能是把PC初始化为0000H,使单片机从0000H单元开始执行程序。
除了进入系统的正常初始化之外,当由于程序运行出错或操作错误使系统处于死锁状态时,为摆脱困境,也需按复位键重新启动。
RST引脚是复位信号的输入端。
复位信号是高电平有效,其有效时间应持续24个振荡周期(即二个机器周期)以上。
图3.2复位电路
芯片引脚
①主电源引脚(2根)
VCC(Pin40):
电源输入,接+5V电源 GND(Pin20):
接地线
②外接晶振引脚(2根)
XTAL1(Pin19):
片内振荡电路的输入端 XTAL2(Pin20):
片内振荡电路的输出端
③控制引脚(4根)
RST/VPP(Pin9):
复位引脚,引脚上出现2个机器周期的高电平将使单片机复位。
ALE/PROG(Pin30):
地址锁存允许信号 PSEN(Pin29):
外部存储器读选通信号
EA/VPP(Pin31):
程序存储器的内外部选通,接低电平从外部程序存储器读指令,如果接高电平则从内部程序存储器读指令。
④可编程输入/输出引脚(32根)
STC89C52单片机有4组8位的可编程I/O口,分别位P0、P1、P2、P3口,每个口有8位(8根引脚),共32根。
PO口(Pin39~Pin32):
8位双向I/O口线,名称为P0.0~P0.7
P1口(Pin1~Pin8):
8位准双向I/O口线,名称为P1.0~P1.7
P2口(Pin21~Pin28):
8位准双向I/O口线,名称为P2.0~P2.7
P3口(Pin10~Pin17):
8位准双向I/O口线,名称为P3.0~P3.7
图3.3STC89C52RC引脚图
3.3电机驱动模块电路设计
图3.4电机驱动电路模块
3.5报警模块电路设计
图3.5报警电路模块
3.6循迹模块电路设计
图3.6循迹电路模块
3.7遥控模块电路设计
图3.7红外接收电路模块
3.8供电电路设计
图3.8供电系统电路
第4章系统软件设计
系统的软件设计分为对双直流电机的控制和对传感器信号的处理其关键部分在于对直流电机的控制,前轮电机的正转和反转分别决定小汽车方向的左拐弯、右拐弯及直线行驶。
在检测黑线过程中,单片机始终使用增量控制的方案,即在调整拐弯或速度控制以及纠偏的过程中,路面信号采样速度、行驶速度、方向调整幅度等都是需要随时调整的,而且都是以一定步进值连续增加或者连续减少这些参数值的。
传感器部分的控制主要负责从外界采集信息,不同的信息对应不同的处理方案。
系统流程图如图4.1所示。
图4.1 系统流程图
4.1主程序设计
程序内容见附录。
4.2循迹程序设计
程序内容见附录。
(主要注意部分是PWM的调试)
4.3遥控程序设计
程序内容见附录。
(小车在实现转弯后会马上回复直线行走程序)
第5章调试结果及分析
循迹黑线
循迹功能的实现主要调试的是主要电机转速及程序中的PWM调试部分及传感器的灵敏度。
最理想的状况是小车能快速且稳定地按照黑色路线行走。
在调试过程中,因为每次调节PWM,所以几乎都要调节一次传感器灵敏度电阻,从而实现理想的黑线循迹。
调试结果(PWM最大为20):
(1)前进时:
左右电机为8;
(2)左转时:
右电机占空比为8,左电机停止运转;
(3)右转时:
左电机占空比为8,右电机停止运转;
主要结果分析:
传感器灵敏度正常,小车速度较快且摆动幅度较小,循迹功能正常,不会冲出跑道。
红外遥控控制
红外遥控控制部分的程序和传感器灵敏度都没问题。
程序主要包括左右电机左右停转,单边电机运转,左右电机同时运转等。
命令智能小车完成前进、后退、左转、右转等动作。
红外遥控功能实现的注意事项:
(1)排除循迹、蔽障信号输入干扰;
(2)使用遥控器时要注意拿掉电池上的塑胶片;
(3)尽量避免在有红外光线干扰的环境下使用;
主要结果分析:
遥控器主要的灵敏控制极限范围在3-4米之间。
第6章总结心得
本次课程设计我学到了很多东西,如循迹功能和红外控制功能分别由哪些模块组成;在红外遥控控制过程中,循迹信号和蔽障信号会干扰到遥控控制,如果程序部分不加入PWM电机调试,电机会一般默认以最高速运转;同时还掌握了用DXP2004软件画PCB电路板的技能。
在整个过程中,受益最深的是在调试阶段。
在调试阶段中,很熟练的了解了各个器件的功能,在测试中也明白各个电路实现什么功能等。
该设计通过单片机控制PWM直流电机驱动以及与多个传感器的配合应用,实现了两辆小车按规定跑道进行交替领跑功能。
在经过多次实验后,基本达到了预期的效果。
但是其智能化程度还远远不够,车体设计以及程序设计方面都有待于继续完善,以使两辆小车行驶速度更快,更平稳。
通过这次课程设计,加深了我对电子方面的兴趣,使我对电子知识有了更深的了解,同时也提高了我们自主学习的能力、动手操作的能力,很多事情,都是在做后才发觉有没有意义,有没有收获。
我想我会在今后的学习生活中学习更多、更深,我也会做得更好。
参考文献
[1]谢自美·电子线路设计.试验.测试[M]·华中科技大学出版社,2004
[2]宗光华·机器人的创意设计与实践[M]·北京航空航天大学出版社,2004
[3]肖景和·红外线热释电与超声波遥控电路[M]·人民邮电出版社,2003
[4]靳桅·单片机原理及应用[M]·西南交通大学出版社,2004
[5]王毅编·单片机器件手册[M]·人民邮电出版社,1994
[6]何立民.单片机应用技术选编(8)·北京航空航天大学出版社,2000
[7]丹尼斯.克拉克机·器人设计与控制[M]·科学出版社,2004
[8]苏凯等.MCS-51系列单片机系统原理与设计.冶金工业出版社,2003
[9]杨帮文·新编传感器实用宝典[M]·机械工业出版社,2005
[10]周坚编·单片机C语言轻松入门[M]·北京航空航天大学出版社,2006
[11]张毅坤.单片微型计算机原理及应用.西安电子科技大学出版社,1998
[12]张立科.单片机典型模块设计实例导航.人民邮电出版社,2004
[13]李光飞.单片机课程设计实例指导.北京航空航天大学出版社,2004
[14]张鑫.单片机原理及应用.电子工业出版社,2005.8
[15]何立民.MCS-51系列单片机应用系统设计系统配置与接口技术
北京航空航天大学出版社,1990
[16]任涛.闪速存储器数据及应用简明速查手册.电子工业出版社,1997
[17]张毅刚.MCS-51单片机应用设计.哈尔滨工业电子出版社,1996
[18]邬宽明.单片机外围器件实用手册.北京航空航天大学出版社,1998
[19]王幸之.单片机应用系统抗干扰技术.北京航空航天大学出版社,2000
[20]张凯.MCS-51单片机综合系统及其设计开发.科学出版社,1996
附录
附录1:
硬件图
硬件图1-智能小车底盘电路图
硬件图2-STC89CRC单片机系统电路图
附录2:
源程序
1.循迹程序
#include//包含51单片机头文件,内部有各种寄存器定义
#include//包含HL-1蓝牙智能小车驱动IO口定义等函数
//主函数
voidmain(void)
{
unsignedchari;
P1=0X00;//关电机
for(i=0;i<50;i++)//判断K4是否按下
{
delay
(1);//1ms内判断50次,如果其中有一次被判断到K4没按下,便重新检测
if(P3_7!
=0)//当K4按下时,启动小车前进
gotoB;//跳转到标号B,重新检测
}
BUZZ=0;//50次检测K4确认是按下之后,蜂鸣器发出“滴”声响,然后启动小车。
delay(50);
BUZZ=1;//响50ms后关闭蜂鸣器
TMOD=0X01;
TH0=0XFc;//1ms定时
TL0=0X18;
TR0=1;
ET0=1;
EA=1;//开总中断
while
(1)//无限循环
{
if(Left_1_led==0&&Right_1_led==0)
run();//调用前进函数
else
{
if(Left_1_led==1&&Right_1_led==0)//左边检测到黑线
{
leftrun();//调用小车左转函数
}
if(Right_1_led==1&&Left_1_led==0)//右边检测到黑线
{
rightrun();//调用小车右转函数
}}}}
左右车轮调试程序
//hj-4ws_pwm.h
#ifndef_LED_H_
#define_LED_H_
sbitIN1=P1^2;
sbitIN2=P1^3;
sbitIN3=P1^6;
sbitIN4=P1^7;
sbitEN1=P1^4;
sbitEN2=P1^5;
sbitBUZZ=P2^3;//蜂鸣器接线定义
#defineLeft_1_ledP3_3//左传感器
#defineRight_1_ledP3_2//右传感器
#defineLeft_moto_pwmP1_5//PWM信号端
#defineRight_moto_pwmP1_4//PWM信号端
#defineLeft_moto_go{P1_2=0,P1_3=1;}//左电机向前走
#defineLeft_moto_back{P1_2=1,P1_3=0;}//左边电机向后转
#defineLeft_moto_Stop{P1_5=0;}//左边电机停转
#defineRight_moto_go{P1_6=1,P1_7=0;}//右边电机向前走
#defineRight_moto_back{P1_6=0,P1_7=1;}//右边电机向后走
#defineRight_moto_Stop{P1_4=0;}//右边电机停转
unsignedcharpwm_val_left=0;//变量定义
unsignedcharpush_val_left=0;//左电机占空比N/20
unsignedcharpwm_val_right=0;
unsignedcharpush_val_right=0;//右电机占空比N/20
bitRight_moto_stop=1;
bitLeft_moto_stop=1;
unsignedinttime=0;
/***********************************************/
//延时函数
voiddelay(unsignedintk)
{
unsignedintx,y;
for(x=0;xfor(y=0;y<2000;y++);
}
/**********************************************/
//前速前进
voidrun(void)
{
push_val_left=8;//速度调节变量0-20。
。
。
0最小,20最大
push_val_right=8;
Left_moto_go;//左电机往前走
Right_moto_go;//右电机往前走
}
//左转
voidleftrun(void)
{
push_val_right=8;
Right_moto_go;//右电机往前走
Left_moto_Stop;//左电机停止
}
//右转
voidrightrun(void)
{
push_val_left=8;
Left_moto_go;//左电机往前走
Right_moto_Stop;//右电机往前走
}
/*PWM调制电机转速*/
/*左电机调速*/
/*调节push_val_left的值改变电机转速,占空比*/
voidpwm_out_left_moto(void)
{
if(Left_moto_stop)
{
if(pwm_val_left<=push_val_left)
{
Left_moto_pwm=1;
}
else
{
Left_moto_pwm=0;
}
if(pwm_val_left>=20)
pwm_val_left=0;
}
else
{
Left_moto_pwm=0;
}
}
/*右电机调速*/
voidpwm_out_right_moto(void)
{
if(Right_moto_stop)
{
if(pwm_val_right<=push_val_right)
{
Right_moto_pwm=1;
}
else
{
Right_moto_pwm=0;
}
if(pwm_val_right>=20)
pwm_val_right=0;
}
else
{
Right_moto_pwm=0;
}
}
/*TIMER0中断服务子函数产生PWM信号*/
voidtimer0()interrupt1using2
{
TH0=0XFc;//1Ms定时
TL0=0X18;
time++;
pwm_val_left++;
pwm_val_right++;
pwm_out_left_moto();
pwm_out_right_moto();
}
#endif
2.遥控程序
#include
#defineLeft_moto_go{P1_2=0,P