1、关于技术报告和研究论文使用授权的说明 本人完全了解第三届“飞思卡尔”杯全国大学生智能汽车邀请赛关保留、使用技术报告和研究论文的规定,即:参赛作品著作权归参赛者本人,比赛组委会和飞思卡尔半导体公司可以在相关主页上收录并公开参赛作品的设计方案、技术报告以及参赛模型车的视频、图像资料,并将相关内容编纂收录在组委会出版论文集中。 参赛队员签名: 带队教师签名: 日 期: 2008.8.18 目录 第一章 引言1第二章 智能车机械安装12.1 传感器的选择与布局12.2 舵机的安装12.3 测速传感器的安装12.4 后轮差速机构调整12.5 底盘高度调整1第三章 智能车硬件电路设计13.1 控制芯片MC
2、9S12DG128B电路设计13.1.1 晶振及锁相环13.1.2 复位电路13.1.3 I/O口分配13.2 电源管理单元13.3 路径识别单元13.4 车速检测模块13.5 舵机控制单元13.6 直流驱动电机控制单元1第四章 智能车软件设计14.1 路径的检测14.2 转角的控制14.3 车速的控制14.3.1 模糊控制设定速度14.3.2 PID控制调整速度1第五章 智能车技术参数说明19第六章 总结20参考文献20附录A 程序代码III第一章 引言智能小车系统由HCS12微控制器、电源管理单元、路径识别电路、车速检测模块、舵机控制单元和直流驱动电机控制单元组成。本系统以飞思卡尔公司的1
3、6位微处理器MC9S12DG128为控制核心,并采用CodeWarrior软件、串口调试助手及BDM作为调试工具。运用反射式红外传感器进行道路信息采集,并采用PWM技术来控制舵机的转向和电机转速。舵机控制主要采用PWM信号开环控制,而速度控制方面,由模糊控制来设定速度,PID控制来调整速度。通过将总线频率超频到32M来更快更准确地进行控制。各个部分经过MCU的协调处理,能够以较快的速度在指定的轨迹上行驶,在进弯道之前能够提前减速并改变角度,达到平滑过弯和减小路程的效果。本报告分为六个章节:第一章为引言介绍;第二章主要介绍了智能车机械设计与安装;第三章主要介绍了智能车硬件电路设计;第四章为智能车
4、软件设计;第五章为智能车技术参数说明;第六章为总结。1第二章 智能车机械安装2.1 传感器的选择与布局寻迹传感器用来检测道路的信息,相当于人的眼镜,其前瞻和检测精度决定了小车的过弯性能和速度。寻迹传感器的布局常见的有以下几种方案 方案一:一字形布局 反射式光电传感器在小车前方一字形简单排布。在一字形中传感器的间隔有均匀布局和非均匀布局两种方式,均匀布局不利于弯道信息的准确采集,通常采取的是非均匀布局。非均匀布局这种方案信息检测相对连贯,准确,使控制程序算法简单,小车运行连贯,稳定。 方案二:八字形布局 八字形布局从横向来看与一字形类似,但它增加了纵向的特性,从而具有了一定的前瞻性。将中间两传感
5、器进行前置的主要目的在于能够早一步了到车前方是否为直道,从而可以进行加速。值得一提的是,由于纵向的排列不一致,就比一字形增加了多传感器同时感应的可能性(一字形只可能是所有传感器同时感应,而八字形则可能出现几个传感器同时感应的现象)。方案三:活动式传感器布局 前面两种方案都是固定的布局方式,使传感器对赛道有一定的依赖。在这个方案中,传感器的位置是可以在一定范围内灵活排布的。这种方案的布局思路是传感器在安装板上的位置是可调的,先将传感器排布成为矩形点阵,根据不同的赛道情况而灵活地作出调整,就可以设计出不同的布局方式而适应不同的赛道。这样对不同赛道有更强的适应性。但这种方案可调性大,临时调节较难,其
6、次机械设计中体积较大,增加了小车的重量,不利于加减速。 在比较了以上几个方案后,我们选择了一字形排布方式。本系统采用双排非均匀排布红外传感器探测路面信号。下面一排用来检测起跑线,离地面较近,选择的灵敏度高的接收管。上面一排用于检测赛道信息,离地面较远,所以选择的抗干扰能力强的接收管。上排9组光电管呈一字型排列,考虑到弧度信息采集的连贯性,非均匀布局的理论依据是等角度分布原则,即先确定一合适的定点,从顶点依次等角度画射线,射线与传感器水平线相交的位置即为传感器的位置。这种方案信息检测相对连贯,准确,使控制程序算法简单,小车运行连贯,稳定。 为了获得尽2 第二章 智能车机械安装量大的前瞻,将光电管
7、架在约19cm的高度,以45的角度射向地面,这样前瞻可达28cm,可以让系统对赛道信息提前获取并更快更好地做出决策,从而更容易弯道提前减速,直道提前加速并走出更节省路程的路径。传感器单元安装图如图2.1所示。 图2.1 传感器单元安装图2.2 舵机的安装 舵机转向是系统中一个较大时间常数的惯性环节。 由于大赛采用的舵机的工作速度为0.16s/60度,对于对快速性要求极高的智能小车来说,是影响其速度的一个重要因素,特别是对于前瞻不够远的智能小车。我们可以通过加长舵机力臂的方法来弥补这一缺陷。加大力臂后减小了舵机的转向范围,所以要使前轮转动相同的角度,舵机力臂加长后所需时间更短,响应更快。但如果舵
8、机的力臂太长又会造成舵机的转向力矩太小,PWM信号与角度不能很好的一一对应,对于舵机的开环控制会带来很大的稳态误差。综合以上考虑,我们将转臂加长至3.0cm ,而且力臂的材料刚度较大,避免转向时发生形变,这样克服了原舵机力臂刚度不够导致的响应延时问题。其安装图片如图2.2:3第三届全国大学生智能汽车邀请赛技术报告 图2.2 舵机的安装图 2.3 测速传感器的安装 为了减轻智能车的重量,测速时尽量选用重量轻精度高的传感器,因此,本系统车速检测单元采用日本OMRON公司的E6A2-CW3C型旋转编码器作为车速检测元件,质量为35克。考虑到码盘重量会影响车体重心位置,我们将其通过一块轻质硬板固定在车
9、尾部,让重心更加靠近后轮,增加轮胎与地面的摩擦力。为了不影响加速性能,编码器的传动齿轮较小,基本上和电机的齿轮相同,齿轮之间夹角小于120度。这样安装齿轮咬合很好,即避免由于齿轮咬合太紧以致加重负载,同时也避免了因过松而出现的在转动中齿轮撞击的现象,减少电机的摩擦损耗和噪音。其安装图片如图2.3:4 第二章 智能车机械安装 图2.3 测速传感器的安装2.4 后轮差速机构调整 由于后轮采用滚珠式差速器,它在实现差速的过程中会影响后轮的动力传递,因此应适当的调整两片轴承的压力以满足后轮驱动和差速的要求。2.5 底盘高度调整 按照常规,车辆底盘高度越低,车辆重心越低,后轮抓地力越好,前轮转向越敏感。
10、因此在很多赛车比赛中,提高速度有效方法就是降低底盘高度。我们在前轮转向机构处,增加一块垫片,略微降低了赛车前部的底盘高度,使底盘呈现一种前低后高的倾斜状态。5第三章 智能车硬件电路设计 智能车的硬件设计采用模块化的设计方法,分为控制芯片MC9S12DG128B电路,电源的管理单元,路径识别单元,车速检测模块、舵机控制单元和直流驱动电机控制单元,各单元设计如下: (1)电源管理单元主要为稳压电路的设计及合理利用,通过稳压管将7.2伏电压稳到5伏给系统各部件供电。 (2)路径识别单元作为系统的重要组成部分,采用红外光电传感器作为路径识别元件。 (3)车速检测模块主要作为小车速度闭环控制的反馈环节,
11、该模块主要采用旋转编码器作为车速检测元件。其输出方式为电平输出方式 ,通过定时采样旋转编码器输出的高电平个数,得出当前小车的速度并反馈给控制回路。 (4)舵机控制单元通过加长舵机的力臂来提高舵机的响应速度。 (5)直流驱动电机控制单元采用组委会提供的MC33886电机驱动H-桥作为电机的驱动元件。 其系统硬件结构如图3.1所示。 图3.1 系统硬件结构图 3.1 控制芯片MC9S12DG128B电路设计3.1.1 晶振及锁相环 芯片外部使用16MHZ无源晶振,通过锁相环将总线时钟倍频到24MHZ。晶振电路如图3.2所示。6第三章 智能车硬件电路设计 图3.2 晶振电路图3.1.2 复位电路本系
12、统采用了MC3406复位芯片对CPU进行复位。复位电路如图3.3所示。 图3.3 复位电路图3.1.3 I/O口分配 本系统I/O1口具体分配如下:PTH0PTH5,PORTA0PORTA6,PORTE3共14位用于小车前面7第三届全国大学生智能汽车邀请赛技术报告路径识别的输入口;PACN10用于车速检测的输入口;PORTB0PORTB7用于显示小车的各种性能参数;PWM23用于伺服舵机的PWM控制信号输出; PWM01用于驱动电机的PWM控制信号输出。3.2 电源管理单元电源管理单元是本系统硬件设计中的一个重要组成单元。根据系统各部分正常工作的需要,本系统电压值分为5伏、6.5伏和7.2伏三
13、个档。根据智能车各部分正常工作的需要,本系统电源管理单元采用主委会提供的7.2V 2000mAh Ni-cd蓄电池进行电压调节。其主要用于以下三个方面: (1)采用稳压管芯片LM2576将电源电压稳压到5V后,给单片机系统电路、路径识别的光电传感器电路、车速检测的旋转编码器电路和驱动芯片MC33886电路供电。电路如图3.4所示。 图3.4 稳压电源电路图 (2)经过一个二极管降至6.5V左右后供给转向伺服电机。 (3)直接供给直流驱动电机。同时考虑到稳压芯片LM2576的额定输出电流较小,故采用两片LM2576分别对单片机电路、车速检测电路、驱动芯片电路和光电传感器电路供电,以保8 第三章
14、智能车硬件电路设计证系统正常运行,达到了显著的效果。3.3 路径识别单元探测路面黑线的基本原理:光线照射到路面并反射,由于黑线和白纸对光的反射系数不同,可以根据接收到的反射光强弱判断是黑线还是白纸。路面信息检测原理图如图3.5所示。 图3.5 路面信息检测原理图 检测电路主要由红外发射管和光敏三极管组成。此电路尺寸小、质量轻、灵敏度高,外围电路简单。由于采用了红外发射管,电路不易受到普通光源的干扰,能够准确的实时检测。为了让小车能高速行驶,小车必须具备一定的前瞻性。理论上,小车能感知的距离越远,那么就有更多的时间来处理前方的情况,也会跑的更好。但是受到硬件电路功率的制约和大赛对车身长度的限制,
15、我们就通过传感器对地面角度来增加感知距离。检测电路的工作原理:由于黑线和白纸对红外光的反射系数不同,使光敏三极管上产生不同的电压降,通过AD对这个电压的采集并转换成数字信号进行处理,根据AD值的情况来判断黑线的位置,从而实现对小车角度和速度的控制。9第三届全国大学生智能汽车邀请赛技术报告3.4 车速检测模块本系统车速检测单元采用日本OMRON公司的E6A2-CW3C型旋转编码器作为车速检测元件。其精度达到车轮每旋转一周,旋转编码器产生200个脉冲,不仅硬件电路简单,而且信号采集速度快、精度高,满足模糊控制精度要求。其硬件电路如图3.6所示。旋转编码器的工作电压为524伏,输出为一系列脉冲。图3
16、.6 车速检测硬件电路图因为E6A2-CW3C型旋转编码器的输出方式为电平输出,所以本系统将旋转编码器的输出接一个2K上拉电阻再与MC9S12DG128的I/O口PT0相连。PT0采用16位输入脉冲累加模式对旋转编码器的输出脉冲进行累加计数。车速检测单元安装如图2.3所示,在旋转编码器的中轴上安装一个直径为4cm,齿数76,传动比1:1的齿轮,并将该齿轮与同轴于后轮的传动齿轮咬合。如此则后轮旋转的同时将通过传动齿轮带动旋转编码器一同旋转。此时只需要测量一定时间(10ms)旋转编码器输出的脉冲数就能准确计算出车速。车速的计算公式如公式1所示: (公式1)式中。10 第三章 智能车硬件电路设计3.
17、5 舵机控制单元 本系统舵机控制单元采用组委会提供的Futaba公司S3010型舵机作为智能车方向控制部件。舵机控制采用电压反馈闭环控制时,由于采用电位器检测反馈电压作为反馈回路,其检测精度不高,达不到较好的控制效果,故舵机采用PWM信号开环控制。实验证明:舵机的开环转向力矩足够,可以满足给定PWM信号与角度的一一对应,控制电路简单且能满足控制要求。其硬件电路如图3.7所示。舵机的工作电压为6.5伏左右,输出为PWM信号,相应输出一定转角。图3.7 转向伺服电机控制电路舵机的控制信号线与MC9S12DG128的PWM3口相连,为提高舵机的精度,加大PWM信号控制范围,将2个8位PWM信号寄存器
18、合并作为一个16位的寄存器进行输出。本系统采用PWM2和PWM3合并当作PWM23给舵机作控制信号输入口,同时为保证整个小车的重心在小车的中心线上,将舵机安装在前轮靠后的部位,使得整个小车行驶时更加平稳可靠。3.6 直流驱动电机控制单元 系统直流驱动电机控制单元采用组委会提供的RS380-ST型直流电机,并采用MC33886电机驱动H-桥芯片作为电机的驱动元件。通过MC9S12DG128输出的PWM信号来控制直流驱动电机。MC33886内部具有过流保护电路,接口简单易用,能够提供比较大的驱动电流,但考虑到采用全桥时,由于均流问题可能引起2片MC33886不同时工作,所以我们采用半桥驱动。为了提
19、高PID控制的精度,将PWM0和PWM1两个8位寄存器合并成PWM01。其硬件电路如图3.8所示。MT_VCC为5伏,IN1和IN2分11第三届全国大学生智能汽车邀请赛技术报告别为MC33886的PWM信号输入端口。MC33886的输出端口OUT1和OUT2分别接驱动电机的两端。D1、D2为芯片的使能端。考虑到实际驱动电流可能很大,故采用2片MC33886并联方式驱动电机。 图3.8 电机驱动电路图 12第四章 智能车软件设计本系统控制软件采用大赛提供的CodeWarrior软件及BDM作为调试工具,此外,厂家提供的编程环境支持C语言和汇编语言的程序设计,以及C语言与汇编语言的混合编程,大大方
20、便了用户的程序设计,提高了系统开发效率。本系统程序代码使用C语言编写。本程序设计由以下几个模块组成:单片机初始化模块,实时路径检测模块,舵机控制模块,驱动电机控制模块,中断速度采集模块,速度模糊控制模块。(1)单片机的初始化模块包括:I/O模块、PWM模块、AD模块、计时器模块、定时中断模块初始化。(2)实时路径检测模块:前排光电传感器检测黑线,将返回信号输入单片机的输入端口,程序不间断地读入输入端口的信号,通过判断语句,得出合适的PWM信号控制舵机转向。(3)舵机控制模块,驱动电机控制模块:通过直接输出PWM信号控制。舵机的控制采用开环控制,驱动电机采用模糊算法闭环控制。系统软件流程图如图4
21、.1所示:13第三届全国大学生智能汽车邀请赛技术报告 开始开始PWM控制信号 PID控制计算偏差和变化率速度采样 NY设定速度 反模糊化 模糊推理输入量模糊化定时中断输出伺服电机PWM控制信号实时路径检测启动定时器定时器中断使能单片机初始化 图4.1 系统软件流程图控制系统中,对被控对象的检测是一个非常重要的关键环节。在反馈控制系统中,控制器总是通过比较检测量和给定量来计算控制量,因此,检测环节对14 第四章 智能车软件设计整个控制系统的质量起到至关重要的作用。为保证小车一直沿着黑色引导线快速行驶,系统主要的控制对象是小车的转向和车速。即应使小车在直道上以最快的速度行驶。在进入弯道的时刻尽快减
22、速,且角度的转向要适合弯道的曲率,确保小车平滑地转弯。从弯道进入直道时,小车的舵机要转向至中间,速度应该立即得到提升。为实现上述控制思想,我们要尽可能的提高路径检测的精度,并采用不同的控制方法来控制小车的转角和速度。4.1 路径的检测我们采用模拟量对黑线的位置定位。由于各环境下光电管的值不一样,为了解决这个问题,我们在比赛前先要对光电管进行标定,找到它对黑线的敏感程度,将这个过程的每个光电管的最大最小值存下来,用最大值减去最小值得到每个传感器在赛道上的输出范围,小车行使过程中,将每个传感器输出的信号减去最小值,再除以该传感器的输出范围即可得到其相对输出值, 然后找到其中最大的那个值。就说明该光
23、电管下面的黑线比例最大,然后找到它旁边的两个光电管。就可以根据这三个值可以算出黑线的准确位置,具体公式如下式所示:position=percentj*weightj+percentj+1*weightj+1+percentj-1*weightj-1 (公式2) percentj为所占黑线的百分比,weightj为当前光电管所在位置。4.2 转角的控制对于舵机的控制,我们采用开环控制,由于舵机的控制精度高,一个PWM占空比对应一个角度,因此开环控制的效果较好。我们采用的是PD控制,因为这样可以让舵机的控制速度更快,输入黑线位置和黑线位置的变化率,通过分段比例控制输出相应的PWM值。因为小车处于弯
24、道和直道的转向模型不同,统15第三届全国大学生智能汽车邀请赛技术报告一的比例带过大会导致小车振荡,过小导致最大控制量偏小,小车转向不足,过弯时冲出赛道。使用分段比例控制既方便又可以解决以上两种问题。 当小车处于直道时,最中间的光电管检测到信号,当处于不同曲率的弯道时,上排两侧不同的光电管将检测到信号。所以,根据上排光电管检测到的不同信号,可以判断出小车所处的位置。然后,根据小车的位置再相应的调整舵机。调整舵机的原则是:小车处于直道,则摆正舵机。小车处于弯道的曲率越大,则将舵机的转角摆的越大。除此之外,小车还会遇到黑色交叉线的特殊情况,对此,本系统将保持原有的小车方向与速度,使小车不受交叉线的干
25、扰。如果小车转过的弯过大,则可能使上排光电管全部偏离黑色轨迹,从而没有一个光电管检测到黑线,这时本系统将会把舵机转至最大角,让小车急转驶回黑线,同时,将速度降至最低,防止小车冲出轨迹。4.3 车速的控制对于车速的控制,我们采用闭环控制,控制量由MC33886给出,而速度反馈量由编码器测得。编码器输出的脉冲输入到PACN10,通过定时器申请中断,间隔一定时间读取PACN10的值,由于是一定时间内的脉冲数,所以可以看成是电机速度。给定量是根据当前传感器的检测到黑线的位置给出的,我们选择了模糊推理给定,该模糊控制器是一个两输入,一输出。输入黑线位置和黑线位置的变化率,通过模糊推理输出一个当前所需的速
26、度量。在通过一个增量式PID调节器使电机的实际速度尽可能快的接近给定速度。4.3.1 模糊控制设定速度因为小车比赛的赛道是未知的,弯道的分布情况也不能确定,小车可能频繁的进出弯道,不停的调整速度来适应不同轨迹。这样就难以建立精确的数学模型,且赛车对动态性能要求较高,考虑到该款单片机有一套特色指令模糊控制指令,执行时间只有几十us级(时钟频率为25M),不会影响决策周期,且简单易行,而模糊控制具有处理不明确信号的能力,故最终选定采用模糊控制设定速度: (1) 模糊输入输出量的选取16 第四章 智能车软件设计赛车模糊控制器采用二维模糊控制器,输入变量E、E分别选为黑线位置distance及其变化率
27、diff,输出变量U选为赛车的速度设定值Vi_Ref。 (2) 隶属函数的确定MC9S12DG128B的隶属函数的数值描述有固定的数据结构,即起点的坐标值、终点的坐标值、前沿斜率、后沿斜率;且输出的隶属函数须采用单值函数。故设计输出变量的模糊集为T(U)=NB,NS,Z,PS,PB,论域输出U为90,120,140,150,160;设计输入的隶属函数如下: (3) 模糊规则库的建立确定控制规则是模糊控制器设计的核心工作。控制规则的制定需要大量的实时调试经验。具体可如下实现:首先可以结合自身现有的经验制定出初步规17第三届全国大学生智能汽车邀请赛技术报告则表,然后结合串口调试工具实时返回数据,对
28、规则进行微调。注意,在进行微调时候切忌一次进行较大的改动,否则改后无法判断到底是那条规则在起作用。表4.1 模糊规则表 EE NB NSZPSPBNBNBNSPSPBPSZNSZPBZNSPBPSPBPSNSNB (4) 模糊推理及解模糊化 在模糊推理过程中,选用了REV 指令。MC9S12DG128B单片机中规定各个前件之间只进行模糊与运算,而如果几个规则的逻辑后件影响到同一个模糊输出,它们之间隐含模糊或运算。即使用MINMAX法进行模糊推理。反模糊化采用重心法(COG法)。WAV是解模糊的核心指令,它与EDIV指令配合完成模糊输出到控制输出的变换。4.3.2 PID控制调整速度 本系统采用
29、的是增量式数字PID控制,通过每一控制周期(10ms)读入脉冲数间接测得小车当前转速vi_FeedBack,将vi_FeedBack与模糊推理得到的小车期望速度vi_Ref比较,由以下公式求得速度偏差error1与速度偏差率d_error。 error1 = vi_Ref vi_FeedBack; (公式3) d_error = error1 vi_PreError; (公式4)公式4中, vi_PreError为上次的速度偏差。考虑到控制周期较长,假设按2.5m/s的平均速度计算,则一个控制周期小车大概可以跑过2.5cm,如果按这种周期用上述PID调节速度,则会导致加速减速均过长的后果,严重
30、的影响小车的快速性和稳定性。为了解决这个问题,可以在PID调速控制中加入BANG-BANG控制思想:根据error1的大小,如果正大,则正转给全额占空比;如果负大,则自由停车或给一个反转占空比;否则就采用PID计算的占空比。18第五章 智能车技术参数说明项目参数路径检测方法(赛题组)光电管车模几何尺寸(长、宽、高)(毫米)380/180/190车模轴距/轮距(毫米)160车模平均电流(匀速行驶)(毫安)1200电路电容总量(微法)1900传感器种类及个数光电管14个 编码器1个新增加伺服电机个数0赛道信息检测空间精度(毫米)10赛道信息检测频率(次/秒)500主要集成电路种类/数量MC3388
31、6 2片,LM2576 3片车模重量(带有电池)(千克)1.819第六章 总结本文基于飞思卡尔公司的16位微处理器MC9S12DG128为控制核心,设计了采用光电管来识别路径的智能车系统。实现了智能车能在白色的场地上,沿着任意给定的黑色引导线按照给定的速度行驶。具体工作如下: (1)硬件部分采用模块化设计,主要由电源的管理单元,路径识别单元,速度检测模块、舵机控制单元和直流驱动电机控制单元组成。 (2)软件部分的模块设计主要包括:单片机初始化模块,实时路径检测模块,舵机控制模块,驱动电机控制模块,中断速度采集模块,速度控制模块等。 (3)控制算法分为舵机控制和车速控制,舵机控制通过输出的PWM
32、信号进行开环控制,车速控制采用模糊控制进行速度的设定,采用PID控制调节速度。通过模糊控制器和PID控制的调节,小车动态性能良好,适应性强,整体控制效果良好。采用分段比例控制和BANG-BANG控制之后,能够更合理更平滑地过弯,加减速性能也获得了一定提高。由于时间的限制,仍有许多地方需要完善。如考虑对舵机转向加上反馈信号进行闭环控制,使得舵机的转向更为准确;采用MOS管驱动电机,获得更好的加速性能;让记忆算法更加的安全可靠,使长距离的跑道同样适用,这样可以达到小S弯直冲的效果,大大减小行驶时间;由于前瞻的限制,速度上和CMOS摄像头还有差距,所以如果能够选用性能更好的光电管,提高前瞻,将会大大
33、提高比赛成绩。20参考文献1邵贝贝.单片机嵌入式的在线开发方法的应用(第一版),清华大学出版社出版,2004年10月.2谭浩强.C语言程序与设计(第二版),清华大学出版社出版,1999年12月.3刘金琨.先进PID控制及其MATLAB仿真,电子工业出版社,2003年1月.4陶永华.新型PID控制及其应用(第二版),机械工业出版社出版,2003年7月.5贾东耀,曾智刚. 基于模糊控制的直流电机调速系统MATLAB 仿真J.电机电器技2002(5):2-5.6罗文广,孔峰. 基于模糊控制的直流无刷电机调整系统J.电子产品世界,2001(1):34-36. 7雷玉堂.王庆有.光电检测技术,中国计量出
34、版社,1997.7.8卓晴.黄开胜. 邵贝贝.学做智能车挑战“飞思卡尔”杯.北京航空航天大学出版社,2007(1). 21附录A 程序代码#include /* common defines and macros */#include /* derivative information */#include printp.h#pragma LINK_INFO DERIVATIVE mc9s12dg128b #define N 200#define ini_Angle 530#define VV_DEADLINE 1#define RoundNumber 1unsigned char AD_Da
35、ta15;unsigned char MaxAd15;unsigned char MinAd15;unsigned char percent15;unsigned char max,min;int printcount=0;int frequent=0;int dif_distance=0;int dif1;int distance;int pre_distance=0;uchar nowposition;uchar preposition;uchar flag=0;uchar blackflag=0;int error1num=100;int error1100=0;uchar speed5
36、5=100,130,150,160,170 ,90,120,140,150,160,80,100,120,130,145,80,130,145,155,180, 100,130,145,155,165; uchar speedlevel; int VV_MAX=1000,VV_MIN=0;int VV_KDVALUE =7 ;int VV_KPVALUE =15 ;int VV_KIVALUE =20;int isstart=0,startline=0,iscrossing=0;int distance1,pre_distance1;uchar max1,min1;int cout=0;voi
37、d initiaPLL(void) REFDV=1; SYNR=3; while(0=CRGFLG_LOCK); CLKSEL=0x80; void delay(int n) int i,j; for(i=0;in;i+) for(j=0;j0xffff;j+);int abs(int num) if(num0) return -num; else return num;void GetADValue(void);void initialSCI(void)SCI0CR2=0x0c;SCI0BDH=0x00;SCI0BDL=0x0d0; /24M/SCI0BDL=0x34; /8Mvoid in
38、tialPWM(void) PWME=0x00; /关PWM PWMPRCLK=0x00;/预分频选择总线时钟 PWMSCLB=40;/120分频 =0.2MHZ PWMCLK_PCLK3=1;/选择CLOCKSB时钟 PWMPOL=0xff;/开始输出高电平 PWMCAE_CAE3=0;/左对齐 PWMCTL_CON23=1;/级连 PWMPER23=4000;/频率=CLOCKSB/(PWMPERx+1) =100HZ PWMDTY23=ini_Angle;/占空比=(PWMDTYx+1)/(PWMPERx+1) PWME_PWME3=1; PWMSCLA=16;/24分频 =1MHZ /
39、 PWMSCLA=240;/480分频 =50KHZ PWMCLK_PCLK1=1;/选择CLOCKSA时钟 PWMPOL=0xff;/开始输出高电平 PWMCAE_CAE1=0;/左对齐 PWMCTL_CON01=1;/级连 PWMPER01=1000;/频率=CLOCKSA/(PWMPERx+1) =1kHZ PWMDTY01=0;/占空比=(PWMDTYx+1)/(PWMPERx+1) PWME_PWME1=1; void initialECT(void) TSCR2_PR = 7; /divide 128 TIOS = 0b00000110;/1,2,The corresponding
40、 channel acts as an output compare. TCTL2 = 0b00010100;/1,2,Output Mode TCTL4 = 0b00000010; /0,Capture on falling edges only 累加器B使用 TIE_C0I = 0; /interrupt disable TIE_C2I = 1;/interrupt able /TIE_C1I=1; TIE_C1I=0; TC2 =2500;/ 10ms中断一次 TFLG1_C2F = 1;/set bits cause corresponding bits to be cleared P
41、BCTL =0x40; /开16位累加器 PACN10=0; void initialATD(void) ATD0CTL2=0x40; /AD模块不上电, 快速清零, 无等待模式, 禁止外部触发, 中断禁止 ATD0CTL3=0x08; /转换序列长度为1,不映射到结果寄存器,Freeze模式下继续转换 /ATD0CTL4=0x81; /8位精度,2个A/D时钟周期采样时间,ATDClock=BusClock*0.5/PRS+1=2MHZ busclock=8M ATD0CTL4=0x87;/24M ATD0CTL5=0x80; /右对齐无符号,单通道采样,单次转换 ATD0DIEN=0x00; /禁止数字输入 ATD1CTL2=0x40; /AD模块不上电, 快速清零, 无等待模式, 禁止外部触发, 中断禁止 ATD1CTL3=0x08; /转换序列长度为1,不映射到结果寄存器,Freeze模式下继续转换 /ATD1CTL4=0x81; /8位精度,2个A/D时钟周期采样时间,ATDClock=BusClock*0.5/PRS+1=2MHZ