基于微控制器k60的光电智能车控制软件设计论文(编辑修改稿)内容摘要:
进行简单的比例控制就可以完成车模方向控制。 车模倾角测量 在上节车模直立控制中介绍了控制车模直立的算法,通过测量车模的倾角和倾角加速度控制车模车轮的加速度来消除车模的倾角。 因此车模倾角以及倾角加速度的测量成为控制车模直立的关键。 测量车模倾角和倾角加速 度可以通过加速度传感器和陀螺仪实现。 加速度传感器可以测量由地球引力作用或者物体运动所产生的加速度。 竞赛规则规定如果车模使用加速度传感器必须使用飞思卡尔公司产生的加速度传感器。 该系列的传感器采用了半导体表面微机械加工和集成电路技术,传感器体积小,重量轻。 它的基本原理如图 所示。 图 加速度传感器 通过微机械加工技术在硅片上加工形成了一个机械悬臂。 它与相邻的电极形成了两个电容。 西安文理学院本科毕业设计(论文) 第 10 页 由于加速度使得机械悬臂与两个电极之间的距离发生变化,从而改变了两个电容的参数。 通过集成的开关电容放大电路量测电容参 数的变化,形成了与加速度成正比的电压输出。 MMA7260 是一款三轴低 g 半导体加速度计,可以同时输出三个方向上的加速度模拟信号,如图 所示。 图 三轴加速度传感器 通过设置可以使得 MMA7260 最大输出灵敏度为 800mV/g。 只需要测量其中一个方向上的加速度值,就可以计算出车模倾角,比如使用 Z 轴方向上的加速度信号。 车模直立时,固定加速度器在 Z 轴水平方向,此时输出信号为零偏电压信号。 当车模发生倾斜时,重力加速度 g 便会在 Z 轴方向形成加速度分量,从而引起该轴输出电压变化。 变化 的规律为 式中, g 为重力加速度; 为车模倾角; k 为比例系数。 当倾角 比较小的时候,输出电压的变化可以近似与倾角成正比。 似乎只需要加速度就可以获得车模的倾角,再对此信号进行微分便可以获得倾角加速度。 但在实际车模运行过程中,由于车模本身的运动所产生的加速度会产生很大的干扰信号叠加在上述测量信号上,使得输出信号无法准确反映车模的倾角,如图 所示。 图 车模运 动引起加速度计信号波动 西安文理学院本科毕业设计(论文) 第 11 页 车模运动产生的振动加速度使得输出电压在实际倾角电压附近波动,可以通过数据平滑滤波将其滤除。 但是平滑滤波也会使得信号无法实时反映车模倾角的变化,从而减缓对于车模车轮控制,使得车模无法保持平衡。 因此对于车模直立控制所需要的倾角信息需要通过另外一种器件获得,那就是角速度传感器 陀螺仪,如图 所示。 ( 2)角速度传感器 陀螺仪 陀螺仪可以用来测量物体的旋转角速度。 竞赛允许选用村田公司出品的 EN03 系列的加速度传感器。 它利用了旋转坐标系中的物体会受到克里利奥力的原理,在器件中利 用压电陶瓷做成振动单元。 当旋转器件时会改变振动频率从而反映出物体旋转的角速度。 图 角速度传感器 在车模上安装陀螺仪,可以测量车模倾斜的角速度,将角速度信号进行积分便可以得到车模的倾角。 如图 所示。 图 测量车模角速度和角度 由于陀螺仪输出的是车模的角速度,不会受到车体振动影响。 因此该信号中噪声很小。 车模的角度又是通过对角速度积分而得,这可进一步平滑信号,从而使得角度信号更加稳定。 因此车模控制所需要的角度和角速度可以使用陀螺仪所得到的信号。 由于从陀螺仪的角速度获得角度信 息,需要经过积分运算。 如果角速度信号存在微小的偏差,经过积分运算之后,变化形成积累误差。 这个误差会随着时间延长逐步增加,最终导致电路饱和,无法形成正确的角度信号,如图西安文理学院本科毕业设计(论文) 第 12 页 所示。 图 角度积分漂移 如何消除这个累积误差呢。 可以通过上面的加速度传感器获得的角度信息对此进行校正,如图 所示。 图 角度积分漂移校正 利用加速度计所获得的角度信息 g 与陀螺仪积分后的角度 进 行比较,将比较的误差信号经过比例 gT 放大之后与陀螺仪输出的角速度信号叠加之后再进行积分。 从图 中的框图可以看出,对于加速度计给定的角度 g , 经过比例、积分环节之后产生的角度 必然最终等于 g。 由于加速度计获得的角度信息不会存在积累误差,所以最终将输 出 角度 中的积累误差消除了。 加速度计所产生的角度信息 g 中会叠加很强的有车模运动加速度噪声信号。 为了避免该信号对西安文理学院本科毕业设计(论文) 第 13 页 于角度 的影响,因此比例系数 gT 应该非常小。 这样,加速度的噪声信号经过比例、积分后,在输出角度信息中就会非常小了。 由于存在积分环节,所以无论比例 gT 多么小,最终输出角度 必然与加速度计测量的角度 g 相等,只是这个调节过程会随着 gT 的减小而延长。 为了避免输出角度 跟着 g 过长,可以采取以下两个方面的措施: ( 1)仔细调整陀螺仪的放大电路,使得它的零点偏置尽量接近于设定值,并且稳定。 ( 2)在控制电路和程序运行的开始,尽量保持车模处于直立状态,这样一开 始就 使得输出角度 与 g 相等。 此后,加速度计的输出只是消除积分的偏移,输出角度不会出现很大的偏差。 西安文理学院本科毕业设计(论文) 第 14 页 第 3 章 车模控制算法 设计 控制算法 智能车的控制包主要是电机控制。 具体的控制算法有 PID 控制和模糊控制 等控制算法。 控制 PID 控制是工业过程控制中历史最悠久,生命力最强的控制方式。 这主要是因为这种控制方式具有直观、实现简单和鲁棒性能好等一系列的优点。 PID 控制主要有三部 分组成,比例、积分、微分。 比例控制是一种最简单的控制方式。 其控制器的输出与输入误差信号成比例关系。 偏差一旦产生,调节器立即产生控制作用使被控量朝着减小偏差的方向变化,控制作用的强弱取决于 KP。 当仅有比例控制时系统输出存在稳态误差( Steadystate error)。 为了消除稳态误差,引入 积分控制。 积分项对误差取决于时间的积分,随着时间的增加,积分项会增大。 这样,即便误差很小,积分项也会随着时间的增加而加大,它推动控制器的输出增大使稳态误差进一步减小,直到等于零。 为了预测 预测误差变化的趋势 , 引入 微分的控制器, 这样 就能够提前使抑制误差的控制作用等于零,甚至为负值,从而避免了被控量的严重超调。 PID 控制框图如下图所示 对应的误差传递函数为: U( s) /E(s)=Kp(1+1/Ti+Td) 西安文理学院本科毕业设计(论文) 第 15 页 式中, Kp 为比例增益; Ti 为积分时间常数; Td 为微分时间常数; U(s)为控制量; E(s) 为被控量与设定值 R(s)的偏差。 时域表达式为 pd0i1 d ( )( ) ( ) ( ) d dt etu t K e t e t t TTt (式一) 在单片机中,我们仅能对数字信号处理,即数字 PID 控制。 将上式离散化,得错误 !未找到引用源。 (式二 ) PID 算法 直接利用上述离散化公式计算,框图如右图所示。 由于积分项( Pi)是将所有采集值偏差相加,在一段时间后会很浪费单片机资源。 对其稍加改进,得到增量型 PID算法。 PID 算法 根据式二得第 k1 个采样周期的控制量为 错误 !未找到引用源。 (式三) 式二减式三得 错误 !未找到引用源。 (式四 ) 由此,第 k 个采样时刻实际控制量为 错误 !未找到引用源。 ,为方便书写,写为 错误 !未找到引用源。 (式五) 其中, 错误 !未找到引用源。 由上可知,利用三个历史数据,递推使用,即可完成PID 控制量。 框图如右图所示 : 模糊控制 一般控制系统包含了五个主要部分,即 :定义变量、模糊化、知识库、逻辑判断及反模糊化,底下将就每一部分做简单的说明: 初始化返回计算 )()(1kkdDee*KkP 计算 并输出)(P)(P)(PP ( k )DIPkkk )1()(),1( kPkPkekeII计算 1kPje*KkPIk0jiI )(计算 kpP e*KP k计算kkkyre 西安文理学院本科毕业设计(论文) 第 16 页 (1) 定义变量:也就是决定程序被观察的状况及考虑控制的动作,例如在一般控制问题上,输入变量有输出误差 E 与输出误差之变化率 CE,而控制变量则为下一个状态之输入 U。 其中 E、 CE、 U 统称为模糊变量。 (2) 模糊化( fuzzify):将输入值以适当的比例转换到论域的数值,利用口语化变量来描述测量物理量的过程,依适合的语言值( linguisitc value)求该值相对之隶属度,此口语化变量我们称之为模糊子集合( fuzzy subsets)。 (3) 知识库:包括数据库( data base)与规则库( rule base)两部分,其中数据库是提供处理模糊 数据之相关定义;而规则库则藉由一群语言控制规则描述控制目标和策略。 (4) 逻辑判断:模仿人类下判断时的模糊概念,运用模糊逻辑和模糊推论法进行推论,而得到模糊控制讯号。 此部分是 模糊控制器的精髓所在。 (5) 解模糊化( defuzzify):将推论所得到的模糊值转换为明确的控制讯号,做为系统的输入值。 模糊算法可以解决一些非线性问题,将赛道分为直线、入大小弯、出大小弯、蛇形弯道,对应的直线加速、入大弯减速转方向、入小弯制动转方向、出弯加速、蛇形弯道直接通过(若可以达到这种前瞻性)。 要达到这种控制要通过实际检测,分析大量赛道磁场信息,找出它们的特征。 总结 虽然模糊控制可以较好解决一些非线性问题,但控制复杂,实际调试中较 PID控制无明显优势,所以我们采用 PID 控制。 电机控制为 增量式 PID,由于给定速度频繁变化,采用微分先行 PID,使电机能够快速响应。 车模直立 PD 控制 车模直立控制是关键子程序。 其中涉及到两个关键控制系数: 1k :CAR_AA_P_INT :倾角比例,( *0x7fff ) 2k :CAR_AA_D_INT :角速度比例,( *0x7fff) 上面的乘以 0x7fff 是为了将小数化成定点小数表示形式。 这两个系数是通过实验调 试逐步确定的。 具体确定的方式如下: 首先将 CAR_AA_D_INT 置为 0。 逐步加大 CAR_AA_P_INT 数值,直到车模开始前后震荡。 此时再逐步增大 CAR_AA_D_INT,消除震荡。 然后逐步增加这两个数值,直到车模开始抖动,然后略减少这两个数值即可。 这个过程需要反复调整,直到车模可以比较稳定的达到直立平衡。 由于现在还没有加入速度西安文理学院本科毕业设计(论文) 第 17 页 闭环,所以由于加速度传感器零偏的误差,会导致 有时 车模在直立的时候会往一个方向加速行驶。 如下是车模直立控制子程序代码: void CarAngleAdjust(void) { int nLeft, nRight。 int nSpeed。 int nP, nD。 nP = g_nCarAngle。 nP = (int)mult_r(nP, CAR_AA_P_INT)。 nD = g_nCarGyroVal 5。 nD = (int)mult_r(nD, CAR_AA_D_INT)。 nSpeed = nD + nP。 if(nSpeed MOTOR_SPEED_SET_MAX) nSpeed = MOTOR_SPEED_SET_MAX。 else if(nSpeed MOTOR_SPEED_SET_MIN) nSpeed = MOTOR_SPEED_SET_MIN。 nLeft = nSpeed + g_nLeftMotorOutSpeed g_nMotorLeftRightDiff。 nRight = nSpeed + g_nRightMotorOutSpeed + g_nMotorLeftRightDiff。 g_nLeftMotorOut = nLeft 6。 g_nRightMotorOut = nRight 6。 if(g_nLeftMotorOut MOTOR_OUT_MAX) g_nLeftMotorOut = MOTOR_OUT_MAX。 if(g_nLeftMotorOut MOTOR_OUT_MIN) g_nLeftMotorOut = MOTOR_OUT_MIN。 if(g_nRightMotorOut MOTOR_OUT_MAX) g_nRightMotorOut = MOTOR_OUT_MAX。 if(g_nRightMotorOut MOTOR_OUT_MIN) g_nRightMotorOut = MOTOR_OUT_MIN。 MotorSpeedOut()。 车模。基于微控制器k60的光电智能车控制软件设计论文(编辑修改稿)
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。
用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。