




已阅读5页,还剩36页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第一届“飞思卡尔”杯全国大学生 智能汽车邀请赛 技技 术术 报报 告告 学 校:北京科技大学 队伍名称:北京科技大学二队 参赛队员:林进鹏 陈曦 尚晓明 带队教师:牟世堂 关于技术报告和研究论文使用授权的说明 本人完全了解第一届“飞思卡尔”杯全国大学生智能汽车邀请赛关保 留、使用技术报告和研究论文的规定,即:参赛作品著作权归参赛者本 人,比赛组委会和飞思卡尔半导体公司可以在相关主页上收录并公开参 赛作品的设计方案、技术报告以及参赛模型车的视频、图像资料,并将 相关内容编纂收录在组委会出版论文集中。 参赛队员签名: 带队教师签名: 引言 首届“飞思卡尔“杯全国大学生智能汽车竞赛在清华大学的承办下终于落户 中国,本届大赛采用邀请赛的方式,邀请了国内具有控制科学与工程学科博士 授予点高校(含港澳)50 余所,我们北京科技大学作为参赛方,有幸参加了此 次“飞思卡尔智能汽车邀请赛” 。 这份技术报告中,我们小组通过对整体方案、电路、算法、调试、车辆参 数的介绍,详尽地阐述了我们的思想和创意,具体表现在电路的创新设计,以 及算法方面的独特想法,而对单片机具体参数的调试也让我们付出了艰辛的劳 动。这份报告凝聚着我们的心血和智慧,是我们共同努力后的成果。 在准备比赛的过程中,我们小组成员涉猎控制、模式识别、传感技术、汽 车电子、电气、计算机、机械等多个学科,这次磨练对我们的知识融合和实践 动手能力的培养有极大的推动作用,在此首先要感谢清华大学,感谢他们将这 项很有意义的科技竞赛引入中国;更要感谢北京科技大学相关学院对此次比赛 的关注及投入,我们能有今天这样的成果离不开学院的大力支持及指导老师悉 心的教导;还要感谢的是和我们一起协作的队员们,协助,互促,共勉使我们 能够走到今天。 目录 引言 1 目录 2 第一章、智能车方案设计思路及实现方案简介4 1.1 方案设计思路 4 1.2 实现方案简介 5 第二章、机械结构设计7 2.1 传感器的设计安装 8 2.2 制动舵机传动机构设计8 2.4 系统电路板的固定及连接9 第三章、电路设计说明 .10 3.1 主控板的设计 10 3.1.1 电源管理模块10 3.1.2 电机驱动模块11 3.1.3 控制模块11 3.1.4 接口模块12 3.2 传感器模块 13 3.2.1 带有选频抗干扰能力的光电对管传感器13 3.2.2 采用 A/D 转换的光电对管传感器.14 第四章、HCS12 控制软件主要理论、算法说明及代码设计说明.15 4.1 主程序 16 4.2 各种初始化程序 17 4.3 PID 调节程序17 4.4 寻线算法程序 20 4.5 程序调试与车况参数检测方法(使用 EEPROM).22 第五章、开发工具、制作、安装、调试过程说明23 5.1 开发工具 23 5.2 调试过程 23 第六章、模型车的主要技术参数说明24 6.1 智能车外形参数 24 6.2 电路部分参数 24 6.3 传感器的种类和个数24 6.4 除了车模原有的驱动电机、舵机之外伺服电机数量24 结论 25 参考文献.26 附录 27 第一章、智能车方案设计思路及实现方案简介 1.1 方案设计思路 图 1.1、系统的总体控制框图 电机与后轮 光电编码器 驱动电路 伺服电机 前轮 键盘 传感器 S12 本智能车控制系统采用由主办方提供的飞思卡尔 16 位微控制器 MC9S12DG128 作为唯一的核心控制单元,信号由安装在车前部的不同类型的 光电传感器采集,将采集到的模拟信号或电平信号传入核心控制单元,核心控 制单元对信号进行 AD 转换或电平判别处理后,由 PWM 发生模块发出四路 PWM 波,分别对转向舵机,直流电机,制动舵机进行控制,完成智能车的转 向,前进,制动的功能。在智能车后轮上安有光电编码器,采集关于车轮转速 的脉冲信号,经由核心控制单元进行增量式 PID 控制方法计算后自动调节输入到 电机驱动模块的 PWM 波的占空比,从而控制小车速度。人机接口采用 HD7279A 数码管和键盘驱动显示芯片驱动 8 位数码管和 44 键盘,从而可与 核心控制单元进行通信,实现人机交互。 1.2 实现方案简介 传感器排布方面:智能小车在行驶过程中,使用车头前端安装的十一个光 电传感器采集路面信息,反馈给核心控制单元,由核心控制单元进行处理。根 据小车实际行驶中对黑线反应的情况,我们经过仔细的研究讨论,决定采用十 一个传感器圆弧的排布方案。其优势所在如下: a11 个传感器可以准确的判断出黑线在车前的位置; b圆弧型排布的小车在走弯道时在对黑线的方向判断方面有显著的优势; c美观大方。 传感器信号的采集时,外侧我们采用了 8 路 AD 转换,将返回的电压值在 核心控制器里进行二值化处理,判别传感器状态;中间 3 个传感器经过处理返 回 3 路高低电平值,核心控制器可直接处理。 我们在跑道上调试小车时发现采用十一个传感器圆弧的排布方案可以极大 的提高寻线精度,直线时平稳高速,转弯时平缓流畅,可以保证小车不冲出跑 道。 速度控制方面:我们采用光电编码器对驱动轮后轮的转速进行实时的检测, 将反馈值提供给核心控制单元。核心控制单元根据光电编码器单位时间反馈的 脉冲数,采用增量式 PID 调节控制方法,对直流电机的转速进行准确快速的调 节,减小了由于电池或场地等原因造成的速度无规则变化。 转向控制方面:我们采用了一系列的控制算法,通过传感器反馈的路面信 息,经过核心控制单元调用一系列算法进行计算,将计算结果赋给控制舵机的 PWMDTYx,从而准确的控制舵机的转角。 人机交互方面:我们采用了 HD7279A 键盘数码管驱动显示接口芯片,通 过串行通信的方式于核心控制单元进行通信,可以通过键盘输入一些必要的参 数,也可以实现小车行驶过程中的一些参数的显示。 第二章、机械结构设计 在本次智能车邀请赛中,最主要的比赛内容是速度,而车辆的机械结构无 疑是影响速度的一个关键因素,鉴于这个原因,我们小组在车辆机械方面的改 进也作了很多的工作,并形成了下图所示的最后外形。 图 2.1 外观俯视图 我们在改造、调试机械部分的过程中,遵循着四个原则:车身更轻、摩擦 更小、转向更灵、变速更快。为实现这四个目标,我们设计了如下的机构。 2.1 传感器的设计安装 为了实现减轻车身重量的目标,我们的传感器采用工作部分和控制部分集 中安装的方法,保证传感器部分重量最小,以起到减轻车身的作用。 同时,考虑到车辆行驶过程的稳定,我们采用 11 个传感器圆弧形的排布 方法。中间的传感器向前伸出,保证有足够的前瞻性,两边的传感器以固定角 度呈圆弧状排列,可以给单片机反馈回准确角度,提高舵机转向的灵活性和准 确性。 如何安装传感器也是机械机构要考虑的一个问题,因为如果传感器离车太 近,则前瞻性会受到很大影响;而传感器若离车太远,机构不稳定,行走过程 中产生振动,会影响传感器的工作状态,无法保证稳定、准确的信号反馈。综 合考虑以上因素,我们通过实验确定了安装距离和方法。 2.2 制动舵机传动机构设计 为了缩短跑完全程的时间,我们需要尽可能快的速度,但是如果速度失控, 当车辆从直道进入曲率较大的弯道时,就有冲出赛道的危险,除了在程序上我 们做了限制以外,机构上采用了加装制动伺服电机的方式保证车辆行驶的安全。 图 2.2 制动舵机示意图 2.2.3 光电编码器的安装 在本次智能车邀请赛的规则中,赛道长度、形状有严格的限制,而为了更 快的跑完全程,我们希望能尽量提高车速,这样在弯道前及时减速就成了我们 必须考虑的问题。通过安装光电编码器,我们能够知道车在每个时刻的速度, 根据它的反馈,程序就可以迅速调整车速。 2.4 系统电路板的固定及连接 在电路板的安装这部分,我们考虑到结构的稳定性,以及规则中对车辆尺 寸的限制,最终决定采用高架、立体的搭接方法,用支架把主控板较高地固定 在底盘上方,并在后桥制动舵机的上面安放了一个输入参数用的小键盘,这种 布局可以保证车辆行驶稳定,同时,也可以比较方便的输入参数。 第三章、电路设计说明 本智能车系统的电路总体上分为逻辑控制电路和电机驱动电路两大部分。 逻辑控制电路主要由核心控制器 S12 单片机和周围的寻线传感器,测速传 感器组成。其对电压的稳定性有很高的要求;电机驱动电路要求的电流相对比 较大,因此,二者在电路设计方面有很大的差别。 硬件设计应在可靠的基础上尽量简单化,使其满足稳定工作的基本要求, 电源管理模块要保证使整个系统供电充足并稳定;传感器部分保证信息采集准 确有效;电机驱动部分则需在保证正常工作的情况下尽量减少对控制部分的干 扰。同时还要保证在控制软件做改动时,硬件部分不需要作很大的改动就可以 满足要求,即我们硬件的通用性。 3.1 主控板的设计 3.1.1 电源管理模块 图 3.1 电源管理模块原理图 电源由 7.2V 电池提供,分别经过以下途经对其它模块进行供电: A、经过稳压芯片 LM2940_5.0 稳压后,输出 5V 电压以驱动单片机工作; B、经过稳压芯片 LM2940_5.0 稳压后,输出 5V 电压以对传感器供电; C、经过稳压芯片 LM2940_5.0 稳压后,输出 5V 电压对光码盘供电; D、经过稳压芯片 LM2940_5.0 稳压后,输出 5V 电压对键盘显示接口电 路供电; E、接入 MOSFET 驱动模块,以对电机进行驱动; F、接入转向舵机与制动舵机,驱动舵机进行转向及制动工作。 3.1.2 电机驱动模块 图 3.2 直流电机驱动模块原理图 直流电机驱动采用大功率的 MOSFET 和继电器的组成驱动电路,单片机 通过如图 3.2 中 PWM 引脚输入 PWM 波,以调节 M1 和 M2 口的输出电压之 差,从而调节电机转速,并且在 DIR_CONTROL 口输入高低电平,通过使继 电器换向,给电机反向电压,实现制动功能。在实际运用中发现使用反向电压 制动,效果良好,但是对继电器的损耗比较大。 3.1.3 控制模块 核心控制模块仅由 MC9S12DG128B 构成,将 PORTA 口与 PORTB 口作为 普通信号的输入和输出,在实际中我们将 PORTB 口作为输入高低电平信号的 光电传感器的信号输入口,而将 AD 口作为输入模拟信号的对管光电传感器的 信号输入口。将 PM 口作为键盘显示电路的接口。引出 PWM7 和 PWM5 作为 控制电机与舵机的 PWM 波输出口,PWM1、PWM3 作为制动电机的接口。 图 3.3 控制模块原理图 3.1.4 接口模块 图 3.4 接口模块原理图 接口模块的作用即外部设备单片机的接口,分别有电机接口,转向舵机接 口,制动舵机接口,光电编码器接口,键盘显示模块接口,电源接口。 3.2 传感器模块 作为智能车的“眼睛”,光电传感器感知地面情况的能力对小车行驶状态的 影响很大,经过多次摸索、试验,我们终于设计出一套高效,可行的方案。 我们采用两种传感器感知地面的情况:一种是采用带有选频能力的输入高 低电平的传感器,另一种是输出模拟电压的光电对管的传感器。这样做的原因 是带有选频能力抗干扰较好的传感器相对于返回模拟量的传感器消耗能量比较 大,在这样一个电量有限的情况下,尽量减小不必要的功耗是相当必要的。这 款单片机拥有 8 路的 AD 转换口,我们使用了 8 路的简单对管电路返回 8 路模 拟电压,使用单片机本身的 A/D 转换功能模块进行信号处理,再设定门限比较 电平,将采集道的模拟信号进行二值化处理,从而判别黑线的位置。这样既做 到了判别黑线,又达到了省电的目的。 3.2.1 带有选频抗干扰能力的光电对管传感器 传感器电路如图 3.6 所示,在一个高频信号发生器的作用下,产生一路高 低频交变的信号电流,然后通过一个三极管放大后供给两路 LED 灯发光,并用 两个电位器分别控制 LED 灯的光强,最后用一个与信号发生器频率同步的接收 管接收光信号,并反馈给单片机。在回路中,我们还添加了另一路 LED 发光二 极管,用来实时检测传感器的工作情况。实际使用过程中,这种传感器对地面 适应能力强,在一定程度上对外来的干扰光有较强的抗干扰能力。 图 3.5 传感器电路原理图 这种传感器定位能力强,在小车行驶过程中被用作夹住黑直线,由于它比 较灵敏,当车稍稍偏离直线时,传感器可以快速将状态返回给单片机,以使单 片机作出及时的反应,较快的调正小车行驶方向。 3.2.2 采用 A/D 转换的光电对管传感器 传感器电路如图 3.7 所示,发射部分是由高亮的红色发光二极管和限流电 阻串连组成,接收部分是由接收管和一个可调电阻组成,并配合有一个电容平 滑输出,减小外界突然出现的强光干扰。这种传感器功耗比较小,电路简单, 不易出现复杂问题。 图 3.6 传感器电路原理图 第四章、HCS12 控制软件主要理论、算法说明及代码设计说明 智能小车的控制软件采用模块化的程序结构。从结构上看,系统程序主要 包括一个主体循环程序,增量式 PID 速度控制程序,中断服务程序,寻线控制 算法程序,速度控制算法程序以及其他一些控制程序。涉及到的单片机硬件资 源如表 4.1 所示。 表 4.1 控制模块说明 程序实现的功能程序实现的功能使用的模块使用的模块 电机速度控制电机速度控制PWM 发生模块 舵机转角控制舵机转角控制PWM 发生模块 PID 反馈脉冲计数反馈脉冲计数定时器模块,脉冲累加器 传感器模拟电压处理传感器模拟电压处理A/D 转换模块 人机交互人机交互SCI 串口通信 光电传感器信号处理光电传感器信号处理普通 I/O 端口 调试信息记录调试信息记录EETS2K 模块 4.1 主程序 图 4.1 主程序流程图 流程图如图 4.1 所示。系统首先对各种设备进行初始化,然后选择进入参 数修改程序。参数设定完毕之后打开中断,最后循环执行位置速度控制程序。 4.2 各种初始化程序 包括端口初始化函数,PID 初始化函数,四路 PWM 发生初始化函数,计 数器中断初始化函数,人机接口模块初始化函数,如图 4.2。 图 4.2 各模块初始化流程图 4.3 PID 调节程序 在连续控制系统中,按偏差的比例(P) 、积分(I) 、微分(D)进行控制 的 PID 控制器获得了广的应用,它的结构简单,参数易于调整,适应性强,对 I/O口初始化 三路PWM初始化 A/D模块初始化 计数器初始化 人机接口初始化 输入参数,进主程序 于那些控制模型不准,参数变化较大的被控对象,采用 PID 控制器往往能得到 满意的控制效果。 用计算机算法来代替模拟式 PID 控制的数字 PID 控制算法不断改进和完善, 显著地扩展了它的功能。本例采用增量式数字 PID 程序以 PWM 方式来对直流 电机进行调速。 增量式数字 PID 调节的数学表达式。其中 Kp 为比例常数,Ti 为积分时间 常数,Td 为微分时间常数,T 为采样周期。 公式 1 公式 2 对位置式算式加以变换,可以得到 PID 调节算法的另一种实用形式(增量 算式) 公式 3 ,,可以得到一个方程,这个方程,经常用来 P KA I P T KB 1 T T KC D P 在计算机上做逻辑运算。 这种算法用来控制步进电机特别方便,对直流电机的控制也可以采用。如 图 4.3 为增量式 PID 控制算法程序框图。 erSensorNumb tsSensorRigh 1)( )( )( 1 2 2 1 10 z zazaa zE zU zD T T Ka T T Ka T T T T Ka d p d p d i p 2 )21 (1 )1 ( 0 )2( 1 )( 2111 nnn D n I nnPnnn eee T T e T eeKuuu 图 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) 采样时刻到吗 被 控 对 象 (电 机) Y N 本车采用增量式 PID 算法的具体流程图如图 4.4 所示。 图 4.4 PID 算法流程图 4.4 寻线算法程序 寻线算法程序是由一套基于求重心的算法演变而来的,这种算法的优点是 能够根据传感器返回的状态值,得到车的重心偏离黑线的程度。通过一定的计 算方法,计算出舵机应该转的角度,并且在一定程度上拥有抗拒微小干扰的能 力。具体算法如下介绍。 a.将每个传感器进行加权处理,如图 4.5 所示。 程序入口 偏差计算 设置调节死区 增量式速度PID计算 是否超过最大值? 输出最大值 是否低于最小值? 输出最小值 返回驱动电机占空比 是 否 否 是 图 4.5 传感器取值分配图 b.当传感器检测到黑线时相应的传感器返回所在的权值,并计算偏离程度。 其计算公式为: Departure = 公式 3 erSensorNumb tSensorRigh 图 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 -4 -202 4 6 8 10 -10 -8 -6 -4 -202 4 6 8 10 PWMMiddle 为车轮摆正是舵机 PWM 脉宽应赋的 PWMDTYx 的值 Departure 为由传感器状态求得的偏离程度 PWMHalf 为舵机由中心摆到车轮允许的最大值 PWMDTYx 的变化值 由此,我们求出了在不同的传感器状态下舵机应转的角度。 4.5 程序调试与车况参数检测方法(使用 EEPROM) 1为了准确的得到小车在行驶中的最大值,我们使用 EEPROM 来记录 小车在行驶过程中的最大值和当时的传感器状态。 2在进行 A/D 转换的调试时,我们不但用到了键盘实时观察 A/D 转换的 结果,还使用 EEPROM 来记录 A/D 转换的结果值。 3在小车冲出赛道的实验中,我们使用 EEPROM 来记录冲出赛道时的速 度和当时的传感器状态。 第五章、开发工具、制作、安装、调试过程说明 5.1 开发工具 程序的开发是在组委会提供的 CodeWarrior IDE 下进行的,包括源程序的 编写、编译和链接,并最终生成可执行文件。 CodeWarrior for S12 是面向以 HC1 和 S12 为 CPU 的单片机嵌入式应用 开发软件包。包括集成开发环境 IDE、处理器专家库、全芯片仿真、可视化参 数显示工具、项目工程管理器、C 交叉编译器、汇编器、链接器以及调试器。 5.2 调试过程 我们使用的单片机的 FLASH 中预先下载了监控程序,由 CodeWarrior 生 成的可执行文件就是在这个监控程序的引导下,由计算机的串口下载到单片机 的 FLASH 中的。因为这种方法既方便快捷又安全可靠,所以我们选用了这种 方法而放弃了用 S12 特有的 BDM 方法进行程序的调试。具体的操作方法如下: 从 MC9SDG128 开发板开始,将 RS232-232 串口线接到 PC 的串口 COM1 上。使用 WINDOWS 下的超级终端通信软件:执行“开始”|“程序” |“附件”|“通信”|“超级终端”命令。 将 COM1 设置成 9600 波特率,8 位、无效验位,1 个停止位,不使用硬 件流量控制。 插上+5V 电源,按开发板上的复位按钮,在 PC 的超级终端上就会显示提 示信息。 在超级终端内键入 E 擦除单片机的 FLASH,然后键入 F 将.S19 文件下载 到单片机的 FLASH 内。 这样,我们编写的程序就能在单片机中运行了。需要说明的是,开机后 4 秒钟后才会自动运行用户程序。 第六章、模型车的主要技术参数说明 6.1 智能车外形参数 车长:39cm 车宽:20cm 车高:9.8cm 车重:1.456kg 6.2 电路部分参数 我们小组所改造的智能车采用一块比赛标准 7.2V 电池供电,电路中共有 17 个电容,容量总计 95.366 法。当模型车全功率开动时,功耗约为 50W。 6.3 传感器的种类和个数 本车的传感器部分由两种传感器构成: 带有选频能力的传感器可以在一定程度上抗干扰(共 3 个), 没有选频能力,使用的 AD 转换方式的传感器共 8 个。 6.4 除了车模原有的驱动电机、舵机之外伺服电机数量 除了车模原有的驱动电机、舵机之外使用了 2 个伺服电机。 结论 自我们组队以来,每个成员都在课余时间尽自己最大的力量来解决问题优 化方案开拓创新,我们不仅把在课堂上所学的理论知识化为实际,还在需要的 方面大量的学习了新的理论知识,开拓了视野的同时提高了综合能力。这部小 小的车子,从速度到转角,从参数设置到程序编排,从每一个细小的齿轮螺丝 到总体的车身设计,无处不闪烁着队员们智慧的光彩 我们在技术报告中详细的介绍了这部车子从概念的诞生到成长为一部成熟 稳定的作品的全过程,主要包括我们的设计思路和制作过程,还有在修改方案 时对各种方法优劣的对比取舍。 经过几个月不懈的努力与反复计算试验,我们确定下了现在使用的传感器 的排布方案,电路方案以及机械方面的细节工作。这是从许多套方案中精心比 较后选取组合的,具有稳定高速准确等优点。 对于二十号的比赛,我们有信心也有勇气拿出我们的实力与各高校的选手 们一决高下。取得好的成绩固然是每个人最大的梦想,可是更为宝贵的是我们 在这个过程中学到的知识,还有合理分工,团结合作,激流勇进的精神。这是 我们大家共同努力的成果,成功将属于我们每个人! 参考文献 1 邵贝贝. 嵌入式实时操作系统LCOS-(第 2 版)M. 北京清华大学出版 社2004 2 臧杰,阎岩. 汽车构造M. 北京. 机械工业出版社M2005 3 安鹏,马伟S12 单片机模块应用及程序调试J. 电子产品世界. 2006第 211 期 162-163 4 童诗白,华成英模拟电子技术基础M北京. 高等教育出版社2000 5 沈长生常用电子元器件使用一读通M北京. 人民邮电出版社2004 6 王厚枢传感器原理M北京. 航空工业出版社. 1987 7 刘光斌等单片机系统实用抗干扰技术M北京. 人民邮电出版社. 2003 8 宗光华机器人的创意设计与实践M北京. 北京航空航天大学出版社. 2004 9 殷召生AVR 单片机在直流伺服控制系统中的应用M北京. 工业设计计算机. 2002 10 张伟等Protel DXP 高级应用M北京. 人民邮电出版社. 2002 11 司利增. 汽车防滑控制研究ABS 与 ASRM. 北京. 人民交通出版社. 2003 附录 源程序:main.c /* *= = *SMARTCAR LAB OF USTB * * FILE NAME : main.c * Description: the main function of this project *Author : ChenXi *DATE : 2006-07-29 *MODIFY DATE: *-*-* *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 #define 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 /B 口最低 3 位输入 static uchar ucSensorState; /AD 采集的传感器状态 static uint uiAD_result8; /AD 转换结果保存数组 static uint uiPulse; static uchar ucDepartureDegree; 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 uchar BrakeFlag; static uchar OutFlag; /传感器在黑线上的标志,最后三位 xxxxx LeftFlag MiddleFlag RightFlag static uchar LastOutFlag; /记录上一个变量 static uchar tempPWMDTY67; static uchar ABC; /*= 子函数定义 =*/ / /PID 部分/ / /定义 PID 参数 #define VV_KPVALUE 3 /比例 #define VV_KIVALUE 40 /积分 #define VV_KDVALUE 3 /微分 #define VV_MAX 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_FeedBack signed long vi_PreDerror;/速度 PID,前一次,速度误差之差,d_error-PreDerror; unsigned int v_Kp; /速度 PID,Ka = Kp unsigned int v_Ki; /速度 PID,Kb = Kp * ( T / Ti ) unsigned int v_Kd; /速度 PID, signed long vl_PreU; /电机控制输出值 PID; PID sPID; / PID Control Structure void PIDInit(void) sPID.vi_Ref = 0 ; /速度设定值 sPID.vi_FeedBack = 0 ;/速度反馈值 sPID.vi_PreError = 0 ; /前一次,速度误差,vi_Ref - vi_FeedBack sPID.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; error = (signed long)(pp-vi_Ref - pp-vi_FeedBack);/ 偏差计算 d_error = 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,防止调节最高溢出 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; /控制寄存器 2:上电,标志位快速清零,查询方式不使用中断 ATD0CTL2 = (ATD0CTL2_ADPU_MASK|ATD0CTL2_AFFC_MASK); /控制寄存器 3:转换序列长度为 3,FIFO 模式 ATD0CTL3 = (ATD0CTL3_S8C_MASK/*ATD0CTL3_S2C_MASK|ATD0CTL3_S1C_MASK|ATD0CTL3_F IFO_MASK*/); /控制寄存器 4:10 位 AD,PRS=0b00110=6, AD clock frequency 24/6/2=2MHz ATD0CTL4 = (/*ATD0CTL4_SRES8_MASK|*/ATD0CTL4_PRS2_MASK|ATD0CTL4_PRS1_MASK); /控制寄存器 5:右对齐方式,连续转换模式,多通道采样模式 ATD0CTL5 = (ATD0CTL5_DJM_MASK|ATD0CTL5_SCAN_MASK|ATD0CTL5_MULT_MASK); ATD0DIEN=0x00; / 禁止数字输入缓冲 /*- AD 转换函数,查询方式 -*/ void AD_Convert(void) if(ATD0CTL2_ASCIE = 0) /采用查询方式 while(!ATD0STAT0_SCF); /等待各通道转换结束 uiAD_result0 = ATD0DR0; /读通道 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 (void) uchar i; AD_Convert(); for(i=0;i=Middle) ucSensorState|=(10;i-) if(StateB i-) if(ucAD_Port i-) if(ucAD_Port if(scLastDeparture =(-2) /中间 OutFlag = 0x02; if(scLastDeparture 2) /左边 OutFlag = 0x01; 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; LeftBrake; */ /*3 else if(PWMDTY67 = 129) PWME_PWME5 = 1; Start; */ /*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-130-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) PWME_PWME5 = 0; PTP_PTP5 = 1; LeftBrake;
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 【正版授权】 IEC 61035-2-1:1993 FR-D Specification for conduit fittings for electrical installations - Part 2: Particular specifications - Section 1: Metal conduit fittings
- 【正版授权】 IEC 60305:1995 FR-D Insulators for overhead lines with a nominal voltage above 1000 V - Ceramic or glass insulator units for a.c. systems - Characteristics of insulator unit
- 校园消防知识培训课件讲座
- 辽宁省沈阳市城郊市重点联合体2026届高二化学第一学期期末综合测试模拟试题含答案
- 航天事例面试题及答案
- 计划管理试题及答案
- 2025年吉林省中考语文真题(含答案)
- 入门保安考试题及答案
- 投石入水考试题及答案
- 校园冬季运动安全知识培训课件
- 机关事业单位工人汽车驾驶员高级、技师国家题库练习题及答案
- 2025年辽宁省地质勘探矿业集团有限责任公司校园招聘笔试备考题库带答案详解
- 2025年高处作业特种作业操作证考试试卷:高处作业特种作业操作证考试备考攻略与技巧
- 阿托西班护理
- 脑卒中在中医护理技术的应用讲课件
- 社区警务团队管理制度
- 应急消防疏散培训课件
- 产房分娩安全管理制度
- 普通化学无机化合物
- 2025年福建省无人驾驶航空器操作控制职业技能大赛(航拍无人机驾驶员)试题(附答案)
- 职称评审委托合同协议
评论
0/150
提交评论