




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第一章绪论1.1研究背景在进入二十一世纪后,人类的科技水平不断进步,涌现出许多新鲜事物。平衡车就是其中之一。任何事物的兴起都有其背后的原因。它具有极高的实用性,可在很多领域内进行应用,与此同时因为技术手段不断进步,例如可以更简单方便的对数据进行获取,同时,因为微控制芯片的运算能力的不断进步,拥有更加强大的数据处理能力,对于姿态传感器的回传数据处理也更高效。由于三轮驱动的机器人与其他结构的机器人在运动方式上存在着显著的不同,受到多方面外界因素的限制。例如,机器人处于空间狭小的地方进行工作,当在运行过程中需要进行较大幅度的运动时,多轮机器人所存在的短板就会在实际使用的时候出现。这时,两轮智能自平衡小车就拥有了较为明显的优势。两轮智能自平衡小车因为车身架构的不同可以细分为混合式,轮式,履带式等不同种类。方便在各种不同的复杂环境中正常运作。因为双轮平衡车在结构上由一对车轮外加轴承系统构成,在无外力作用的情况下不能进行自我平衡,在这一点上与倒立摆有相似之处,因为双轮智能自平衡小车具有拟合性较强、强耦合、多状态等不同的特性,是研究不同控制方法的理想平台,而且它具有非常小的转弯半径和体积,并且具有动作极其灵活的特点,两轮轮智能自平衡小车具有构造简单,易于使用,造价低廉的特点,在不同的场合大范围应用。1.2国内外双轮平衡小车研究现状1.2.1国外的研究现状世界上首先进行双轮自平衡研究的是来自日本的几位科学家,大约在1980年,已经有人对双轮自平衡车进行过大量的理论研究,并给出了基本的结构框架及相关的研究结论,采用了DSP处理器来检测双轮自平衡小车姿态的变化情况,再通过微控制器来对电机的转速进行控制,从而保持双轮自平衡小车的平衡状态。赛格威最初是由国外音译而来,在国内也被叫做体感车、思维车、平衡车、火星车等。它是一种由电力进行驱动、同时还具有一定的自我平衡保持能力的个人交小型双轮交通机器人,属于新时代的交通方式。经过两年时间的研制,美国人卡成功制作了第一辆平衡车的模型,并进行了实际的路测。在此之后,伴随着技术的不断成熟,其研发团队也不断扩大。在外界看来,具有广阔的发展前景。在2001年12月其公司开始商业化的量产。产品线拥有多个不同规格和型号的产品。不仅仅提供个人消费级的平衡车,也有适合户外应用的越野平衡车。在一般情况下的限速为25km/h。平衡车的英文名称为“Segway”。来源于英文词典中的单个单词Segue,其可翻译为“顺滑流畅的移动”,其英译的名称也间接表达了平衡车在人们内心中的理想形态。自由、方便、无拘束的移动。用最新的锂离子蓄电池做为动力来源进行驱动,利用物理学的“动态平衡原理”,通过微处理芯片控制其前进或转向。当车身上的乘客身体发生移动时,整体的重心会不断发生改变,不断进行调整并达到平衡状态,前进、后退、拐弯、刹车等一切动作均由身体进行控制。由于赛格威是一种前所未见的崭新类别的交通工具,因此很难用传统的分类方式定义它的种类。而且它具有非常小的转弯半径和体积,并且具有动作极其灵活的特点,因此也可以作为一种短程行走工具等在生活中具有实际意义。在一些更正式的场合(如官方道路法规),Segway平衡车也被称为电动个人辅助移动设备(EPAMD),通常被称为电动替代步行机。图1-1Segwayt平衡车在传统平衡车的基础上,日本HONDA公司法发布了一辆与众不同的新型平衡车,与传统的双轮结构不同的是这款平衡车仅有有一个支撑受力点。被命名为U3-X。可以灵活地完成普通的前进,后退,转向等常规动作。这些都得益于其新颖的结构设计。利用一个经过特殊加工的异形轮胎来保持平衡。同样来自日本SANYO公司的直流电动机事业部设计制造了一台能进行上体倒立从进行平衡保持的机器人FLATHRU,是一辆面向普通家庭应用的双轮自平衡机器人。可以放置一定重量的负载,并且也能适应较为粗糙的路面。在美国加利福尼亚大学联合知名工业机器人工厂WOWWEE,二者共同设计制造了一种名为MIP新型服务类机器人。其正式的产品有黑色与白色。在其头部安装有一块高清显示屏,可以模拟出不同的表情。根据其官网的介绍,其高度仅有19.8cm,结构上分为底盘与车身两部分。移动的MIP非常灵活。即使没有人的干预,它仍然可以通过车轮保持相当大的稳定性。甚至能够为你端茶送水。然而,尽管MIP可以保持自身的平衡,但它首先需要保持直立。MIP可以通过蓝牙与手机中APP程序进行数据传输和连接控制,所以我们也可以在通过高速网络实现对MIP的远程控制。图1-2Mip平衡车1.2.2国内研究现状我国在双轮自平衡车方面的研究虽然没有国外研究的早,但在不懈的努力下也收获了一些较为先进的成果,西安电子科技大学研发了一款自平衡双轮机器人,见图1-6,该机器人本质为一个双轮式左右并行布置结构的自平衡系统。它通过伺服放大器控制两个Maxson电机来驱动,并同时运用了神经模糊算法对平衡车进行操作控制,从而实现系统的自平衡。中国科学技术大学研发的平衡代步车并没有配置用于刹车的装置,而是依据驾驶者的身体重心变化来完成车体的加速运动和减速运动;操作控制手柄能够实现任意角度的转向运动。在控制器的设计上,它采用了模糊自适应原理,能够很好的实现平衡车的动态平衡,并且有效地处理了车体大角度变化的平滑控制问题。台湾清云科技大学的Chih-HuiChiu等搭建完成了一台双轮移动可载货小车。运用倾角传感器,陀螺仪和光电测速码盘,这三种传感器构成小车系统的位姿检测功能模块,两个微型控制器被分别用来完成移动小车的平衡和数据处理等功能,分别承担主要控制和处理相关数据。基于模糊控制原理的双闭环控制器是调节系统的动态平衡,以及使系统按照预期的运动路线运行的关键。图1-3Chih-HuiChiu平衡车1.3论文主要内容及各章节内容简介本系统要求设计制作一辆应用串级PID原理,并且实现自我平衡的智能双轮自平衡小车。主控芯片选用了ST公司的微控制器,具体的型号为STM32F103C8T6,其功耗和处理性能完全可以满足本系统数据处理的需求,并且具有丰富的外设接口,为日后小车的功能拓展提供了接口。为了更加准确的获取双轮自平衡小车运动过程中的加速度以及角速度等关键数据,使用运动处理传感器MPU6050,这是一款具有SPI和IIC接口的倾角传感器芯片,又因为其内置了DMP数据处理引擎,可以直接以四元数输出角度和角速度等系统运行所必须的关键数据,大大减轻了MCU的负担,同时也为接下来运动状态处理提供了方便,应用两种不同的供电电源芯片,为系统中不同的部分提供稳定的电压,避免因为电机堵转等意外情况造成系统中电压波动引发单片机复位造成系统失控等不良事件的发生,完成了前期的电路设计以及验证后,进行程序的编写,修正卡尔曼滤波及串级PID的相关参数。最后对于平衡小车进行整体的调试。让两轮智能自平衡车完成预期中的直立平衡并完成预定的平衡和行进等动作。以下为本文中各章节的详细内容简述:第一章:本文主要阐述了平衡车的研究背景及其在实际应用中的意义,阐述了两轮自平衡车的发展过程,以及国内外在研究开发过程中所取得的突出成果和突出成就。第二章:通过在不同的角度对平衡车进行准确的建模分析,针对陀螺仪和加速度计的特性进行说明,对于选取采用的互补滤波的数据融合方案进行介绍。详细介绍了PID算法和串级PID的基本原理及不同参数的意义,并阐述了两者在该系统中的应用。第三章:介绍了双轮自平衡车的硬件系统组成,并完成了系统的结构,包括最小系统STM32F103C8T6、运动处理器MPU6050、电机驱动模块电路TB6612FNG。第四章:使用KEILVERSION5编写双轮自平衡小车互补滤波算法程序以及其他结构程序等。优化小车的数据采集和电机驱动程序块,使整个程序运行的更加高效。更好的实现小车的平衡功能。第五章:包括互补滤波算法的调试和串级PID算法控制参数的整定,通过连续调试和实验,对调试结果进行了分析和比较。以寻求在实际运行过程中最稳定的PID参数。第六章:对双轮平衡车各模块的功能进行了总结和展望,并对双轮自平衡车现有的改进空间进行了说明和展望。双轮自平衡车控制系统2.1平衡控制系统原理如何保持两轮智能平衡小车保持直立的想法来源于生活中的日常,几乎所有的正常人都可以使一根铅笔在手心直立,并且保持一段时间这个状态。这个简单的事情包含了一定的物理原理,一是托着铅笔的手掌可以自由的移动;另一个则是人眼可以观察到木棒的倾斜角度并且在大脑中可以对可能出现的倾斜趋势进行预判处理。最后通过手掌移动抵消木棒的倾斜角度和趋势,从而保持木棒的直立。这其中的原理实际上就是自动控制理论中的负反馈机制。目前来看世界上还没有任何一个人可以蒙眼保持木棒在指尖上保持直立状态,原因是没有了眼睛对木棒的相对位置的观察从而为大脑的提前预判提供负反馈信号。其中所包含的原理。双轮自平衡车的原理也是通过宏观上的负反馈完成的,但是对于图2-1来说,保持手心物体的平衡,原理更加直观和简单两轮自平衡汽车的左右车轮都在地面上,因此只能在车身的前后方向不稳定,可能向前或向后倾斜。因此,只要控制系统调整车轮的速度以抵消车轮在滚动方向上的倾斜趋势,小车就能保持在竖直方向上的平衡状态。图2-1人体保持物体平衡原理相比于对手中的小棍进行平衡状态的保持,两轮智能自平衡小车的原理就简单的多。因为两轮智能平衡小车只是与地面发生了物理接触。在运动状态上可能会存在以下几种情况,倾斜运动或倾斜落地。两轮平衡小车所需要做的是对小车两边的车轮独立的进行旋转方向以及速度进行控制,进而维持小车在垂直方向得运动状态。其原理如图2-2所示。图2-2双轮自平衡小车的平衡原理2.2双轮自平衡小车数学模型2.2.1自平衡小车的受力状态分析为了使双轮自平衡小车能够在竖直方向保持平衡,需要提供一个反方向的作用力。如何确定力的大小是需要解决的问题。可以建立双轮自平衡小车的物理模型以及运动学模型,通过合理的结构设计与软件部分的设计控制来控制双轮自平衡小车的平衡状态。为了较为直观形象的进行说明,通过类比单摆模型来说明双轮自平衡小车保持平衡的控制原理。使用细线悬挂着的小球是经过简化的理想单摆模型,所以保持直立状态的双轮自平衡小车可以看成放置在可以左右移动平台上的倒立着的单摆。如图2-3所示。图2-3单摆模型小球脱离在垂直时候的平衡位置后,根据力学原理可知,小球此时会受到重力和细线拉力在其正交方向上的合拉力,一旦小球离开平衡位置时,就会受外力作用恢复垂直状态。可以通过数学与物理学对这个合力的大小进行计算。其大小为:(1-1)在实际情况中,一般的的两轮自平衡小车只需要极小的倾斜角度即可满足系统稳定前进的需求,这个时候的倾斜角度与电机轴向反作用力是一种正比例关系。并且在相反的方向上作用,想要使小车稳定在固定角度而并非晃动还需要考虑空气阻力对系统稳定调节的影响,双轮自平衡小车的质量越大,运行速度越快,需要维持平衡状态的作用力也越大。回复力与阻尼力两者中的回复力决定了双轮自平衡小车的运动趋势,阻尼力决定了重物的运动状态。图2-4单摆模型实际情况中,如果系统中存在较小的阻尼力,单摆会逐渐靠近平衡状态时小球所处的位置。如果系统中出现了较大的阻尼力,单摆则会需要较长的时间才能恢复平稳状态。只有在阻尼力合适的情况下。在控制系统介入后,车体才会快速且平稳的对平衡状态的变化进行修正。一阶倒立摆受力情况如图2-5:图2-5一阶倒立摆受力分析根据上图可以得到的结论是图中倒立摆的回复力的大小没有发生任何改变,但是其方向与小球的运动方向完全相同,会导致物体加速倾倒。通过对单摆平衡的受力分析可得,倒立摆与单摆在原理上类似,但是其回复力与运动的方向一致,所以只能在其反方向施加大小相同的力,使系统保持平衡。受力分析如图2-6所示:图2-6加速时模型受力分析当小车车轮受到电机驱动产生大小为a的加速度时,可以计算出小车此时所受到的惯性力的大小为:(1-2)由此可以得出回复力为: (1-3)因为双轮自平衡小车在运动中进行自我调整的时候只需要极小的倾斜角度改变,就可以完成定向移动的目的。所以可以近似的将sinθ看作θ,可以通过计算得到以下公式: (1-4)因为偏移方向与合力方向相反,两者比例系数k1大于重力加速度g,因为物体存在阻尼力导致返回平衡点的时间较长,会产生震荡,所以需要系统以外的外力来使其恢复平衡状态,外力大小应与角速度成正比例关系,所以公式可以化简成以下形式: (1-5)通过计算可以得到保持车体在竖直方向上的静止状态需要车轮所拥有的最小加速度是: (1-6)上式中θ为小车相对于水平面的倾斜角度,而θ′为小车角速度,f1、f2是控制系统中的比例参数。如果在运动控制过程中,当系统中f1大于g时,倒立摆才会向平衡位置靠近直至恢复垂直状态,但是改变f2的大小可以对车体恢复平衡速度的快慢进行的大小进行控制。2.3串级PID在双轮自平衡小车控制系统中的应用2.3.1PID算法简单介绍PID控制算法是现代自控理论中一种通用和广泛的算法。在PID控制过程中起主要作用的有三个参数P、I、D,也是就比例,积分,微分的英文首字母。在控制过程中,比例算法所起的主要作用是让控制过程更加的平滑,积分运算是对系统运作过程中所产生的噪声进行处理,而微分运算具体的负责控制过程中的控制强度。系统中所存在的控制误差即为系统控制中实时输出的数值与陀螺仪回传数据的差。本文在此控制过程中采用了增量式PID控制。在具体的控制过程中,与位置式PID不同的是,二者的运算输出不一样。增量式PID只对变化误差进行输出,而位置式PID需要进行大量的数据运算与存储,才能进行输出。在增量式PID的控制过程中,只是对于电机驱动模块所需要的脉冲波长进行控制。在系统中引入PID的主要原因是为了让平衡过程的控制更加顺滑、精确,消除掉不必要的抖动。其中涉及到大量的数据运算,考虑到系统内运算能力的限制,所以本文采用了运算量较小且控制效果较好的增量式PID。图2-7增量式PID的原理图 从上图中可以得知三个参数在PID算法中所发挥的具体作用。在三个互相不产生干扰信号的调节进程运行的时候,比例调节主要是对系统运行中产生的偏差值进行累积并在其控制作用发生减弱时还能持续的进行控制。但是在系统P值过冲的情况下是可能会产生持续的低频振荡,过高的灵敏度会导致系统超调的发生,有可能会造成电机过热、或是驱动模块损坏。在这种情况下,可以利用微分来减小此类不稳定高频震荡发生的概率。在系统运行过程中,每个时段所累积误差不断的应用函数进行微分运算。在图中E(t)的状态发生高速变化时,对KI数值逐步调节。微分运算在平衡控制中处于主要地位,可以适当地减缓比例运算对小车的控制强度。相反,当E(t)在系统中的改变速度较为缓慢时,运算后产生的参数会使KI偏低。在这种情况下,比例运算会起主要的控制作用,强迫控制系统将小车从倾斜的姿态恢复到稳定的自平衡状态。当调试时设定较小的微分参数值,有一定概率会在特殊情况下累积产生小幅度的不均匀输出震荡。而在微分系数较大的时候,恢复平衡状态的时间会有所增加。系统控制过程中应用积分作用来实现对不同时刻系统误差的累积。在系统平稳时,对运行过程中积累的误差不断放大来控制系统,假设误差一直存在,在这种情况下积分将持续进行作用,当系统到达稳定状态时,积分环节将会失去效果。2.3.4串级PID的原理及其在本系统中的应用在自控系统中,总是希望在进行参数设定之后系统可以进行快速而准确的动作,可以选用PID控制来进行调整。PID控制又分为位置式和增量式两种类别,其中的位置式PID适合舵机控制等系统,而在本系统中选用的是增量式PID。(1-7)其中D之后的参数是当前误差与前次误差的差值,与直接使用运动传感器的数据具有相同的效果。串级PID是在同一控制系统中使用两个PID进行嵌套控制。在具体组成上可分为外环和内环,不同的应用中会选用不同的组合方式。在两轮智能平衡小车控制过程中,在内环中应用PID控制,但是在外环中使用PI进行控制。在普通的PID控制中,输入的参数为系统运算得出的期望值,输出的数据为小车此时的倾角值。但是在串级PID系统中外PID环进行运算的是期望角度值,内PID环经过运算后输出的是角速度数据。为了方便理解其原理,内环PID是希望双轮自平衡小车以每秒多少度的加速度保持运动状态,然后经过PID控制进行控制从而达到期望的状态。外环PID是根据传感器回传的角度偏差值从而对内环PID进行调整。这样,即使外环数据发生快速的变化,双轮自平衡小车的运动效果也不会显得很僵硬。 图2-8串级PID的原理图由图2-8可以分析出,主PID调节器和副PID调节器在工作的时候为相互串联的关系。在本系统中,由于主PID控制系统中内环的数据处理,所以在其中传递的参数为主要变量。在串级PID控制系统中,主PID控制器与副PID调节器分别控制不同的运动进程。一般来说,外环PID进行定值控制,内环PID调节器负责的是随动控制过程。不同类型的控制系统对内环PID有不同的要求。一般来说,对主PID的要求基本相同。在控制进程中一般选择PI控制或PID控制,因为副PID回路控制系统所具有的独特性质,所以一般的内环回路要求具有对输入数据进行快速处理的特性。对于引入微分控制所带来的时间延长的特性,可能在计算过程中存在差值,一般我们会选取比例控制而不引入积分或者微分控制。在实际的操作中如果在系统中已经引入积分控制,这种情况下再引入微分控制,会使调节阀的动作过大,不利于保持整个控制系统的稳定。串级PID的目的是为了保证主要参数(外环)的足够稳定。一次和二次参数调节器不是相互独立的,而是经过调整和优化的。当双轮智能平衡小车受到不同强度和层次的外界干扰时,两级串联的PID控制器会进行不同的控制输出。先是由副PID调节器进行干预调节,当影响超出调节范围时,主PID会受到内环数据变化的影响。在此时,外环主PID参与双轮平衡小车的平衡控制过程。由于在本系统中有两级PID调节过程。所以相对于传统的单级PID调节过程,串级PID在调节过程中效果会更加细腻,控制的精度和稳定性都有所提高。经过我们由实际实验过程对比得出的结论来看,串级PID与单机PID相比有着显而易见的优点。因此我们在双轮自平衡小车中采用串级PID进行小车的姿态控制。串级PID在调节过程中对误差的调整精度和强度高于传统的单级别PID。在进行调试时,应该将串级PID的外环控制看作一个已经提前设定好参数的单PID控制过程,但是在调节内环PID过程中,由于小车的状态随着外部状态发生改变,所以内环PID在进行不断的运算输出。在两轮智能平衡小车工作时,串级PID的外环会随时受到外界干扰与噪声。受此影响,两轮智能自平衡小车的平衡状态也会受到影响而发生改变。所以在串级PID控制过程中,两级PID的参数并非独立而是相互进行数据传递。在平衡过程中外环会向内环输入一直改变的控制变量的r(t),与此同时内环r(t)与传感器接收到的噪声信号进行耦合处理。在系统中,如果有很多的噪声和外界干扰进入内环PID控制系统中,有一定可能会对两级PID的稳定性造成干扰。但是,在串级PID控制系统中。内环的稳定状态改变于整个系统来讲,不会有太大的影响。所以,串级PID可以提前对可能干扰内环PID控制的噪声进行抑制,从而间接加强了主PID控制系统的稳定性,直观的体现就是提高了双轮自平衡小车对于复杂路况饿的适应能力和通过性。2.4陀螺仪与加速度计的数据融合在双轮自平衡小车的运动中,想要获得更加平稳的运动过程。排除不可选择和避免的外在坏境因素外,如何使小车获得更加准确的传感器数据也是一个值得我们考虑的方面。两轮自平衡小车可以比做一种拥有多个干扰源的非稳态系统。要使双轮自平衡小车实现并保持稳定的平衡状态,通过对相似的物理模型进行类比,可得知当两轮自平衡小车重心位于车轴垂线时效果最好。在两轮小车平衡过程运行的时候,如何获取更加稳定的测量数据是我们首先要解决的问题。因为小车在平衡或者运动过程中唯一受外界影响的数据只有角度值。在系统运行过程中必须要输入准确的角度数据。但是如果我们只是选用加速计或是三轴陀螺仪的数据来对平衡车的车身角度进行校正,会受到外界的干扰而产生较大的误差值,难以达到双轮自平衡小车在进行设计时提出的技术要求。为了获得更加准确而平稳的采样数据,采用数据融合的方法通过软件系统对数据进行处理。陀螺仪和加速度计分别独立的进行采样,然后将获得的数据传送到控制系统内。通过卡尔曼滤波器进行数据融合从而可以得到此时双轮自平衡小车较为精准的倾斜角度,经过微控制器的运算进行驱动。对电机驱动模块输出控制信号就可以对车轮电机进行控制,进而实现小车车身的自我平衡。在双轮自平衡小车控制系统的实际应用中,目前主流的数据融合方式中滤波方法有Kalmanfiltering和互补滤波,在本文中选用Kalman滤波。卡尔曼滤波算法的运算处理步骤可以类比为系统的输入信号在高斯白噪声影响下在随机系统的状态变量。在滤波过程中,其中的输出方程以及状态方程决定了输入输出数据的相关性。该算法应用极其广泛,适用于平稳随机过程的滤波,也可以用在非平稳或者平稳序列或高斯-马尔可夫序列过程的滤波。卡尔曼滤波的本质是一种在时域的变换。因为其在状态空间进行系统的描述过程,因而在系统滤波时所产生的状态过程噪声和测量噪声不需要刻意进行滤除。这些噪声中可能包含着有用的过程信号。系统中估计量与观测量处于不同时段的一、二阶矩阵不需要进行测量。因为卡尔曼滤波的基本方程是其在时域内的数据递推,从直观上来看,整个滤波计算过程是一个不断的“初预测-修正-再预测-修正”的进程。所以在进行运算求解时不需要进行大量数据的读取存储,当新的数据进入系统的运算控制后,与此同时新的卡尔曼滤波的数值也开始进行运算。因而此滤波方法非常适合实时处理的过程中,方便使用运算能力较弱的普通单片机来实现,不会因为滤波过程对系统的正常运行造成较大的负担。2.5本章小结通过对单摆和倒立摆的物理原理分析、推导得到了双轮自平衡小车在不同运动情况下的力学模型及运动方程。介绍了PID的原理以及发展历程,对串级PID与普通PID进行了对比分析,阐述了不同的PID参数在平衡控制和速度控制中应用中的不同作用。在本系统中,采用PI控制来实现系统中速度的控制,PD来实现系统中自我平衡功能的实现。为了使双轮自平衡小车在实际应用的过程中能够有更好的平衡效果,我们将从MPU-6000中获取的数值采用卡尔曼滤波进行数据融合处理,以期获得更加稳定准确的数据。第三章系统硬件电路设计在进行平衡小车的硬件电路时,我们需要考虑的主要有以下几个方面。1.需要用iic与传感器mpu6050进行连接2.双路pwm接口,用来对不同的电机驱动模块进行驱动,3.采用串口与外界进行数据传输,4.单片机外部中断进行车轮的测速。综合以上所述,本系统可以归为六大部分:(1)单片机最小系统:STM32F103CCT6;(2)角度和加速度传感器:mpu-6050;(3)车轮速度与状态检测;双路霍尔磁编码器;(4)供电模块:航模锂电池,降压模块;(5)电机驱动:TB6612FNG;(6)调试与设置;usb转ttl模块;总体硬件结构如图3-1。图3-1系统硬件结构图3.1微控制器stm32最小系统在本系统中,最终采用STM32F103CCT6作为两轮自平衡小车的主控芯片。此款芯片采用的是Cortex-M3内核,是一款应用较为广泛的的32位微控制器,该芯片可以以最高72MHz工作频率下长时间稳定运行。并且在芯片内集成32~256kB的FLASH存储器,6~128kB的RAM存储器。此外在其内部还集成了众多在开发中可能用到的接口,例如IIC、UART、485、SPI。拥有26个通用的GPIO接口,这些IO都最高可以直接输入5v的电压,并且可以复用。针对某些可能用到AD或是DA的场合下,芯片内置了此类转换功能,免去了外接模块带来的接线复杂的以及运行不稳定的问题。在本设计中,采用IIC接口完成与MPU-6050传感器模块的控制和通信。在其内部有多达6多功能定时计数器模块,经过合理的程序设计后,可以在运行过程中同时互不干扰的输出多路PWM信号,精准的完成对电机模组的驱动控制。可以通过多种不同的方法完成程序的下载,例如常用的jink下载、串口下载、swd下载。原理图如图3-1所示:图3-2STM32单片机最小系统原理图3.2电源部分设计本文中的平衡小车使用的是在航模上应用较为广泛的LIPO聚合物电池,相比于传统的镍铬电池、镍氢电池,能量比有了显著的提高。且不会有记忆效应,还易于保存。由于其原理的特性,可以持续的提供大电流输出且不会对电池容量造成任何影响。并且其大容量的特性可以避免在调试时频繁的更换电池。可以满足本系统在长时间运行调试时的电量需求。在进行设计时考虑到不同厂家设计的芯片有着不同的工作电压。系统采用电源驱动电路来进行变压和稳压,用来提供不同模块的工作电压。本文选用MPS2307DN与ASM1117-3.3的组合实现降压功能。图3-3降压以及稳压电路原理图3.3运动传感器模块在传感器的选择上,我们选用了MPU-6050。这是一款目前用途较为广泛的芯片,在消费级电子产品以及专业设备上都有应用。在其内部拥有完整的6轴运动模组。相比较于其他厂家的芯片,拥有显著的优点。例如其拥有目前最小的封装,并且还可以有效避免了陀螺仪与加速量所存在的时间轴差值的影响。此芯片能以数字信号的形式完成6轴的旋转矩阵参数、欧拉角格式、四元数的融合演算数据的输出。由于其结构的优点,最高可以自行设定敏感度为130LSBs/°/sec。此外还拥有全向运动模式检测功能的3轴陀螺仪模组,全部参数都可以进行由上位机设定完成。且其控制范围为±2g、±4g、±8g、±16g。由于结构的关系,消除了加速度计和陀螺仪轴间相关干扰,受温度变化的影响较小。与其他产品不同的是其内部拥有数字运动处理引擎DMP。可以显著减少传感器中复杂的融合演算数据、感测器同步化、姿势感应等负荷。还同时拥有可以数位输出的高精度温度传感器。支持姿态识别、姿态摇动感应、滚动模式控制、垂直运动中断、G数限制输出、无动作感应输出、高频震动模式感应等新模式控制。在接口方面,拥有400kHz快速模式的IIC接口,或20MHz的SPI接口。方便与其他的外设进行相互通信。图3-5是MPU6050的外设连接电路原理图:通过其数据手册得知其IIC接口都需要被单片机上拉。因为其较小的封装,内部没有提供降压功能,所以需要外部提供其正常工作所需要的3.3V电压。由于在出厂时提供了丰富的接口和IIC接口的特性,可以通过接口级联其它模块,并且不会占用更多的IO接口。图3-5MPU6050的外设连接电路原理图3.4直流电机驱动模块TB66F12G本文所采用的TB66F12G芯片为日本东芝半导体公司旗下最新生产的大功率直流电机驱动模块。采用其最新的MOSFET架构,在实际应用中可以进行双路驱动。和传统的L298N比较,两者有一定的共同点。然而,与传统L298N的高热量和复杂的二极管的电流续流电路相比较,TB66F12G一般情况无需额外散热,外围电路简洁,电机可以直接由外部电源滤波后连接对应的电容进行驱动。选用合适的电机使堵转电流小于TB6612FNG最大输出电流3.2A,利于保障系统的稳定性并且可以减小小车的尺寸。对于PWM信号的输入频率范围,100KHz以下的频率可以满足系统的要求。在实际使用中,VM直接连接电源即可。VCC为模块内部的逻辑供电引脚,使用5v的电压进行供电即可,模块拥有的3个GND都需要进行接地。STBY引脚上拉后模块才能正常工作。这里以A路为例,模块中的A01引脚与A02引脚分别连接对应电机的+和-。通过对应的PWA引脚,AIN2引脚,AIN1引脚对电机进行输出控制。其中PWMA引脚可以直接连接到微控制器对应的PWM输出引脚,本文选用10KHZ的频率进行驱动,此时系统可以通过改变输出的PWM脉冲的占空比来调节电机的速度。下面输入值对应的真值表:AIN1010AIN2001停止正转反转图3-7TB6612FNG原理图3.5霍尔式编码器模块在两轮智能自平衡小车运行过程中,系统需要采集多种物理量。例如车体倾斜角度、运动速度等物理量。可以通过6050输出的加速度值来对速度值进行估算,但是并不准确。因为小车的两个车轮与车速直接相关。为了更加准确的获取速度值,需要对小车车轮的转速进行检测。编码器可以解决上述的问题。而编码器从其出现到现在的逐渐成熟,已经出现了许多不同原理的编码器。考虑到小车实际使用的环境,本系统中使用的是霍尔编码器。通过检测连接在车轴上的磁体相对于感测器的相对位移来输出对应的脉冲信号。在结构上由圆形磁体和检测模块组成。无需额外的电路,可以连接到单片机IO进行数据的读出。霍尔码板均匀地布置在具有不同磁极的圆板上。当霍尔码盘与电机同轴旋转时,霍尔元件检测并输出多个脉冲信号,为了准确判断电机旋转方向,因为编码器拥有两相输出且都为方波信号,所以当系统想要获取车轮的转速时。需要对这两个信号进行采集,这需要用到定时器,为了减小系统的运行负担,本文只对两相中的一相进行采集。因为两相输出的波形与频率完全一致,只是相差了二分之一周期。只有在需要对车轮运行方向进行判断的时候,才会同时对两相进行采集。此处将两相分别命名为x,y。当采集到的信号中x相提前与y相,则此时车轮为顺时针旋转。反之若是y相提前与x相,车轮则是逆时针旋转。正反旋信号的相位关系见图3-8所示。图3-8正反旋信号相位图增量式霍尔编码器输出为方波信号,由于其自带上拉电阻,所以其输出的信号可直接应用微处理器进行读取。对于没有编码器接口的微控制器,如51单片机。可以通过外部中断的方式进行数据的读取操作,将编码器x相输出连接到单片机的外部中断接口,在检测到信号的跳变沿时触发外部中断,进入对应的中断服务程序中。再对y相的电平信号进行读取来确定车轮的转动方向。由于在本次设计中选用了STM系列微控制器,而其本身具有的TIM模块可以进行编码器信号的采集。我们可直接在程序中进行设定。图3-9为霍尔编码器。图3-9霍尔编码器3.6串口转换模块因为日常在单片机调试中用到的最多的是串口。所以在本次的设计中,调试时应用串口向外界打印系统运行信息。单片机想要与上位机进行通信,需要对传输的信号进行转换。此时就需要用到串口转换芯片了。市面上的转换芯片有许多个种类。本文选用国产的ch340g,具有优越的转换性能。并且其价格低廉,具有极大的优点。通过外接模块来实现USB与TTL互相转换的功能,见图3-10。图3-10串口转换电路图3.7章节总述在本章中,对构成平衡小车的各部分硬件进行了阐述说明。介绍了其原理以及使用中的注意事项。同时也对不同的模块的电路图进行了展示,只有选取合适的硬件来完成对小车的硬件搭建工作,才会在接下来的软件编程中更加顺利。小车由下列几大模块构成,直流电机驱动模块、微控制器、磁编码器、角度检测传感器。我们完成了对系统硬件进行设计并焊接,完成焊接后为第四章编程程序部分打下基础。第四章程序设计在合理的硬件基础上,运行平稳高效的软件程序,才能将预定功能实现。软件程序部分主要包括以下几个功能。包括:系统程序初始化,MPU6050对信号的获取与监测,数据融合算法,自平衡车运行算法(包括直立算法和速度算法),以及电机PWM输出。4.1程序结构与组成主程序控制过程流程如图4-1所示:图4-1主程序控制过程流程图程序的初始化分为三个板块,第一板块是对于STM32在此系统中的所应用到的各类模块进行初始化。第二板块是将小车在运行过程中运用到的各种参量和变量初始化,第三板块是定时器的初始化。其中第一部分的程序如下: voidBspInit(void)//对于各个模块的初始化 { SWDConfig();//使能SWD调试端口 USART1Init();//初始化串行通信接口 TIM3_PWM_Init();//初始化PWM TIM2_Encoder_Init();//初始化编码器 TIM4_Encoder_Init(); i2cInit();//模拟IIC初始化 MPU6050_Init();//MPU6050初始化 }在调试的时候需要一直获取程序的运行状态且不能影响进程的正常进行,应用定时器定时通过串口1向上位机发送小车的相关数据。应用上位机软件进行处理显示。接下来为MAIN函数部分: intmain(void) { BspInit(); CarUpstandInit();//初始化系统参数 SysTick_Init();//初始化定时器 while(1) { if(SoftTimer[1]==0) { SoftTimer[1]=20;//每隔50ms执行一次 DebugService();//串口中断服务函数 } } }4.2传感器数据读取4.2.1.传感器数据输出采集函数因为需要在小车的运动中不断获取大量数据,其中较为重要和关键的是MPU-6050的回传数据,以用来计算小车的车体角度。相应的程序如下: voidSampleInputVoltage(void) { /*此处不作任何滤波处理*/ g_fGyro_y=DataSynthesis(GYRO_YOUT_H);//陀螺仪Y轴 g_fAccel_x=DataSynthesis(ACCEL_XOUT_H);//加速度X轴 g_fAccel_y=DataSynthesis(ACCEL_YOUT_H);//加速度Y轴 g_fAccel_z=DataSynthesis(ACCEL_ZOUT_H);//加速度Z轴 }4.2.2.直流电机脉冲信号检测处理函数程序中需要对微控制器相对应的寄存器进行读取操作,获取此时的速度值。再通过与下一次获取数据进行比对来判断车轮方向,并且计算车轮转速。以下为部分程序: voidGetMotorPulse(void) {/*读出T3T4寄存器数据,得到速度原始值*/ g_iRightMotorPulse=(T4H<<8)+T4L; g_iLeftMotorPulse=(T3H<<8)+T3L; T4T3M&=0x77; T4H=T4L=0; T3H=T3L=0; T4T3M|=0xCC; /*通过前一次PWM输出判断电机正反转*/ If(!MOTOR_LEFT_SPEED_POSITIVE)g_iLeftMotorPulse=-g_iLeftMotorPulse; if(!MOTOR_RIGHT_SPEED_POSITIVE)g_iRightMotorPulse=-g_iRightMotorPulse; /*8毫秒执行一次,速度环控制函数在循环10+后执行一次,需要获取的脉 冲数据存储*/ g_iLeftMotorPulseSigma+=g_iLeftMotorPulse; g_iRightMotorPulseSigma+=g_iRightMotorPulse;4.3采用卡尔曼滤波实现的数据融合根据卡尔曼滤波原理,想要预估系统在A点角度,则需要其余时刻的角度来对此时的角度进行预测处理。这样就可以获得A点所拥有的高斯白噪声误差量。在实际运行中,传感器测量的角速度被看作理想的预估值。而加速度计回传的角度数据则作为实际检测结果,系统会根据他们之间的协方差来进行递归运算直到估计出最优的倾斜角度。经过实际的测试,设定参数f为0.51。系统在此时运行较为平稳,拥有较好的平衡效果。具体实现的程序如下: VoidAngleCalculate(void) { g_fGravityAngle=(g_fAccel_y-GRAVITY_OFFSET)/16384.0; g_fGravityAngle=g_fGravityAngle*1.2*180/3.14; g_fGyro_x=(g_fGyro_x-GYRO_OFFSET)/16.4; g_fGyroAngleSpeed=g_fGyro_x; g_fCarAngle=0.98*(g_fCarAngle+g_fGyroAngleSpeed*0.008)+0.02*g_fGravityAngl e; }4.4串级PID控制过程在第二章节中已有关于串级PID算法的简单介绍,本章的内容主要是关于如何在程序中实现相关的算法。4.4.1竖直状态PD控制为了更好的对小车平衡状态进行调整,可以通过在程序中调整提前设定好的参数来获得更好的平衡效果。如图4-1所示:图4-1直立状态PD控制流程图 程序如下: voidAngleControl(void) { g_fAngleControlOut=g_fCarAngle*g_tCarAnglePID.P+g_fGyroAngleSpeed* (g_tCarAnglePID.D); }这里因为零偏角和预设角速度都为0,所以在程序中未进行添加。微分变量直接采用的是陀螺仪的角速度值,将函数的输出值作为PWM输出值。再对PWM的输出量进行一定的限幅设置,即可使得小车直立。4.4.2PI控制小车速度在本文的设计需求中不仅仅要求小车在运动中能够保持车体垂直,同样也应该能在静止状态下保持车体垂直。应用积分来去除系统在运行中积累的误差量。实际中应用编码器获得平衡车的实时车轮转速,与系统中的设定速度值进行相减运算。得到需要的误差值,从而能够完成PI运算过程。过程如图4-3所示:图4-2速度PI控制流程图程序如下: voidSpeedControl(void) { floatfP,fI; floatfDelta; g_fCarSpeed=(g_s32LeftMotorPulseSigma+g_s32RightMotorPulseSigma)*0.5; g_s32LeftMotorPulseSigma=g_s32RightMotorPulseSigma=0;//全局变量清零 g_fCarSpeed=0.7*g_fCarSpeedOld+0.3*g_fCarSpeed;//低通滤波减少积分控制影响 g_fCarSpeedOld=g_fCarSpeed; fDelta=CAR_SPEED_SET; fDelta-=g_fCarSpeed; fP=fDelta*(g_tCarSpeedPID.P); fI=fDelta*(g_tCarSpeedPID.I/10.0);g_fCarPosition+=fI;//积分上限设置限度 If((s16g_fCarPosition>CAR_POSITION_M)g_fCarPosition=CAR_POSITION_MAX; If((s16)g_fCarPosition<CAR_POSITION_MIN)g_fCarPosition=CAR_POSITION_MIN;g_fSpeedControlOutOld=g_fSpeedControlOutNew; g_fSpeedControlOutNew=fP+g_fCarPosition; }若想实现对运行过程中车速的控制,可以改变速度预设值CAR_SPEED_SET。4.5直流电机PWM控制在控制过程对车轮直流电机进行控制时,需要将对应的PID控制算法输出量进行叠加,得到驱动电机的控制量。再通过控制占空比来控制输出电压的大小,进而控制直流电机的转速。该算法主要流程框如图4-3所示:图4-3电机控制流程图以下是微控制器对直流电机进行PWM控制输出的程序: voidMotorOutput(void){ g_fLeftMotorOut=g_fAngleControlOut-g_fSpeedControlOut; g_fRightMotorOut=g_fAngleControlOut-g_fSpeedControlOut;if((int)g_fLeftMotorOut>0)g_fLeftMotorOut+=MOTOR_OUT_DEAD_VAL; Elseif((int)g_fLeftMotorOut<0)g_fLeftMotorOut-=MOTOR_OUT_DEAD_VAL; If((int)g_fRightMotorOut>0)g_fRightMotorOut+=MOTOR_OUT_DEAD_VAL; Elseif((int)g_fRightMotorOut<0)g_fRightMotorOut-=MOTOR_OUT_DEAD_VAL; //输出饱和处理,防止超出PWM范围 If((int)g_fLeftMotorOut>MOTOR_OUT_MAX)g_fLeftMotorOut=MOTOR_OUT_MAX; If((int)g_fLeftMotorOut<MOTOR_OUT_MIN)g_fLeftMotorOut=MOTOR_OUT_MIN; If((int)g_fRightMotorOut>MOTOR_OUT_MAX)g_fRightMotorOut=MOTOR_OUT_MAX; If((int)g_fRightMotorOut<MOTOR_OUT_MIN)g_fRightMotorOut=MOTOR_OUT_MIN; SetMotorVoltageAndDirection((int)g_fLeftMotorOut,(int)g_fRightMotorOut); }4.6程序不足总结与反思经过一段时间的调试,两轮智能平衡小车已经可以实现自我平衡控制的目标。但是在这之中也存在着不足的地方。可以在高速平衡和精准控制方面做一些改进。但是在提高车辆速度的同时也要对其安全性进行考虑。如何消除小车在静止状态出现的车身抖动。在运行的过程中,有的时候会出现电机发热的情况,虽然未对小车的控制造成影响,但是这也时可能影响小车系统稳定性的一个因素。对此,可以在控制过程中加入对于电机的保护参数。以免电机在极端情况下损坏。因为小车恢复自我平衡的能力是有限的,当小车的自重较大或是加了负载以后,车辆的平衡控制状态会发生改变,有时就不能恢复到车身竖直状态。这个时候,PID控制会一直正反馈加大对电机的控制输出。可以对小车的倾角进行检测,若大于先前设定的阈值,则需要切断对电机的控制信号,以保证设备的安全。4.7本章内容总结本章中针对平衡小车程序的各个部分进行了功能阐述与技术细节讨论,包括用互补滤波进行数据融合,以此获得更加精确的角度值,对小车平衡方式的控制采用较为成熟的串级pid。从而实现对小车更加精确的控制。以流程图的形式对具体的控制算法进行了说明。在最后提出了可以进行改进的建议。第五章整车调试检测经过前几章的硬件设计与软件编写,已经做好了两轮智能自平衡小车的测试准备工作。但是想到得到更好的效果,还需要对小车中的各类控制参数进行细微调整,寻找到最合适的那一组参数。所以调参在整个制作过程中是极为重要的。5.1软件测试平台简介微控制器提供的调试接口为传统的SWD接口,采用该接口通过J-link进行程序下载、调试。IDE采用的是KEIL5MDK,是由KEIL公司在2012年出发布的一款针对ARM系列以及cortex-M内核的开发工具。在其环境下应用传统的C语言进行开发调试工作,在软件中可以方便的完成断点测试任务。并且其内部还集成了多种下载器。其开发工具界面如图5-1:图5-1IDE开发界面5.2姿态检测系统调试本系统中运用MPU6050运动处理传感器构建的姿态检测系统是进行系统控制的基础。其测量数据的精度对于实验结果也具有很大的影响,直接影响着小车能否完成自平衡的任务。在系统实际运行过程中,陀螺仪和加速度计存在不同频段的噪声而会在检测过程中产生一定的误差。并且系统内部可能存在控制误差,为了减弱直至消除噪声对系统稳定运行带来的影响。首先需要确认6050是否能够正常获取数据。在测试环节应用串口打印将接收到的数据发送到上位机,从而获得实时变化的图像,结合小车此时的实际状态来判断传感器是否正常。如果在调试过程中出现问题,找出对数据处理存在干扰的干扰源,可以从两方面入手,在程序中加强滤波的效果,或者在硬件电路中寻求解决。使MPU6050可以正常工作,输出准确的角度和加速度数据。图5-2为串口调试。图5-2串口数据接收5.3双轮自平衡小车直立控制PID参数的设定在本系统中控制部分采用的是闭环串级PID控制算法,因为其参数具有不确定性,所以PID控制参数需要通过多次实验验证所调整参数的合理性,不断试验直到寻找到能使双轮自平衡小车平衡控制系统实现较为稳定的自平衡控制的最佳参数。以下为双轮自平衡小车的姿态环的PID参数调试过程:首先对Kp的值进行阶段性调整,使双轮自平衡小车保持垂直方向得稳定状态。在这个时候,双轮自平衡小车会在一定范围内振荡,但仍然可以保持平衡。2.第二步对双轮自平衡小车的Kp值进行调整,调整为原先参数的80%。再慢慢的对Kd的值进行调整,当双轮自平衡小车可以保持平衡时,停止调整Kd参数的数值。3.精细调整在上面两个步骤中已经调整过的Kp与Kd的数值,可以将Kp的数值增加,然后针对参数Kd进行细微的调整微调,以寻求最稳定的平衡状态。通过多次的尝试与实验,最终得到以下的参数。Kp=6.35,Kd=0.72。在以上参数时,经过多次的验证实验,双轮自平衡小车能在较短的时间内恢复平衡稳定状态并且保持。以上为双轮自平衡小车的平衡控制PID参数的调整设定过程。采用同样的方法对运行速度PID参数进行调试,最终的调试结果为在Ksp=6.55时,双轮之自平衡小车能够以较快的速度达到稳定的平衡状态。通过前期的理论分析我们可以得知。在双轮自平衡小车进行自我平衡控制的过程中,如果施加一个外力来打破平衡状态,此时双轮自平衡小车的受力状态会发生改变,此时需要小车快速对自身的姿态的改变做出调整动作。通过驱动电机的转动改变轴向的受力,重新调整姿态来达到一个新的平衡状态。在刚刚开始进行调试的时候,双轮自平衡小车能够对姿态的变化做出相应的调整动作。但存在不确定性以及震荡,需要较长的时间才能恢复稳定的平衡状态。在调整过程中,不断修正相关的PID参数,让双轮自平衡小车可以实现对姿态变化的快速响应与调整。经过参数调整的双轮自平衡小车平衡姿态时效如图所示。系统通电后,双轮自平衡小车完成自我平衡调整所用的时间6s。在实验过程中所用的普通混凝土地面上,双轮自平衡小车自我可控的倾斜角度范围约为15度。如果在小车保持稳定平衡状态时对其施加一定外来作用力,可以在较短的时间内恢复自我平衡稳定状态。5.4本章小结本章主要阐述双轮自平衡小车控制系统各个关键的模块的调试过程以及相关的方法。同时也详细的介绍了Kalman滤波中的参数的调整与相应的串级PID控制系统中相关的参数的调整设定。通过不断的调整与实验,使双轮智能自平衡小车可以完美的实现平衡功能。并且在此基础上,具有一定的带载能力,达到本文开头所预期的预期的效果。第六章文章总结6.1总结本文对双轮智能自平衡小车的硬件部分进行了分析与设计,并在完成相对应的硬件结构后进行了相关参数的调整测试。制作完成基于串级PID算法进行自我平衡保持的双轮自平衡小车,该双轮自平衡小车可以进行速度的控制与自我平衡调节。在进行双轮自平衡小车的硬件电路的设计工作时,选用ST公司的STM32F103cct6为本系统中的主控芯片。其具有丰富外设和较高的主频,完全可以满足设计需求。在系统电源设计时,为了系统在运行时更加的稳定,选取了芯片MPS2307DN和ASM1117-3.3分别负责不同的降压功能。为系统内的其他模块提供相应的工作电压。在驱动模块的部分,TB6612FNG作为电机驱动模块。因其具有较大的工作电流以及相对其他模块较为小巧的体积,方便了在系统中的放置。节约了系统内的空间,提高了系统运行的稳定性。为了进一步提高平衡控制的效果,在系统中将编码器和姿态模块相结合进行控制。使其具备了自我平衡保持及速度控制的功能。在软件部分,重点在软件程序的结构和算法,为了让系统具有更好的稳定性,在进行设计时对硬件部分也进行了考虑。因为系统内选取的MPU6050传感器具有一定的噪声滤除的功能。我们在进行软件部分的设计时间选取了卡尔曼滤波的数据融合方式,对传感器回传的数据进行相应的运算。以此以期望获得精度更高的数据。在两轮智能平衡车的主要平衡算法中,采用具有较高精度和稳定性的串级PID算法。并且对双轮自平衡小车的不同的受力状态进行了理论层面的分析计算。在硬件结构设计完成后,进行了PID参数的调整测试,使双轮自平衡小车具有更好的抗干扰性。致
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论