双轮载人平衡车采取无污染的电能作为动力,具备体积小、运动灵巧、停车方便、狭小地方作业能力强等特点,针对当今社会交通拥挤、汽车尾气污染等问题提出了新型的出行办法办理方案。便捷、智能、迷你实用、纯绿色的平衡车既可以有效的办理中短间隔的交通问题,又能健身娱乐,得到了广大群众的推戴和喜好。同时,自平衡车作为高度灵敏的非线性不稳定体,具有强耦合、欠驱动等特色,是研究自控技能及理论的绝佳实验平台。
设计中充分剖析了自平衡技能的事情及掌握事理,利用了经典的牛顿力学建立载人平衡车的动力学与运动学模型,参考倒立摆的运动设计了自平衡掌握算法。对系统的可控角度、最大爬坡角度、可控性、可不雅观测性进行了剖析,得到了载人平衡车设计的辅导性结论。硬件系统设计包括车体、车轮、19花键免法兰轮胎、直流减速电机、铅酸电池以及STM32主掌握电路、MPU6050姿态检测电路、AS5040增量式编码器电路和两个超大功率H全桥电机驱动。通过对编码器与姿态传感器的数据领悟,得到了实时的、低噪声的车身倾角信息与电机迁徙改变速率信息,采取双闭环掌握算法调度PWM占空比掌握电机迁徙改变实现了车身的原地平衡直立、前行退却撤退、转向等功能。实测结果表明,本文所设计的载人平衡车能够很好的实现自平衡并且稳定的运行,其快规复性,准确性和稳定性能良好。关键词:非线性;超大功率H全桥;双闭环掌握算法;STM32;MPU6050;

研究目的及意义生活是向着智能化,便捷化的方向发展。而在交通和环境问题日益突出确当今,作为适宜多种场合利用的代步工具,平衡车顺应了时期的潮流,具有利用大略、节能环保、移动灵敏便捷等特点,尤其在空间狭窄、急转角度大的事情场合作业上风更凸显。如今环球变暖将给地球带来严重磨难,而气温变暖的罪魁罪魁,便是工业废气、汽车尾气等大量的排放。当现代界的另一个危急便是能源危急,节能环保交通工具取代传统是一定趋势,为平衡车的发展供应了广阔的发展空间。同时,作为新式健身器材磨炼平衡性发展警用型设备,在原有根本上进行合理的优化和设计,更适用于道路交通防治事情的代步,从而得到了广泛关注。作为一个非线性的对称系统,具有强耦合、多变量、参数不愿定等特性。其事理和传统的倒立摆系统类似,本身是一个自然重心不稳定的物体,须要电机的掌握来坚持姿态的平衡,通过姿态传感器、掌握算法、微掌握器数据拟合驱动电机迁徙改变及车体机器集装配置整体折衷制衡,是集环境感知、姿态检测、动态方案与决策、行为掌握与实行等多种功能于一体的非线性系统,其掌握难度大,掌握算法繁芜,给自动掌握理论体系提出了很大的寻衅,具有较强的理论研究和实践代价。
1.2 国内外研究现状近年来,国内外诸多科研事情单位、企业及自平衡机器人爱好者都对自平衡载人机器人领域的发展做出了许多打破性的贡献,积累了宝贵的理论与实践履历,极大地促进了自平衡技能的提高速率,同时也将一批具有代表性的自平衡机器人和载人代步产品展现在世人面前。2002年,美国赛格威(Segway)发布了环球第一款双轮载人平衡车,时速可达20Km/h。如图1.2.2所示,赛格威自平衡车颠覆了人们日常以低重心、大而宽、多点平衡式的地盘设计的传统不雅观念。让众人得以见识本身即自然不稳定的双轮车体通过内置的姿态传感器和编码器数据领悟驱动大功率无刷伺服电机来保持车体直立以及灵巧运动的类似倒立摆的机器构造也是可以平衡直立与稳定行驶的。。平衡车只须要三个陀螺仪就可以完备监测车身的前后旁边倾与侧倾斜程度,赛格威更是安装了五个航空级别的固态陀螺仪以作为行车安全戒备浸染的备用装置。除了改动前后倾与提高退却撤退外,赛格威车身的转向可以通过两种办法来掌握。个中一种可以旋转其把手部分,使得车辆旁边轮产生速差来掌握其转向;除此之外驾驶人在行进过程中通过倾斜身体,利用驾驶人的体重所产生与赛格威车体纵向垂直的分量,作为拐弯转角时的内向心力而达到旋转方向的目的,这是只有赛格威办得到的动作。
图1.2.2 Segway
深圳固高科技有限公司研发的传授教化自平衡车,如图1.2.3所示,利用减速比为10:1的85W大功率直流有刷伺服电机作为动力实行单元,可达最高1.6m/s的运行速率,最大爬坡角度20°。采取24V镍氢电池供电,可连续运行1.5小时。
图1.2.3固高传授教化自平衡车
1.3 课题设计哀求1、设计车体硬件,紧张包括车体重心设计、电子元器件位置摆放,电气布线等,力求车体简洁都雅;2、电路设计,紧张包括掌握模块、稳压电源模块、双轮测速模块、电机驱动模块,担保电子元器件之间不会涌现电磁旗子暗记滋扰;3、设计电机速率掌握算法,实现稳定、可靠地车体平衡直立、提高退却撤退以及转向三个功能;哀求:(1)可实现载人原地平衡直立,提高退却撤退;(2)平坦道路上可安全、平稳行驶;(3)设计双闭环掌握算法;(4)可爬坡8°以上;(5)低速行驶状态下可安全通过路面减速带;(6)大功率高亮LED前后车灯,方便晚上行驶;(7)实时车速显示;(8)最大载重80KG以上,续航20KM,最高时速10KM/H;(9)倾角过大,转速过高或失落控等,发出相对应提示;
2 载人平衡车建模和掌握策略2.1 载人平衡车事情事理自平衡车是建立在基于动态平衡的自动掌握系统上的一种高度灵敏、快规复的非线性系统。而载人平衡车则是建立在自平衡的根本之上,与人体操作相领悟的高度折衷的“思维车”。相较于一样平常的自平衡小车而言,载人平衡车具备更高的抗滋扰能力和更快速的自平衡规复能力[8]。车身内置高精度、高速的姿态传感器实时监测车体倾斜角度,并通过数字滤波算法与电机测速的编码器数据相领悟,根据吸收到的倾斜角与加速度信息,中心掌握器随即的做出相应的判断指令并输出频率固定、动态可调幅度的PWM波以驱动电机迁徙改变去坚持系统的平衡[5]。通过采集把手带动转向电位器转过的仿照值,判断在当前行进速率下安全平稳转弯的角度大小,达到稳定、灵巧的行进。
2.2 载人平衡车动力学与运动学建模参照日常生活中手托木棒保持直立的征象,我们以木棒直立掌握来建立自平衡系统的模型。如图2.2.1手托木棒掌握系统所示,首先我们空想的状态是要保值木棒的直立,但是实际中以手掌掌托为零点平面的话,木棒总会朝着这个圆面的任意一个可能的方向倾斜乃至倒下,此刻我们的大脑就会通过眼睛不雅观察木棒与掌托平面之间的倾斜角与大致判断在这个倾斜方向上的加速度并不断的发送指令给我们的实行机构(手掌)不断地以不同的速率移动位置来尽可能的达到木棒的直立[3]。而双轮载人平衡车的掌握相对付手托木棒保持直立来说较为大略一些。由于小车具备两个轮子打仗地面,以是车身只须要在一维上面保持平衡即可,空想的情形下,只须要不断地调度轮子前后移动的速率即可坚持车身的平衡。
图2.2.1 手托木棒掌握系统2.3 载人平衡车掌握算法自平衡的掌握算法可以参考单摆系统的运动来做剖析,如图2.3所示,在重力场的浸染下,单摆摆动的角度与其运动方向相反的回答力成正比。但由于空气阻力的存在,单摆终极会勾留在竖直位置上。但是对付自平衡车而言,我们不但要通过MCU掌握使电机输出与车身倾角成正比的回答力,还要施加与角速率成正比关系、方向相反的阻尼力。针对上述,可以得到平衡掌握算法: 。以是只需打算角速率及角度的偏差便可得到可以坚持小车平衡的回答力[10]。
图2.3 单摆系统
3 系统方案剖析论证及选择3.1 主控芯片选型方案一: ARM V7-M架构作为目前的主流构架,被英国的ARM公司运用到Cortex-M3当中,和曾不胫而走的 ARMV4T 架构比较,它拥有性能更强运算核心、更低的功耗和优秀的性价比。STM32F103xx系列运行主频为72MHz,外设资源丰富,集成一整套完全固件库,和51单片机直接操作寄存器的办法有所差异,可直接调用标准库函数进行项目开拓,操作大略,调试方便,通用、高等定时器包含的编码器接口模式在电机测速上拥有无与伦比的上风,是同价类产品中性能最高的产品。
方案二:选择宏晶科技的STC12C5A60S2增强型51单片机。STC12C5A60S2抗滋扰能力强、花费功率极低,和传统的51单片机运行速率比较较,它的运行加快了10倍,而且它们两者之间的指令代码具有无缝的兼容性。内部集成MAX810专用复位电路,一旦接上电源便可以实现自动复位。但内部的资源相对较少,运算速率不敷以知足自平衡系统快速、繁芜的数据运算和领悟,内部存储空间小,性价比低。考虑到系统的繁芜度、自平衡车身内置的高精度姿态传感器数据领悟和编码器数据处理的繁芜打算任务,须要与传感器进行IIC通讯,通过ADC采集电池电压、转向电位器数据并输出多路灵巧可控的PWM旗子暗记。结合以上所述方案,选择方案一,即用STM32F103C8T6作为本系统的主控芯片较为得当。
3.2 姿态检测传感器方案选择方案一:MMA7260和ENC-03是美国飞思卡尔公司的姿态传感器,广泛运用于运动与掌握系统中。MMA7260三轴加速度传感器与ENC-03陀螺仪数据领悟后可检测倾角,跌落状态等诸多方面。利用角速率事理,将由物理位置偏移情形所产生的位移转换成电流运送到主控IC中,通过不雅观察再对它所产生的位移进行一些调度,以便达到稳定的目的。在摄影机、飞机模型等产品设计中得以广泛运用。
方案二: MPU-6050三轴陀螺仪三轴加速度计拥有良好的性能而被广泛运用于翱翔器,机器人等运动掌握类产品中。其将 6轴运动处理组件利用多种方案进行整合得出最优值,来办理陀螺仪与加速度计轴间差的问题。缩减了物理包装空间,便于安装在各种不同环境下的物理位置。通过IIC协议读取内部原始的数据并由四元数矩阵打算出欧拉角。经由卡尔曼滤、DMP、互补等波算法滤波后输出的角度精确稳定,足以知足高灵敏度的随动掌握系统在姿态检测上的哀求。在DMP方面,它还支持多种操作系统系统,为运用开拓供应了架构化的API。综合以上所阐述的:选择MPU6050模块作为自平衡系统的姿态检测部分,可以有效地解除物理上的轴间差问题,实现了载人平衡车事情的可靠性和系统事情的稳定性。
3.3 电机选择方案方案一:步进电机的步进角与脉冲数属正比关系,调节速率范围相对较宽,在合营驱动器的情形下可以做到步进角度细分,提高其运行精确度,产生的偏差也不会进行累积。但是步进电机步距角是固定化的,对付分辨率的灵巧性是有所欠缺的,而且步进驱动时随意马虎造成车体震荡,不利于小车的稳定。步进电机虽然可以利用细分驱动办法战胜上述缺陷,但是细分驱动电路构造繁芜,且大功率的步进电机价格相对较高,性价比极低。
方案二:直流无刷电机继续了直流有刷电机机器特性好的优点,同时拥有较宽的调节速率范围,而且无刷电机的布局没有安装换向器和电刷,让无刷电机具有高度的可靠性和长期的利用寿命,运行时产生的噪音小。市情上一样平常的无刷电机输出扭矩小,全桥逆变器电路极其繁芜,负载性能不强且价格偏高。
方案三:直流有刷减速电机。直流有刷减速电机具有扭矩大,机器特性硬,运行相应速率快,可调节速率范围宽,可掌握性强的特点,双轮载人平衡车对灵敏性、快速性等性能的哀求可以被知足,虽然电机的电刷会导致电机的利用寿命减短,电磁滋扰的产生也无法避免。但是基于负载较轻的设计,换向器和电刷的丢失功耗比较低。为了能够有效率地降落电磁滋扰,多层机器构造当选择运用到车体中,使得电机驱动电路能够与其他电路进行分离开。综上,选择两个36V 350W带有减速齿轮的直流有刷电机驱动自平衡车较为得当。
3.4 系统组成综合以上所阐述的,选择STM32F103C8T6单片机作为主控芯片,MPU-6050姿态传感器,直流有刷减速电机,大功率H全桥电机驱动器组成双轮载人平衡车硬件系统。辅以卡尔曼滤波算法对陀螺仪和加速度计数据进行领悟,打算出车身倾角与角速率的最优估计值。并以最优姿态角和车身速率作为反馈量构成双闭环掌握反馈回主掌握系统中产生两路动态可调的PWM波驱动电机前后迁徙改变以坚持车身的平衡与直立。系统框图如图3.4所示。
图3.4 系统框图
4 平衡车硬件设计4.1 STM32主控电路双轮载人平衡车选择的是STM32F103C8T6作为中心掌握器,其内部包含丰富的资源。自平衡车主控系统设计中采取核心板+转接板的办法事情,力求精简小巧,其板载资源如下:1个复位按钮,可用于复位MCU系统以及转接板上的干系外设;1个采取2x3 6Pin排针的启动模式选择配置接口,用于选择复位后MCU的启动模式;1个4线SWD调试下载接口,极大的精简了下载调试须要占用的IO资源和PCB整体尺寸,SWD只需两个IO口即可在线仿真调试,清楚的不雅观测到MCU内核寄存器运行状态及干系变量,给后期的程序设计与调试带来很大的便利;1个3.3V电源指示灯,用于指示电源状态,在按下电源开关时,若是通路,指示灯亮起,反之灯会不亮,通过不雅观察这颗LED指示灯的状态,可以清楚明了的判断核心板的上电情形是否正常,防止电源短接造成芯片烧毁等严重失落误;
图4.1 STM32最小系统三组16Pin的排针将MCU的所有IO口(除了被晶振占用的2个IO口)资源按芯片管脚顺序引出,在核心板上标号分别为J1,J2,J3,非常方便后期硬件接线实验与调试,最小系统事理图如图4.1所示。
4.2 电源电路小车系统共利用了四路电源,个中还包括对仿照与数字、高压与低压以及高速旗子暗记部分的供电,这对PCBA的布局布线、旗子暗记完全性以及元器件的选用都提出了很大的寻衅。在高压、高速开关功率MOS管这部分仿照电路VCC连接的是铅酸电池的正极VCC_36V(三个12V的电瓶串联相接),能够稳定输出36V电压,12安培的电流,给予电机强劲的运行动力。此外,在电路最前端放置一只耐压值45V的反向保护二极管防止电源短接对后面的电路造成短路烧毁的危险。过大的压差会使电源芯片负载过大而发热进而影响系统稳定性,遂通过200欧姆/5W的分压电阻对36V分压得到20V电压,经由220uF/50V的铝壳电解电容滤去低频纹波再经一个0.1uF的陶瓷电容滤去高频纹波后流入三端可调线性稳压器LM317中,同时在LM317输入与输出两端并联肖特基二极管增加电源系统稳定性,通过5.1K和0.51K的电阻对其进行分压后输出稳定的15V正向电压给半桥驱动器IR2104S供电。考虑到除了功率开关管部分功耗极大之外别的皆为耗电量较小的系统,MCU系统,外设,半桥驱动器等加起来功耗不大,但对电源稳定性哀求较高,遂决定采取上述的线性稳压器LM317来作为除功率MOS管外的系统的总电源转换芯片,该芯片在1.2V~37V可调输出并且担保1%的容差和0.01%的线性调度率,能够稳定输出超过1.5安培的电流,足以知足系统的利用。比较开关电源所带来的大噪声,线性电源在小功耗场合下更为适用。第二部分为5V正向电压输出,前端放置一个100Ω/2W的功率电阻分掉一部分电压以减小压差,再经由220uF/50V的铝壳电解电容滤波后流入LM7805三端线性稳压芯片,输出稳定的VCC正5V电源给高速光耦HCPL2631供电。高速光耦隔离的旗子暗记电路作为主控板与大功率电机驱动唯一的桥梁,不但没有削弱主控的PWM掌握旗子暗记,并且在主控板与大功率电机驱动板之间做了良好的隔离,放置大电流回灌而烧毁主控,对光耦单独供电是必须的。第三部分是由三端稳压芯片ASM1117_3.3V输出的3.3.V正向电源,它拥有最大0.2%线性调度率,0.4%的负载调度率,可输出最大800mA电流,性能非常精良,是小功耗电系统极佳选型。设计中利用的是总线式电源分配方案,为所有的器件供电的同时适当的铺设接地过孔(类似于电源层式分配方案),具有良好的阻抗特性和尽可能小的电源噪声。电源电路原图如图4.2所示。
图4.2 电源电路4.3 电机驱动电路平衡车利用的是350W 36V的有刷直流减速电机,额定事情电流10A旁边,堵转电流20A以上。市情上少有大功率集成的直流有刷电机驱动器,价格昂贵。利用功率NMOS管的开关特性,合营IR2104S半桥驱动器组成H全桥电机驱动电路方案大略实用、廉价、性能知足利用需求。IR2104S芯片比较传统的高端低端栅极驱动用具备自动插入520纳秒去世区韶光、耐压值为600V、开启电压10~20V超宽、高侧输出与输入相位相同动态范围等优点。特殊是内置去世区韶光,在电机驱动H桥掌握中是不可或缺的。鉴于开关元件通性,导通韶光与关断韶光是不一样的,这样就会造成MOS管导通与关断过程中存在韶光相叠合的去世区,也称之为开关损耗,当高下管子同时导通,会在瞬间把管子烧毁。而IR2104S芯片内置520纳秒去世区韶光,相对付高速开关管来说既保护了场效应管不被烧毁也不会对管子的开关频率造成影响,是做H桥驱动器的极佳选择。设计中选用IR2104S半桥驱动器芯片搭配耐压值600V的超快速规复二极管RS1M FR107以及10uF钽电容和10Ω电阻构成的泄放回路组成电荷泵来掌握H桥MOS管的导通与断开。如图4.3.1所示,C11为自举电容,D6为超快速规复二极管RS1M FR107,PWM在上桥臂调制。当Q1断开时,A点电位由于Q3续流回零,此时C11通过VCC_15V和D6进行充电。当输入旗子暗记P1导通,上桥臂的驱动电压由C11供应且C11电压不变,Vb随Vs的升高而浮动,即自举。每一个PWM周期,电路都会给C11充电来确保其电压状态基本保持不变。在Q1断开时,D6则为C11的充电供应正向电流利道,当Q1导通时则阻挡电流反向流入掌握电压VCC_15V。直流电机一端接正,另一端接负即可让电机迁徙改变起来;调换两端极性,电机即反向迁徙改变。在平衡车这种高灵敏度自控系统中须要快速的切换高低电平的极性来驱动电机前后迁徙改变以达到平衡的状态,显然手动的把电机线反接过来是不现实的。通过实验可知,当频繁的切换开关状态时候,电机就不在是匀速迁徙改变,而是变革的了。相应的,扭矩也随之变革。而H桥驱动电路能够方便的实现电机的四象限运动,即正反转、正反转制动。H桥驱动电路事理如图4.3.2所示,组成H桥驱动电路的四只开关监工作在开关的状态,S1,S4与S2,S3为两组互补状态关系的开关。当S1、S4导通,S3,、S4关闭时,电机两端施以正向电压实现电机正转,反之,电机反转。实际掌握中,常用75NF75功率MOS管代替以上四只开关管,辅以得当电容与电阻搭建的泄放回路以及高速肖特基二极管保护电路组成的大功率H桥电机驱动器,耐压值可达75V,可承受最大80A的瞬间放电、50A的稳定放电电流。各项性能参数可通过改换不同元器件得到,价格低廉,可二次开拓和调试。;PC14→数据线(SDA);PC13→MOSI;PB4→MISO;OLED接口电路如图4.7所示。
图4.7 OLED接口电路
4.8 脚踏开关和LED车灯掌握电路实验研究阶段曾经涌现按下电源开关,车子立马往一个方向跑的情形,这在利用中是绝对不许的,毫无安全方法保障。于是设计中利用了四个防锈防水金属按钮自复位开关作为脚踏板的感应开关,四个开关为并联关系,分别于四个通用GPIO口相接并两两分布在两边脚踏板之间,当人们踩踏在平衡车上时即开关导通,可通过程序设置开关首次被按下必须检测到四个开关都被按下,才启动平衡程序,而在行进过程中,只要感应到旁边任各一个开关还被按下即连续运行程序。MCU通过检测IO口高低电平即可判断开关是否处于导通状态,进而决定是否进入平衡行驶模式,看似眇小的四个自复位开关却有效的提高了平衡车在行驶上的安全性能,最大限度保障驾驶人身安全。车身前后左中右共安装了六颗高亮贴片式食人鱼蓝色LED,在行进过程中,直线行走会触发前后中间两颗LED高亮显示,前行则会相应的闪烁前面中间那颗LED,反之亦然。当操纵把进行向左转弯操作时,左车灯进入闪烁模式,提醒路人本车正进行左转弯动作。同理,右车灯亦然。相应的灯光提示,炫彩夺目,作为装饰的同时也起到了照明的浸染,具有良好的人机交互功能。
4.9 硬件设计中抗滋扰方法电机驱动板中存在仿照(42V和15V)和数字(MCU系统)电路旗子暗记,电机自身运行过程中会产生感生电动势给电路系统带来强烈的电磁滋扰,H桥电机驱动器中包含的大功率的NMOS管以开关的办法事情,这无疑会产生大量的高频谐波。这对PCB布线接地方式和整车的电气系统提出了严厉的寻衅,这些旗子暗记电路不进行抗滋扰方法就会影响编码器运送到MCU的速率旗子暗记和四路PWM、电平输出的功率NMOS管的开关旗子暗记,使得全体系统事情收到极大滋扰,乃至不能事情,接地不佳情形下乃至会导致电流回灌到MCU系统烧毁主控电路。针对上述问题,设计中采纳以下几个方法来提高硬件系统的抗滋扰能力:在主掌握电路输出四路PWM脉宽调制旗子暗记到电机驱动板之间放置高速光耦做光电隔离,防止驱动板的大电流旗子暗记对主控板的小旗子暗记造成滋扰。查阅干系资料和实践表明,高速光耦对掌握旗子暗记险些没有衰减,但却有效的隔离大旗子暗记与小旗子暗记之间的滋扰,设计中选用的是HCPL2631光电隔离器件。HCMOS兼容,搞CMR,10MBd的速率足以知足H桥20KHz的开关频率的利用;在旋转磁编码器A,B正交旗子暗记干路上放置滤波RC滤波器进行滤波处理;从电磁兼容性EMC角度出发,在PCBA布局布线上采纳一些提高系统抵抗滋扰能力的方法:在对噪声有高哀求的时钟电路中,走线尽可能短,元件摆放顺序按照电源通路来放置并做包地处理;在电源和地之间加去耦电容,均走直线或弧形走线;充分考虑大功率场效应管部分电路的散热问题必要情形下该当添加散热片或者风扇进行散热并与MOS管保持一定的间隔,高频部分只管即便支配在板子边缘处以减少旗子暗记线走线长度等方法是担保一块PCB成功的关键成分。
二、软件篇
系统软件设计5.1 系统初始化为了防止程序运行过程中跑飞而造成的人身安全的侵害,系统主掌握循环程序中添加独立看门狗程序,在程序去世锁或跑飞状态下可自动复位,确保行车安全。系统初始化流程图如图5.1所示:
图5.1 系统初始化
5.2 数字滤波器设计5.2.1卡尔曼滤波卡尔曼滤波算法广泛地运用于智能机器人掌握,航模传感器数据领悟,卫星导航领域以及打算机图像处理当中。姿态传感器MPU-6050陀螺仪丈量的角速率通过数学积分运算得到角度的信息,总是会存在眇小的偏差和漂移变革所形成的累积偏差,并且偏差会随韶光的增加逐步增大,到末了无法输出精确可控的角度旗子暗记。先对其偏差验证估计一个大概值,在用倾角减去刚才估计的八个大概值偏差协方差的微分,后期验证再估计一个大概值,末了输出稳定的角度信息。经由多次试验,利用卡尔曼滤波算法领悟得到的角度值非常稳定。部分程序代码如下所示。
void Kalman_Filter(float Accel,float Gyro){angle+=(Gyro - Q_bias) dt; //ÏÈÑé¹À¼ÆPdot[0]=Q_angle - PP[0][1] - PP[1][0];
Pdot[1]=-PP[1][1];Pdot[2]=-PP[1][1];Pdot[3]=Q_gyro;PP[0][0] += Pdot[0] dt; PP[0][1] += Pdot[1] dt; PP[1][0] += Pdot[2] dt;PP[1][1] += Pdot[3] dt;Angle_err = Accel - angle;PCt_0 = C_0 PP[0][0];PCt_1 = C_0 PP[1][0];E = R_angle + C_0 PCt_0;K_0 = PCt_0 / E;K_1 = PCt_1 / E;t_0 = PCt_0;t_1 = C_0 PP[0][1];PP[0][0] -= K_0 t_0; PP[0][1] -= K_0 t_1;PP[1][0] -= K_1 t_0;PP[1][1] -= K_1 t_1;angle+= K_0 Angle_err; Q_bias+= K_1 Angle_err; angle_dot = Gyro - Q_bias;1234567891011121314151617181920212223242526272829
}
void Yijielvbo(float angle_m, float gyro_m){angle = K1 angle_m+ (1-K1) (angle + gyro_m 0.005);}
5.2.2一介低通滤波机器齿轮的减速电机是存在一定的掌握去世区的,我们没有必要把它掌握在一个精度非常高的范围里面,这会让电机产生强烈的震撼、更严重的会烧毁电机等不可逆转的危害。正好相反,我们可以利用减速电机这存在的去世区,适当的减缓速率的变革,可以有效的降落速率掌握对直立掌握的滋扰。在自平衡系统里,直立平衡才是最紧张的,其他统统的掌握相对平衡来说都算是一种滋扰,滋扰越大,稳定性越差[6]。以是我们对编码器所测得的电机转速信息乘以0.8后再赋值给编码器输出,对速率偏差乘以0.2后赋值给新的速率偏差变量。干系代码如下所示:
Encode = 0.8; //对Encode进行低通滤波Encode += Encode_Least0.2; //对Encode偏差进行低通滤波
5.3 数字PID掌握器5.3.1直立环PD掌握相对付平衡车而言,所有的功能都是建立在车身平衡的根本上的。平衡是紧张,其他所有的附加功能相较于直立来说都是滋扰[7]。首先定义程序入口参数Angle(角度), Gyro(角速率),Bias(偏差)为浮点型变量,比例值,微分值可以先行估计一个大概值,方便后期调试。定义使得系统平衡的平衡(Balance)变量为整形数据。其次估计车身的机器安装中值为0(姿态传感器安装在绝对零点位置的时候),用陀螺仪所测得的实时变革的角度减去机器安装中值并赋值给偏差变量;再对偏差乘以比例值并加上角速率乘以微分值赋值给平衡PWM波,末了返回的是整形的平衡PWM波值。程序设计如图5.3.1所示。
图5.3.1 直立环PD掌握代码以上为角度闭环掌握也便是直立PD掌握的关键部分程序,一样平常的掌握系统而言,只需利用纯挚的比例掌握或者PI掌握即可,但是相对付那些须要对滋扰做出迅速相应的高度灵敏系统来说,还须要引入微分掌握来肃清抖动。
5.3.2速率环PI掌握一样平常的速率掌握皆采取PI掌握器,平衡车系统中线性掌握器也选择了这种类型。根据公式可得:偏差=丈量值-目标值。我们利用旁边两个编码器所测得的数据相加作为丈量值,在这里我们须要的是一个可以表示速率变革的变量,以是不用纠结是否要对这个丈量值做除以2的打算,由于这样的话会引入舍去偏差。速率闭环掌握的目的是为了使得系统在保持直立的同时速率为零,以是我们设定目标值速率为零可以得到以下公式:
Encoder_Least =(Encoder_Right-Encoder_Left)-0;
定义速率掌握PWM波,做编码器,右编码器数据类型为整形,再将速率、编码器偏差、编码器积分等参数定义为静态全局变量。将上试所打算的最新速率偏差赋值给Encoder_Least变量,并对编码器加权滤波,积分10毫秒得到位移,将积分得到的位移减去速率变革量Movement再赋值给Encoder_Integral,并限定Encoder_Integral的积分幅度,也便是对平衡车最大行进速率的限定,以防止驾驶过快导致的生命危险。速率乘以比例加上速率积分乘以积分赋值给速率掌握的PWM,如果检测到电机关闭的话,就打消积分,防止多次积分所带来的偏差,末了返回速率掌握PWM。核心程序如下图5.3.2所示。
图5.3.2 PWM核心程序代码
5.3.3转向环PD掌握单只是做到在速率为零时保持平衡直立,就让小车上路行驶的话,绝对会涌现横冲直撞的征象的。以是转向部分是必不可少的,算法设计起初,可以说是毫无头绪。在行进过程中,碰着前方有转弯,溘然把把手打向个中一边来达到转弯的目的,而把手是通过中央轴的办法与10K的单圈式电位器连接在一起的,也便是说利用单片机的ADC采集电位器转过的仿照值,再与上述的直立、速率闭环掌握数据相领悟后打算出能使小车在保持平衡的同时稳定的转向的差速算法。
由于行驶环境有诸多变革,在较滑的地面可能会使轮胎发生打滑征象,且编码器精度有限,以是纯挚的依赖旁边编码器相加之差来做来做转向闭环掌握的办法是不现实的。利用Z轴陀螺仪的数据的积分得到的该当转向的角度作为掌握的偏差,并以Z轴陀螺仪的数据作为微分掌握的输入进行比例微分闭环掌握,目的是保持转向的角度为自行设定的值。也便是说将ADC采集到电位器转过的值传入Gyro_Turn中,用gyro减去电位器的值再加上一个参考值即可,当电位器没有被迁徙改变的时候,即相称于gyro-0=gyro,这样在没有迁徙改变把手的情形下,车子则保持直线行驶,在把手迁徙改变后,根据一个大略的判断指令后,即进行转向的闭环掌握。使得程序具有更加良好的鲁棒性温柔应性。核心代码如下:
5.4 编码器M法测速编码器M法测速是一项非常实用的技能,它可以将编码器的丈量精度切切实实的提高4倍。如图5.4所示设计中用到的是旋转正交编码器,输出的是正交的A,B两相矩形波,一样平常的丈量方法便是丈量单位韶光内A相或者B相输出的脉冲次数来打算得到电机转轴当前的速率信息[9]。常规利用中,普遍的做法是利用单片机的输入捕获功能丈量任意一相的上升沿或者低落沿,也便是丈量对应图5.4的1234数字中的任何一个,这样的话就只能计数三次,而M法丈量则是利用软件四倍频的方法同时捕获A,B,相的上升沿与低落沿,在相同的韶光里,可以捕获到12次数据,丈量精度也随之大大提高。
图5.4 A,B相正交矩形波
5.5 OLED显示程序设计中利用的是6线的SPI串行通信的OLED显示屏,它的分辨率为12864,能显示汉字、图片、字符等多样化的信息。如下程序所示,首先在主函数里初始化OLED_Init()子程序,然后打开OLED的显示函数。可以看到,当前模式下OLED第一行显示的内容为当前小车所利用的是内置的DMP滤波算法,速率处于普通模式下。第二行则显示的是左编码器丈量电机转轴的实时速率信息,第三行显示的是右编码器丈量电机转轴的实时速率信息,非常的直不雅观明了,有助于驾驶人实时动态的理解车子运行速率以掌握在安全速率以内。第五行则是显示当前电池的电压值,让人们时候知道电池电量以确保电池不会过放而造成不必要的经济丢失。第六行显示的信息对付调试来说是非常利用的,它显示的是当前车身的倾角信息,给后期的测试带来极大的便利。核心代码如下:u8 OLED_GRAM[128][8];void OLED_Refresh_Gram(void){u8 i,n;for(i=0;i<8;i++){OLED_WR_Byte (0xb0+i,OLED_CMD); //ÉèÖÃÒ³µØÖ·£¨0~7£©OLED_WR_Byte (0x00,OLED_CMD); //ÉèÖÃÏÔʾλÖáªÁе͵ØÖ·OLED_WR_Byte (0x10,OLED_CMD); //ÉèÖÃÏÔʾλÖáªÁиߵØÖ·for(n=0;n<128;n++)OLED_WR_Byte(OLED_GRAM[n][i],OLED_DATA);}}void OLED_WR_Byte(u8 dat,u8 cmd){u8 i;if(cmd)OLED_RS_Set();elseOLED_RS_Clr();for(i=0;i<8;i++){OLED_SCLK_Clr();if(dat&0x80)OLED_SDIN_Set();elseOLED_SDIN_Clr();OLED_SCLK_Set();dat<<=1;}OLED_RS_Set();}void OLED_Set_Pos(unsigned char x, unsigned char y) 1{OLED_WR_Byte(0xb0+y,OLED_CMD);OLED_WR_Byte(((x&0xf0)>>4)|0x10,OLED_CMD);OLED_WR_Byte((x&0x0f)|0x01,OLED_CMD);}void OLED_Display_On(void){OLED_WR_Byte(0X8D,OLED_CMD); //SET DCDCÃüÁîOLED_WR_Byte(0X14,OLED_CMD); //DCDC ONOLED_WR_Byte(0XAF,OLED_CMD); //DISPLAY ON}void OLED_Display_Off(void){OLED_WR_Byte(0X8D,OLED_CMD); //SET DCDCÃüÁîOLED_WR_Byte(0X10,OLED_CMD); //DCDC OFFOLED_WR_Byte(0XAE,OLED_CMD); //DISPLAY OFF}void OLED_Clear(void){u8 i,n;for(i=0;i<8;i++)for(n=0;n<128;n++)OLED_GRAM[n][i]=0X00;OLED_Refresh_Gram();//¸üÐÂÏÔʾ}void OLED_DrawPoint(u8 x,u8 y,u8 t){u8 pos,bx,temp=0;if(x>127||y>63)return;pos=7-y/8;bx=y%8;temp=1<<(7-bx);if(t)OLED_GRAM[x][pos]|=temp;else OLED_GRAM[x][pos]&=~temp;}void OLED_ShowChar(u8 x,u8 y,u8 chr,u8 size,u8 mode){u8 temp,t,t1;u8 y0=y;chr=chr-’ ';for(t=0;t<size;t++){if(size==12)temp=oled_asc2_1206[chr][t];else temp=oled_asc2_1608[chr][t];for(t1=0;t1<8;t1++){if(temp&0x80)OLED_DrawPoint(x,y,mode);else OLED_DrawPoint(x,y,!mode);temp<<=1;y++;if((y-y0)==size){y=y0;x++;break;}}}}//m^nº¯Êýu32 oled_pow(u8 m,u8 n){u32 result=1;while(n–)result=m;return result;}void OLED_ShowNumber(u8 x,u8 y,u32 num,u8 len,u8 size){u8 t,temp;u8 enshow=0;for(t=0;t<len;t++){temp=(num/oled_pow(10,len-t-1))%10;if(enshow0&&t<(len-1)){if(temp0){OLED_ShowChar(x+(size/2)t,y,’ ',size,1);continue;}else enshow=1;} OLED_ShowChar(x+(size/2)t,y,temp+'0',size,1); }123}void OLED_ShowString(u8 x,u8 y,const u8 p){#define MAX_CHAR_POSX 122#define MAX_CHAR_POSY 58while(p!=’\0’){if(x>MAX_CHAR_POSX){x=0;y+=16;}if(y>MAX_CHAR_POSY){y=x=0;OLED_Clear();}OLED_ShowChar(x,y,p,12,1);x+=8;p++;}}void OLED_ShowCHinese(u8 x,u8 y,u8 no){u8 t,adder=0;OLED_Set_Pos(x,y);for(t=0;t<16;t++){OLED_WR_Byte(Myzk[2no][t],OLED_DATA);adder+=1;}OLED_Set_Pos(x,y+1);for(t=0;t<16;t++){OLED_WR_Byte(Myzk[2no+1][t],OLED_DATA);adder+=1;}}void OLED_Init(void){GPIO_InitTypeDef GPIO_InitStructure;RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;GPIO_Init(GPIOB, &GPIO_InitStructure);RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC | RCC_APB2Periph_AFIO, ENABLE);1GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13 |GPIO_Pin_14 | GPIO_Pin_15;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;GPIO_Init(GPIOC, &GPIO_InitStructure);PWR_BackupAccessCmd(ENABLE);RCC_LSEConfig(RCC_LSE_OFF);BKP_TamperPinCmd(DISABLE);PWR_BackupAccessCmd(DISABLE);OLED_RST_Clr();delay_ms(100);OLED_RST_Set(); OLED_WR_Byte(0xAE,OLED_CMD); OLED_WR_Byte(0xD5,OLED_CMD); OLED_WR_Byte(80,OLED_CMD); OLED_WR_Byte(0xA8,OLED_CMD); OLED_WR_Byte(0X3F,OLED_CMD); OLED_WR_Byte(0xD3,OLED_CMD); OLED_WR_Byte(0X00,OLED_CMD); OLED_WR_Byte(0x40,OLED_CMD); OLED_WR_Byte(0x8D,OLED_CMD); OLED_WR_Byte(0x14,OLED_CMD); OLED_WR_Byte(0x20,OLED_CMD); OLED_WR_Byte(0x02,OLED_CMD); OLED_WR_Byte(0xA1,OLED_CMD); OLED_WR_Byte(0xC0,OLED_CMD); OLED_WR_Byte(0xDA,OLED_CMD); OLED_WR_Byte(0x12,OLED_CMD); OLED_WR_Byte(0x81,OLED_CMD);OLED_WR_Byte(0xEF,OLED_CMD); OLED_WR_Byte(0xD9,OLED_CMD); OLED_WR_Byte(0xf1,OLED_CMD); OLED_WR_Byte(0xDB,OLED_CMD);OLED_WR_Byte(0x30,OLED_CMD); OLED_WR_Byte(0xA4,OLED_CMD); OLED_WR_Byte(0xA6,OLED_CMD); OLED_WR_Byte(0xAF,OLED_CMD); OLED_Clear();1234567891011121314151617181920212223242526272829303132333435363738}5.6 主板温度监测显示主板的温度监测,是笔者在纵不雅观多种电机驱动设计方案后所设计出来的一种基于自然环境下的PCBA的保护。一样平常的PCB单层电路板多数采取铝基板,多层板则是采取FR-4材料的,他们都有一个正常事情的情形下耐温度值,超过了一定的温度,板子会发生变形、扭曲等状态。而功率场效应管也是一样平常耐最高温度值多数为150°C或者175°C,那么正常事情的时候肯定是不会到达这么高的温度的,但是当平衡车碰着坑洼,障碍物的时候,电机会几近处于堵转的状态,此时MOS管的输出电流会急剧上升,随之而来的是巨大的发热量。出于安全考虑,在散热片表贴安装多个温度传感器来实时检测MOS管的发热状态以确保行车的安全。int Read_Temperature(void){float Temp;Temp=(I2C_ReadOneByte(devAddr,MPU6050_RA_TEMP_OUT_H)<<8)+I2C_ReadOneByte(devAddr,MPU6050_RA_TEMP_OUT_L);if(Temp>32768) Temp-=65536;Temp=(36.53+Temp/340)10;return (int)Temp;}5.7 高亮LED车灯闪烁设计高亮的车灯显示,在行进过程中这是必须的。既可以作为照明利用,也可以指示当前车子运行状态。如下程序所示,当MCU判断车身向左转弯的时候,随即以1/200ms的频率不断地闪烁左车灯,当车子向右转往的时候,右车灯也同样以1/200ms的闪烁频率一直地闪烁以表示车子当前为向右转状态。在直线行驶情形下,中间的车灯一贯高亮显示,起装饰和照明浸染。int turn(int encoder_left,int encoder_right,float gyro){static float Turn_Target=0,Turn,Turn_Convert=3,Turn_Count;float Turn_Bias,Turn_Bias_Integral,Turn_Amplitude=1800;
if(Volt > 1.75 || Volt < 1.55) {if(++Turn_Count==1)Encoder_temp=myabs(encoder_left+encoder_right);Turn_Convert=2000/Encoder_temp;if(Turn_Convert<3)Turn_Convert=3;if(Turn_Convert>10)Turn_Convert=10;} else{Turn_Convert=3;Turn_Count=0;Encoder_temp=0;}if(Volt > 1.75) //×óת{Turn_Target-=Turn_Convert; LED3=1;LED6=1;if(led_delay == 1){LED1=0;LED4=0;}else{LED1=1;LED4=1;}}else if(Volt < 1.55) {Turn_Target+=Turn_Convert;LED1=1;LED4=1;if(led_delay == 1){LED3=0; LED6=0;}else{LED3=1;LED6=1;}} else {Turn_Target=0; LED2=0;LED5=0;LED1=1;LED4=1;LED3=1;LED6=1;}if(Turn_Target>Turn_Amplitude) Turn_Target=Turn_Amplitude; if(Turn_Target<-Turn_Amplitude) Turn_Target=-Turn_Amplitude; Turn_Bias=encoder_right-encoder_left;if(Turn_Off(Angle_Balance) == 0){Turn_Bias_Integral+=Turn_Bias;Turn_Bias_Integral=Turn_Bias_Integral-Turn_Target;}if(Turn_Bias_Integral>1800) Turn_Bias_Integral=1800;if(Turn_Bias_Integral<-1800) Turn_Bias_Integral=-1800;Turn=Turn_Bias_Integral0.5-gyro0.5;return Turn;1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
}
三、调校测试篇
实验及路测结果6.1 硬件测试6.1.1车体与元件安装车体采取的是精钢打造的船型包厢,车体机器部分的安装及重量分布,直接影响到小车的平衡性能。拿起螺丝准备安装的一刻,瞬间傻眼了,全是型号互异的六角螺丝,限于手上工具有限,只是草草把电机,电池固定住在相应的位置。载人平衡车利用的是电动车电瓶供电,组装成半成品时候已经不下30Kg质量了。如图6.1.1所示,车体只是组装了一部分,这样方便给系统上电及对电路板的测试,至此,组装告一段落。
图6.1.1 车体图片6.1.2 STM32主控板测试主控MCU选择的是STM32F103C8T6芯片,具有64Pin引脚,各个引脚之间的间隙为0.254mm,曾一度想采取工业PCB打样以提高电路板稳定性和具有更好的阻抗关系。受限于韶光关系,终极决定利用手工堕落铜板印制PCB电路板,以是在焊接和测试上倍加专心。首先用万用表丈量电源VCC3.3V与GND两端,看看是否处于短路、断路、通路状态,如果板子电源和地短路了,利用万用表丈量时会发出滴滴滴的响声。此时要做的第一件事便是仔细不雅观察板子的各个电源引脚与引线是否短接在一起,然后通过万用表的赞助逐个检讨并改动。测试核心板无短路,无断路后,给它+3.3V供电,板子上的电源指示灯瞬间亮了,各元器件无发热、冒烟状态,解释电路供电系统正常。然后在MDK5.1软件编写好跑马灯程序,并在设置好J-LINK干系变量及芯片选型后将程序通过J-LINK下载进核心板测试GPIO是否正常事情。起初,过于激动,忘却将启动模式选择引脚BOOT0,BOOT1对地短接,导致下载程序失落败,并提示无法检测到STM32芯片,将这俩引脚对地短接后,成功下载跑马灯测试程序,板子软硬件测试发布成功。
6.1.3电机驱动板测试电机驱动电路板实验测试。是硬件系统调试的最关键的一个方面,它决定了自平衡车带负载、过流过压、急刹急停这些主要的性能,电路板不许可有任何一个地方的失落误,毫无疑问,笔者将画好的PCB文件发至工厂打样采取工业板并在VCC_36V,GND主干道,电机输出接口这几条线路进行镀锡处理。确认焊接的板子无误后,为了安全起见,只用了两个电瓶串联24V供电。在按下开关的一瞬间“啪”的一个元器件直接炸了。立马松开开关后创造是耐压值45V的反向保护二极管炸了,原来由于心急将其焊接反了,换上新的二极管重新上电,电源指示灯依旧没有亮。迅速的断开开关,触摸到电源通路前真个100Ω/5W的功率电阻发烫的厉害,上电韶光也不过30秒,这假如实际事情起来,后果不堪设想。再次上电,用万用表丈量其两端电压为33V之高,而LM317芯片15V输入端电压为2V旁边。断电后对照着如图6.1.3剖析其缘故原由。如果二极管D1短路,那么36V电压进来会直接加在R1两端,换了新的D1上去后重新上电后电源指示灯亮起来了,解释现在电源是通路的。用万用表测试36V,15V,5V,3.3V各个电源接口,创造LM317芯片发热的厉害,而15V输出引脚,实际电压值为17V旁边。这该当是压差过大导致的LM317芯片高发热,效能低,遂找了一个200Ω/2W的功率电阻更换掉之前100Ω/5W的电阻,重新上电测得15V输出引脚实际电压14.99V旁边,LM317芯片险些没有涌现发热征象,非常完美。根据知识可知,如果电机两端一高一低有较大压差,则电机就会迁徙改变,但万用表测得两端分别对地电压为12.2V,两端压差为0.02V,显然这解释IR2101S芯片Vs引脚输出为高电平,查阅其数据手册得知该状态是精确的。把编写好的带去世区互补PWM波电机测试程序烧写进核心板,连接好主控与驱动的线,上电创造电机并没有像自己预期的那样会迁徙改变起来,摸了下电机连接线,电源线并没有发热。测得电机输出两端状态依旧和没烧写程序前有任何变革。由于带去世区互补PWM波电机测试程序是用示波器不雅观察过的,波形很完美,可以打消软件的缺点。百思不得其解,断电连续不雅观察硬件电路设计,并查找干系资料,在事理上没有创造缺点,但实际测试的时候却没有任何反应。这一阶段是最煎熬的时候,一步步排查,电阻,电容,IR2101S芯片。两周过后,无果,此时已是4月下旬,我冒着风险做了一个大胆也是承上启下的关键决定——修正了电机驱动的方案。是的,我起初并不是很理解半桥驱动器与高端低端栅极驱动器之间的差异,都是驱动MOS管的栅极,以是之前图方便利用了手头上的IR2101S芯片。后面理解到IR2104S这款芯片内置了520纳秒的去世区韶光,超过600V的耐压值,专为驱动电机而生,于是对原有的H桥电路做了大略的元器件更换事情就再一次的发板到工厂打样,这一次还特地的加了光耦隔离器件做隔离,之前初版并没有隔离。拿到第二次开拓的板子焊接完毕检讨电路系统后,迫不及待的把程序烧写进单片机,测得电机两端电平依旧相等,都为高。但是可以确定的是电路板是OK的了,两次结果同等。缘故原由是IR2104S驱动芯片是不须要带去世区PWM波掌握的,用普通的PWM波掌握即可,于是之前的4路带去世区互补PWM波改为4路普通PWM波,烧写进单片机,电机瞬间迁徙改变起来,测得两端压差为24.2V,至此电机驱动终于告一段落。
图6.1.3 电源通路6.1.4编码器电路测试旋转正交磁编码器电路事理相对大略,但是在从事理到PCB板子调试完成过程中还是涌现了不小波折。全英文的芯片数据手册,看了许久仍不明其理,刚开始凭着自己对这款芯片的理解,将Prog引脚直接连接到地,然后将VDD3V3与VDD5V连接在一起,A_LSB_U,B_Dir_V引脚用两个排针引出。对电源通路做大略测试确认无误后即安装在电机转轴上开启电机测试。打开串口助手,设置好波特率、奇偶校验位候并没有涌现自己空想中的迁徙改变脉冲的数据,乃至连数据也没有。这款芯片笔者只用到了个中正交编码模式,不须要对其进行编程,没有任何数据输出,毫无疑问是硬件电路除了问题。于是倒回去啃读晦涩难懂的数据手册,查找芯片正常事情时各引脚的电平状态,创造在利用增量输出模式下Csn片选引脚该当给予一个500ns的低电平或者永久下拉到地来解锁增量输出模式。于是第二次做板时把Csn引脚直接接到GND引脚上,再次上电不雅观察串口助手输出了如图6.1.5所示的一系列毫无规律的数据,很明显这并不能作为电机转轴实时转速的参考值。考虑到Csn从高电平到低电平的尖峰脉冲韶光为500ns,遂将Csn片选引脚通过2.5KΩ的电阻下拉到地。再次上电,用示波器不雅观察,波形完美,如图6.1.4所示,串口助手测得数据稳定、精确如图6.1.6所示。
图6.1.4 示波器测得波形
图6.1.5 未下拉前编码器数据 图6.1.6 下拉后编码器数据6.2 软件测试我们空想的情形是在倾角为0时候,速率为零,并且车身保持直立,图6.2即为车模掌握参数的整定。这些参数的调度须要遵照角度、速率、转向的顺序,在确定各参数极性精确下,才能进行下一个参数整定。
图6.2 车身掌握参数6.2.1角度环PD参数整定角度掌握包含P、D两个参数。比例相称于传统倒立摆的回答力,它所产生的效果必须大于重力加速度才能使得车身保持直立。首先,确定比例值的取值范围。考虑到掌握电机所用的PWM波频率为20KHz,即3599代表满占空比。当P值为360的时候,解释车身倾角为10°时占空比为100%,显然实时不现实的,试想,驾驶人轻微倾斜一下身体,车子即高速的提高或者退却撤退,纵然车子能平衡,站在上面的人也难以适应这高速的相应。而过小的P值不能抵消重力场所带来的影响。以是,先假定一个值P=100,D=0;可以不雅观察到车体短韶光内在一个大约50cm范围内来回摆动随后倒下。由于车体没有涌现往哪边倒,车轮就加速往哪边迁徙改变的情形,解释我们P值极性是精确的,只是这个比例值太小而不敷以坚持车身的直立。考试测验着将设定P=200,理论上说,此时此时PWM波占空比已经超过55%了,足以抵消重力加速度所带来的影响。上电可不雅观察到车身来回摆动的范围缩小了,且摆动频率加快,直立的趋势更加明显。连续增大比例值至300,此时车体发生了剧烈的抖动,在电机驱动下,比例值过大会导致系统发生共振征象。在确定使车体直立的最大比例值P=300情形下,我们引入微分掌握来一贯电机的抖动。微分掌握就相称于单摆系统中单摆受到的阻尼力,可以有效的抑制车身的共振。通过串口助手不雅观察MPU6050输出的陀螺仪原始数据,最大值不会超过4位数。设定D=0.1,旋转个中一个车轮,另一个车轮会以相同的速率、方向跟随旋转,解释D值极性是精确的。连续设定D=0.1,并将比例值设定为P=300,小车共振征象减小,并且来回摆动的范围进一步缩小至30cm,保持直立的韶光加长。用手轻推车身,创造车体有些许轻微低频抖动征象。连续增大微分值到P=0.3,此时车体来回摆动的幅度在20cm之间,保持30秒旁边的韶光便往一个方向倒下。连续增大微分值为P=0.5,此时车身涌现强烈的高频抖动,难以掌握,但是其摆动的幅度则进一步缩小。为了减小对电机损伤,将角度闭环掌握这一环节的比例微分参数分别设置为剧烈抖动市价的60%:P=180,D=0.3即可。表6.2.1为角度闭环掌握参数整定过程中车身摆动的幅度范围,直立韶光,以及相应的PD大致的参数值,由于测试次数较多,下表所列为系统变革较大时候所选定的值,“/”代表抖动剧烈或者韶光过长为了保护电机而没有做测试。
表6.2.1 角度闭环掌握参数第几次 比例值§ 微分值(D) 摆动范围(cm) 直立韶光(s)一 100 0.1 +50~-53 5二 101 0.2 +48~-50 7三 102 0.3 +47~-48 7四 103 0.4 +45~-46 8五 104 0.5 +42~-43 /
第几次 比例值§ 微分值(D) 摆动范围(cm) 直立韶光(s)一 181 0.1 +40~-43 20二 182 0.2 +38~-30 25三 183 0.3 +37~-38 35四 184 0.4 +35~-36 /五 185 0.5 +32~-33 /
第几次 比例值§ 微分值(D) 摆动范围(cm) 直立韶光(s)一 300 0.1 +30~-33 /二 300 0.2 +28~-30 /三 300 0.3 +27~-28 /四 300 0.4 +25~-26 /五 300 0.5 +22~-23 /
6.2.2速率环PI参数整定由于姿态传感器机器安装的偏差以及旗子暗记的漂移,经由上述角度闭环掌握调节后的车身不会精确的勾留在某个位置上,它会朝着提高或者退却撤退的某个方向加速倒下。在这个过程中,对付车体重力加速度和陀螺仪的零点参数(常日我们称之为机器中值,一样平常在-2~2之间)进行多次调度,可以逐渐肃清车体往某一个方向加速倒下的征象。但是,随着陀螺仪积分数据的漂移,车体经由多次调试后还是会发生加速移动的征象,那就须要速率闭环掌握来达到在倾斜角为0°时候,车体不会朝着某一方向加速倒下并且能永劫光保持直立的效果。速率掌握采取的是常用的速率闭环PI掌握器。我们是利用STM32正交编码模式对编码器进行四倍频M法测速的,通过串口助手打印的数据可知左编码器与又编码器速率相加的绝对最大值为1000旁边,出于对整车系统反应速率的考虑,我们假定当速率偏差达到最大速率60%的时候输出电机的最快速率,而3599代表满占空比,可以大致估算比例值:P=3599/(100060%)=6。为了测试P值的极性,先把上述调试好的角度闭环掌握先屏蔽掉,设定P=1,D=1/200,考试测验着旋转个中一个轮子,另一个轮子会以相同方向加速迁徙改变直至到最大速率。这正是我们所想要的正反馈效果,解释P值极性是精确的。之前我非常困扰,在学习自动掌握事理的时候,对付偏差我们一样平常利用负反馈来减少或肃清以达到尽可能的小偏差的目的。但日常生活中我们随处可见一种征象,当我们用一手指顶着雨伞或者棍子尖端时,我们总是须要不断的移动手指,并且方向与物体倒下的方向同等才能勉强保持直立,如果以反方向而行,那将会加速物体的倒下。以是整车系统中,我们采取的是速率正反馈。接下来我们将之前调试好的角度闭环掌握打开,并将速率闭环掌握的参数设置为:P=1,I=1/200;小车的速率掌握很弱,根本无法让速率恒定下来。设定P=3,I=3/200,这时候小车的速率没有涌现理论中速率相应提升的情形,变革与之前比较没有多大变革。进一步的设定为P=5,I=5/200,由于比例值已经靠近理论打算值的84%,以为小车摆动频率该当会很快乃至高频抖动。上电不雅观察创造并没有涌现这类情形,倒是速率相应确实加快,而且摆动幅度很小已经靠近能永劫光直立的状态了。于是,便大胆的将比例值P提高到15,完美!
上电后车身直接不动了!
关键是车身并没有倒下也没有朝着任何一个方向行进。直勾勾的立在地板上,考试测验用手轻推车身,在很小的摆幅下车身很快规复了平衡直立,险些达到静止的状态。至此,先暂定角度闭环参数为P=180,D=0.3,速率闭环参数P=15,I=15/200为空想值。表6.2.2为速率闭环掌握P,I参数整定的大致实测结果(“/”代表抖动剧烈或者韶光过长为了保护电机而没有做测试)。
表6.2.2 速率环参数整定及结果第几次 比例值§ 微分值(D) 摆动范围(cm) 直立韶光(s)一 1 1/200 +30~-33 30二 3 3/200 +28~-30 32三 5 5/200 +22~-24 45四 15 15/200 +3~-3 /五 20 20/200 +1~-1 /
6.2.3转向环PD参数整定掌握方向这一方面,利用的是通过单片机ADC采集单圈10K电位器上时候变革的仿照值作为参考值传入Bias=gyro-(Volt-50)中。利用陀螺仪的Z轴补偿,将电位器实时变革的仿照值作为转向偏差,构成大略的比例-微分掌握器。当10K电位器位于中间值时,Volt即为50,由于设定转向偏差(Bias)为0;以是此时候小车不做旋转方向。这里比拟例及微分值参数不是很明显,以是在P,D参数整定上有比较大的范围可以选取,实测效果都比较不错。但是经测试创造,如果将Volt值放大10倍来掌握,那么小车的旋转灵敏度会有所提升,并且掌握精确度也有所提高。平衡车的直立,速率,转向测试皆已告一段路,只有实际的上路测试,才能对PID参数值更好的优化修正。
6.3 实况路测鉴于载人平衡车已经能做到直立,转向的掌握,但是骡子是马,总得拉出来溜溜。只有真正的上路测试,才能真实的理解车身实时运行状态,以便对其作出更佳的优化。如图6.3所示,开机后,我们先踏出一只脚在脚踏板上来回的感想熏染平衡车的回答力,再换另一只脚在另一边做上述操作。熟习它的规复力度之后在有赞助的情形下考试测验着双脚踩踏上去,人们心态比较激动,每每刚站上去就开始倾斜身体来操纵车身提高退却撤退,这是非常危险的。精确的做法该当是站上去的时候,我们要尽可能的保持自身的平衡与车身平衡的折衷性,当站立一两分钟后逐渐找到觉得,便可以考试测验着向前轻微倾斜一点角度,感想熏染车子的扭力。切勿脚动人不动,而应与车身高度的折衷统一。行进过程中,每当倾斜一定的角度之后,车体险些是在同韶光就做出了相应的相应,但是总觉得速率跟上去了,力量却稍有不敷。普通的说便是反应速率与电机扭矩不在同一水平线上,这回造成人身体往前倒,而车子却无法跟上来的节奏。以往的工程履历来看,很明显这是角度闭环中的比例值参数设置过低导致的终极电机输出的扭矩不敷。笔者考试测验着将P值从180增大到200,重新上电测试发觉依旧没什么改不雅观,还是很软;大胆的将P值连续增大到240,结果依旧,找来周围伙伴来试车大家觉得同等。这不得不引起笔者的重视,如果将P值设置超过260,那么理论上估计电机此时该当会发生强烈的震撼,而车体也会随之共振,更严重者乃至会造成电机与驱动的烧毁等不可逆的危害。好奇心的使令下,我将P值进一步提高到260,上电的一瞬间,电机即产生剧烈的抖动,迅速的将开关断开,但还是晚了一步,电机驱动板上个中有一起4根MOS管烧毁了。这无疑是当头棒喝,80V,80A,10mΩ的大功率MOS管居然一瞬间烧毁,理论上说这搭建的H桥驱动力该当是绰绰有余的,更谈不上会烧管子。至此,实测阶段暂时搁浅并探求办理方法。
图6.3 实况测试6.4 硬件电路改进电机回答力懦弱,这绝对不是电机的缘故原由,350W的带金属减速齿轮的大扭矩有刷电机,足以载重200Kg的质量。首先可以将电机自身扭矩不敷这个成分打消。查阅多方书本并与同学磋商之后,可以确定以下几点干系信息:电压决定电机的速率,电流决定电机的扭矩大小,而电池作为一种储能元件,决定的是续航。那么针对上述电机懦弱无力而相应速率却迅速的问题,可以把缘故原由锁定在是由于电流不敷导致的电机输出扭矩不敷的情形。由于实测之前已将电池充满电,可以打消是电池输出电流不敷的缘故原由,那只能是电机驱动的问题了。在同学的帮助下,做出了以下几点剖析:(1) STM32主控板输出的PWM方波旗子暗记上升沿与低落沿变革是否处于零延迟状态,是否有较多毛刺;(2) 此PWM旗子暗记经由光耦隔离出来后衰减多少,波形是否依旧完美;(3) 经由光耦隔离出来后的PWM波通过半桥驱动器IR2104S放大后流经滤波电容出来的方波旗子暗记是否还完美;(4) 没有给大功率MOS管安装散热片。之前笔者由于实验条件的缘故原由并没有用示波器不雅观测过其真实波形,而是匆忙焊接好板子就开始驱动电机迁徙改变,这是不可行的。针对以上问题,逐步检讨。用示波器测得STM32主控板子出来的PWM波旗子暗记是非常完美的,高低电平之间的跳变险些是零延迟的直线上升或者低落;经由高速光耦隔离后的PWM方波旗子暗记,由于光耦隔离电路输入与输出IO口经由300R的上拉电阻引出,以是旗子暗记衰减的非常眇小,险些可以忽略不计。很明显,问题该当是涌如今IR2104S半桥驱动器放大这里。示波器实测后不雅观察到经由放大后的波形毛刺较多,且矩形脉冲波类似于斜坡上升、低落的趋势,这会导致MOS管无法完备导通,内阻急剧增大,发热量上升,对MOS管的损耗非常大,这也是为什么很多人把MOS管一而再再而三的换成更高等的MOS管之后依然烧管的缘故原由。其余,这一批IR2104S是从某宝网址购买的货源,不敢担保其是否原装正品,其次在自举升压电容选取上不应该选择利用钽电容。钽电容的泄电率比陶瓷电容大,这也是造成波形具有较多毛刺的紧张缘故原由。把10uF钽电容换成1uF高压陶瓷贴片电容后,用示波器不雅观测器波形,毛刺明显减少,且波形较之前更加靠近于完美的方波旗子暗记;考试测验着将高压陶瓷贴片电容换成1uF的CBB快速规复电容,测得H桥在事情时的自举升压电压值非常稳定,放大后输出的方波非常标准。MOS管的性能得以有效的发挥,电机输出的扭矩较之前提升好几个档次,完备做到随动随到的效果。小小的几颗电容在人们印象中更多的是隔直流利互换、滤波、去耦、旁路等浸染,殊不知器件的选型也同样主要,可以帮助我们设计出更加严谨,利用的电路。
7 结论与展望生活无处不智能,平衡车是当今智能时期的产物。人们授予它另一个名称:思维车,确实,当人体大脑发送向前后倾斜的指令时候,我们的肢体便会做出相应的动作去完成这个指令操作;思维车亦是如此,当姿态传感器感应到人体重心发生变革时候,内置中心处理即迅速的做出相应判断并输出掌握指令去驱动实行机构完成相应的动作来坚持系统的平衡。在这点看来,我们称之为摄位车,智能车也不为过。在当此生齿爆炸,交通堵塞的社会,人们的出行办法必将发生质的变革。更加迷你型、便捷、炫酷实用、无污染的平衡车既可以健身娱乐,又能切实的办理中短间隔的交通问题,也由此得到了广大群众的推戴和喜好。在理论研究方面,自平衡车作为高度灵敏、强耦合、非线性的不稳定物体,具备深远的研究代价和意义。是学习、研究和验证自动掌握事理的绝佳选择。经由三个月的马拉松式学习与实践,双轮载人平衡车系统相对付传统的自动掌握实验实现了以下基本功能和创新点:(1) 可实现基本的原地平衡站立、提高退却撤退;(2) 平坦道路上可安全、平稳行驶;(3) 低速行驶状态下可安全通过路面减速带;(4) 最大爬坡20°;(5) 最大负载80KG以上,续航20KM,最高时速10KM/H;(6) 高亮前后车灯,方便晚上行驶;(7) OLED实时倾角、编码器、主板温度信息显示;(8) 超速自动报警;(9) 倾角过大,转速过高或失落控等,发出相对应声光提示;(10) 自适应多种路面变革、重心变革,自动调度车体姿态,具有良好的鲁棒性和抗滋扰能力。自动掌握系统的研究任重道远,双轮载人平衡车设计目前只是实现了其作为一辆思维车最基本的功能。基于无线掌握、机器视觉的最佳路径方案等方面的研究还未能来得及学习和探索。未来朝着聪慧化发展,平衡车也是如此,用“镜”看天下,透“芯”来学习。










