毕业设计电磁感应路径识别智能小车设计.docx
《毕业设计电磁感应路径识别智能小车设计.docx》由会员分享,可在线阅读,更多相关《毕业设计电磁感应路径识别智能小车设计.docx(21页珍藏版)》请在冰豆网上搜索。
毕业设计电磁感应路径识别智能小车设计
毕业论文(设计)
题目 基于电磁感应路径识别智能小车软件设计
院系
专业 年级
学生姓名
学号
指导教师
电磁感应路径识别智能小车软件设计
专业:
姓名:
指导老师:
【摘要】本系统主要实现了智能小车的左转,右转,停止等功能,在一个交变磁场为引导信号道路中,根据电感线圈的路径识别模块,单片机AT89S52得到采集到的信号,通过采集到的信号来改变输出的PWM波的占空比,从而使两个直流电机的转速不相同,来控制小车的运行方向。
程序采用了C语言进行设计,主程序采用了循环模式的设计,只要定时器计数没满,利用switch语句一直对P3口的判断,再调用方向函数来控制小车行进方向。
中断服务程序中定义一个计数变量自加1,当等于脉宽值width时,输出口置为低电平,当等于频率值fre时,输出口置为高电平,这样就可以改变width值时改变输出占空比大小。
方向函数中对width值进行了赋值,由主程序进行调用。
【关键词】AT89S52;线圈磁场传感器;直流电机,PWM调速法
Electromagneticinductionintelligentvehiclerecognition
Major:
Student:
Supervisor:
【Abstract】Themainachievementofthesystemofintelligentvehicleturnleft,turnright,stopandotherfunctions,inanalternatingmagneticfieldinordertoguidethesignalpath,basedoninductancecoilpathidentificationmodule,single-chipAT89S52signal,throughtheacquisitionofthesignaltochangetheoutputofthePWMwavedutycycle,sothatthetwoDCthemotorspeedisnotthesame,tocontrolthecarrunningdirection.ProgramusingClanguageforthedesignofthemainprogram,usingacircularpatterndesign,aslongasthetimercountnotfull,useswitchstatementshavebeenontheP3exportjudgment,andthencallthedirectionfunctiontocontrolthedirectionofthemovingcar.Theinterruptserviceroutinetodefineavariablecountfrom1,whenequaltothepulsewidthwhenthevalueofwidth,outputislow,whenthevalueoffreisequaltothefrequency,outputishigh,soitcanchangethewidthvaluechangetheoutputdutyratiosize.Directionalfunctiononwidthvalueswereassigned,bythemainprogramcall.
【Keywords】AT89S52;magneticfieldsensor;DCmotor,PWMspeedcontrolmethod
绪论
随着科学技术的飞速发展,人们对生活的要求越来越高,特别是对交通工具的智能方面的要求,除此之外,随着在企业中越来越追求工作效率和生产成本,迫切的要求以最低的成本生产出所需要的产品,在这种种的社会的条件下,人们越来越重视机器智能方面的研究,在众多的研究当中,交通工具的智能研究就是其中的一个热点问题,而智能小车的研究就是一个很好的代表。
所谓的智能小车,就是集路面环境探测、卫星导航、自动行驶和有自己的决策能力等功能为一体的小车,它综合运用了计算机、通信、导航和自动化控制等技术。
正因为智能小车的功能强大和比较实用,同时对智能小车的研究有很大的发展空间,所以智能小车的研究得到了国内外科学家的重点关注。
智能小车的研究是一个很有意思的科研问题,得到了很多大学生的关注,他们在学校期间学习很多与之相关的知识,同时做很多与之相关的实验。
现在国内的很多电子设计大赛都有与智能小车相关的题目,在大赛中设计出来的这些小车能实现很多方面的功能,例如避障、循迹等。
本系统主要实现了智能小车的左转,右转,停止等功能,在一个交变磁场为引导信号道路中,根据电感线圈的路径识别模块,单片机得到采集到的信号,通过采集到的信号来改变输出的PWM波的占空比,从而使两个直流电机的转速不相同,来控制小车的运行方向。
程序采用了C语言进行设计,主程序采用了循环模式的设计,子程序则为功能模块设计,由主程序进行调用。
1设计方案介绍
本论文主要对智能小车软件系统进行了研究。
整个硬件系统由路径检测系统和单片机最小系统组成。
论文首先对检测系统作了详细的分析,接着对单片机最小系统的各个组成部分作了详细的说明,同时在论文中对所用到的传感器,电机等阐述了其原理。
系统整体设计基于单片机的控制,由单片机作为主控制器进行各部分的协调工作,在熟悉硬件的基础上编程实现软件功能。
本系统先简单介绍智能小车系统的构成与特性,再详细讲述基于AT89S52单片机的智能小车系统的软件功能的设计与实现。
1.1硬件方案介绍
整个硬件系统由路径检测系统和单片机最小系统组成,路径检测系统检测到磁场的变化情况,以信号的形式传送给单片机,单片机最小系统接收并处理检测系统传送过来的信号,把处理好的信号后采取PWM调速法来改变直流电机的转速,从而控制小车的行驶。
小车识别硬件系统的整体结构如下图所示,
图1硬件系统结构
路径检测系统是整个小车硬件系统的前端部分,是比较重要的一部分,不可缺少的。
在整个系统中,路径检测部分能否准确的检测到磁场传感器传来的信号,对小车的行驶来说是很重要的。
如果路径检测系统能够准确的检测到信号,并且及时的反馈给单片机系统,这样的话,单片机系统就能及时的处理所接收到的信号,同时将所处理好的信号传输给直流电机,从而控制小车避开前进方向。
因而路径检测系统中传感器的选择是很重要的,传感器选择的好的话,会对设计的结果有很大的帮助。
1.1.1路径识别模块
用两个10mH的电感线圈置于车模头部作为确定小车位置的传感器,即双水平线圈方案。
使用两个线圈,分别装在小车前方两侧,顺着电流方向竖直放置线圈,此时线圈中的感应电动具有势分布简单,衰减快,远处对近处的干扰小的特点,所以非常适合作为采集信号的传感器。
用一根导线产生20KHZ100mA的交变磁场,然后使小车沿着引导线信号的道路行走。
根据电磁学,在导线中通入按正弦规律变化的电流,导线周围会产生变化的磁场,且磁场与电流的变化成一定的规律。
如果在此磁场中置一由线圈组成的电感,则该电感上会产生感应电动势,且该感应电动势的大小和通过线圈回路的磁通量的变化率成正比。
由于在导线周围不同位置,磁感应强度的大小和方向不同,所以不同位置上的电感产生的感应电动势也应该是不同。
据此,则可以确定电感的大致位置。
靠近磁场的地方磁感应强度越高,远离磁场的地方磁感应强度越低。
用两线圈采集到的感应电压对小车的位置做出判断。
对于弧形导线若选用左侧线圈电压减去右侧线圈电压,若这个差为正值则说明小车已经偏离直线向左侧转弯,且这个值越大说明偏左越厉害;同理可得,若选用右侧线圈电压减去左侧线圈电压,若这个差为正值则说明小车已经偏离直线向右转弯,且这个值越大说明偏右越厉害。
对于直导线,即左侧线圈电压和右侧线圈电压的值差不多,则小车沿着直线向前行走。
不同的线圈轴线摆放方向,可以感应不同的磁场分量。
在车模前上方水平方向固定两个相距L的线圈,两个线圈的轴线为水平,高度为h,为了讨论方便,我们在跑道上建立如下的坐标系,假设沿着跑道前进的方向为z轴,垂直跑道往上为y轴,在跑道平面内垂直于跑到中心线为x轴。
xyz轴满足右手方向。
假设在车模前方安装两个水平的线圈。
这两个线圈的间隔为L,线圈的高度为h,参见下图5所示。
左边的线圈的坐标为(x,h,z),右边的线圈的位置(x-L,h,z)。
由于磁场分布是以z轴为中心的同心圆,所以在计算磁场强度的时候我们仅仅考虑坐标(x,y)。
由于线圈的轴线是水平的,所以感应电动势反映了磁场的水平分量。
根据公
式可以知道感应电动势大小。
图2感应线圈的布置方案
令h=10cm,x∈(−30,+30)cm,可以根据公式计算出感应电动势
我们使用相距水平长度为L的两个感应线圈,并计算两个线圈感应电动势的差值:
下面假设L=30cm,计算两个线圈电动势差值dE。
当左边线圈的位置x=30的时候,此时两个线圈的中心恰好处于跑道中央,感应电动势差值dE为0。
当线圈往左偏移,x∈(15,30),感应电动势差值小于零;反之,当线圈往右偏移,x∈(0,15),感应电动势大于零。
因此在位移0∼30cm之间,电动势差值dE与位移x是一个单调函数。
可以使用这个量对于小车转向进行负反馈控制,从而保证两个线圈的中心位置跟踪赛道的中心线。
通过改变线圈高度h,线圈之间距离L可以调整位置检测范围以及感应电动势的大小。
1.1.2电机驱动模块
一般来说控制器、功率变换器和电机三个部分组成了电动小车的驱动系统。
由于小车的驱动不但要求电机驱动系统具有很宽的调速范围和高可靠性的性能,还有就是电机的转速要受电源功率的影响,就要求驱动具有宽的高效率区。
直流电机的控制比较简单,性能比较出众,而且直流电源也比较容易实现。
所以本设计的驱动选用了两个直流电机,分别驱动两侧的小车履带,同时也使小车能够方便的达到转弯的目的。
电机在正常工作时对电源的干扰很大,所以可以用光耦器件将控制部分和电机驱动部分隔开,这样可以有效的避免对电源部分的影响,并且用三极管加在场效应管的基极加以驱动,从而有足够大的基极电流流过场效应管。
PWM为脉冲宽度调制,通过PWM波控制MOS管控制直流电机的电压。
通过改变PWM的占空比可以调节电机的速度。
直流电机两端的电压与其转速比例,也与控制波形的占空比成正比,因此电机的速度与占空比大小成正比,占空比越大,电机转得越快,当占空比为1时,电机转速最大。
2软件方案介绍
C语言:
是计算机程序设计语言,既具有高级语言的特点,有具有汇编语言的特点,是一种中级语言。
因为C语言的功能很强大,所以C语言发展非常快,C语言成为现在最受欢迎的编程语言之一。
C语言有以下优点:
①C语言是结构化语言,结构化使得程序层次清晰,便于使用、维护以及调试;②C语言功能齐全,具有多种数据类型,使得程序效率更高;③C语言有很好的移植性,编好的C语言程序,能很好的下载到不同的芯片,没有什么兼容性的问题,不需要重新再编写程序。
总的来说,就是C语言功能比较强大,又通俗易懂,所以在编程的时候,选择C语言来编程。
2.1.1单片机介绍
AT89S52的特点是:
8位CPU和在系统可编程Flash;晶片内部具时钟振荡器;内部程序存储器(ROM)为8KB;内部数据存储器(RAM)为256字节;32个可编程I/O口线;8个中断向量源;三个16位定时器/计数器;三级加密程序存储器;全双工UART串行通道。
端口3也具有内部提升电路的双向I/O端口,其输出缓冲器可以推动4个TTL负载,同时还多工具有其他的额外特殊功能,包括串行通信、外部中断控制、计时计数控制及外部数据存储器内容的读取或写入控制等功能。
P0口:
P0口为一个8位漏极开路双向I/O口,每脚吸收8TTL门电流。
当P1口的管脚第一次写1时,被定义为高阻输入。
P0能够用于外部程序数据存储器,它可以被定义为数据/地址的第八位。
在FIASH编程时,P0口作为原码输入口,当FIASH进行校验时,P0输出原码,此时P0外部必须被拉高。
由于AT89S52是一种低功耗、高性能CMOS8位微控制器,具有8K在系统可编程Flash存储器,并且片上Flash允许程序存储器在系统可编程。
所以本设计采用AT89S52单片机为核心控制器主控单元的一个最小系统。
该最小系统包括:
复位电路、电源电路、时钟电路。
C3与R1组成单片机的复位电路。
复位时单片机执行初始化操作,复位后PC初始化为0000H,使得单片机程序从OUT单元开始执行,从成本与效益考虑本系统采用由简单的RC电路构成的复位电路。
时钟频率是单片机每个功能部件的运行基准,有了这个基准单片机才能有条有理的一拍一拍地工作,因此,时钟直接关系到单片机的运行速度,时钟电路的工作质量也直接关系到单片机系统的工作稳定性。
本设计选用的是22.1184MHZ的晶体振荡器(简称晶振),这样是为了方便计算波特率。
晶振的频率越高,则系统得到的时钟频率也就越高,单片机执行指令的速度也就越快。
2.1.2系统原理
小车启动后,调整好路线后全速前进,行驶到弯道时,左右线圈磁场传感器会检测到不相等的电压信号,传输给单片机,通过单片机调节PWM信号输出调节左右轮速度从而实现小车的转弯,直转到左右线圈磁场传感器检测到相等的电压信号为止,在执行中断服务程序中输出PWM封锁信号并实现闭锁从而实现小车的刹车。
刹车后小车在原地等待。
3系统控制软件设计
根据软件设计方案,整个软件采用模块化设计,各功能部分均设计为子程序模块,各功能的实现是通过主程序调用子程序或子程序调用子程序完成的。
整个程序由以下部分组成:
(1)、主程序:
主程序是整个程序的主体,包括单片机内存单元以及各个I/O口的初始化,主要有相关标志位,暂存单元,显示缓冲区的清零,中断向量入口地址,中断优先级,堆栈指针的设置,以及对子程序的调用等。
(2)、中断服务程序:
利用了定时器模拟PWM波输出,并定义了小车运行时间。
(3)、控制程序:
控制小车前进的方向。
3.1主程序设计
主程序是整个软件流程核心,它起到串联各功能模块的作用,各功能部分的执行都采用子程序调用的方式来实现。
另外主程序还负责对一些标志、状态、符号地址进行定义和设置初始化值,以便在程序运行中使用和判断。
主程序采用循环结构的方式设计,在系统上电以后先系统的复位工作。
软件系统的主结构图
main()
{
EA=1;//开中断
ET0=1;//开T0中断
TMOD=0x02;//8位重装
TL0=0xfc;
TH0=0x18;
TR0=1;
While
(1)
{
Temp=P3&0x0f;
switch(temp)//检查磁场传感器传来的接口状态
{
case0x00:
do
{
stop();//小车停止
}while(temp!
=0);break;
case0x03:
do
{
left();//小车向左转
}while(temp!
=0);break;
case0x0b:
do
{
Left1()//小车小幅度向左转
}while(temp!
=0x01);break;
case0x0d:
do
{
right();//小车向右转
}while(temp!
=0x02);break;
case0x0c:
do
{
Right1();//小车小幅度向右转
}while(temp!
=0x04);break;
case0x0f:
do
{
head();//小车前进
}while(temp!
=0);break;
}
head();
}
}
3.2中断服务程序
中断服务程序中定义了定时器变量sum,计数器变量count,当进一次中断,计数器变量自加一,当等于全局区定义的脉宽变量width值时,把输出PWM口置为0,count继续自加一,当等于全局区定义的频率变量fre值时,把输出口PWM置1,这样就完成了一个周期的输出方波,每次只用控制width值就能改变占空比大小的输出,进而控制小车的方向。
而每次进中断,定时器变量也自加一,当加到等于全局区定义的定时器值时就中断服务程序,并把输出口置为低电平,小车停止前进。
流程图如下:
相关程序如下:
VoidT0-ISR()interrupt1
{
Staticintcount;//计数器变量
Intsum=0;//定时器变量
Count++;
Sum++;
If(sum==sum1)//判断小车是否到停止条件
{
EA=0;//关闭中断
PwmR=0;//输出口置为低电平
PwmL=0
}
If(count==widthR)
Pwmr=0;
If(count==widthL)
Pwml=0;
If(count==fre)
{
Count=0;
PwmR=pwmL=1;
}
}
其设计原理如下图:
图定时器模拟PWM波
利用定时器/计数器计数,当计到等于脉宽变量值width时,PWM口置为低电平,当计到等于频率变量值fire时,PWM口置为高电平,如图所示,当我改变width值的大小时,就可以改变该占空比大小。
PWM调速原理:
脉冲宽度调制(PWM)是利用微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术,广泛应用于测量,通信,功率控制与变换等许多领域。
它是一种是对模拟信号电平进行数字编码的方法。
通过高分辨率计数器的来计算方波的占空比,用来对一个具体模拟信号的电平进行编码。
但PWM信号仍然是数字的,因为在给定的任何时刻,满幅值的直流供电要么完全有(ON),要么完全无(OFF)。
电压或电流源是以一种通(ON)或断(OFF)的重复脉冲序列被加到模拟负载上去的。
通的时候即是直流供电被加到负载上的时候,断的时候即是供电被断开的时候。
只要带宽足够,任何模拟值都可以使用PWM进行编码。
3.3控制程序设计
控制程序设计主要是小车路径的抉择,在接到单片机的处理命令后控制程序控制着小车所做的举动,包含了4个动作,其中head()函数功能是向前走,left()函数功能向左走,right()函数功能是向右走,stop()函数功能是停止前进。
在程序中定义了两个width变量来控制输出占空比大小,一个控制左轮,一个控制右边轮,所以只用改变width的值就能决定小车的方向,下图为输出端口与小车行走情况:
图输入端口电压与小车行走情况的关系
P0.0-P0.7口为8位数据口和输出低8位地址复用口。
选择其中的P0.2和P0.7口作为PWM波的输出口。
分别在两个口各接一个光电耦合器,用于隔离单片机控制电路和驱动电路,防止干扰的产生。
而P3.0、P3.1、P3.2、P3.3分别为RXD串行接受端、TXD串行发送端、INT0外部中断0请求端、INT1外部中断1请求端。
现在接着电磁感应路径识别模块的4个输出端,都用于接收采集到的信号,然后处理采集到的信号。
经过检波、滤波、放大后的线圈采集到的电压信号与3个电阻R11、R12、R13分压后的电压相比较,得到需要采集的信号,产生的是高低电平,输入单片机的P3.0-P3.3口,来控制单片机输出PWM波的占空比,来控制直流电机的转速,进而控制小车的转向。
voidleft()
{
WidthL=15;
WidthR=20;
}
voidright()
{
WidthR=15;
widthL=20;
}
voidstop()
{
WidthR=0;
WidthL=0;
}
voidhead()
{
WidthR=20;
Widthl=20;
}
4调试与检测
调试与检测是应用开发电子领域中必不缺少的实践环节,单片机的开发也是一样。
若在具体的工程实践中,因为方案错误并进行相应的开发设计,会浪费更多的时间和资金,应此,进行软件的模拟与仿真是非常有必要的。
对结果的数据分析关系到系统的参数是否正确,通过检测分析能够及时的更正发生的错误以避免造成不必要的麻烦。
4.1调试与仿真
单片机开发,除必要的硬件外,软件也是不能分开的。
通过编译软件将源代码编译变为机器码,早期单片机的汇编软件有A51等,随着技术的不断发展,由早期的汇编语言开发逐渐演变到现在的高级语言开发。
同时单片机的开发软件也在不断更新发展,其中KeilC51软件是目前最流行的用于开发MCS-51系列单片机的软件。
KeilC51提供了包括库管理、连接器、宏汇编、C编译器和一个功能强大的仿真调试系统等,它通过一个集成开发环境将这些组件结合在一起,全Windows界面,生成目标代码的效率非常高,是一种非常实用的软件。
Keil软件的优点:
容易上手,编程操作简单;支持许多内部函数,内部函数产生代码来完成库函数,执行速度很快,效率也很高。
另外一款用于硬件仿真的软件ProteusISIS是Labcenter公司推出的电路实物分析仿真系统,可仿真各类电路及IC,并全面支持单片机系统。
它的元件库种类齐全,使用方便,是一款人们普遍使用的的专业单片机软件仿真系统。
其主要的特点有两个:
一是能够对动态元件的实时仿真,同时使得系统更具真实性;二是集成了虚拟工具箱的功能,虚拟工具能够与仿真系统同时进行,使测量更加方便而准确。
本系统使用C语言编程,采用Keiluversion3编译器进行源程序编译,结合硬件电路的设计制作使用ProteusISIS硬件仿真软件进行系统的联调与仿真测试。
调试过程分模块进行调试与仿真,在确保各个模块无异常情况下进行系统联调,最后进行数据的分析对比,改进完善程序。
4.2检测与分析
本小节将介绍在调试过程中检测出的问题及分析解决方法。
初次调试程序难免会产生相应的错误,这就需要耐心的对程序的语法进行检查,如函数的定义规则、逗号的使用、花括号的对应,以及赋值符号与等号分别。
通过修改,编译全部通过,下一步就是对程序的功能测试。
在程序功能测试中的主要问题是起初所给的电压过于低,导致小车没法驱动;其次小车没法识别方向,经过排查,是因为单片机上的P0输出口与电机接口没能连接妥当。
结束语
通过这次毕业设计,使我认识到自身在该门课的理论知识的不足之处,表现在一些错误发生时,不能很好的按照科学的检查方法检查出错误,致使一些实验步骤进展缓慢。
但是,对于单片机接口电路以及C语言的程序的设计知识得到了巩固,温习了旧的知识,也增强了实验动手能力,同时,使我得到了一次用专业知识、专业技能分析和解决问题全面系统的锻炼。
使我在单片机的基本原理、单片机应用系统开发过程,以及在常用编程设计思路技巧(特别是C语言)的掌握方面都能向前迈了一大步。
让我感受感到现代科学技术的迅猛发展,作为一个新时代的大学生,更应该以求知若渴的姿态不