分享
技术报告 .pdf
下载文档

ID:3495753

大小:2.01MB

页数:80页

格式:PDF

时间:2024-05-16

收藏 分享赚钱
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,汇文网负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。
网站客服:3074922707
技术报告 技术 报告
第八届飞思卡尔光电直立车 第第八八届“飞思卡尔”杯全国大学生智能汽车竞赛届“飞思卡尔”杯全国大学生智能汽车竞赛 技术报告技术报告 学校:成都信息工程学院 队伍名称:光电二队 参赛队员:冯诗博 许言午 胡雪林 带队教师:王国江 姚玉琴 第八届飞思卡尔光电直立车 2 关于技术报告和研究论文使用授权的说明 本人完全了解第八届“飞思卡尔”杯全国大学生智能汽车竞赛关保留、使用技术报告和研究论文的规定,即:参赛作品著作权归参赛者本人,比赛组委会和飞思卡尔半导体公司可以在相关主页上收录并公开参赛作品的设计方案、技术报告以及参赛模型车的视频、图像资料,并将相关内容编纂收录在组委会出版论文集中。参赛队员签名:带队教师签名:日期:第八届飞思卡尔光电直立车 3 摘要摘要 在本文将以第八届全国大学生飞思卡尔杯智能汽车比赛为背景,以光电组的直立小车位主体,重点介绍了两轮车的直立平衡及速度、方向控制理论。两轮车在未来必定是个热门话题,这里的一些研究在将应该会起到一定的帮助。其次直立小车所处光电组的 CCD 传感器寻轨体系有性能稳定,抗干扰能力强的特点,在未来也将是一大发展。我们的小车将围绕 MK60DN512 控制核心来完成小车从四轮到两轮从简单直立到高速飞奔。其中涉及有角度传感器,角速度传感器,线性 CCD 传感器,速度速度传感器等几大传感器,在它们的共同作用下实现小车的 3 个 PID 闭环控制。在小车的制作上有有着控制理论、机械、电路、程序几大难点。在制作、调试过程中我们不断的围绕高速、稳定为中心,不断的对以上几大点进行修改以适应要求。这个比赛真正对我们的理论和动手实践都有着非常大的考验。关键字:PID 直立 陀螺仪 卡尔曼融合 温漂 差速控制 度 第八届飞思卡尔光电直立车 I 目录目录 摘要.3 第一章 引言.4 1.1 大赛背景.4 1.2 小车的制作背景.5 第二章 整体方案的设计.5 2.1 整体系统构成介绍.5 2.2 系统框图.6 第三章机械结构制作、调制.8 3.1 智能车车体机械建模.8 3.2 车子结构的具体尺寸.9 3.3 底盘固定.9 3.4 电池位置的确定.10 3.5 驱动板的位置选取.10 3.6 线性 CCD 工作原理.11 3.6.1TSL1401 线性传感器特性:.11 3.6.2TSL1401 线性传感器驱动程序.11 3.6.3 积分时间 or 曝光时间.12 3.7 线性 CCD 上位机介绍.12 3.8 其他调节.14 3.9 总结.15 第四章硬件电路.15 第八届飞思卡尔光电直立车 II 4.1 电源模块.15 4.1.1 驱动供电.15 4.1.2 电路中的各类运放、数字芯片供电.15 4.1.3 处理器供电.15 4.2 电机驱动.16 4.3 加速度计陀螺仪电路.17 4.4 其他模块.17 第五章软件结构.18 5.1 控制算法概述.18 5.2 需要用到的底层驱动程序及其初始化:.19 5.3 PIT 定时中断建立完整的控制任务.20 5.4 任务详细介绍.24 5.4.1 直立控制.24 5.4.2 速度控制.26 5.4.3 方向控制.28 5.5 按键控制及 LED 显示调节参数.32 5.6 陀螺仪静态值监测及手动调整程序.34 5.7 陀螺仪加速度计的 AD 滤波.36 第六章开发工具、调试环境.38 6.1 单片机开发工具.38 6.2 调试上位机.38 6.3 蓝牙模块的使用.39 6.4 蓝牙与虚拟示波器的连用.39 第七章主要参数调整.40 第八届飞思卡尔光电直立车 III 7.1 直立参数调整.40 7.1.1 卡尔曼滤波的参数调整.40 7.1.2 直立 PD 调节.40 7.2 速度 PI 的调节.41 7.2.1 静止调整.41 7.2.2 动态速度调节.41 7.3 方向 PD 控制.42 7.4 总结.42 第八章主要车模参数.42 第九章总结.43 参考文献.43 附件一:主控电路.44 附件二:驱动电路.45 附件三:程序源代码.45 第八届飞思卡尔光电直立车 4 第一章第一章 引言引言 1.1 1.1 大赛背景大赛背景 全国大学生“飞思卡尔”杯智能汽车竞赛起源于韩国,是韩国汉阳大学汽车控制实验室在飞思卡尔半导体公司资助下举办的以 HCSl2 单片机为核心的大学生课外科技竞赛。组委会提供一个标准的汽车模型、直流电机和可充电式电池,参赛队伍要制作一个能够自主识别路径的智能车,在专门设计的跑道上自动识别道路行驶,最快跑完全程而没有冲出跑道并且技术报告评分较高为获胜者。其设计内容涵盖了控制、模式识别、传感技术、汽车电子、电气、计算机、机械、能源等多个学科的知识,对学生的知识融合和实践动手能力的培养,具有良好的推动作用。为加强大学生实践、创新能力和团队精神的培养,促进高等教育教学改革,受教育部高等教育司委托(教高司函2005201 号文,附件 1),由教育部高等学校自动化专业教学指导分委员会(以下简称自动化分教指委)主办全国大学生智能汽车竞赛。该竞赛是以智能汽车为研究对象的创意性科技竞赛,是面向全国大学生的一种具有探索性工程实践活动,是教育部倡导的大学生科技竞赛之一。该竞赛以“立足培养,重在参与,鼓励探索,追求卓越”为指导思想,旨在促进高等学校素质教育,培养大学生的综合知识运用能力、基本工程实践能力和创新意识,激发大学生从事科学研究与探索的兴趣和潜能,倡导理论联系实际、求真务实的学风和团队协作的人文精神,为优秀人才的脱颖而出创造条件。全国大学生“飞思卡尔”杯智能汽车竞赛由竞赛秘书处设计、规范标准硬软件技术平台,竞赛过程包括理论设计、实际制作、整车调试、现场比赛等环节,要求学生组成团队,协同工作,初步体会一个工程性的研究开发项目从设计到实现的全过程。该竞赛融科学性、趣味性和观赏性为一体,是以迅猛发展、前景广阔的汽车电子为背景,涵盖自动控制、模式识别、传感技术、电子、电气、计算机、机械与汽车等多学科专业的创意性比赛。该竞赛规则透明,评价标准客观,坚持公开、公平、公正的原则,力求向健康、普及、持续的方向发展。该竞赛以飞思卡尔半导体公司为协办方,得到了教育部相关领导、飞思卡第八届飞思卡尔光电直立车 5 尔公司领导与各高校师生的高度评价,已发展成全国 30 个省市自治区近 300 所高校广泛参与的全国大学生智能汽车竞赛。2008 年起被教育部批准列入国家教学质量与教学改革工程资助项目中科技人文竞赛之一 1.2 1.2 小车的制作背景小车的制作背景 这份技术报告将详细介绍:小车的设计制作的整体思路、细节电路、模糊控制算法、参数调试过程,及最终的整体机械结构。虽然主体的思路采用了卓秦老师的控制思路,同时我们也加进了非常多创新想法。今年的比赛光电组运用了线性 CCD,由于没有这方面的技术积累,这对我们来说是一个不小的挑战。在这份报告中我们会详尽地阐述了我们的思想和创意。在制作过程中最难的就是每一个 PID 参数的调试,基本上每一个参数的确定都花费了大量的时间的。这份报告充满了我们的汗水和心血,是我们小组成员共同努力后的成果。这次的对控制算法要求极高的直立小车是对我们小组的巨大考验。前期我们分别从控制原理、电气、机械、嵌入式常识等学科开始学习;在中期的时候参照卓老师的思路,编写了基础的控制程序,在加入了部分自己的思路后终于使小车立了起来,又经过各种修改才能顺利跑完一圈;在后期,我们不断的从机械,软件算法,PID 参数,反复修改最终使小车能够快速适应每一个赛道并顺利完成比赛。再次感谢飞思卡尔公司对这个比赛的支持,感谢他们让我们有机会参加此次有意义的比赛,感谢我们母校成都信息工程学院对我们比赛的支持,最后还要感谢清华大学卓老师、以及我们的指导老师、论坛里面的各位战友。第第二二章章 整体方案的设计整体方案的设计 2 2.1 1 整体系统构成介绍整体系统构成介绍 我们根据大赛组委会规定采用统一提供的 D 型车,并将电机和底盘连在一起形成一个一维摆。用 MK60 做处理器,加速度计和陀螺仪做直立倾角传感器,用 IRF3205 MOS 管搭建 H 桥做驱动,光电编码器当速度反馈器,一个线性 CCD第八届飞思卡尔光电直立车 6 采集路面信息。先由加速度计,陀螺仪融合得到角度,通过驱动电机是车模保持直立;之后再通过速度 PI 及编码器采集的转速信息控制车模以一定速度前进;最后通过线性 CCD 得到道路信息有差速 PD 控制车体的整体转向。在控制过程中用了直立PD、速度 PI、方向 PD 三个闭环控制是整个车子保持平稳的寻轨前进。为了调节参数,我们使用了按键、LED 及蓝牙模块来辅助调节。整体车照片如下:图 1.1 小车整体照片 2 2.2.2 系统框图系统框图 第八届飞思卡尔光电直立车 7 图 2.2 整体系统流程图 加速度计:MA7660 提供一个精确的角度信息,但是受外界干扰较大。陀螺仪:ENC_03 能够提供转动角速度信息,通过积分可以得到角度信息,但积分误差较大:与加速度计融合得到角度。光电编码器:提供准确的速度信息,为车模匀速运动提供闭环条件。线性 CCD:采集路面信息,为车子的运动提供眼睛 电池(7.2V)稳压电路 5V 3.3V MK60 处理器 线性 CCD 陀螺仪加速度计 编码器 蓝牙 电 机 电机驱动 第八届飞思卡尔光电直立车 8 第三第三章机械结构制作章机械结构制作、调制调制 智能车系统任何的控制都是在一定的机械结构基础上实现的,因此在设计软件结构和算法之前一定要对整个车模的机械结构有一个全面的认识,并且能够将其建立成相应的数学模型。在设计机械结构的同时也应该根据具体算法情况来做相应调整,实际的调试过程中需要不断的将软件和硬件磨合寻找一个最佳结合点。本章将主要介绍智能车车模的机械结构和调整方案。直立车在控制上机械结构直接关系到了三个 PID 控制参数范围。其中重心的高低及车体的稳固性否是最关键的。通过这样的锻炼,我们得以在团队合作的氛围中,充分体会到一个具体的工程实践项目从设计到实现,再到运行调试的全部过程。巩固和学习了理论知识,也积累了不少的实践 3 3.1.1 智能车车体机械建模智能车车体机械建模 图 3.1 机械模型 图 2-3 线性 CCD 第八届飞思卡尔光电直立车 9 整体设计上遵守一个简洁、稳定、低重心的原则。我们制作时经过多次的更改最终得到如图所示的结构图。3 3.2.2 车子车子结构的具体尺寸结构的具体尺寸 表 3.1 小车尺寸表 部件名称 尺寸 底盘长度 345mm 底盘宽度 140mm 轮子距离 160mm 3 3.3.3 底盘固定底盘固定 原底盘与电机之间是用的减震弹簧连接的,为了稳定我们去除了连杆及弹簧支架取了一块制作电路的铜板连接。在制作时根据车子的底盘形状做作了一块大小类似的铜板,然后根据底盘上螺丝的位置在铜板上面钻孔。用原有螺丝固定到底盘上,这样虽然加重了车子的整体的重量,但是对于稳定性来要求是必不可少的。具体的制作图如下:图 3.2 底盘固定 第八届飞思卡尔光电直立车 10 3 3.4.4 电池位置的确定电池位置的确定 原始的电池在底盘中部,在直立是影响不大,通过参数调试可以试车子直立。但是在速度控制中发现速度到达一定范围后就很容易翻车,寻找原因发现是车子整体的中心过高导致的。目前最简单有效的解决方法就是改变电池的位置。把电池背在后面并且安到电机的底盘处,就可以使车体重心下降 4-5cm。需要注意的是在重心移动后发现,直立的参数变化比较大,需要重新调整。改装图如下:3 3.5.5 驱动板的位置选取驱动板的位置选取 最初设计时驱动板放在 K60 的主板上面,不过后面发现散热和电机驱动信号对主板上的加速度计陀螺仪等角度传感器有较大的干扰。最终决定将主控电路和电机驱动电路板分开放置。安装图如下:图 3.3 电池安装 第八届飞思卡尔光电直立车 11 3 3.6.6 线性线性 CCDCCD 工作原理工作原理 在本次直立车的设计过程中,我们团队选用蓝宙线性 CCD 3.6.1TSL1401 线性传感器特性线性传感器特性:体积超小,尺寸(长 22mm,宽 22mm,高 16mm),重量轻 采用聚光透镜,成像清晰 安装方便,易于组合安装 三线接口,采用 1mm 间距排线 可更换不同参数镜头 可选偏振片,用于消除赛道反光 3.6.2TSL1401 线性传感器驱动程序线性传感器驱动程序 TSL1401 线性传感器驱动程序比较简单,只需要 MCU 控制 CLK 及 SI 两个引脚安装特 定的时序发出方波信号 AO 引脚就会依次输出 128 个像素点的模拟信号。图 3.4 驱动安装方案 第八届飞思卡尔光电直立车 12 以下是 TSL1401 线性传感器时序图:图 3.5 TSL1401 线性传感器时序图 3.6.3积分时间积分时间 or 曝光时间曝光时间 像素的输出值与积分时间成正比其实这里所就是熟知的曝光时间曝光时间曝光时间。这个曝光时间的概念和相机中胶片是一样。曝光时间是指底片的感光时间,曝光时间越长底片上生成的相片越亮,线性 CCD 的曝光时间也是这个原理。图 3.6 曝光时间时序 3 3.7.7 线性线性 CCDCCD 上位机介绍上位机介绍 CCDView 软件由 CCDView.exe、ComDataHook.dll 组成,上位机图形键面如下图。第八届飞思卡尔光电直立车 13 CCDView 主要用于显示用户 CCD 传感器采集的数据,并以图像的方式显示。条形码:CCD 采集的数据,以灰度的方式表示,每个竖条代表一个数据。曲线图:横坐标为 CCD 数据的偏移,纵坐标为灰度值(0255)。图 3.7 CCD 上位机键面 第八届飞思卡尔光电直立车 14 图 3.7 线性 CCD 数据接收到数据键面 3 3.8.8 其其他调节他调节 其他的就还有编码器的选择,光电码盘比较便宜,但是在可信程度上及计数的精度上感觉不太好,最终选择了 100 线的小型光电编码器。至于编码器的固定,我们选择了运用制作 PCB 的铜板做了一个小的板子,将编码器放在电机的齿轮上面,虽然测速精度不高但是其他地方空间不足。编码器安图:图 3.8 编码器安装 第八届飞思卡尔光电直立车 15 3 3.9.9 总结总结 机械结构上要求有一个稳定、牢固的结构,低重心才能够在弯道上有较快的速度,但是需要高重心才能够在直线上保持高速不倾倒需要根据具体情况判断更改。第四第四章硬件电路章硬件电路 4 4.1.1 电电源模块源模块 所有电路芯片的供电调查发现为满足需要,电路共需要三种电压:4.1.1 驱动供电驱动供电 耗电量最大的,为了得到最大的驱动效果且不违反使用升压的规则,直接使用电池提供电压,经测量在 7.2V 到 8.2 之间。为了减少对其他电路的干扰及使驱动供电稳定需要在上面并上大电容 4.1.2 电路中的各类电路中的各类运放、数字芯片供电运放、数字芯片供电 K60、蓝牙、加速度计、线性 CCD 等均需要 3.3V 供电。隔离芯片需要 5V 供电。实验中发现开关电源芯片虽然转化效率比较高,但是在升压过程中会有一定的噪声信号产生。且由于供电电压为 7.2V 所以对于低压差(7.2V-5V)有时不稳定,对于需要进行精确电压采集的各类供电不太合适。最终选择了多片线性电源芯片分别供电的方式来稳定提供供电。在低压差下情况下,线性电源的转化效率也还算可以,干净稳定。4.1.3 处理器供电处理器供电 飞思卡尔公司 32 位处理器 MK60,需要 3.3V 供电。在方案上可以用 5V 通过1117-3.3 转化到 3.3,但是测量发现 MK60 在高频工作(180M)下耗电量比较大(约 0.12A)。从 5V 处降压会增加 5V 的负担。查 1117 的数据手册时发现可以直接用 8V 供电,所以选用一片 LM1117-3.3v 供电。具体线性电源供电原理图如下:第八届飞思卡尔光电直立车 16 图 4.1,线性电源原理图 4 4.2 2 电机驱动电机驱动 常用的电机驱动有两种方式:一、采用集成电机驱动芯片;二、采用 N 沟道 MOSFET 和专用栅极驱动芯片设计。由于分立的 N 沟道 MOSFET 具有极低的导通电阻,大大减小了电枢回路总电阻。另外,专门设计的栅极驱动电路可以提高 MOSFET 的开关速度,使 PWM 控制方式的调制频率可以得到提高,从而减少电枢电流脉动。并且专用栅极驱动芯片通常具有防同臂导通、硬件死区、欠电压保护等功能,可以提高电路工作的可靠性。IR 公司号称功率半导体领袖,所以我们主要在 IR 公司的产品中进行选择。其中 IR2104 型半桥驱动芯片可以驱动高端和低端两个 N 沟道 MOSFET,能提供较大的栅极驱动电流,并具有硬件死区、硬件防同臂导通等功能。使用两片 IR2104 型半桥驱动芯片可以组成完整的直流电机 H 桥式驱动电路。由于其功能完善,价格低廉容易采购,所以我们选择它进行设计,如图 3.2 所示:第八届飞思卡尔光电直立车 17 图 图 3.2 IR2104 应用 MOS 管我们选择了 IR 公司 TO-252 封装的 IRF3205 型 N 沟道 MOSFET,VDSS=55 伏、RDS(on)=8.0 毫欧、ID=110 安。电机驱动部分电路图见附录二。4 4.3.3 加速度计陀螺仪电路加速度计陀螺仪电路 对于直立部分由于加速度计使用的是 QFN 封装考虑到具体的实验室条件,焊接非常困难,所以选择了购买现成模块。对于转向使用的陀螺仪,我们参考卓老师方案:具体原理图如下:图 4.3 陀螺仪电路原理图 4 4.4 4 其他模块其他模块 123456ABCD654321DCBATitleNumberRevisionSizeCDate:12-Aug-2012Sheet of File:C:Documents and SettingsAdministrator.DB7CF894D10D451桌面wave426飞思卡尔OK.ddbDrawn By:Vref1GND2VCC3OUT4J1EN-03C30CAPR18R+3.3V+5-4VDD2VSS3out1C52TLV2211+3.3VR23RR19RR22RC51CAPR27RGYRO3C50R第八届飞思卡尔光电直立车 18 其它总的使用了加速度计陀螺仪模块和 K60 最小系统版两款现成模块 图 4.4 现成模块图 第第五五章软件结构章软件结构 5 5.1.1 控制算法概述控制算法概述 直立小车的对 PID 控制算法要求比较高,一共分为三个 PID;第一直立 PD,这个是的前提;第二速度 PI,这个是行动的前提;第三方向 PD,这个是顺利比赛的前提。这三个控制的难点在于 PID 的参数取值范围,只要能够进入正确范围就基本能够顺利完成,接下来就看参数之间的搭配了。对于以上的几个 PID,我们采用分时间片的思路完成。在控制某一个控制的时候都假设小车是保持静止的。当然要想有最佳的控制效果还应该在 PID 的基础上加入一些模糊的限制条件,这个就需要面对现实的条件自己灵活的加入。在面对众多的参数的时候,为了避免反复多次下载程序且能够快速找到参数,一个按键控制和必要的显示机会必不可少了。具体控制流程图:第八届飞思卡尔光电直立车 19 5 5.2.2 需要用到的底层驱动程序及其初始化:需要用到的底层驱动程序及其初始化:pllinit150M();/主频倍升至 150MHz DisableInterrupts;/禁止总中断 gpio_INTO_init();/外中断初始化 light_init(PORTA,17,0);/16 15 14 light_init(PORTA,16,0);light_init(PORTA,15,0);light_init(PORTA,14,0);上电运行 参数程序初始化 陀螺仪静态检测 车模倾角直立控制 速度检测 速度控制 赛道检测 转向控制 电机输出 图 5.1 软件流程图 角度保护 第八届飞思卡尔光电直立车 20 /gpio_init(PORTE,7,0,0);uart_init(UART5,75,9600);/串口 5 初始化,此串口用于蓝牙传输 PIT0_INIT();/定时器 0 初始化,定时时间 1ms hw_adc_init(0);/ADC0 初始化 hw_adc_init(1);/ADC1 初始化 hw_FTM0_init();/初始化 DMAInit();/DMA 初始化 CCD_init();/CCD 初始化 CCD1_init();ADValue_VO_1_0=hw_ad_ave(1,10,10,30);/陀螺仪零点确定 ADValue_VO_2_0=hw_ad_ave(0,12,10,30);EnableInterrupts;/开总中断 5 5.3 PIT.3 PIT 定时中断建立完整的控制任务定时中断建立完整的控制任务 在定时中断里面外面建立的三个主要的任务,在三个时段分别完成一样,在每次任务之前外面对道路信息都进行了一次采集,这样可以读到多个数据能够有利于转向控制的准确性。直立、速度、方向三个任务在 1ms 中断中轮流执行。具体流程如下:1ms 中断入 1ms 中断出 计数器加 道路 AD 采集 1、直立控制 2 速度控制 3、方向控制 图 5.2 任务流程 第八届飞思卡尔光电直立车 21 void PIT0_isr(void)PIT_TFLG(0)|=PIT_TFLG_TIF_MASK;/清标志位 DisableInterrupts;static uint8 CCD_1_start=0;static uint8 timer_5ms=0;static int speed_jishu=0;static int Start_Stop_jishu=0;timecount+;if(timecount=5)CCD_1_start=1;/与第一个 CCD 曝光时间错位,以免引起时序有误 if(CCD_1_start=1)timecount_1+;timer_5ms+;if(timecount=exposure_time)star_exposure();/开始曝光 if(timecount=5)timecount=0;CCD_header(ccdd);/第八届飞思卡尔光电直立车 22 /*if(timecount_1=exposure_time_1)star_exposure1();/开始曝光 if(timecount_1=10)timecount_1=0;CCD1_header(ccdd_1);*/if(Start_Stop_jishu=2000)START_STOP();/起跑线 /switch(timer_5ms)case 1:ADC_CONVER();timer_jishu+;D_timer_jishu+;break;case 2:if(speed_flag=1)speed_jishu+;if(speed_jishu=400)&(speed_flag=1)第八届飞思卡尔光电直立车 23 set_shudu=set_sd;/speed_flag=2;if(speed_flag=1)Start_Stop_jishu+;if(Start_Stop_jishu 2005)Start_Stop_jishu=2005;/*if(speed_jishu=1500)&(speed_flag=1)set_shudu=200.0;/speed_flag=2;*/PD_CONTROL();/电机角度控制,并输出 PWM break;case 3:ReadCap_value();/测速 break;case 4:/CCD_1_zhangai();if(timer_jishu=speed_zouqi)/0.02S 采集一次数据 timer_jishu=0;第八届飞思卡尔光电直立车 24 PI_CONTROL();break;case 5:/方向控制 timer_5ms=0;if(D_timer_jishu=Distance_zouqi)D_timer_jishu=0;PD_Distance();break;/enable_pit_interrupt(0);EnableInterrupts;5 5.4.4 任务详细介绍任务详细介绍 5.4.1 直立控制直立控制 1)直立原理分析 直立控制模型的建立如图 控制倒立摆底车轮,使得它作加速运动。这样站在小车上(非惯性系,以车轮作为坐标原点)分析倒立摆受力,它就会受到额外的惯性力,该力与车轮的加速度方向相反,大小成正比。第八届飞思卡尔光电直立车 25 这样倒立摆所受到的回复力为:f=mgsin cos 式中,由于很小,所以进行了线性化。假设负反馈控制是车轮加速度a与偏角 成正比,比例为 K。如果比例 k g,(g 是重力加速度)那么回复力的方向便于位移方向相反了.此外,为了使得倒立摆能够尽快地在垂直位置稳定下来,还需要增加阻尼力。虽然存在着空气和摩擦力等阻尼力,相对阻尼力比较小。因此需要另外增加控制阻尼力。增加的阻尼力与偏角的速度成正比,方向相反。因此上式可变为 f=按照上面的控制方法,可把倒立摆模型变为单摆模型,能够稳定在垂直位置。因此,可得控制车轮加速度的控制算法 a=k k 为车模倾角;为角速度;k,k均为比例系数;两项相加后作为车轮加速度的控制量。只要保证在 k g,k 0 的条件下,可以使得车模像单摆一样维持在直立状态。2)软件控制分析 有上面的公式推导可以得到具体的控制理论,对于直立控制必须要的两个参数为车模倾角和车模转动角速度。本来可以从加速度计直接得到角度,算出角速度,也可以从陀螺仪得到角速度,积分得到角度的。不过加速度计受外界干扰比较大,陀螺仪的积分存在误差,随意我们把两个结合起来得到一个可信度较高的角度。然后再通过上面的控制算法把 k,k抽象成为所需的 PD 控制。A、角度与角速度的获取 第八届飞思卡尔光电直立车 26 角度的获取我们选择了卡尔曼。卡尔曼是个人名(鲁道夫.E.卡尔曼);滤波是对信号进行处理的算法;卡尔曼提出了该算法。(类比傅里叶变换:傅里叶提出的一种信号正交变换算法。)它可以把我们的检测值(带有一定的误差),和经验估计值结合起来得到一个相对可信的值的算法。这个我们把加速度计的值作为测量值,把陀螺仪测到的值作为估计值。具体的算法有一下几条公式得到:NowData=RealData+gyroscope_rate*ZP;NowData_P=NowData_P+Q;Kg=NowData_P/(NowData_P+R);RealData=NowData+Kg*(ACC_Angle-NowData);RealData_P=(1-Kg)*RealData_P;Deg_value=RealData;PS:RealData:上次得到的角度 gyroscope_rate:陀螺仪得到的角速度,ZP:陀螺仪积分时间 Deg_value:后面计算使用角度 B、直立控制算法 根据上面的公式推导可以得到具体的角度控制程序 void AngleMC_Control(void)AngleMC_value=(Angle_P+angle_p)*(set_angle-Deg_value)+(Angle_D+angle_d)*gyroscope_rate;5.4.2 速度控制速度控制 1)速度控制理论分析 第八届飞思卡尔光电直立车 27 为了是车子在速度为零时保持直立,需要控制移动的距离最终达到零,所以速度控制在 P 控制的基础上还应该有 I 积分量的作用,才能使车子保持平衡状态运动。当然空速的前提是要能够实时知道车子的运动速度。我们在车子上安装了一个光电编码器,捕获他的脉冲数从而算出速度。在MK60 的内部由于能用的 LPT 只有一路,所以我们改用了网上提供的 DMA 计数的方法。可以同时得到两路准确的脉冲数。具体的程序可以参照附件。2)速度控制算法 由于直立小车不想四轮车一样可以快速的切换运动速度,为了稳定我们在99ms 内才测量并更改一次控制状态,在 99ms 内分为 33 次平滑的更改两个分任务的程序见下面:void PI_CONTROL(void)/速度控制 float speed_Value;/float Real_shudu;/static float I_shudu_c=0;/速度差的积分项 Real_shudu=(LeftPulse+RightPulse)/2;/速度取两个轮子速度的平均值 I_shudu_c=I_shudu_c+(set_shudu-Real_shudu)*0.1;/积分 /I_shudu_c+=set_shudu-Real_shudu;if(I_shudu_c 1200)I_shudu_c=1200;if(I_shudu_c -1200)I_shudu_c=-1200;speed_Value=Ksp*(set_shudu-Real_shudu)+Ksi*I_shudu_c;speed_old=speed_new;第八届飞思卡尔光电直立车 28 speed_new=speed_Value;scope0=(uint16)(LeftPulse*10);/角速度 1 返回值 scope1=(uint16)(RightPulse*10);/y 轴返回电压值 scope2=(uint16)(Real_shudu*10);/z 轴返回电压值 scope3=(uint16)(set_shudu*10);/*/LeftPulse=0;RightPulse=0;5.4.3 方向控制方向控制 1)原理分析 在方向控制上我们利用安装在车模上面的线性 CCD 检测赛道信息,再进行动态二值化处理,提取中心点,经过平滑滤波之后可以简单的算出偏移距离。在根据偏移距离来算出两个轮子转向所需的差速。同时为了达到转向的稳定平滑还需要加入一个转角的为分量即角速度。在前面已近用过的陀螺仪刚好可以提供一个角速度,由于这里不需要积分所以直接由陀螺仪就可以得到了,不在需要加速度计。void PD_Distance(void)/static uint8 s_old=0;float ADValue_VO_2;/float ZD_new;uint8 i,j_min=0,j_max=0;/j 用于标志 CCD 数据是否可信 uint8 vir_ccdd130;uint8 CCD_min10,CCD_max10;第八届飞思卡尔光电直立车 29 float CCD_ZD10;/赛道识别提取中心线所必要的数组 static float ZD_new=65.0,ZD_old;float ZD_min=130.0;/static uint8 zhangai_flag=0;static int zhangai_jishu=0,zhangai_jishu_x=0;/*二值化提取中心线*/ZD_old=ZD_new;vir_ccdd0=0;vir_ccdd129=0;for(i=0;i 128;i+)/进行 2 值化 if(ccddi=CCD_fazi)vir_ccddi+1=1;else;/2 值化结束 for(i=1;i 130;i+)if(vir_ccddi=1)&(vir_ccddi-1=0)第八届飞思卡尔光电直立车 30 CCD_minj_min=i;j_min+;if(vir_ccddi=0)&(vir_ccddi-1=1)CCD_maxj_max=i;j_max+;if(CCD_max0!=129)|(CCD_min0!=1)/判断是否全是白线 for(i=0;i j_max;i+)CCD_ZDi=(float)(CCD_mini+CCD_maxi)/2;if(JDZ(CCD_ZDi-ZD_old)60)ZD_new=ZD_old;/*方向动态 P 处理结束*/第八届飞思卡尔光电直立车 31 ADValue_VO_2=hw_ad_ave(0,12,10,30);/./D_gyroscope_rate=(float)ADValue_VO_2*0.47620-200.5;D_gyroscope_rate=(float)(ADValue_VO_2-ADValue_VO_2_0)*0.47620;Distance_Value=Kpp*(ZD_new-65.0)-Kdd*D_gyroscope_rate;if(Distance_Value 300)Distance_Value=300;if(Distance_Value 300)Distance_Value=300;if(Distance_Value -300)Distance_Value=-300;/*scope0=(uint16)(ZD_new*100);/角速度 1 返回值 scope1=(uint16)(ZD_new*100);/y 轴返回电压值 scope2=(uint16)(ZD_new*100);/z 轴返回电压值 scope3=(uint16)(ZD_new*100);*/Distance_old=Distance_new;Distance_new=Distance_Value;5 5.5.5 按键按键控制控制及及 LEDLED 显示显示调节参数调节参数 对于参数众多的直立小车,一个按键和显示是很必要的。是用按键和 LED组合调制参数的控制程序:void PORTE_isr(void)DisableInterrupts;/禁止总中断 if(PORTE_PCR24&0 x01000000)=0 x01000000)/light_change(PORTA,17);speed_flag=1;第八届飞思卡尔光电直立车 33 light_change(PORTA,15);/CCD_fazhi=fazhi();PORTE_ISFR=124;/清中断 else if(PORTE_PCR25&0 x01000000)=0 x01000000)speed_flag=1;light_change(PORTA,14);/CCD_fazhi=fazhi();PORTE_ISFR=125;/清中断 else if(PORTE_PCR26&0 x01000000)=0 x01000000)/E26 参数减少键 if(speed_flag!=1)set_jiaodu=set_jiaodu-0.1;light_change(PORTA,17);PORTE_ISFR=126;/清中断 else if(PORTE_PCR27&0 x01000000)=0 x01000000)/E27 参数增加键 if(speed_flag!=1)第八届飞思卡尔光电直立车 34 set_jiaodu=set_jiaodu+0.1;light_change(PORTA,16);PORTE_ISFR=127;/清中断 else ;EnableInterrupts;/开总中断 5 5.6 6 陀螺仪静态值监测及手动调整程序陀螺仪静态值监测及手动调整程序 陀螺仪在使用过程中发现一个比较难解决的问题就是他在静止时候的值在不同的气温下不同会出现较大的偏差,特别是突然下雨之后变化最大。为了解决这个问题,我们自己写了一个静态值检测程序,这个程序可以很简单的避免以上问题。在开机后先保持车子静止一段时间,让 K60 采集数据然后求平均。当然有时检测不是那么准确,会有一定的偏差,这时我们加入了一个按键 LED调节程序,轻松解决了这个问题。具体做法如下:/*自动检测程序*/void ParameterDect(void)float GYRO_Sum=0,GYRO_Sum1=0,ACC_Sum=0,ACC=0;static uint16 Time=0;while(Time=49000)GYRO_Sum+=GYRO;GYRO_Sum1+=GYRO1;ACC_Sum+=ACC;Time+;delay2(5);/必要的延时,以防 AD 切换不完全 Time=0;GYRO_F=GYRO_Sum/1000.0-400.0;/检测误差校正 GYRO_F1=GYRO_Sum1/1000.0-200.0;/自动检测 /*软件对比调节程序*/GYRO_Re

此文档下载收益归作者所有

下载文档
你可能关注的文档
收起
展开