北京科技大学二队技术报告

上传人:仙*** 文档编号:65267310 上传时间:2022-03-23 格式:DOC 页数:42 大小:1.18MB
收藏 版权申诉 举报 下载
北京科技大学二队技术报告_第1页
第1页 / 共42页
北京科技大学二队技术报告_第2页
第2页 / 共42页
北京科技大学二队技术报告_第3页
第3页 / 共42页
资源描述:

《北京科技大学二队技术报告》由会员分享,可在线阅读,更多相关《北京科技大学二队技术报告(42页珍藏版)》请在装配图网上搜索。

1、I / 42 文档可自由编辑打印 第一届“飞思卡尔”杯全国大学生智能汽车邀请赛技技 术术 报报 告告 学 校:北京科技大学队伍名称:北京科技大学二队参赛队员:林进鹏 陈曦 尚晓明带队教师:牟世堂 文档可自由编辑打印关于技术报告和研究论文使用授权的说明 本人完全了解第一届“飞思卡尔”杯全国大学生智能汽车邀请赛关保留、使用技术报告和研究论文的规定,即:参赛作品著作权归参赛者本人,比赛组委会和飞思卡尔半导体公司可以在相关主页上收录并公开参赛作品的设计方案、技术报告以及参赛模型车的视频、图像资料,并将相关内容编纂收录在组委会出版论文集中。参赛队员签名: 带队教师签名: 文档可自由编辑打印引言首届飞思卡

2、尔杯全国大学生智能汽车竞赛在清华大学的承办下终于落户中国,本届大赛采用邀请赛的方式,邀请了国内具有控制科学与工程学科博士授予点高校(含港澳)50 余所,我们北京科技大学作为参赛方,有幸参加了此次“飞思卡尔智能汽车邀请赛” 。这份技术报告中,我们小组通过对整体方案、电路、算法、调试、车辆参数的介绍,详尽地阐述了我们的思想和创意,具体表现在电路的创新设计,以及算法方面的独特想法,而对单片机具体参数的调试也让我们付出了艰辛的劳动。这份报告凝聚着我们的心血和智慧,是我们共同努力后的成果。在准备比赛的过程中,我们小组成员涉猎控制、模式识别、传感技术、汽车电子、电气、计算机、机械等多个学科,这次磨练对我们

3、的知识融合和实践动手能力的培养有极大的推动作用,在此首先要感谢清华大学,感谢他们将这项很有意义的科技竞赛引入中国;更要感谢北京科技大学相关学院对此次比赛的关注及投入,我们能有今天这样的成果离不开学院的大力支持及指导老师悉心的教导;还要感谢的是和我们一起协作的队员们,协助,互促,共勉使我们能够走到今天。文档可自由编辑打印目录引言 .1目录 .2第一章、智能车方案设计思路及实现方案简介.41.1 方案设计思路 .41.2 实现方案简介 .5第二章、机械结构设计.72.1 传感器的设计安装 .82.2 制动舵机传动机构设计.82.4 系统电路板的固定及连接.9第三章、电路设计说明 .103.1 主控

4、板的设计 .103.1.1 电源管理模块.103.1.2 电机驱动模块.113.1.3 控制模块.113.1.4 接口模块.123.2 传感器模块 .133.2.1 带有选频抗干扰能力的光电对管传感器.133.2.2 采用 A/D 转换的光电对管传感器.14第四章、HCS12 控制软件主要理论、算法说明及代码设计说明.154.1 主程序 .164.2 各种初始化程序 .17- 3 - / 42 文档可自由编辑打印4.3 PID 调节程序.174.4 寻线算法程序 .204.5 程序调试与车况参数检测方法(使用 EEPROM).22第五章、开发工具、制作、安装、调试过程说明.235.1 开发工具

5、 .235.2 调试过程 .23第六章、模型车的主要技术参数说明.246.1 智能车外形参数 .246.2 电路部分参数 .246.3 传感器的种类和个数.246.4 除了车模原有的驱动电机、舵机之外伺服电机数量.24结论 .25参考文献.26附录 .27文档可自由编辑打印第一章、智能车方案设计思路及实现方案简介1.1 方案设计思路图 1.1、系统的总体控制框图电机与后轮光电编码器驱动电路伺服电机前轮键盘传感器S12- 5 - / 42 文档可自由编辑打印本智能车控制系统采用由主办方提供的飞思卡尔 16 位微控制器MC9S12DG128 作为唯一的核心控制单元,信号由安装在车前部的不同类型的光

6、电传感器采集,将采集到的模拟信号或电平信号传入核心控制单元,核心控制单元对信号进行 AD 转换或电平判别处理后,由 PWM 发生模块发出四路PWM 波,分别对转向舵机,直流电机,制动舵机进行控制,完成智能车的转向,前进,制动的功能。在智能车后轮上安有光电编码器,采集关于车轮转速的脉冲信号,经由核心控制单元进行增量式 PID 控制方法计算后自动调节输入到电机驱动模块的 PWM 波的占空比,从而控制小车速度。人机接口采用HD7279A 数码管和键盘驱动显示芯片驱动 8 位数码管和 44 键盘,从而可与核心控制单元进行通信,实现人机交互。1.2 实现方案简介传感器排布方面:智能小车在行驶过程中,使用

7、车头前端安装的十一个光电传感器采集路面信息,反馈给核心控制单元,由核心控制单元进行处理。根据小车实际行驶中对黑线反应的情况,我们经过仔细的研究讨论,决定采用十一个传感器圆弧的排布方案。其优势所在如下:a11 个传感器可以准确的判断出黑线在车前的位置;b圆弧型排布的小车在走弯道时在对黑线的方向判断方面有显著的优势;c美观大方。传感器信号的采集时,外侧我们采用了 8 路 AD 转换,将返回的电压值在核心控制器里进行二值化处理,判别传感器状态;中间 3 个传感器经过处理返回 3 路高低电平值,核心控制器可直接处理。我们在跑道上调试小车时发现采用十一个传感器圆弧的排布方案可以极大的提高寻线精度,直线时

8、平稳高速,转弯时平缓流畅,可以保证小车不冲出跑道。速度控制方面:我们采用光电编码器对驱动轮后轮的转速进行实时的检测,将反馈值提供给核心控制单元。核心控制单元根据光电编码器单位时间反馈的脉冲数,采用增量式 PID 调节控制方法,对直流电机的转速进行准确快速的调节,减小了由于电池或场地等原因造成的速度无规则变化。- 6 - / 42 文档可自由编辑打印转向控制方面:我们采用了一系列的控制算法,通过传感器反馈的路面信息,经过核心控制单元调用一系列算法进行计算,将计算结果赋给控制舵机的PWMDTYx,从而准确的控制舵机的转角。人机交互方面:我们采用了 HD7279A 键盘数码管驱动显示接口芯片,通过串

9、行通信的方式于核心控制单元进行通信,可以通过键盘输入一些必要的参数,也可以实现小车行驶过程中的一些参数的显示。文档可自由编辑打印第二章、机械结构设计在本次智能车邀请赛中,最主要的比赛内容是速度,而车辆的机械结构无疑是影响速度的一个关键因素,鉴于这个原因,我们小组在车辆机械方面的改进也作了很多的工作,并形成了下图所示的最后外形。图 2.1 外观俯视图- 8 - / 42 文档可自由编辑打印我们在改造、调试机械部分的过程中,遵循着四个原则:车身更轻、摩擦更小、转向更灵、变速更快。为实现这四个目标,我们设计了如下的机构。2.1 传感器的设计安装为了实现减轻车身重量的目标,我们的传感器采用工作部分和控

10、制部分集中安装的方法,保证传感器部分重量最小,以起到减轻车身的作用。同时,考虑到车辆行驶过程的稳定,我们采用 11 个传感器圆弧形的排布方法。中间的传感器向前伸出,保证有足够的前瞻性,两边的传感器以固定角度呈圆弧状排列,可以给单片机反馈回准确角度,提高舵机转向的灵活性和准确性。如何安装传感器也是机械机构要考虑的一个问题,因为如果传感器离车太近,则前瞻性会受到很大影响;而传感器若离车太远,机构不稳定,行走过程中产生振动,会影响传感器的工作状态,无法保证稳定、准确的信号反馈。综合考虑以上因素,我们通过实验确定了安装距离和方法。2.2 制动舵机传动机构设计为了缩短跑完全程的时间,我们需要尽可能快的速

11、度,但是如果速度失控,当车辆从直道进入曲率较大的弯道时,就有冲出赛道的危险,除了在程序上我们做了限制以外,机构上采用了加装制动伺服电机的方式保证车辆行驶的安全。图 2.2 制动舵机示意图- 9 - / 42 文档可自由编辑打印2.2.3 光电编码器的安装在本次智能车邀请赛的规则中,赛道长度、形状有严格的限制,而为了更快的跑完全程,我们希望能尽量提高车速,这样在弯道前及时减速就成了我们必须考虑的问题。通过安装光电编码器,我们能够知道车在每个时刻的速度,根据它的反馈,程序就可以迅速调整车速。2.4 系统电路板的固定及连接在电路板的安装这部分,我们考虑到结构的稳定性,以及规则中对车辆尺寸的限制,最终

12、决定采用高架、立体的搭接方法,用支架把主控板较高地固定在底盘上方,并在后桥制动舵机的上面安放了一个输入参数用的小键盘,这种布局可以保证车辆行驶稳定,同时,也可以比较方便的输入参数。文档可自由编辑打印第三章、电路设计说明本智能车系统的电路总体上分为逻辑控制电路和电机驱动电路两大部分。逻辑控制电路主要由核心控制器 S12 单片机和周围的寻线传感器,测速传感器组成。其对电压的稳定性有很高的要求;电机驱动电路要求的电流相对比较大,因此,二者在电路设计方面有很大的差别。硬件设计应在可靠的基础上尽量简单化,使其满足稳定工作的基本要求,电源管理模块要保证使整个系统供电充足并稳定;传感器部分保证信息采集准确有

13、效;电机驱动部分则需在保证正常工作的情况下尽量减少对控制部分的干扰。同时还要保证在控制软件做改动时,硬件部分不需要作很大的改动就可以满足要求,即我们硬件的通用性。3.1 主控板的设计3.1.1 电源管理模块图 3.1 电源管理模块原理图电源由 7.2V 电池提供,分别经过以下途经对其它模块进行供电:A、经过稳压芯片 LM2940_5.0 稳压后,输出 5V 电压以驱动单片机工作;B、经过稳压芯片 LM2940_5.0 稳压后,输出 5V 电压以对传感器供电;C、经过稳压芯片 LM2940_5.0 稳压后,输出 5V 电压对光码盘供电;- 11 - / 42 文档可自由编辑打印D、经过稳压芯片

14、LM2940_5.0 稳压后,输出 5V 电压对键盘显示接口电路供电;E、接入 MOSFET 驱动模块,以对电机进行驱动;F、接入转向舵机与制动舵机,驱动舵机进行转向及制动工作。3.1.2 电机驱动模块图 3.2 直流电机驱动模块原理图直流电机驱动采用大功率的 MOSFET 和继电器的组成驱动电路,单片机通过如图 3.2 中 PWM 引脚输入 PWM 波,以调节 M1 和 M2 口的输出电压之差,从而调节电机转速,并且在 DIR_CONTROL 口输入高低电平,通过使继电器换向,给电机反向电压,实现制动功能。在实际运用中发现使用反向电压制动,效果良好,但是对继电器的损耗比较大。3.1.3 控制

15、模块核心控制模块仅由 MC9S12DG128B 构成,将 PORTA 口与 PORTB 口作为普通信号的输入和输出,在实际中我们将 PORTB 口作为输入高低电平信号的光电传感器的信号输入口,而将 AD 口作为输入模拟信号的对管光电传感器的信号输入口。将 PM 口作为键盘显示电路的接口。引出 PWM7 和 PWM5 作为控制电机与舵机的 PWM 波输出口,PWM1、PWM3 作为制动电机的接口。- 12 - / 42 文档可自由编辑打印图 3.3 控制模块原理图3.1.4 接口模块图 3.4 接口模块原理图- 13 - / 42 文档可自由编辑打印接口模块的作用即外部设备单片机的接口,分别有电

16、机接口,转向舵机接口,制动舵机接口,光电编码器接口,键盘显示模块接口,电源接口。3.2 传感器模块作为智能车的“眼睛”,光电传感器感知地面情况的能力对小车行驶状态的影响很大,经过多次摸索、试验,我们终于设计出一套高效,可行的方案。我们采用两种传感器感知地面的情况:一种是采用带有选频能力的输入高低电平的传感器,另一种是输出模拟电压的光电对管的传感器。这样做的原因是带有选频能力抗干扰较好的传感器相对于返回模拟量的传感器消耗能量比较大,在这样一个电量有限的情况下,尽量减小不必要的功耗是相当必要的。这款单片机拥有 8 路的 AD 转换口,我们使用了 8 路的简单对管电路返回 8 路模拟电压,使用单片机

17、本身的 A/D 转换功能模块进行信号处理,再设定门限比较电平,将采集道的模拟信号进行二值化处理,从而判别黑线的位置。这样既做到了判别黑线,又达到了省电的目的。3.2.1 带有选频抗干扰能力的光电对管传感器传感器电路如图 3.6 所示,在一个高频信号发生器的作用下,产生一路高低频交变的信号电流,然后通过一个三极管放大后供给两路 LED 灯发光,并用两个电位器分别控制 LED 灯的光强,最后用一个与信号发生器频率同步的接收管接收光信号,并反馈给单片机。在回路中,我们还添加了另一路 LED 发光二极管,用来实时检测传感器的工作情况。实际使用过程中,这种传感器对地面适应能力强,在一定程度上对外来的干扰

18、光有较强的抗干扰能力。图 3.5 传感器电路原理图- 14 - / 42 文档可自由编辑打印这种传感器定位能力强,在小车行驶过程中被用作夹住黑直线,由于它比较灵敏,当车稍稍偏离直线时,传感器可以快速将状态返回给单片机,以使单片机作出及时的反应,较快的调正小车行驶方向。3.2.2 采用 A/D 转换的光电对管传感器传感器电路如图 3.7 所示,发射部分是由高亮的红色发光二极管和限流电阻串连组成,接收部分是由接收管和一个可调电阻组成,并配合有一个电容平滑输出,减小外界突然出现的强光干扰。这种传感器功耗比较小,电路简单,不易出现复杂问题。图 3.6 传感器电路原理图文档可自由编辑打印第四章、HCS1

19、2 控制软件主要理论、算法说明及代码设计说明智能小车的控制软件采用模块化的程序结构。从结构上看,系统程序主要包括一个主体循环程序,增量式 PID 速度控制程序,中断服务程序,寻线控制算法程序,速度控制算法程序以及其他一些控制程序。涉及到的单片机硬件资源如表 4.1 所示。表 4.1 控制模块说明程序实现的功能程序实现的功能使用的模块使用的模块电机速度控制电机速度控制PWM 发生模块舵机转角控制舵机转角控制PWM 发生模块PID 反馈脉冲计数反馈脉冲计数定时器模块,脉冲累加器传感器模拟电压处理传感器模拟电压处理A/D 转换模块人机交互人机交互SCI 串口通信光电传感器信号处理光电传感器信号处理普

20、通 I/O 端口调试信息记录调试信息记录EETS2K 模块- 16 - / 42 文档可自由编辑打印4.1 主程序图 4.1 主程序流程图- 17 - / 42 文档可自由编辑打印流程图如图 4.1 所示。系统首先对各种设备进行初始化,然后选择进入参数修改程序。参数设定完毕之后打开中断,最后循环执行位置速度控制程序。- 18 - / 42 文档可自由编辑打印4.2 各种初始化程序包括端口初始化函数,PID 初始化函数,四路 PWM 发生初始化函数,计数器中断初始化函数,人机接口模块初始化函数,如图 4.2。图 4.2 各模块初始化流程图4.3 PID 调节程序在连续控制系统中,按偏差的比例(P

21、) 、积分(I) 、微分(D)进行控制的 PID 控制器获得了广的应用,它的结构简单,参数易于调整,适应性强,对I/O口初始化三路PWM初始化A/D模块初始化计数器初始化人机接口初始化输入参数,进主程序- 19 - / 42 文档可自由编辑打印于那些控制模型不准,参数变化较大的被控对象,采用 PID 控制器往往能得到满意的控制效果。用计算机算法来代替模拟式 PID 控制的数字 PID 控制算法不断改进和完善,显著地扩展了它的功能。本例采用增量式数字 PID 程序以 PWM 方式来对直流电机进行调速。增量式数字 PID 调节的数学表达式。其中 Kp 为比例常数,Ti 为积分时间常数,Td 为微分

22、时间常数,T 为采样周期。公式 1公式 2对位置式算式加以变换,可以得到 PID 调节算法的另一种实用形式(增量算式)公式 3,,可以得到一个方程,这个方程,经常用来PKAIPTKB1TTKCDP在计算机上做逻辑运算。这种算法用来控制步进电机特别方便,对直流电机的控制也可以采用。如图 4.3 为增量式 PID 控制算法程序框图。erSensorNumbtsSensorRigh1)()()(122110zzazaazEzUzDTTKaTTKaTTTTKadpdpdip2)21 (1)1 (0)2(1)(2111nnnDnInnPnnneeeTTeTeeKuuu- 20 - / 42 文档可自由编

23、辑打印图 4.3 增量式数字 PID 控制程序流程图开始计算控制参数A,B,C设初值e(k-1)=e(k-2)=0本次采样输入c(k)计算偏差值e(k)=r(k)-c(k)计算控制量u(k)=Ae(k)-Be(k-1)+Ce(k-2)码盘计算控制量u(k)=Ae(k)-Be(k-1)+Ce(k-2)输出u(k)=u(k)+u(k-1)为下一时刻作准备e(k-1)e(k-2),e(k)e(k-1)采样时刻到吗被控对象(电 机)YN- 21 - / 42 文档可自由编辑打印本车采用增量式 PID 算法的具体流程图如图 4.4 所示。图 4.4 PID 算法流程图4.4 寻线算法程序寻线算法程序是由

24、一套基于求重心的算法演变而来的,这种算法的优点是能够根据传感器返回的状态值,得到车的重心偏离黑线的程度。通过一定的计算方法,计算出舵机应该转的角度,并且在一定程度上拥有抗拒微小干扰的能力。具体算法如下介绍。a.将每个传感器进行加权处理,如图 4.5 所示。程序入口偏差计算设置调节死区增量式速度PID计算是否超过最大值?输出最大值是否低于最小值?输出最小值返回驱动电机占空比是否否是- 22 - / 42 文档可自由编辑打印图 4.5 传感器取值分配图b.当传感器检测到黑线时相应的传感器返回所在的权值,并计算偏离程度。其计算公式为:Departure = 公式 3erSensorNumbtSens

25、orRigh图 4.6 传感器工作示意图例如图 4.6 所示,左侧权值为6 和8 的传感器在黑线上,此时计算偏离的程度为:Departure = (-8)+(-6)/2 = -7即此时车偏离的重度为-7。c.偏离程度和舵机转动角度所对应的 PWM 脉宽建立模型,拟合二者的函数关系曲线。在这里我们认为舵机转动的角度是和 PWM 脉宽成线性的正比关系,因此作出一次函 数来唯一的确定舵机转动的角度是和脉宽的 PWM 关系。我们建立的一次函数方程为: TurnAngle=PWMMiddle+ Departre*PWMHarf/10 公式 4 其中: TurnAngle 为舵机应转的角度-10-8-6-

26、4-20246810-10-8-6-4-20246810- 23 - / 42 文档可自由编辑打印 PWMMiddle 为车轮摆正是舵机 PWM 脉宽应赋的PWMDTYx 的值 Departure 为由传感器状态求得的偏离程度 PWMHalf 为舵机由中心摆到车轮允许的最大值 PWMDTYx的变化值由此,我们求出了在不同的传感器状态下舵机应转的角度。4.5 程序调试与车况参数检测方法(使用 EEPROM)1为了准确的得到小车在行驶中的最大值,我们使用 EEPROM 来记录小车在行驶过程中的最大值和当时的传感器状态。2在进行 A/D 转换的调试时,我们不但用到了键盘实时观察 A/D 转换的结果,

27、还使用 EEPROM 来记录 A/D 转换的结果值。3在小车冲出赛道的实验中,我们使用 EEPROM 来记录冲出赛道时的速度和当时的传感器状态。文档可自由编辑打印第五章、开发工具、制作、安装、调试过程说明5.1 开发工具程序的开发是在组委会提供的 CodeWarrior IDE 下进行的,包括源程序的编写、编译和链接,并最终生成可执行文件。CodeWarrior for S12 是面向以 HC1 和 S12 为 CPU 的单片机嵌入式应用开发软件包。包括集成开发环境 IDE、处理器专家库、全芯片仿真、可视化参数显示工具、项目工程管理器、C 交叉编译器、汇编器、链接器以及调试器。5.2 调试过程

28、我们使用的单片机的 FLASH 中预先下载了监控程序,由 CodeWarrior 生成的可执行文件就是在这个监控程序的引导下,由计算机的串口下载到单片机的 FLASH 中的。因为这种方法既方便快捷又安全可靠,所以我们选用了这种方法而放弃了用 S12 特有的 BDM 方法进行程序的调试。具体的操作方法如下:从 MC9SDG128 开发板开始,将 RS232-232 串口线接到 PC 的串口COM1 上。使用 WINDOWS 下的超级终端通信软件:执行“开始”|“程序”|“附件”|“通信”|“超级终端”命令。将 COM1 设置成 9600 波特率,8 位、无效验位,1 个停止位,不使用硬件流量控制

29、。插上+5V 电源,按开发板上的复位按钮,在 PC 的超级终端上就会显示提示信息。在超级终端内键入 E 擦除单片机的 FLASH,然后键入 F 将.S19 文件下载到单片机的 FLASH 内。这样,我们编写的程序就能在单片机中运行了。需要说明的是,开机后 4秒钟后才会自动运行用户程序。文档可自由编辑打印第六章、模型车的主要技术参数说明6.1 智能车外形参数车长:39cm车宽:20cm车高:9.8cm车重:1.456kg6.2 电路部分参数我们小组所改造的智能车采用一块比赛标准 7.2V 电池供电,电路中共有17 个电容,容量总计 95.366 法。当模型车全功率开动时,功耗约为 50W。6.3

30、 传感器的种类和个数本车的传感器部分由两种传感器构成:带有选频能力的传感器可以在一定程度上抗干扰(共 3 个),没有选频能力,使用的 AD 转换方式的传感器共 8 个。6.4 除了车模原有的驱动电机、舵机之外伺服电机数量 除了车模原有的驱动电机、舵机之外使用了 2 个伺服电机。文档可自由编辑打印结论自我们组队以来,每个成员都在课余时间尽自己最大的力量来解决问题优化方案开拓创新,我们不仅把在课堂上所学的理论知识化为实际,还在需要的方面大量的学习了新的理论知识,开拓了视野的同时提高了综合能力。这部小小的车子,从速度到转角,从参数设置到程序编排,从每一个细小的齿轮螺丝到总体的车身设计,无处不闪烁着队

31、员们智慧的光彩我们在技术报告中详细的介绍了这部车子从概念的诞生到成长为一部成熟稳定的作品的全过程,主要包括我们的设计思路和制作过程,还有在修改方案时对各种方法优劣的对比取舍。经过几个月不懈的努力与反复计算试验,我们确定下了现在使用的传感器的排布方案,电路方案以及机械方面的细节工作。这是从许多套方案中精心比较后选取组合的,具有稳定高速准确等优点。对于二十号的比赛,我们有信心也有勇气拿出我们的实力与各高校的选手们一决高下。取得好的成绩固然是每个人最大的梦想,可是更为宝贵的是我们在这个过程中学到的知识,还有合理分工,团结合作,激流勇进的精神。这是我们大家共同努力的成果,成功将属于我们每个人!- 27

32、 - / 42 文档可自由编辑打印参考文献1 邵贝贝. 嵌入式实时操作系统LCOS-(第 2 版)M. 北京清华大学出版社20042 臧杰,阎岩. 汽车构造M. 北京. 机械工业出版社M2005 3 安鹏,马伟S12 单片机模块应用及程序调试J. 电子产品世界. 2006第 211 期 162-1634 童诗白,华成英模拟电子技术基础M北京. 高等教育出版社2000 5 沈长生常用电子元器件使用一读通M北京. 人民邮电出版社2004 6 王厚枢传感器原理M北京. 航空工业出版社. 1987 7 刘光斌等单片机系统实用抗干扰技术M北京. 人民邮电出版社. 2003 8 宗光华机器人的创意设计与实

33、践M北京. 北京航空航天大学出版社. 2004 9 殷召生AVR 单片机在直流伺服控制系统中的应用M北京. 工业设计计算机. 2002 10 张伟等Protel DXP 高级应用M北京. 人民邮电出版社. 2002 11 司利增. 汽车防滑控制研究ABS 与 ASRM. 北京. 人民交通出版社. 2003文档可自由编辑打印附录源程序:main.c/*=*SMARTCAR LAB OF USTB* : main.c* Description: the main function of this project*Author : ChenXi*DATE : 2006-07-29 *MODIFY D

34、ATE: *-*-* *REMARK : * version: 1.0*=*/#include /* common defines and macros */#include /* derivative information */#include #include 7279.h#pragma LINK_INFO DERIVATIVE mc9s12dj128b/*=程序中使用到的宏定义=*/#define Dir_Go PTM_PTM3 = 1 /电机正转#define Dir_Back PTM_PTM3 = 0/电机反转#define LeftBrake PWMDTY23 = 130#def

35、ine RightBrake PWMDTY23 = 175#define Start PWMDTY23 = 154#define Middle 300/AD 二值化处理的门限值#define PWM_TOTAL 26 /正中时的 PWM 与最偏是的 PWM 值的差#define PWM_Middle 147/车正中时的 PWMDTY67 的植 /*传感器位置定义*/B 口 3 个传感器#define MiddleState PORTB & 0 x02 / 0000 0*0 0000#define MiddleLeft PORTB & 0 x06 / 0000 *0 0000#define Mi

36、ddleRight PORTB & 0 x03 / 0000 0* 0000#define LittleLeft PORTB & 0 x04/ 0000 *00 0000#define LittleRight PORTB & 0 x01/ 0000 00* 0000/B 口和 AD#define ADLeft01(PORTB & 0 x40) & (ucAD_Port & 0 x10) / 000* *00 0000- 29 - / 42 文档可自由编辑打印#define ADRight01 (PORTB & 0 x01) & (ucAD_Port & 0 x08)/ 0000 00* *00

37、0/AD 转换结果(左四个,高四位)#define ADLeft1ucAD_Port & 0 x10 / 000* 000 0000#define ADLeft12ucAD_Port & 0 x30 / 00* 000 0000#define ADLeft2ucAD_Port & 0 x20 / 00*0 000 0000#define ADLeft23ucAD_Port & 0 x60 / 0*0 000 0000#define ADLeft3ucAD_Port & 0 x40 / 0*00 000 0000#define ADLeft34ucAD_Port & 0 xC0 / *00 00

38、0 0000#define ADLeft4ucAD_Port & 0 x80 / *000 000 0000/AD 转换结果(左四个,高四位)#define ADRight1 ucAD_Port & 0 x08 / 0000 000 *000#define ADRight12 ucAD_Port & 0 x0C / 0000 000 *00#define ADRight2 ucAD_Port & 0 x04 / 0000 000 0*00#define ADRight23 ucAD_Port & 0 x06 / 0000 000 0*0#define ADRight3 ucAD_Port &

39、0 x02 / 0000 000 00*0#define ADRight34 ucAD_Port & 0 x03 / 0000 000 00*#define ADRight4 ucAD_Port & 0 x01 / 0000 000 000*/*=程序中使用到的变量定义=*/static uchar StateB; /B 口最低 3 位输入static uchar ucSensorState; /AD 采集的传感器状态static uint uiAD_result8; /AD 转换结果保存数组static uint uiPulse; static uchar ucDepartureDegree

40、; static uchar ucAD_Port; /AD 口返回值static uint uiTurnAngle; /转向舵机转角static signed char scDeparture;/有可能是小数,包括正负static signed char scLastDeparture;/纪录上一次偏离程度,有可能是小数,包括正负static uchar sum; /传感器在黑线上的总个数static signed char temp; /传感器的总权重static uint uiMaxSpeed; /速度最大值static uint uiMinSpeed; /速度最小值static ucha

41、r BrakeFlag; static uchar OutFlag; /传感器在黑线上的标志,最后三位 xxxxx LeftFlag MiddleFlag RightFlag static uchar LastOutFlag; /记录上一个变量static uchar tempPWMDTY67;static uchar ABC; /*=子函数定义=*/PID 部分/- 30 - / 42 文档可自由编辑打印/定义 PID 参数#define VV_KPVALUE 3 /比例#define VV_KIVALUE 40 /积分#define VV_KDVALUE 3 /微分#define VV_M

42、AX 10000 /返回的最大值,是 pwm 的周期值#define VV_MIN 0#define VV_DEADLINE 0X08 /速度 PID,设置死区范围typedef struct PID /定义数法核心数据signed int vi_Ref; /速度 PID,速度设定值signed int vi_FeedBack;/速度 PID,速度反馈值signed long vi_PreError; /速度 PID,前一次,速度误差,vi_Ref - vi_FeedBacksigned long vi_PreDerror;/速度 PID,前一次,速度误差之差,d_error-PreDerro

43、r;unsigned int v_Kp; /速度 PID,Ka = Kpunsigned int v_Ki; /速度 PID,Kb = Kp * ( T / Ti )unsigned int v_Kd; /速度 PID,signed long vl_PreU; /电机控制输出值PID;PID sPID; / PID Control Structurevoid PIDInit(void)sPID.vi_Ref = 0 ; /速度设定值sPID.vi_FeedBack = 0 ;/速度反馈值sPID.vi_PreError = 0 ; /前一次,速度误差,vi_Ref - vi_FeedBacks

44、PID.vi_PreDerror = 0 ; /前一次,速度误差之差,d_error-PreDerror;sPID.v_Kp = VV_KPVALUE;sPID.v_Ki = VV_KIVALUE;sPID.v_Kd = VV_KDVALUE;sPID.vl_PreU = 0 ; /电机控制输出值 unsigned int v_PIDCalc( PID *pp )signed long error,d_error,dd_error;- 31 - / 42 文档可自由编辑打印 error = (signed long)(pp-vi_Ref - pp-vi_FeedBack);/ 偏差计算 d_e

45、rror = error - pp-vi_PreError; dd_error = d_error - pp-vi_PreDerror; pp-vi_PreError = error;/存储当前偏差pp-vi_PreDerror = d_error;if( ( error -VV_DEADLINE ) );/设置调节死区else /速度 PID 计算 pp-vl_PreU += (signed long)( pp - v_Kp * d_error + pp - v_Ki * error + pp-v_Kd*dd_error);if( pp-vl_PreU = VV_MAX ) /速度 PID,

46、防止调节最高溢出pp-vl_PreU = VV_MAX;else if( pp-vl_PreU vl_PreU = VV_MIN; return ( pp-vl_PreU );/ 返回预调节占空比/*-AD 初始化函数-*/void AD_Init(void)/AD 初始化 /AD 结果数组初始化 uiAD_result0 = 0; uiAD_result1 = 0; uiAD_result2 = 0; uiAD_result3 = 0; uiAD_result4 = 0; uiAD_result5 = 0; uiAD_result6 = 0; uiAD_result7 = 0; /控制寄存器

47、 2:上电,标志位快速清零,查询方式不使用中断 ATD0CTL2 = (ATD0CTL2_ADPU_MASK|ATD0CTL2_AFFC_MASK); /控制寄存器 3:转换序列长度为 3,FIFO 模式 ATD0CTL3 = (ATD0CTL3_S8C_MASK/*ATD0CTL3_S2C_MASK|ATD0CTL3_S1C_MASK|ATD0CTL3_FIFO_MASK*/); /控制寄存器 4:10 位 AD,PRS=0b00110=6, AD clock frequency 24/6/2=2MHz ATD0CTL4 = (/*ATD0CTL4_SRES8_MASK|*/ATD0CTL4

48、_PRS2_MASK|ATD0CTL4_PRS1_MASK); /控制寄存器 5:右对齐方式,连续转换模式,多通道采样模式 ATD0CTL5 = (ATD0CTL5_DJM_MASK|ATD0CTL5_SCAN_MASK|ATD0CTL5_MULT_MASK); ATD0DIEN=0 x00; / 禁止数字输入缓冲- 32 - / 42 文档可自由编辑打印/*-AD 转换函数,查询方式-*/void AD_Convert(void) if(ATD0CTL2_ASCIE = 0) /采用查询方式 while(!ATD0STAT0_SCF); /等待各通道转换结束 uiAD_result0 = A

49、TD0DR0; /读通道 0 的转换结果 uiAD_result1 = ATD0DR1; /读通道 1 的转换结果 uiAD_result2 = ATD0DR2; /读通道 2 的转换结果 uiAD_result3 = ATD0DR3; /读通道 3 的转换结果 uiAD_result4 = ATD0DR4; /读通道 4 的转换结果 uiAD_result5 = ATD0DR5; /读通道 5 的转换结果 uiAD_result6 = ATD0DR6; /读通道 6 的转换结果 uiAD_result7 = ATD0DR7; /读通道 7 的转换结果 uchar Sensor_State (

50、void) uchar i; AD_Convert(); for(i=0;i=Middle) ucSensorState|=(10;i-) if(StateB&(1(i-1) sum+; temp += (4-(i4; i-)if(ucAD_Port&(1(i-1)sum+;temp+=(-(i-3)0; i-)if(ucAD_Port&(1(i-1)sum+;temp+=(12-(i=(-10)&(scDeparture=(-3)&(scDeparture3)&(scDeparture 0) uiTurnAngle = 173; if(scLastDeparture 0) uiTurnAng

51、le = 121;/*/ if(scLastDeparture=(-2) /中间 OutFlag = 0 x02; if(scLastDeparture 2) /左边 OutFlag = 0 x01; if(scLastDeparture =uiMaxSpeed-100) Dir_Back;/继电器反向刹车 if(uiPulse= 170) if(uiPulse500) PWME_PWME5 = 0; PTP_PTP5 = 1; LeftBrake; else PWME_PWME5 = 1; Start; */*2 else if(PWMDTY67 = 165) PWME_PWME5 = 1;

52、 LeftBrake; */ /*3 else if(PWMDTY67 = 129) PWME_PWME5 = 1; Start;- 37 - / 42 文档可自由编辑打印 */ /*4 else if(PWMDTY67 = 124) PWME_PWME5 = 1; RightBrake; */*5 else if(PWMDTY67550) PWME_PWME5 = 0; PTP_PTP5 = 1; RightBrake; else PWME_PWME5 = 1; Start; */void Car_Machine_Brake() /* PWMDTY67 : 173-170-165-147-1

53、30-124-121 中间 147*/ /*1*/ if(scLastDeparture = 9) if(uiPulse(uiMaxSpeed - 100) PWME_PWME5 = 0; PTP_PTP5 = 1; LeftBrake; delay10ms(5); else PWME_PWME5 = 1; Start; /*2 */ else if(scLastDeparture = 6) if(uiPulse(uiMaxSpeed - 100) - 38 - / 42 文档可自由编辑打印 PWME_PWME5 = 0; PTP_PTP5 = 1; LeftBrake; / delay10m

54、s(3); else PWME_PWME5 = 1; Start; /*3*/ else if(scLastDeparture = (-5) PWME_PWME5 = 1; Start; /*4*/ else if(scLastDeparture = (-8) if(uiPulse(uiMaxSpeed - 100) PWME_PWME5 = 0; PTP_PTP5 = 1; RightBrake; /delay10ms(3); else PWME_PWME5 = 1; Start; /*5*/ else if(scLastDeparture (uiMaxSpeed - 100) PWME_P

55、WME5 = 0; PTP_PTP5 = 1; RightBrake; delay10ms(5); else PWME_PWME5 = 1; Start; - 39 - / 42 文档可自由编辑打印/*速度控制函数,通过 SIN 函数实现*uint Car_Speed_Control(uint max , uint min ,uint angle) uint uiSpeed;/通过计算返回的给 PID 的需要的速度值 uiSpeed = (max-min)*sin(_M_PI/26)*angle - (136*_M_PI/26)/2 + (max+min)/2 ; return uiSpeed

56、;*/*速度控制函数,通过检测传感器偏离程度实现,当 -55 时较快,ELSE 较慢*/uint Car_Speed_Control(uint max , uint min) uint uiSpeed;/通过计算返回的给 PID 的需要的速度值 if(scLastDeparture =(-4)&(scLastDeparture=(-7)&(scLastDeparture4)&(scLastDeparture=7) uiSpeed = (max + min) / 2; else uiSpeed = min; return uiSpeed;/*=主函数 =*/void main() Port_In

57、it();PWM23_Init();PWM45_Init();PWM67_Init(); init_7279();PIDInit();AD_Init();Pulse_Count_Init();- 40 - / 42 文档可自由编辑打印/*输入速度*/输入速度最大值 write7279(DECODE0+7,1);uiMaxSpeed=get_data(0,2);delay10ms(50);/输入速度最小值write7279(DECODE0+7,2);uiMinSpeed=get_data(0,2);delay10ms(50); /输入结束/ while(key); /按任意健开始 EnableI

58、nterrupts;/开总中断 for(;) PWMDTY67 = GetValue();/控制舵机角度 / Car_Electric_Brake(); Car_Machine_Brake(); sPID.vi_Ref = Car_Speed_Control(uiMaxSpeed,uiMinSpeed); dis_data(0,2,sPID.vi_Ref); dis_data(5,7,uiTurnAngle); /*=定时器中断函数,20ms 执行一次此函数=*/#pragma CODE_SEG NON_BANKED#pragma TRAP_PROCvoid Pulse_Count(void) MCFLG_MCZF = 1; uiPulse=PACN10; /读出脉冲计数值 PACN10=0; / dis_data(0,2,uiSpeed); / dis_data(0,2,uiTurnAngle); / dis_data(5,7,uiPulse); sPID.vi_FeedBack=uiPulse; PWMDTY45=v_PIDCalc(&sPID); #pragma CODE_SEG DEFAULT

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!