基于飞思卡尔单片机自动循迹小车控制的设计 - 图文
更新时间:2024-06-01 21:05:01 阅读量: 综合文库 文档下载
基于飞思卡尔单片机自动循迹小车控制的设计
摘 要
随着我国的电子科技的不断发展,我们生活中的自动化设备越来越多,也为嵌入式在智能化上的研究提供了一个广阔的平台。
本系统以MK60DN512VMD100微控制器为核心控制单元,选用OV7620 CMOS模拟摄像头检测赛道信息, 高速AD转换芯片选用 TCL5510,将提取后的灰度图像进行软件二值化,进而提取赛道信息;用光电编码器实时检测小车的实时速度,采用PID控制算法调节电机的速度以及舵机转向,从而实现速度和方向的闭环控制。
关键字:MK60DN512VMD100,OV7620 CMOS,软件二值化,PID
- I -
基于飞思卡尔单片机自动循迹小车控制的设计
Abstract
With
the continuous development of electronic technology, more and more
automation equipment into the production life of the people, the rapid development of embedded intelligent study provides a broader platform.
In this paper, the design of intelligent vehicle system MK60DN512VMD100 microcontroller as the core control unit, the selection of OV7620 CMOSanalog cameras to detect the track information, to using TCL5510 high-speed AD converter chip, software binarization image, extract the white guide line for identification of the track information; optical encoder to detect the real-time speed of the model car, using the PID control algorithm to adjust the speed of the drive motor and steering the angle of the steering gear, in order to achieve closed-loop control of velocity and direction of the model car.
Keywords: MK60DN512VMD100,OV7620 CMOS,software binarization, PID - II -
基于飞思卡尔单片机自动循迹小车控制的设计
目 录
摘 要 .............................................................................................................................. I Abstract .................................................................................................................................. II 1前言 .................................................................................................................................... 1 1.1 设计的背景以及意义 .................................................................................................... 1
1.2 智能小车国内外概况 ............................................................................................. 1
1.2.1国内研究的概况 ............................................................................................ 1 1.2.2 国外研究概况 ............................................................................................... 2 1.3智能小车的发展前景 .............................................................................................. 2 2 飞思卡尔单片机自动循迹小车系统设计总方案 ........................................................... 3
2.1 系统硬件部分 ......................................................................................................... 3 2.2 系统软件部分 ......................................................................................................... 4 3 智能车硬件系统 ............................................................................................................... 5
3.1 单片机最小系统 ..................................................................................................... 5
3.1.1 PIT定时器模块 ............................................................................................. 6 3.1.2 PWM 模块 ..................................................................................................... 6 3.1.3 I/O模块 .......................................................................................................... 7 3.1.4 时钟电路 ....................................................................................................... 7 3.1.5 复位电路 ....................................................................................................... 7 3.1.6 JTAG接口电路 .............................................................................................. 8 3.2 电机驱动模块 ......................................................................................................... 8 3.3路径识别摄像头检测模块 ...................................................................................... 9
3.3.1 摄像头的选择 ............................................................................................... 9 3.3.2 摄像头简介 ................................................................................................. 10 3.4 速度检测模块 ....................................................................................................... 10 3.5 舵机模块 ............................................................................................................... 10 3.6电源管理模块 ........................................................................................................ 10
3.6.1 3.3V电源 ..................................................................................................... 11 3.6.2 5V电源 ..................................................................................................... 11
4 软件系统的设计与实现 ................................................................................................. 12
4.1赛道信息的提取 .................................................................................................... 12 4.2 PID算法介绍 ......................................................................................................... 12
- III -
基于飞思卡尔单片机自动循迹小车控制的设计
4.2.1 位置式 PID ................................................................................................. 13 4.2.2 增量式 PID ................................................................................................. 14 4.2.3 PID 参数整定 .............................................................................................. 14 4.3转向舵机的控制方法 ............................................................................................ 15
4.3.1 舵机的工作原理 ......................................................................................... 15 4.3.2 舵机的 PID 控制 ....................................................................................... 15
5 开发平台介绍 ................................................................................................................. 19
5.1 IAR Embedded Workbench IDE简介 ................................................................... 19 5.2 IAR Embedded Workbench的功能及特点 ........................................................... 19 5.3 硬件开发平台Altium Designer ........................................................................... 22 6结 论 .............................................................................................................................. 23 参 考 文 献 ....................................................................................................................... 24 致 谢 ................................................................................................. 错误!未定义书签。 附录1电路原理图 ............................................................................................................. 26 附录2 PCB图 ..................................................................................................................... 27 附录3 元件清单 ................................................................................................................ 28 附录5 部分程序源代码 .................................................................................................... 29
- IV -
基于飞思卡尔单片机自动循迹小车控制的设计
1前言
1.1 设计的背景以及意义
在现代社会,汽车逐渐走进每个平民的家庭生活中,汽车行业发展迅速,同时交通事故也大大增多,每一分钟都有人死于车祸。近几年智能系统的发展迅速,智能车的研究成为了当下的研究热点。智能汽车研究涉及了很多领域,最直接的表现是要实现汽车的自动驾驶。要实现自动驾驶就离不开智能化系统的设计,同时要求智能车能感知周围的环境。一旦智能车投入使用,就会降低当前社会交通事故的发生率,同时能够大大提高现有交通道路的使用效率,并且能在一定程度上缓解能源危机的到来,降低广大人民的劳动强度,给人们一个更好的未来。
1.2 智能小车国内外概况
1.2.1国内研究的概况
我国在智能车的研究中投入了大量的资金和精力,为了能够培养出自己的研究骨干,在教育部的牵头下,我国组织了智能小车的高校比赛,以此来培养最基本的研究人才,这也符合我国的人才强国战略。这项比赛用的是飞思卡尔公司产的芯片,第一届比赛在清华大学举办,得到了各大高校的积极响应,取得了良好的效果。该项比赛,韩国有丰富的经验,他们已举办多届此类比赛。因为此项比赛涉及到了很多专业知识,尤其是必须要掌握自动控制、电子、计算机等多个领域的知识,所以能够提高大学生的知识水平。另外,比赛还可以提高学生的动手能力,弥补现在教育的弊端。
前两届比赛中组委会统一规定了赛车的模型,微型控制器选用当时最流行的16位微型控制器MC9S12DG128,该控制器为飞思卡尔公司生产,性能优良,功能可靠。现在比赛最常用的是32位的Kinetis系列,主要包括Kinetis E,EA,M,L等系列、32位的MPC56xx系列、32位的Kinetis(ARM? CortexTM-M4),主要包括Kinetis W,K等系列、16位的9S12系列、32位的DSC系列、ColdFire系列和8位的单片机系列(可使用两片)。
飞思卡尔赛车比赛规定各队在符合条件规定的情况下,赛车跑完全程时间最短者获胜,我国在2007年的比赛中首次打败了韩国队,终止了其七连冠的记录。我国已经成功的举办了10次该项比赛,参加比赛的学校大概已经有300所,它们来自全国各地,分布在30个省市、自治区。飞思卡尔比赛在我国已经办了多年,参赛队伍逐年增加,技术也相当成熟,学生们发挥自己的想象力,在原有技术上进行了大胆创新,取得了不错的效果。现在一些早期的学生已经投入到实际的智能汽车的研究之中。
`
1
基于飞思卡尔单片机自动循迹小车控制的设计
3.1.3 I/O模块
K60拥有100个I/O引脚,很多引脚具有复用功能。当引脚复位以后,它会自动配置成高阻的状态。因为它是通用的输入引脚,所以内部没有上拉电阻。为避免浮空输入脚出现漏电流,复位初始化尽量使用上拉或者下拉,另外可使不常用引脚的方向为输出,以使该引脚不再浮空。 3.1.4 时钟电路
时钟电路主要由RTC和主晶振组成,主晶振的作用是产生芯片和外设所需要的工作时钟。RTC的作用是当系统上电和关闭时对时间进行测量,另外RTC消耗的功率非常低。K60系统板上的晶振为50MHz,如图 3.2 所示。
图3.2 50MHz 有源晶振时钟电路
我们选用32.768KHz 的振荡器提供时钟,如下图3.3所示。实时时钟RTC有专用的电源引脚 VBAT,它可以连接到具有3.3V的电池或者其它可以供给3.3V的电源。当CPU掉电时,要用外部时钟源来上电。
图3.3 RTC 时钟电路
3.1.5 复位电路
K60 的复位电路如图3.4 所示,由图可知电路中的RESET连接到K60芯片上的复位引脚,复位引脚RESET连接的电阻为4.7kΩ,电阻的作用是提供3.3V的电压。低电平时芯片复位,高电平时则不会做出反应。按下复位键S1,RESET引脚接地,输出低电平,芯片复位。
`
7
基于飞思卡尔单片机自动循迹小车控制的设计
图3.4 复位电路
3.1.6 JTAG接口电路
K60系列芯片使用的是ARM Cortex-M4内核,本内核里面有一个JTAG接口,我们可以通过这个接口来下载程序或者调试程序。JTAG的接口电路如图3.5所示。JTAG 的对外引脚2接TMS,引脚4接TCK、引脚6接TDO、引脚8接TDI,这几个引脚和K60的PTA0~PTA3四个引脚相对应。
图3.5 K60的JTAG接口电路
3.2 电机驱动模块
电机驱动选用双电机驱动BTS79602S,它的优点是性能稳定、电机能够提供足够的动力。BTS79602S是一个高度集成的芯片,是半桥型的,可以通过大电流。它的内部有两个MOSFET,分别是N沟道和P沟道,N沟道的是低边的,P沟道的是高边的。其主要功能有电流诊断,逻辑电平输入以及斜率调节。另外它还具有过压保护的作用。
BTS79602S的芯片内部是一个半桥型装置。当IN=1并且INH=1时,可以使高边MOSFET导通,这个时候OUT引脚输出的是高电平;当IN=0并且INH=1时,可以使低边MOSFET导通,这个时候OUT引脚输出的是低电平。要控制MOS管的导通以及关断,我们可以通过改变连接在SR引脚的电阻来进行[5]。IS引脚的具有检测输出电流的作用。
BTS79602S赛车运行过程中是通过PWM波来控制的。当只需要单电机运行时,控制芯片的第二个引脚输入PWM波,电机一端接地,另一端接BTS79602S的输出引脚。如果是双电机运行时就要和另外一片BTS79602S芯片组成全桥控
`
8
基于飞思卡尔单片机自动循迹小车控制的设计
制。此外为了隔离驱动芯片并且达到保护单片机的目的,我们采用了74HC245DW芯片进行隔离保护。具体的电路如图3.6所示。
图3.6 BTS7960原理图
3.3路径识别摄像头检测模块
3.3.1 摄像头的选择
用摄像头来识别小车的路径,也可以用红外传感器进行辅佐,因此我们有两种方案可供选择。
方案一:只用摄像头对路径进行检测。摄像头将采集到的画面经过处理以后交给处理器,能够提前对小车前方的赛道进行分析,从而选择最佳的路径,及时调整小车的运行状态。这种方法在小车高速转弯时的优点更加的突出,因为提前预算了行进的路线,转弯时就计算好了控制的方法,弥补了舵机滞后的弱点。但是单独采用摄像头时,采集信息的频率低,而且容易受到光线以及场地的干扰。另外无法对起始位置进行采集。
方案二:用摄像头和红外传感器相结合的方法对路径进行检测。加入红外传感器后,路径的选择受光线和场地的干扰大大降低,弥补了摄像头检测频率不足的缺点,同时红外传感器的电路设计以及软件编写都比较简单。但是红外传感器检测黑线的精度不高,而且检测的距离有限,功耗较大。加重了车身的重量,影响到了小车的启动能力和行进速度。通过理论上的分析以及现场测试,单独使用摄像头完全满足要求,没有必要非得加上红外传感器。
最终我们采用方案一。 摄像头方案的选择:
1.选用CCD 摄像头。采用CCD 摄像头时,采集到的图像的质量比较高。其采集到的动态效果和CMOS 摄像头采集到的动态效果相比效果也很突出。但是比较两者的功耗,CCD摄像头要高的多,电流为100mA。
2.选用CMOS数字摄像头。CMOS 摄像头和CCD相比,其功耗较低,工作
`
9
基于飞思卡尔单片机自动循迹小车控制的设计
电流只有10mA 左右。而且CMOS摄像头采集出来的图像直接转化为数字信号,提高了单片机的处理速度。综上所述,我们决定选用CMOS数字摄像头。 3.3.2 摄像头简介
摄像头有彩色和黑白两类,我们寻找路径时,是提取的图像的灰度信息,彩色图像完全用不到,因此图片的信息输出为黑白的。我们选用的摄像头芯片为OV7620,内部有一个双通道的A/D转换器,A/D转换器是10位的,它的输出是8位的图像数据;能够自动调节白平衡,能够对饱和度、对比度、亮度以及γ校正进行调节[6],可以产生场同步信号[7]。接5V的电源,最大功耗为120mW,最小功耗为10μW。这款摄像头在电脑、手机等很多产品上都可以使用[8]。
3.4 速度检测模块
小车在运行中要保证又快又稳,这不仅要求舵机控制行进的方向,还需要将车速精确的控制在合理的范围之内,这样当小车在转弯时不至于因车速太快而冲出设定的跑道。根据所学的自动控制原理,闭环反馈系统比较稳定,将测得的车速反馈给系统,形成一个闭环系统,从而达到控制车速的目的。测量小车速度一般有以下几种方法:
方案一:霍尔传感器测速。本方法主要是通过安装的霍尔传感器接收脉冲信号来计算实时速度。具体做法是在后轮的轴上安装小型磁铁,小车行驶时,磁铁会产生脉冲。霍尔传感器安装在后轮的附近,行驶时它就会接收磁铁产生的脉冲。
方案二:投射式光电管测速。它的原理是通过采集单位时间内小车后轮上的齿槽数,来计算小车的实时速度,要用到红外光线。但是安装不方便,可靠性不高。
方案三:光电编码器测速。常用的是增量式光电编码器,将编码器的齿轮和小车后轴上的齿轮咬合在一起,小车行驶时带动编码器旋转,编码器就会产生脉冲信号,通过计算单位时间内的脉冲数计算小车行驶速度。
应用光电编码器测量速度不仅安装简单而且输出的信号波形规则,因此本设计方案采用光电编码器测速。在本系统中必须要保证编码器和后轮轴上的齿轮数成正。
3.5 舵机模块
舵机又称伺服电机。它的结构包括电位器、减数器以及电机。减数器的作用是把电机的速度减下来,同时改变电位器的位置,当电位器的电压变为零,电机停止转动,舵机转动的角度是通过电位器来改变的。舵机的信号是系统提供的PWM信号,通过改变占空比来改变舵机的转向。
3.6电源管理模块
电源模块是最基本的模块同时也是电路的最基本部分。本设计选用智能车竞
`
10
基于飞思卡尔单片机自动循迹小车控制的设计
赛专用多路电源模块,该产品为单路电池输入,多路常用电压输出,可以完全满足智能车各个模块的用电需求。电源性能稳定、结构紧促、尺寸小巧,模块化的设计对于安装方面来说十分灵活。
该车的电池参数为7.2V、2000mAh,可以多次充放电,稳定性好。它的电压不能直接供给各个模块使用,要转换为各模块需要的电压。转换好的电压要进行稳压,这样才能使整个系统稳定,不会因为电压突变影响效果。 3.6.1 3.3V电源
3.3V 主要用于单片机的供电。
在实际的应用中,电机和舵机在刚开始启动或者突然停止时,有时会造成电压突变,给硬件带来损伤,也会影响小车的正常行驶。要使电源稳定,就要安装稳压装置。本设计选用线性稳压装置,因为它的电源纹较小,符合要求。具体选用 AMS1117线性稳压芯片。具体电路如图3.7所示。
图3.7 3.3V电源
3.6.2 5V电源
本设计方案中的编码器和摄像头所需的电压相同,都为5V的电源。我们经常使用的稳压芯片有两种,分别是线性和开关稳压芯片。本设计对摄像头的电源要求比较高,输入的电源纹波必须很小才能符合条件。鉴于开关电源纹波比较大,而线性稳压电源纹波较小,故我们选择使用线性稳压芯片。实际使用中本设计选用 LM2940CT-5 线性稳压芯片。具体电路如图3.8所示。
图3.8 5V电源
`
11
基于飞思卡尔单片机自动循迹小车控制的设计
4 软件系统的设计与实现
4.1赛道信息的提取
CMOS摄像头采集的赛道信息输出时是黑白图像,图像信息通过8位高速AD转换器TL5510转化为灰度图像,灰度值范围为0~255,灰度图像通过软件构建的二维数组储存起来。一般情况下赛道的颜色和赛道的背景颜色差别很明显,背景颜色一般为蓝色,经过测试,赛道的颜色为白色时其灰度值在110左右,黑色时灰度值在55左右,而蓝色的背景灰度值在75左右。因此,提取赛道左右边沿有两种比较好的方法:一种称为边沿跳变检测法,另一种称为二值化法。 (1) 边沿跳变检测法的基本原理是取两个灰度值的差,然后判断差值是不是在给定的值域范围内。举例:白色赛道的灰度值减去黑线的灰度值之差为55左右(灰度值跳变较大),蓝色背景的灰度值减去黑线的灰度值之差为20左右(灰度值跳变较小),就可以把值域范围定在50~60,通过判断灰度值跳变的大小程度即可确定左右边沿的位置。
(2) 二值化法
二值化法有两种,一种是固定阈值法和另一种是动态阈值法。
固定阈值法:设定固定的阈值(灰度值),当采集到的灰度信息大于阈值时设定为1,小于设定的阈值时设定为0.这样灰度图像就转化为二值化图像了。
动态阈值法:取二维数组每行的最大和最小值,计算平均值,将平均值设定为这一行的阈值。
理论上动态阈值可随光线的明暗变化自动调整阈值大小,但是在实际操作中只有在直道和弯道上的成像效果好,而在十字路口的成像效果就差强人意了。经过比较,固定阈值二值化更好,它不受赛道光线变化的影响,而且计算简单,占用单片机的资源少,所以最终选择固定阈值二值化法。
4.2 PID算法介绍
在实际的工程中,应用最为广泛的是PID 控制,也可称为PID调节。它是通过控制器进行比例、积分和微分控制。它的算法是闭环控制算法,P为比例控制算法,I为积分控制算法,D为微分控制算法,闭环控制中最基本的算法是比例控制算法,实际运用中可以根据情况分别采用PI、PD和PID算法[13]。
PID控制器发明于上世纪40年代,人们即使不知道被控对象的参数和结构也可根据经验进行调整。本设计选用PID 控制,大大节约了设计的周期,省去了很多复杂的计算,同时也使小车的结构更加的简化,提高了小车的可靠性和稳定性。 原理框图如图 4.1 所示。
`
12
基于飞思卡尔单片机自动循迹小车控制的设计
4.1 PID 控制器原理
计算机控制系统中我们要用到数字PID控制器,它的控制规律公式为:
e(k)?r(k)?c(k) (4.1)
?Tu(k)?Kp?e(k)?TI??e(j)?j?0k?TD?e(k)?e(k?1)??T?
(4.2)
式中: k为采样的序号;k=0,1,2…;r(k)-第k次给定值; c(k)-第k次的实际输出值;u(k)-第k次输出的控制量; e(k)-第k次的偏差;e(k-1)-第k-1次的偏差; TI-积分时间常数;KP-比例系数; T-采样周期;TD-微分时间常数。 下面我们介绍的是各个校正环节的作用:
(1) 比例环节:当系统产生偏差时,比例环节会立即做出反应,通过控制比例加快相应速度,降低稳态误差。但是比例不能过大,因为过大时会使系统产生振荡,影响系统的稳定性。选择恰当的比例,对PID 控制非常重要。
(2) 积分环节:要提高系统控制的精度,就要加入积分环节,积分控制能够消除系统的偏差。积分作用强弱取决于积分常数的选定,积分常数越大,积分的作用就越弱,积分常数越小,积分作用越强。
(3) 微分环节:它的作用是通过计算偏差信号的变化率,不使偏差信号变的太大。在系统调节的早期加入偏差修正信号,使系统不会出现偏差信号变大的趋势,从而加快系统的动作速度进,达到减小调节时间的目的。 数字PID控制算法分为位置式和增量式两种。 4.2.1 位置式 PID
位置式 PID的控制方式中,执行控制机构是由计算机输出的u(k)直接控制,u(k)的值与执行机构的位置要相互对应,我们一般选用公式(4.2)作为位置式 PID 控制算法。
`
13
基于飞思卡尔单片机自动循迹小车控制的设计
位置式 PID 控制算法是全量输出,每次计算都需要用到以前的数据,需要对过去的e(k)进行累加,这样就加大了计算机的工作量[9]。执行机构与输出u(k)对应,如果计算的数据出现了问题就会导致执行机构位置发生较大变化,这种问题在实践中是不允许出现的,在一些特殊的场合,甚至会产生较为严重的事件。为了避免出现不必要的问题,将算法改进为增量式PID 控制算法。增量式PID 控制算法和位置式PID 控制算法的区别是它们的输出不同,增量式PID 控制算法的输出是△u(k)。 4.2.2 增量式 PID
控制量的增量可由式(4.2)推导出来,先由式(4.2)推导出式(4.3),再用式(4.2)减去式(4.3)便可得出式(4.4),公式如下:
??Tk?1TDu(k?1)?KP?e(k?1)??e(j)??e(k?1)?e(k?2)??TIj?0T????TTD?u(k)?KP??e(k)?e(k?1)??e(k)??e(k)?2e(k?1)?e(k?2)??TIT??
(4.3) (4.4 )
?kP?e(k)?KIe(k)?KD??e(k)??e(k?1)?TTITKD?KpDTKI?Kp式中?e(k)?e(k)?e(k?1)
增量式PID控制算法的形式如公式(4.4),在计算机控制系统中它的采样周期T是恒定的,通过确定KP 、TI 、TD和偏差(使用前后三次的测量值),便可通过(4.4)求出控制增量。
增量式 PID的优点:
(1)切换时的冲击力小(切换方式包括手动/自动切换),可以实现无忧扰动切换。因为输出通道和系统的执行装置可以把信号进行锁存,所以当计算机出现问题时,能够保持原有的值。
(2)因为计算机输出的是增量,当出现误动作时对系统的影响较小,可通过逻辑判断法关掉。
(3)算式中的量不需要累加处理。第k次的采样值决定控制增量△u(k)的大小,要获得比较好的效果时,可以通过加权处理得到。 4.2.3 PID 参数整定
PID 控制的关键技术是对KP、KI、KD 这几个参数进行调整[10],也就是所
`
14
基于飞思卡尔单片机自动循迹小车控制的设计
谓的参数整定。PID参数整定的方法有两类。一种称为理论计算整定法,它的原理是根据给定的系统数学模型,通过理论上的计算来确定控制器的参数。另一种称为工程整定方法,它的原理比较简单,主要是根据工程的经验,在实验中操作中进行调整,此类方法简单并且易于掌握,在实际工程中被广泛应用。智能车系统不仅是机电高耦合的分布式系统,而且受赛道具体环境的影响大,在实际操作时很难建立一个高精密的数学模型,同时小车的机械结构需要不时的修正,模型的参数也需要相应的改变,理论计算整定法不切合实际,故选用工程整定法。
4.3转向舵机的控制方法
4.3.1 舵机的工作原理
PWM信号通过接收通道,传入到解调电路,解调电路对其进行解调,从而获得直流偏置电压。将电位器的电压和直流偏置电压相比较,两者得出一个电压差,将这个电压差交给电机驱动集成电路,用它来控制电动机的正反转[11]。电动机的转速是一定的,电位器是靠级联减速齿轮进行调整,当电压差调整成0时,电动机便停止转动[12]。PWM信号是舵机的控制信号,舵机位置的改变是通过占空比的变化而变化。
舵机的直流电动机和控制线路由电源线和地线来提供电源。这里需要的电源是3.3V[14]。控制线的作用是提供一个方波脉冲信号,该脉冲信号的宽度可调且是周期性方波,方波信号的频率为50Hz。舵机转轴的角度随着方波脉冲宽度改变而改变,它们俩成正比例关系。 4.3.2 舵机的 PID 控制
对于舵机的控制,我们采用PID闭环控制,提取图像黑线然后求得平均值,平均值和舵机 PID的参考角度值形成一次线性关系[15]。当偏离中心线很小时,可以将Kp的值设置的小一些,几乎接近0,为了使赛车行驶时更加的稳定,在直道上时可以有一定的修正功能,所以没有直接设置成0。车子在直道上行驶时基本上是直线加速状态,车身左右抖动比较小。
`
15
基于飞思卡尔单片机自动循迹小车控制的设计
5 开发平台介绍
5.1 IAR Embedded Workbench IDE简介
IAR Systems 公司为ARM微处理器专门研发了IAR Embedded Workbench for ARM集成开发环境。和其它开发环境相比较,IAR Embedded Workbench for ARM入门更加容易、使用更加方便、代码也更加紧凑。
在嵌入式 IAR Embedded Workbench IDE的框架里,它能够允许任何可用的工具完美的嵌入其中,以下为嵌入的工具: 1.AVR IAR汇编器;
2.IAR XAR库创建器和IAR XLIB Librarian; 3.高度优化的IAR AVR C/C++编译器; 4.一个工程管理器; 5.一个强大的编辑器;
6.一个具有世界先进水平的高级语言调试器; 7.高度优化的IAR AVR C/C++编译器; 8.通用IAR XLINK Linker;
5.2 IAR Embedded Workbench的功能及特点
嵌入式IAR Embedded Workbench适用的微控制器和微处理器有8 位、16 位以及32 位,因此,用户即使是开发新的项目,开发环境也是以前熟悉的环境。它的开发环境用户学起来比较容易上手,具有最大量的代码继承能力,可以支持大多数甚至一些特殊的目标。嵌入式IAR Embedded Workbench不仅有效提高了用户的工作效率,而且通过使用IAR工具,大大节省了用户的工作时间。我们称这种理念为不同构架下的同一解决方案。
IAR Embedded Workbench 操作界面不仅非常简洁而且工具栏的布局也非常合理清晰,运用不同的功能也非常的方便。IAR Embedded Workbench开发环境可以很好的兼容Freescale公司生产的K60系列处理器。具体的操作界面如下图5.1 所示。
`
19
基于飞思卡尔单片机自动循迹小车控制的设计
图 5.1 IAR Embedded Workbench 运行界面
IAR Embedded Workbench for ARM version 4.30专门用于ARM处理器的集成开发环境,它包含有编辑器、项目管理器、RTOS的测试工具以及编译连接工具。我们在这种环境下运用C/C++和汇编语言来开发嵌入式应用程序。
以下为嵌入式应用的一些特点:
1.提供了一个轻量的运行库,使用户可以根据自己的需要自行进行配置,它还提供了所有的源代码;
2.对特定处理器的速度进行了优化,通用编译器的功能进行了优化,存储器的功能进行了优化;
3.对一些不需要的变量和函数进行了删减;
4.存储器控制灵活,可以很详细的为数据和代码分配地址; 5.校验和生成功能是可选的,它主要在运行时进行映像校验; 6.C/C++变M和函数连接时的全局类型需要检查;
7.可重定位宏汇编器功能强大,能支持的命令集和操作符丰富; 8.代码和数据可以自动的放置到不连续的存储区域; 9.代码覆盖率高,具有强大的执行时间分析工具。
在 IAR Embedded Workbench for ARM version 4.30 开发环境下,可以很方便将程序烧录大单片机系统中。烧录时要将烧录器连接到单片机的最小系统和上位机,然后选择芯片烧录,很快程序就能烧录到单片机最小系统中了。烧录过程中要注意
`
20
基于飞思卡尔单片机自动循迹小车控制的设计
必须保持烧录器连接的稳定,不能使其断开,另外一定要安装好相应的驱动程序。烧录界面如图 5.2 所示。
`
图5.2 IAR Embedded Workbench 程序烧写界面
图 5.2 烧录界面
嵌入式调试的一些特点: 1.执行控制非常的细化; 2.源代码集成度高; 3.有反汇编程序调试器; 4.代码和数据断点比较复杂; 5.数据监视功能很丰富; 6.支持STL容器;
7.Watch, Locals, Quick Watch, Auto, Live Watch和Watch 等变量查看窗口; 8.当双击位于调用链上的任何函数时,都会更新局部变量、编辑器、寄存器、反汇编窗口和变量查看; 9. 控制台I/O仿真;
10.具有跟踪功能,可以检查执行过的历史记录。在跟踪窗口里面,当移动鼠标时,编辑器和反汇编窗口会自动更新用来显示合适的位置; 11.中断和I/O模拟仿真;
12.主机执行的应用系统程序能够调用仿真;
13.具有和C语言类似的宏系统,扩大了调试器的功能。
21
基于飞思卡尔单片机自动循迹小车控制的设计
5.3 硬件开发平台Altium Designer
硬件的设计制作选用Altium公司开发的Altium Designer 09。Altium Designer是一个电子产品开发系统,是一个软件集成平台,能够把电子开发所需要的工具整合到一个软件中。Altium Designer包含的工具有:原理图设计、PCB绘制编辑、电路的仿真、设计输出、拓扑逻辑自动布线以及信号完整分析等。除此之外,Altium Designer的工作环境还可以人为定制,大大满足了用户的不等需求。
Altium Designer 09版本改善了以前版本留下来的很多工具问题。机械层设置上增加了更多的机械层,加强了原理图网络类的定义。这个版本更加的关注于提高测试点的管理与分配、嵌入式软件的精简、流畅的License管理以及软件设计过程中的智能化调试等功能。Altium Designer09 运行界面如图5.3 所示。
图 5.3 Altium Designer09 运行界面
目前此款软件的最新版本是Altium Designer 16。在此次更新中对Altium Designer 16的平台进行了扩展,包括多个增强PCB设计生产效率与设计自动化的全新特性,从而使工程师能够在更短的时间内零差错地实现更复杂的PCB设计。全新的备选元器件选择系统为设计者提供备选元器件选择,帮助设计者全面控制元器件的选择过程。可视化间距边界为设计者提供了电路板上不同对象间的可视化间距边界,帮助设计者实时了解其布线决策对整体设计的影响。全新的元器件布局系统为设计者提供全新的元器件布局选项,帮助设计者实现最条例高效的电路板布局。
`
22
基于飞思卡尔单片机自动循迹小车控制的设计
6结 论
本文分别从智能车的电路设计、程序控制以及调试过程来讲了这个基于CMOS 摄像头智能车的整体方案。在智能车的设计过程中,我不仅查阅了大量的资料并对其进行研究,而且对特定的设计和原理进行了实验,如对车前轮的机械调整在智能车的制作过程中。
这次的毕业设计遇到了很多困难,一开始做的时候不知道从哪里下手,于是乎就开始读资料,一点点分析原理,这样就有了一个大体的设计思路。但当实际去操作时,问题又出现了,很多东西在以前的学习中并没有遇见过。为了解决动手能力的不足,特别向学校里的实验室的同学请教,他们帮助解决了很多问题。当某个困难解决时,思路就马上变的清晰了很多。设计方案的书写也遇到很多困难,一些专业解释不能准确地表达,经过反复修改,才能达到要求。
这次设计,我将学到的知识和实践相结合,不仅提升了自己的知识水平,而且补足了原来动手能力不足的问题。将学到的知识进行了系统的整理,同时也提高了对专业知识的兴趣。
`
23
基于飞思卡尔单片机自动循迹小车控制的设计
参 考 文 献
[1] 于丰华,雷宇桥. 基于OV7620的智能车算法研究[J]. 电子技术应用,2013,17:69-76 [2] 王晓翔,孙涛. 基于Freescale Kinetis EA系列MCU的CAN Bootloader设计[J].电子产品世界,2012,07:79-83
[3] 赵一夔. 基于ARM Cortex-M3的嵌入式系统设计与实现[J].中电网,2010,01:11-13 [4] 李伟龙.智能循迹小车设计[J].甘肃科技,2013,15:15-17
[5] 林文建. 两轮自平衡机器人控制系统设计与实现[J].电子测量与仪器学报,2013,08:750-759 [6] 乔永征. 基于OV7620和FPGA的图像采集系统设计[J].计算机测量与控制,2009,17:1857-1859 [7] 周鑫. 第二代基于ARM Cortex-M4的飞思卡尔MCU的电源效率达到新水平[J].单片机与嵌入式系统应用,2014,02:76-77
[8] 孙延明,曹军,刘亚秋. PID控制在中密度纤维板施胶中的应用[J]. 木材加工机械,2007,01:26-29 [9] 曾伟钦,徐东升. .基于光电导航的自主循迹智能车系统设计[J]. 电子世界,2012,08:128-130 [10] 张晴,袁晓梅. 基于PWM信号遥控机器人的设计与制作[J]. 数字技术与应用,2010,11:80 [11] 邵秋萍.控制技术在机电类专业建设中的整合与实践[J]. 中国电力教育,2009,135:108-109 [12] 吴峰,张河新. 单片机控制脉宽调制在气动调压阀中的应用[J]. 阀门,2011,06:30-33 [13] 陈玉,王静平,奚琳. 智能PID控制器控制算法及其仿真研究[J].工程与试验,2011,03:66-69 [14] 吴华波,钱春来.基于AT89C2051的多路舵机控制器设计[J].单片机与嵌入式系统应用,2013,08,55:58
[15] 马春城,郭循钊. 智能寻迹模型车的控制策略及算法研究[J]. 电子设计工程,2014,04:104-107 [16] DN Mpcec. Freescale Semiconductor Technical Data. [J].Eetimes Com,2013,04:23-28
[17] B Remenant. Sequencing of K60, type strain of the major plant pathogen Ralstonia solanacearum[J].Journal of Bacteriology,2012, 194(10):2742-3
`
24
`
基于飞思卡尔单片机自动循迹小车控制的设计
25
基于飞思卡尔单片机自动循迹小车控制的设计
附录1电路原理图
`
26
基于飞思卡尔单片机自动循迹小车控制的设计 附录2 PCB图 2424681012141618246810121416987654321321311357911131517135791113152121211223218217221411646332311615111222212126261302914132260592827121132134341121517265658572625109187856552423875453222165321655251201943211221343504918172122222148471615411111146451413141332144431211212111231876532424110910944039872187121221563837656521274321836354343221134332121123132112221243213221212113234112111122121212 ` 27
`
基于飞思卡尔单片机自动循迹小车控制的设计
附录3 元件清单
Comment Designator Footprint Quantity 100nF C1, C2, C3, C6, C7, C12 C0805 6 100nF C4, C5 C0805 2 Cap Pol1 C8, C9 CAPPR2-5x6.8 2 Cap C10, C11 CAPR2.54-5.1x3.2 2 100uF CD1, CD2, CD3, CD4 C2.5x6.3 4 W/P-LCC-2 D1, D2 P-LCC-2 2 保险丝座 F1 保险丝座 1 小拨动开关 K1, K2 小拨动开关 2 拨动开关 K3 拨动开关 1 bomakaiguan M1 BOMAKAIGUAN 1 Header 2 P1, P5 HDR1X2 2 Header 8X2 P2 HDR2X8 1 Header 9X2 P3, P6 HDR2X9 2 Header 3 P4, P19, P20 HDR1X3 3 Header 9 P7 HDR1X9 1 Header 3X2 P8 HDR2X3 1 Header 7X2 P9 HDR2X7 1 Header 4X2 P10, P14, P17 HDR2X4 3 Header 4 P11, P12, P13, P16 HDR1X4 4 7.2V电源插座 P15, P18 7.2V电源插座 2 R1, R2, R5, R6, R7, R8, 10kR/1% R9, R10, R11, R12, R13, R0805 12 R14 1kR/1% R3, R4 R0805 2 4.7kR/1% R15, R16 R0805 2 Button_2Pin S1, S2, S3, S4 Button_2Pin 4 LM2940 U1, U4 LM2940 2 LM1117-3.3 U2 SOT223 1 change1 K60 U3 PCBComponent_1 - duplicate 1 28
基于飞思卡尔单片机自动循迹小车控制的设计
附录5 部分程序源代码
/***********************舵机PD调节***********************/
FTM_PWM_Duty(FTM1,servo,(uint32)SteeringPIDCalc(&STEERING)); gpio_turn(test);
sprintf(c,\NG.setpulse); LCD_clear(); LCD_set_XY(1,1); LCD_write_str(c); LCD_set_XY(1,2);
sprintf(c,\ LCD_write_str(c); LCD_set_XY(1,3); sprintf(c,\ LCD_write_str(c); EnableInterrupts; } } }
/*******测速中断计算PID***************/ void pit0_handler() {
PIT_Flag_Clear(PIT0);
Left_Motor.backpulse=(short)(back*DMA_count_get(DMA_CH0)); Right_Motor.backpulse=(short)(back*DMA_count_get(DMA_CH1)); left_count=MotorPIDCalc(&Left_Motor); right_count=MotorPIDCalc(&Right_Motor); if(left_count>=0) {
FTM_PWM_Duty(FTM0,FTM_CH1,0); FTM_PWM_Duty(FTM0,FTM_CH2,left_count); } else {
`
29
基于飞思卡尔单片机自动循迹小车控制的设计
FTM_PWM_Duty(FTM0,FTM_CH1,-left_count); FTM_PWM_Duty(FTM0,FTM_CH2,0); }
if(right_count>=0) {
FTM_PWM_Duty(FTM0,FTM_CH3,right_count); FTM_PWM_Duty(FTM0,FTM_CH4,0); } else {
FTM_PWM_Duty(FTM0,FTM_CH3,0);
FTM_PWM_Duty(FTM0,FTM_CH4,-right_count); }
gpio_turn(test1); push(0,2);
push(0,Left_Motor.setpulse); push(1,Left_Motor.OUT); push(2,Right_Motor.setpulse); push(3,Right_Motor.OUT); push(4,Left_Motor.backpulse); push(5,Right_Motor.backpulse); SendData2Scope();
/******寻找最白部分*************/ uint16 FindMostWhite(Image image,uint8 lens) {
uint16 MostWhite,white,i,MostWhitePoint; MostWhite=image[lens][C]*9; MostWhitePoint=C; for(i=10;i white=image[lens][i] white+=image[lens][i-4]; white+=image[lens][i-3]; white+=image[lens][i-2]; white+=image[lens][i-1]; ` 30 基于飞思卡尔单片机自动循迹小车控制的设计 white+=image[lens][i+4]; white+=image[lens][i+3]; white+=image[lens][i+2]; white+=image[lens][i+1]; if(white>MostWhite) { MostWhitePoint=i; MostWhite=white; } } return MostWhitePoint; } /***************寻找最黑的部分******************/ uint16 FindMostBlack(Image image,uint8 lens) { uint16 MostBlack,black,i,MostBlackPoint; MostBlack=image[lens][C]*9; MostBlackPoint=C; for(i=10;i black=image[lens][i]; black+=image[lens][i-4]; black+=image[lens][i-3]; black+=image[lens][i-2]; black+=image[lens][i-1]; black+=image[lens][i+4]; black+=image[lens][i+3]; black+=image[lens][i+2]; black+=image[lens][i+1]; if(black MostBlackPoint=i; MostBlack=black; } } ` 31 基于飞思卡尔单片机自动循迹小车控制的设计 return MostBlackPoint; } /***************寻找最白的部分***********************/ uint16 SeekCenterSingle3(Image image,uint8 lens) { uint16 i, white,BestWhite=0, BestWhitePoint; BestWhite = image[lens][65]; for(i=30; i white=image[lens][i]; white+=image[lens][i-9]; white+=image[lens][i-7]; white+=image[lens][i-5]; white+=image[lens][i-3]; white+=image[lens][i+9]; white+=image[lens][i+7]; white+=image[lens][i+5]; white+=image[lens][i+3]; if(BestWhite BestWhite=white; BestWhitePoint=i; } } return(BestWhitePoint); } uint16 SeekCenterSingle2(Image image,uint8 lens) { uint16 i, white,BestWhite=0, BestWhitePoint; BestWhite = image[lens][65]; for(i=30; i white = image[lens][i-28]; white += image[lens][i-21]; white += image[lens][i-14]; ` 32 基于飞思卡尔单片机自动循迹小车控制的设计 white += image[lens][i-7]; white += image[lens][i]; white += image[lens][i+7]; white += image[lens][i+14]; white += image[lens][i+21]; white += image[lens][i+28]; if(BestWhite BestWhite = white; BestWhitePoint = i; } } return(BestWhitePoint); } /********************************计算车的偏差**********************/ void CenterFarRow() { short FarRow; FarRow=Row-ValidRow; NearRow=FarRow; if(SquareFlag==0) { while(FarRow>1) //切弯 { if(JudgeValid(NearRow)) { STEERING.setpulse=(short)(Gen*atanf((float)S1/(float)Row2CarDISTANCE[NearRow]));//舵机的偏差 if(abs(STEERING.setpulse)>20) { Left_Motor.setpulse=(short)(280+ValidRow+(short)((float)(STEERING.setpulse)*SpeedC)); //差速控制 Right_Motor.setpulse=(short)(280+ValidRow-(short)((float)(STEERING.setpulse)*SpeedC)); ` 33 基于飞思卡尔单片机自动循迹小车控制的设计 } else { Left_Motor.setpulse=280+2*ValidRow; Right_Motor.setpulse=280+2*ValidRow; } return; } NearRow++; if(NearRow>58) { break; } } Calculate(); if(abs(STEERING.setpulse)>20) { Left_Motor.setpulse=420+3*ValidRow-5*abs(STEERING.setpulse)+(short)((float)(STEERING.setpulse)*SpeedC); Right_Motor.setpulse=420+3*ValidRow-5*abs(STEERING.setpulse)-(short)((float)(STEERING.setpulse)*SpeedC); } else { Left_Motor.setpulse=480+3*ValidRow-5*abs(STEERING.setpulse); Right_Motor.setpulse=480+3*ValidRow-5*abs(STEERING.setpulse); } } else { SquareSeek(); } } ` 34
正在阅读:
基于飞思卡尔单片机自动循迹小车控制的设计 - 图文06-01
1篇2章习题解答浙大版集成电路课后答案12-04
大学生毕业就业管理系统设计与分析05-17
分户验收实测实量08-13
第11章 MATLAB图形用户界面设计07-18
内江中考数学加试卷题集06-01
九年级上册数学 圆 几何综合单元试卷(word版含答案)04-16
广东省思想(品德)政治科小课题研究04-22
2016上半年小学教育知识与能力03-08
- 多层物业服务方案
- (审判实务)习惯法与少数民族地区民间纠纷解决问题(孙 潋)
- 人教版新课标六年级下册语文全册教案
- 词语打卡
- photoshop实习报告
- 钢结构设计原理综合测试2
- 2014年期末练习题
- 高中数学中的逆向思维解题方法探讨
- 名师原创 全国通用2014-2015学年高二寒假作业 政治(一)Word版
- 北航《建筑结构检测鉴定与加固》在线作业三
- XX县卫生监督所工程建设项目可行性研究报告
- 小学四年级观察作文经典评语
- 浅谈110KV变电站电气一次设计-程泉焱(1)
- 安全员考试题库
- 国家电网公司变电运维管理规定(试行)
- 义务教育课程标准稿征求意见提纲
- 教学秘书面试技巧
- 钢结构工程施工组织设计
- 水利工程概论论文
- 09届九年级数学第四次模拟试卷
- 卡尔
- 于飞
- 单片机
- 小车
- 图文
- 控制
- 自动
- 设计
- 《道德经的智慧与应用》13观水悟道的启示
- 机械设计练习题 (2)
- 公文写作基础知识讲义(整理版)
- 仿写句子集锦
- 哈尔滨工业大学C语言2016年MOOC在线测试答案
- 计算机的发展历史与未来展望
- 《电力系统分析》考试题A卷【有答案】
- 试题库
- 国华电力高压变频调速应用范围 - 图文
- 2015年国家公务员考试《申论》真题(副省级)
- 八年级本期要目的解释
- 记账系统毕业设计
- 高中物理-8电磁学 2恒定电流 4压轴题(金华常青藤家教题库) -
- 百所名校组合卷系列专题8(学生版) 新课标
- 液压与气压传动习题
- 2017-2022年汤原县体育特色小镇市场前景调查及投资咨询报告(目录
- 北方冬季汽车保养美容 - 图文
- 2016新人教版语文七年级下册生字词(练习+答案)
- 公务员法复习资料
- 财务管理习题及答案