单片机课程设计基于单片机的循迹小车.docx
《单片机课程设计基于单片机的循迹小车.docx》由会员分享,可在线阅读,更多相关《单片机课程设计基于单片机的循迹小车.docx(20页珍藏版)》请在冰豆网上搜索。
单片机课程设计基于单片机的循迹小车
黄山学院
单片机课程设计说明书
专业:
自动化
班级:
14自动化2班
学生姓名:
指导老师:
成绩:
29
附录30
第1章绪论
1.1引言
我们所处的这个时代是信息革命的时代,各种新技术、新思想层出不穷,纵观世界范围内智能汽车技术的发展,每一次新的进步无不是受新技术新思想的推动。
随着汽车工业的迅速发展,传统的汽车的发展逐渐趋于饱和。
伴随着电子技术和嵌入式技术的迅猛发展,这使得汽车日渐走向智能化。
智能汽车由原先的驾驶更加简单更加安全更加舒适,逐渐的向智能驾驶系统方向发展。
智能驾驶系统相当于智能机器人,能代替人驾驶汽车。
它主要是通过安装在前后保险杠及两侧的红外线摄像机,对汽车前后左右一定区域进行不停地扫描和监视。
计算机、电子地图和光化学传感器等对红外线摄像机传来的信号进行分析计算,并根据道路交通信息管理系统传来的交通信息,代替人的大脑发出指令,指挥执行系统操作汽车。
1.2课题任务要求
应用STC89C51微控制器中的端口、外部中断、定时器等基本模块,实现核心控制,再结合电源板、电机驱动板来控制电机的转向,最后加上传感检测模块,实现小车的智能寻迹。
这次课程实践要求每一同学都要动手都制作出一辆循迹小车,真正实现从听中学到做中学,提高同学们的动手能力。
这次实践最基本的功能底线就是能够实现循迹和壁障。
1.3本论文研究的内容
本论文是基于STC89C51单片机开发,主要是研究4轮小车的路径识别。
第2章系统总体设计
2.1小车的机械特性
小车采用的是一辆三轮车车模。
后轮控件前进或转弯,前轮根据后轮驱动左右摆动即可以实现左右转。
该种车模控制简单。
小车可通过PWM控制后轮电机转动的速度来控制前轮电机的转动幅度从而控制小车的转弯幅度,实现小车的前进与转弯操作。
小车可通过对DIR控制后退。
2.2寻迹小车基本原理
探测路面黑线的基本原理:
光线照射到路面并反射,由于黑线和白纸对光的反射系数不同,可以根据接收到的反射光强弱来判断是否是黑线。
利用这个原理,可以控制小车行走的路迹。
这里的循迹是指小车在白色地板上循黑线行走,通常采取的方法是红外探测法。
红外探测法,即利用红外线在不同颜色的物体表面具有不同的反射性质的特点,在小车行驶过程中不断地向地面发射红外光,当红外光遇到白色纸质地板时发生漫反射,反射光被装在小车上的接收管接收;如果遇到黑线则红外光被吸收,小车上的接收管接收不到红外光。
处理器就根据是否收到反射回来的红外光为依据来确定黑线的位置和小车的行走路线。
红外探测器探测距离有限,一般最大不应超过3cm。
智能小车系统以处理器为核心,为了使智能小车能够快速行驶,处理器必须把路径的迅速判断、相应的转向电机控制以及直流驱动电机的控制精密地结合在一起。
如果传感器部分的数据没有正确地采集和识别,转向电机控制的失当,都会造成模型车严重抖动甚至偏离赛道;如果直流电机的驱动控制效果不好,也会造成直线路段速度上不去,弯曲路段入弯速度过快等问题。
其系统结构如所
示。
本次红外探测采用的是反射式探测。
图2.1系统结构图
89C51处理器通过引脚读出超声波信号管脚
89C51处理器向红外线传感器供5V电压,通过采集其高低电平可以控制小车的转弯。
89C51处理器通过DATA引脚向键盘显示板发送要显示的数据,还可以通过KEY引脚读取键盘的按键,实现相应的功能。
第3章系统硬件设计
3.1控制器的选择
本次设计采用的是89C51单片机。
3.1.1概述
STC89C51是一款由美国NXP半导体公司提供的增强型89C51微控制器,包括16KBFlash程序存储器和1KB数据RAM,且功能上完全覆盖标准89C51单片机系列
3.1.2STC89C51开发工具特性
1.89C51内核,5V工作电压,操作频率0~40MHZ;
2.16KB片内Flash存储器,1KB片内SRAM;
3.SPI串行通信接口和增强型UART;
4.PCA(可编程计数器列阵),具有PWM和捕获、比较功能;
5.4个8位I/O口,含有三个高电流P1口(每个I/O口的电流为16mA);
6.8个中断源,4个中断优先级,3个16位定时器/计数器和可编程看门狗定时器(WDT);
7.2个DPTR寄存器;
3.2硬件电路设计
本次项目采用的电路板从画电路原理图开始,到PCB板的布线以及电路板的焊接与检测一系列工作都是自己在大一下学期课程实践期间制作的。
3.2.1系统电源电路
交流电经过全波电路在经过电容滤波,在经过稳压电源芯片做成稳压电路,输出电压5V、7.2V的直流电源。
其电源电路原理图如图3.2所示。
图3.2系统电源电路原理图
图3.3硬件电路1
图3.4硬件电路图2
小车的驱动电机的供电电压为7.2V,经过电容滤波后接7805进行稳压,稳压输出5V的电压。
提供单片机所需5V电压。
3.2.2电机驱动模块
1.驱动实现与原理
本项目驱动两路直流电机,实现电机的正反转与测速和遥控。
输入输出逻辑表真值表3.2。
表3.1L298N输入输出逻辑真值表
通道1
通道2
输入
输出控制电机1
输入
输出控制电机2
EnA
In1
In2
OUT1
OUT2
转向
EnB
In3
In4
OUT3
OUT4
转向
1
0
0
0
0
停止
1
0
0
0
0
停止
0
1
0
1
反传
0
1
0
1
反传
1
0
1
0
正转
1
0
1
0
正转
1
1
0
0
停止
1
1
1
1
停止
0
X
X
0
0
停止
0
X
X
0
0
停止
其中“0”为低电平;“1”为高电平;“X”为任何状态。
图3.5驱动原理图
红外线检测电路
红外对管电路原理其实很简单,就是利用红外线在不同颜色的物体表面具有不同的反射性质的特点,在小车行驶过程中不断地向地面发射红外光,当红外光遇到白色纸质地板时发生漫反射,反射光被装在小车上的接收管接收,Cortex-M0内核采集到的电压就是高电平;如果遇到黑线则红外光被吸收,小车上的接收管接收不到红外光,然后89C51内核采集到的电压就是低电平。
其基本原理图如图3.6所示。
图3.6红外线检测电路原理图
鉴于本项目设计需实现的功能比较简单,故只要两路红外线检测电路即可,分别位于小车中心轴的两测即可。
3.3附加功能
3.3.1蓝牙模块
蓝牙模块,是一种集成蓝牙功能的PCBA板,用于短距离无线通讯,按功能分为蓝牙数据模块和蓝牙语音模块。
图3.6蓝牙模块
作为取代数据电缆的短距离无线通信技术,蓝牙支持点对点以及点对多点的通信,以无线方式将家庭或办公室中的各种数据和语音设备连成一个微微网(Pico-net),几个微微网还可以进一步实现互联,形成一个分布式网络(scatter-net),从而在这些连接设备之间实现快捷而方便的通信。
本文介绍蓝牙接口在嵌入式数字信号处理器OMAP5910上的实现,DSP对模拟信号进行采样,并对A/D变换后的数字信号进行处理,通过蓝牙接口传输到接收端,同样,DSP对蓝牙接收到的数字信号进行D/A变换,成为模拟信号。
蓝牙信号的收发采用蓝牙模块实现。
此蓝牙模块是公司最近推出的遵循蓝牙V1.1标准的无线信号收发芯片,主要特性有:
具有片内数字无线处理器DRP(DigitalRadioProcessor)、数控振荡器,片内射频收发开关切换,内置ARM7嵌入式处理器等。
接收信号时,收发开关置为收状态,射频信号从天线接收后,经过蓝牙收发器直接传输到基带信号处理器。
基带信号处理包括下变频和采样,采用零中频结构。
数字信号存储在RAM(容量为32KB)中,供ARM7处理器调用和处理,ARM7将处理后的数据从编码接口输出到其他设备,信号发过程是信号收的逆过程,此外,还包括时钟和电源管理模块以及多个通用I/O口,供不同的外设使用。
的主机接口可以提供双工的通用串口,可以方便地和PC机的RS232通信,也可以和DSP的缓冲串口通信。
3.3.2蓝牙小车
1)利用单片机和安卓操作系统的智能手机编制主控界面;
2)蓝牙手机与车载的蓝牙装备配对,建立无线通信单,片机的RX和TX接蓝牙模块,用于实现十米范围内遥控小车;;
3)自制驱动电机电路,STC89C51的P0~3接L298N的IN1~4,控制小车的转向;P2的0和1口接L298N的ENA和ENB,通过控制使能端实现小车轮子的转速控制,实现小车转弯。
由于单片机STC89C51没有直接输出的PWM信号,所以利用单片机的两个定时器输出一定周期内的高低电平给L298N控制小车的转速。
第4章系统软件设计
4.1编译环境
Keil集成开发环境(又称KeilIDE)是广州致远电子有限公司开发的一个微处理器软件开发平台,是一款具有强大内置编辑器的多内核编译调试环境,支持8051、ARM、AVR等多种微控制器,可以完成从工程建立和管理,编译,链接,目标代码的生成,到软件仿真,硬件仿真(挂接TKS系列仿真器等硬件)等完整的开发流程。
Keil集成开发环境包括工程管理器、代码编辑器、编译工具链、源码级调试器和外部工具等。
4.2模块的驱动
4.2.1红外线传感器模块
红外线模块只要M0处理器向其供5V电压就能工作,然后通过引脚采集其电平高低就可以根据不同情况做出相应的处理。
其具体程序控制见程序清单4.1.
程序清单4.1读取红外传感器的高低电平
voidTrack(void)
{
if((IN1==0&&IN2==0)||(IN1==1&&IN2==1))
{
Forward();//调用前进函数
}
if(IN1==1&&IN2==0)
{
Lift();//调用左转函数
}
if(IN1==0&&IN2==1)
{
Right();//调用右转函数
}
}
4.2.2电机模块的驱动
首先,通过设置L298N芯片的输入方向RIGHT_FANZHUAN,RIGHT_ZHENGZHUAN,RIGHT_STOP,LEFT_ZHENGZHUAN,LEFT_FANZHUAN,LEFT_STOP,从而控制电机的正反转。
详见程序清单4.3.
程序清单4.3直流电机驱动与路径识别
voidForward()//电机前进
{
PWM1=1;
PWM2=1;
}
XX文库-让每个人平等地提升自我
voidLift()//电机左转
{
PWM1=0;
PWM2=1;
}
voidRight()//电机右转
{
PWM1=1;
PWM2=0;
}
voidTrack(void)
{
if((IN1==0&&IN2==0)||(IN1==1&&IN2==1))
{
Forward();//调用前进函数
}
if(IN1==1&&IN2==0)
{
Lift();//调用左转函数
}
if(IN1==0&&IN2==1)
{
Right();//调用右转函数
}
}
前轮为方向轮,只有在需要转弯的时候才需要后边电机驱动其左右转动,在常态下则由后轮的推力使前轮向前转动。
具体实现是通过控制前面产生的两路PWM波的占空比和L298N芯片的In1、In2的方向来实现小车的前进寻迹与后退寻迹,其程序流程图详见图4.1所示。
图4.1直流电机控制流程图
根据图4.1可以看到程序一开始就进行读取红外线传感器,如果左右两边都遇到黑线则停止前进;如果左边遇到黑线而且右边没有遇到黑线,小车则左转;如果右边遇到黑线而且左边没有遇到黑线,小车则右转;如果两边都没有遇到黑线小车则直行。
4.2.3按键模块
按键模块处理流程图如图4.2所示。
图4.2按键处理程序流程图
把89V81RB2的P3.5引脚设置为检测引脚,设置为输入,进行扫描键盘。
使用变量i作为位码设置变量,由0至7依次循环,例如当按下5号键的时候,当i变成5的时候,会在5号线上出现低电平,p3.5上出现低电平,当89V81RB2上边检测到低电平的时候,将变量i的值赋值给按键号标志变量whichkeydown,,当按键松开后,对whichkeydown的值进行处理,也就是相当于对按键的事件进行了处理,处理完成后,将whichkeydown的值赋值为8,说明没有按键按下。
按键要定时检测按键是否按键,实时处理即可。
这里使用的是前面设置的16位定时器0的定时2.5ms进行检测。
其具体详见程序清单4.7
程序清单4.2.5按键检测
voidKey_Proc(void)
{
uint32key;
if(有按键)//有按键
DelayNS(30);//延时去抖
if(按键有效0)//按键有效
读取按键值
while()//等待释键
;
switch(key)
{
case按键1:
……;//按键1处理
break;
case按键2:
……;//按键2处理
break;
case按键3:
……;//按键3处理
break;
}
}
第5章系统调试分析
5.1系统设计中的注意事项
5.1.1外部因素
外部因素主要有环境光线、赛道材质等因素。
以采用光电寻迹方案的智能车为例,如果接收的信号中有很多噪声成分,或者黑白区分不清晰,就很难识别路线,从而对后续的控制过程造成很大影响。
因此,合理的传感器离地间隙和反射角度、较好的滤波电路设计都是需要考虑的。
5.1.2内部因素
(1)重量因素
整车质量的增加,对系统动力性有较大影响。
因此,除了智能车工作必须的电路之外,应尽可能减少车重。
即使是必备部件,可应该采用轻量化的设计。
比如为了测量模型车的速度,需要在驱动轮上加装转速传感器,一般购买的电机编码器重量都较大,有的队伍就利用鼠标上的光电电路设计制作了一个轻量化的转速传感器,从而大大减小了重量。
(2)过度转向的避免
由于是后轮驱动,在弯曲的路线上加速可能会出现过度转向现象,因此在车辆弯道行驶时需要小心控制车辆的转向速度。
(3)传感器的影响
刚开始的时候,我的传感器装的比较高,这样就不能很好的感应到路线,以至于出现乱跑的现象。
如果在以后的设计中需要的话,可以采用激光传感器进行探测,这样就会更精准的寻迹。
5.2硬软件总体调试
硬件、软件独立调试都有效果之后,下一步就是硬软件总体调试了,在硬软件总体调试之前,应现把各个跳线接后,然后在用贴有黑胶带的白纸来回在红外线发射接收管左右移动,看小车的电机转速是否会发生变化,如果用贴有黑胶带的白纸来回在各个红外线发射接收管左右移动时,电机的转速都会发生改变,则说明总体调试初步有效,最后让小车在赛道上进行行走,在初次调试的时候,小车的速度不能太大。
第6章结束语
历经四五天的课余时间,终于把本次嵌入式课程设计完成了,从资料的搜索到最终的调试,在整个课程过程中,感觉自己学到了许多东西,忽然间才明白,原来看起来很难的东西,其实只要努力去做,其实并没有什么。
很多时候,真正阻止一个人发展的,还是自己的心。
因为在很多时候,我们都被自己吓回去了。
于是,这个世界,终究是属于那些敢想敢干,并坚持下去的人的。
在这之前,我也曾想做好多东西。
然而真正下决心并做成的,其实并没有几个。
此次的成功,无疑给予了我很大的决心。
关于此次的循迹车,从一幅幅电路图到一个个电子元件,再到一个一个成型的模块,最后到组装并成功实现功能。
这其中所花费的精力,也有些让自己动容。
然而我想,做每个项目本都应该如此吧!
一步步的,品味到了辛酸,才会获得甘甜。
十分的信心,十足的恒心。
只有这样,才能成事。
在本课题的设计中,虽然把实物做出来了,而且都符合课题设计的要求并在此基础上还加了些功能,但是相比“飞思卡尔”智能汽车邀请赛上的智能小车还是存在很大的差距,最主要的问题是速度上的问题,本论文设计的智能小车的行走的速度不能太快,否则会出现寻迹不准确。
还有一个问题就是红外线接收头之间存在干扰问题。
由于时间的问题,没能用PWM进行调速,这实在是一大遗憾。
如果时间允许的话,采用PID精准算法来控制电机的转速。
我想,这才算是一个真正的智能的小车吧。
一个实验项目的成功,需要的是信心,敢于探索,不屈不挠才会获得成功。
真正的智能,我相信,还在不久之后,会在我们的制作之下,在大家面前展现。
参考文献
[1]贾伯年,俞朴,宋爱国.《传感器技术(第3版)》,东南大学出版社,2007
[2]成立,杨建宁.《模拟电子技术》,东南大学出版社,2007[3]曾喆昭.《信号与线性系统》,清华大学出版社,2007
[3]成立,王振宇.《数字电子技术(第2版)》,机械工业出版社,2010[5]许立梓,陈玮,何小敏,高明琴.微型计算机原理及应用[M].北京:
机械工业出版社,2011
[4]张荣标《微型计算机原理与接口技术》[M].北京:
机械工业出版社,2005
[5]周立功等.《项目驱动-单片机应用设计基础》.北京:
北京航空航天大学出版社,2004
[6]周航慈.《单片机程序设计基础》.北京:
北京航空航天大学出版社,2003
[7]GeorgeLee,KarinaNg,EdmondKwang.Designofringoscillatorbasedvoltagecontrolledoscillator.ProjectFinalReport[R].2005[5]T.C.Weigandt,B.Kim,andP.R.Gray.AnalysisofTimingJitterinCMOSRingOscillators.IEEEInternationalSymposiumonCircuitsandSystems.1994
[8]JonathanZdziarski,HackingandSecuringApplications:
StealingData,HijackingSoftware,andHowtoPreventIt,2012:
432
[9]MouradDebbabi,MohamedSaleh,ChamseddineTalhiandSamiZhiouaEmbeddedJavaSecurity:
SecurityforMobileDevices,2010:
221-223
[10]StephenArolagon,ClarkandDavidThielMobileApplicationSecurity,2012:
157-161
附录
一、英文原文
ApplicationFundamentals
AndroidapplicationsarewrittenintheJavaprogramminglanguage.ThecompiledJavacode—alongwithanydataandresourcefilesrequiredbytheapplication—isbundledbytheaapttoolintoanAndroidpackage,anarchivefilemarkedbyan.apksuffix.Thisfileisthevehiclefordistributingtheapplicationandinstallingitonmobiledevices;it'sthefileusersdownloadtotheirdevices.Allthecodeinasingle.apkfileisconsideredtobeoneapplication.
Inmanyways,eachAndroidapplicationlivesinitsownworld:
1.Bydefault,everyapplicationrunsinitsownLinuxprocess.Androidstartstheprocesswhenanyoftheapplication'scodeneedstobeexecuted,andshutsdowntheprocesswhenit'snolongerneededandsystemresourcesarerequiredbyotherapplications.
2.Eachprocesshasitsownvirtualmachine(VM),soapplicationcoderunsinisolationfromthecodeofallotherapplications.
3.Bydefault,eachapplicationisassignedauniqueLinuxuserID.Permissionsaresetsothattheapplication'sfilesarevisibleonlytothatuserandonlytotheapplicationitself—althoughtherearewaystoexportthemtootherapplicationsaswell.
It'spossibletoarrangefortwoapplicationstosharethesameuserID,inwhichcasetheywillbeabletoseeeachother'sfiles.Toconservesystemresources,applicationswiththesameIDcanalsoarrangetoruninthesameLinuxprocess,sharingthesameVM.
ApplicationComponents
AcentralfeatureofAndroidisthatoneapplicationcanmakeuseofelementsofotherapplications(providedthoseapplicationspermitit).Forexample,ifyourapplicationneedstodisplayascrollinglistofimagesandanotherapplicationhasdevelopedasuitablescrollerandmadeitavailabletoothers,youcancalluponthatscrollertodothework,ratherthandeve