




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、 毕业设计(论文) 题 目:单片机控制单轴双轮自动平衡小车设计 系 别:电气工程系 专 业:电气工程及其自动化 班 级:电气121 学 号: 学生姓名: 指导教师: 2016年 月摘要两轮自平衡车由于其特有的灵活性以及便捷性越来越受到人们的关注,在人们的日常生活中也作为代步工具被越来越多的人群接受。本设计采用了基于ARM CORTEX-M3内核的STM32单片机,使平衡车姿态调整速度更快,数据处理更准确,运动性能更佳。并且放弃分别采用陀螺仪和加速度传感器来获取小车的姿态信息,而是直接采用了全球首例9轴运动处理传感器MPU-6050,通过DMP获取四元数,以算出角度,并通过PID控制实现小车的直
2、立平衡行走。采用蓝牙模块实现和小车之间的通讯工作,设计最终实现了小车的平衡站立、前进、倒退功能。实现小车的平衡直立行走,其实就是要对电机进行适时的控制,电机作为机电转换装置,遍布于国民经济的各个领域以及人们日常生活的方方面面,所以对电机的完美控制更显得极其重要,也是本设计的主要目的之一。STM32F10x系列芯片是新型的32位嵌入式微处理器,具有优秀的数据处理能力,速度更快,在对本设计中的小车模型进行速度调整时,能展现出更灵敏的反应速度,更重要的是,它还具有较好的移植性,在很好的实现本设计任务的同时,利于将来更多功能的扩展。关键词: 平衡车;MPU6050;STM32;PID控制 Abstra
3、ct More and more people have paid attention to The Two-wheeled Self-balancing Robot due to its unique flexibility and convenience. People had accept it as transport in people's daily life. This study is just based on the purpose of explore the The Two-wheeled Self-balancing Robot .This design ba
4、ses on STM32 micro controller which based on the CORTEX-M3 ARM core.because of that , the robot adjust faster, data processing more accurate ,performance better . At the same time, we directly using the world's first 9 axis motion processing sensor MPU-6050 instead of the gyro and acceleration m
5、eter sensors to get the car's attitude information . to calculate the angle Through the DMP. And to achieve the car's upright balance walking through the PID control. Using Bluetooth module to achieve communication with the car. The Designed will achieve the balance of the car stand, forward
6、, backward function. To achieve the balance of the car upright walking, in fact, is to timely control of the motor, electric motor is an electric machine conversion device which through all areas of the national economy and people's daily life, so the perfect control of the motor is more importa
7、nt and is one of the main objectives of this design.stm32f10x series chip is new 32-bit embedded microprocessor , it has excellent performance, good portability and improve the efficiency of the DC motor control, and we have modular the l system, which will be conducive to the balance of the car aft
8、er the function expansion.Key Word:Self-balancing Robot MPU6050 STM32 PID controller 目 录1 绪论12 平衡车总体设计方案22.1 系统平衡原理分析22.2 系统整体设计33 系统硬件电路设计53.1 系统硬件选型53.2 最小系统设计63.3 姿态检测电路设计63.4 电源稳压模块73.5 电机驱动模块设计84 系统软件部分设计104.1 软件系统总体结构 104.2 单片机初始化104.3 姿态检测系统软件设计114.3.1 MPU6050姿态获取方法114.3.2 卡尔曼
9、滤波算法124.4 平衡PID控制软件实现 134.4.1 直立环PD控制134.4.2 速度环PI控制145 系统调试165.1 角度矫正165.2 卡尔曼滤波调试165.3 PID参数的整定165.3.1 PD控制调试165.3.2 PI控制调试166 结论18致谢19附录1 程序20附录2 电路图25参考文献26中原工学院信息商务学院毕业设计(论文)1 绪论近几年,不管是独轮车还是双轮平衡车都越来越受到人们的关注,随着时间发展,科技的进步,双轮平衡车也变得越来越智能化。最开始,瑞士研制了用 DSP和FPGA 控制的基于倒立摆理论的双轮车,通过倾斜
10、传感器和倾角传感器来检测车体,通过电机上的编码盘检测电机的速度。该设计采用了基于状态反馈的线性控制策略,车的运动被分解成直线和旋转运动,然后分析直线运动和旋转运动,得到电机需要的控制量,最终把控制量耦合叠加。其主要的设计思想是:使车子朝车体倾斜的方向运动来保持车身的平衡,该控制只能让小车平衡运动,而不能让小车自主直立。之后,赛格威公司研发了Segway平衡车,它拥有更多的姿态传感器,有5个陀螺仪传感器,然而事实是检测车身倾斜只需要3个传感器就够了,其他的两个传感器只是增加安全性。传感器采集到的数据发送给集成有许多处理器的电路板。这个集群是为了保证载人平衡车在其中任何一个处理器出现问题时能报告错
11、误,保证了平衡车的安全性。它的设计是针对民用代步设计的,很具有代表性。国内方面,也已经有基于传感器 ADXL202 及反射式红外线距离传感器来获得姿态信息的设计 王晓宇. 两轮自平衡机器人的研究D. 哈尔滨:哈尔滨工业大学,2007,该设计基于 PWM 动态来控制直流电机的速度,车与上位机间的数据通信显示使用人机交互界面使用图形液晶点阵、方向摇杆、按键。依靠这些可靠并且完备的硬件,使用独特的软件算法,最终实现Sway 的数据交换和平衡直立控制。发展趋势:平衡车正在朝着越来越智能化Googol Technology
12、 LTD. Googol Technology Self-Balancing Robot GBOT1001 User Manual V1.0 CD.2007的方向的发展,已经提出了众多的解决平衡控制的方案。未来平衡车必将越来越小巧轻便,配备更完善的人机交互介面。另外,两轮自平衡车的应用前景将会十分的广泛,未来的目标是制造出外形结构简洁,并且具有稳定自平衡性能的平衡车,还能有方便的驾驶模式,必将方便大家的出行。2 平衡车总体设计方案 2.1 系统平衡原理分析分析双轮平衡小车的平衡站立,我们自然联想
13、到一根直立木棍在手指上保持直立,这正是人们在日常生活中对直立平衡控制的直观经验和感受。通过仔细分析不难发现,通过手指移动可以保持木棍的直立不倒,类比于单轴双轮平衡小车,我们在发现车身倾斜的时候,需要直接使车子向相反的方向运动,目的是抵消在这个维度上由于车身重力产生的倾斜,这样就能使车身保持直立平衡。导致车体倾斜的主要因素是角度Tony, Liao, Deog.Variable Structure Control for Stabilizing Double Inverted PendulumC.2008&
14、#160;International Conference on Intelligent Computation Technology and Automation, California,US,2001的产生,角度是车身发生倾斜后车身和垂直于地面的直线的夹角,所以要想小车平衡,需要消除倾角,或将倾角控制在一个可控的范围之内,整个平衡控制流程如图2-1所示。图2-1 平衡控制框图保持车身平衡的方法是转动电机来调整车身下部,以改变车身倾斜角度,来使车身保持在一水平垂直线上。然而这只是我们的直观感受,真正应用于理论设计
15、的时候,就要写出小车的运动方程4 陈国文.基于STM32单片机的双轮小车近静态动平衡控制统D.闽南师范大学毕业论文设计.2014。车身受力分析如图2-2所示。车模运动方程: (2-1)在角度很小时,运动方程简化为: (2-2)车模静止时: (2-3) 图2-2 车模受力分析 2.2 系统整体设计 目前市场上已经开发出单轴双轮自动平衡小车,已经可以满足代步和娱乐的目的,本设计的要求是,要设计出这样一个系统,使它具有自动平衡的功能,并且能够前进和后退。图2-3 硬件结构图整个设计流程以STM32单片机为核心,选用了与该主控芯片相融和的其他几个必要的模块。姿态传感器模块电路测算小车车身姿态信息、并把
16、信息提供给主控芯片STM32。主控芯片STM32是整个小车模型的大脑,在接收到小车车身信息之后,与预先设定车身平衡数据进行比较,计算出小车需要调整的余量,转化成PWM 阮毅,陈伯时.电力拖自动控制系统M.清华大学出版社.2003控制信号,输出给电机驱动电路模块,电机驱动模块在接收到PWM信号之后再完成对电机的控制,电机上的编码器测速模块采集到电机速度信息,再把信息反馈给主控芯片STM32。重复这样一个过程,完成车模的直立平衡控制、直立运动控制 尔桂花,窦曰轩.运动控制系统M.清华大学出版社.2002 ,依靠蓝牙模块发送对整个小车的运动控制命令。 整个小车被设计成如图2-3所示的几种模
17、块。选用基于ARM的STM32F10X系列单片机,这是一系列功能更强大的数据处理能力更强的主控芯片 刘金琨.智能控制M.北京:电子工业出版社.2005 ,必将会为之后平衡车的功能拓展提供方便。整个设计采用模块化的思想,这也正好切合了设计之初的想法,为实现小车更多功能的扩展提供方便。 3 系统硬件电路设计 3.1 系统硬件选型姿态传感器选型:InvenSense公司的MPU-6050内置了一个数字可编程的低通滤波器、自带的可扩展的数字运动处理器DMP。并且,InvenSense 提供了一个 MPU6050 的嵌入式运动驱动库,结合 MPU6050的 DMP,可将原始数据直接换算成四元数
18、输出,而得到四元数之后,就可以很方便的计算出欧拉角,从而得到yaw,roll, pitch,他们分别是俯仰角、横滚角、航向角。使用内置的DMP,使主控芯片不用进行姿态解算过程。应用在平衡车上的MPU-6050有很多优点:体积小,功耗小,测量也很精确。MPU6050内部集成了三轴陀螺仪以及加速度传感器 梅晓榕.自动控制元件及线路M.哈尔滨工业大学出版社.2004 。如果选用多组方案,成本会升高。所以最终,直接采用集成了动态滤波功能的9轴姿态传感器,传感器可以把处理后的姿态角等信息用串口形式 Jey, Tiga. Design of F
19、uzzy Logic Controller for Two-wheeled Self-balancing RobotC.6th International Forum on Strategic Technology, IFOST 2011, Newyork, US, 2011:1266-1270.2008发送。我们想要得到的是小车的俯仰角。要想得到车体的俯仰角,只需利用原始数据,进行姿态融合解算即可。电机选型:因为平衡车要进行速度控制的
20、话还需要有编码器,为了减免不必要的工作量,并切保证质量,我们应尽量选取带有编码器的直流有刷电机。本设计采用的是型号是25GA20E260的带有带霍尔编码器的电机,工作电压在713V,越高的电压将会带来越高的性能。电机尾部带有13 线的霍尔编码器,电机的减速比是1:20,故车轮转一圈,电机可以输出260 个脉冲,倍频之后是1040。编码器的额定工作电压是5V,集成了上拉电阻和比较整形功能,可以直接输出方波。电机配有金属减速箱,额定电压下,减速后空载转速500rpm(转每分)。外形小巧,使用方便。电机驱动选型:TB6612FNG芯片和L298N使用都是非常简单的。该芯片的数据输入只需要控制两条数据
21、线的高低电频和一条线的PWM就能够控制一个电机,而该芯片正好能够控制两个电机,所以用6条线就够完成两个电机的驱动。TB6612FNG 是一个很优秀的双电机驱动板,它有两个接口去来驱动两个直流电机,如我们常用的微型金属减速马达控制器,当然也可用于控制一个双极步进电机。基于 MOSFET 场效应管的 H 桥驱动更有效率。两台电机的每个通道都有两个方向控制引脚和一个接受 PWM 输入频率达 100Khz 的速度控制引脚。TB6612相对于传统的L298N,效率提高很多,体积大幅减少,在额定范围内,芯片基本不发热。TB6612FNG有两个Mosfet的H 桥电路。对比L298N,TB6612只需要接一
22、个电容,发热也不严重,驱动功率也很高,将会为整个设计电路模块减小体积。 要想系统的电源模块满足要求,必然要按照适用于硬件系统中其他硬件的需求来确定。要满足姿态传感器芯片为mpu6050,电机25GA,驱动TB6612,STM32C8T6的具体要求,就需要提供: 12V、5V、3.3V的电压。德州仪器(TI)生产的稳压芯片LM2596提供的有:3.3V、5V、12V及可调(-ADJ)等多个电压档次产品。它的输出电压:3.3V、5V、12V及(ADJ)等,最大输出电压达到37V。用于提供1A输出电流且工作压差可低至1V的AMS1117系列稳压器设计。既使输出最大电流,可以保证AMS1117最大电压
23、差也不会超过1.3V,随着负载电流的降低,电压差也慢慢变小。设计最终使用STM32F103C8T6,读取mpu6050的数据时通过IIC接口,获得小车的姿态,接下来的过程是主控芯片通过PID控制给电机输出PWM控制信号,电机驱动模块芯片TB6612接受到PWM信号之后再完成对电机的控制 高玉培.轮式移动机器人的结构设计J.南昌航空大学学报.2014。另外,为了调试方便,除了设计了上述给模块外,还扩展了JLINK接口,使用的是SWD模式,用于仿真调试。因为需要记录数据和绘出数据波形,查看滤波和PID效果。所以扩展了串口电路。 3.2 最小系统设计系统方框图如图5所示STM32系列是一款性价比极高
24、的嵌入式应用专门设计的主频72MHz的ARM CORTEX-M3内核,方便之后功能的拓展,工作电压为3.3V。晶振电路为STM32单片机处理器11 张培仁.基于16/32位处理器机器人控制系统设计与实现M.北京:清华大学出版社, 2006提供8M频率的时钟脉冲,并串联两个10PF电容保图3-1 最小系统图证电路提供稳定的频率脉冲,设置倍频PLL为9,得到单片机的工作频率是72M,单片机最小系统图如图3-1所示。 3.3 姿态检测电路设计本设计选用的MPU6050有以下几点理由,在获取角度和加速度的同时,因为MPU6050内置的DMP处理器,直接使发出数字信号,无疑使单片机的姿态处理时
25、间缩短,姿态处理过程得到简化。获取姿态时没有分别采用传统的加速度计,陀螺仪 屠运武,徐俊艳,张培仁.自平衡控制系统的建模与仿真J.系统仿真学报.2004,而是采用集成了陀螺仪和加速器的MPU6050,为单片机直接提供向9轴融合演算技术。图3-2 姿态检测电路MPU6050电路如图3-2,Pin10引脚所接陶瓷电容C19,用于校准滤波;Pin13所接陶瓷电容C18是VD旁路电容; Pin20所接陶瓷电容C17是电荷泵电容; Pin8所接陶瓷电容C20是VLOGIC电容;SDA经一个10K的电阻连接到PB11上;SCL同样经一个10K的电连接到PB10上;INT直接连接到PB3上。 3.4 电源稳
26、压模块专门设计了电压模块13 刘斌.两轮自平衡小车软硬件研发与基于模糊线性化模型的变结构控制研究.西安电子科技大学工学硕士学位论文.2009 为本系统所设计的各个模块提供电源。TB6612需要5V图3-3 电源模块电源来提供逻辑电平的输入,而12V的直流电源是提供给电机的电源,电机采用的是型号25GA20E260的12V直流减速电机,该电机自带霍尔编码器,而所用的单片机STM32使用3.3V直流电源,系统采用ASM1117-3.3V模块为单片机系统及其他外设提供稳定电压。同时系统采用LM2596稳压模块为姿态检测模块提供稳定工作电压,稳定性高。故系统同时采用LM2596稳压模块为驱动
27、电路提供工作电压,并通过PWM实时控制电机的电压大小。具体电路设计见图3-3。图中电解电容C11起到滤波稳压的作用,而瓷片电容C1、C2、C3、C21起到辅助滤波,去除电压中的波动毛刺电压的作用,二极管起稳压作用。 3.5 电机驱动模块设计TB6612和传统的L298N驱动芯片的区别在于,TB6612体积更小,通过大电流MOSFET-H 桥,实现双通道电路输出,可以同步驱动2 个电机。TB6612FNG 输出的连续驱动电流达到最高1A。AINlAIN2、BIN1BIN2是控制信号输入端,其中AINlAIN2、BIN1BIN2用于控制电机转动方向,其方式是控制电平高低;PWMAPWMB用于控制两
28、个电机转动速度,其方式是调节PWMA占空比;AIN1、AIN2、BIN1、BIN2分别连接STM32的PB13、PB12、PB14、PB15;PWMA和PWMB分别接STM32的PA11、PA8;AO1A02、B01B02 是2 路电机控制输出端, AO1A02接在电机1两端、B01B02接在电机2两端;STBY 作用是正常工作待机状态控制引脚;VM是电机的电源输入端引脚,在这里是12V,VCC引脚是逻辑电平输入端。如图3-4所示。图3-4 驱动模块TB6612芯片总共包含有4 种电机控制模式,它们分别是正转、反转、制动、停止。具体实现以上控制的各引脚的配制方法如表3-1所示。INT1INT2
29、PWMDIRECTIONMOTORLOWHIGH0停止;255最高前MOTORHIGHLOW0停止;255最高后MOTORHIGH(LOW)HIGH(LOW)0停止;255最高停止表3-1 控制逻辑表4 系统软件部分设计 4.1 软件系统总体结构 图4-1 主程序流程图前面的部分主要介绍了整个小车系统的设计思想,硬件电路原理,接下来介绍本设计的软件部分。根据设计要求,设计的系统软件流程如图4-1所示。系统软件流程是再采集完传感器数据后,再处理相关数据,并输出PWM信号控制电机的运行。整个程序处理过程分为以下几步,第一步,主控芯片STM32首先采集姿态传感器MPU6050的数据,经过卡
30、尔曼滤波,就得到了车身的姿态信息,第二步,根据此角度做PID调节,得到小车两个电机的PWM脉宽,再调整轮子速度,使它的俯仰角为零。之后就是重复采集、处理、调节、处理这一过程。然后,在这个基础上,给两电机加PWM值,就会实现小车的前进,倒退。软件设计流程是:首先单片机初始化,在获取车身姿态数据,经过卡尔曼 付梦印,邓志红,张继伟.Kalman滤波理论及其在惯性导航系统中的应用M.第二版.北京:科学出版社,2010融合算法,PID控制完成小车直立速度控制。 4.2 单片机初始化 初始化流程图如图4-2所示,系统使用外部8MHz晶振作为外部时钟源,通过STM32内部的相环使倍频达到72MHz。STM
31、32的两条外设时钟总线分别是APB1和APB2,它们的时钟频率最高分别是36MHz、72MHz。整个初始化步骤是:首先软件设 图4-2 单片机初始化置外设时钟到最高频率,开启ADC、定时器、DMA、串口和GPIO的时钟源。定时器用于产生控制电机的PWM信号。在程序中设置PWM信号的频率成20kHz和3600级占空比输出。 间隔定时器(Systick)产生8kHz信号用于产生ADC和Kalman采样频率。间隔定时器为一个24位递减定时器,仅有3个寄存器,使用固件库仅需一个语句即可完成配置。 4.3 姿态检测系统软件设计 4.3.1 MPU6050姿态获取方法MPU6050加速度计部分:
32、获得车身加速度的方法很简单,我们利用MPU6050自带的数字运动处理器DMP,就不再需要考虑复杂的滤波算法,我们就可以直接得到平衡小车的倾角。如图4-3.具体需要我们移植官方DMP 驱动库 ,移动成功之后,便可在主函数中调用库函数Read_DMP( )来读取角度,用来Accel 表示。经由I2C读取到MPU6050的数字运动处理器DMP输出的四元数是 q30 格式的,要想把DMP输出的四元数换算成欧拉角,就要先变换成浮点数,然后再进行计算,公式如下: (3-1) (3-2)式中quatx是四元数,x为0、1、2、3,Qx是转化成浮点数之后的四元数,x为0、1、2、3。式3-2是俯仰角的计算方法
33、。平衡车只需要使用俯仰角 pitch ,横滚角Roll、航向角Yaw都用不到。MPU6050中陀螺仪部分:陀螺仪模块可以实时记录小车摆动时的角速度Gyro 。通过卡尔曼滤波把加速度计测得的角度Accel 与陀螺仪获得的角速度Gyro 融合到一起,得到我们实际想要的更为准确的角度Angle ,角速度Angle_dot 。经卡尔曼滤波祛除了噪音影响的车身姿态信息将利于更好地实现PID调节。图4-3 姿态传感器初始化 4.3.2 卡尔曼滤波算法我们知道仅仅依靠姿态传感器诸如陀螺仪和加速度传感器,我们就已经能获得校车的姿态信息,但是为什么还要卡尔曼滤波,其原因是在我们只是通过硬件提供的信息的话很难达到
34、所需要的精度,硬件上的工艺水平是有限的,长时间下来,误差会不断地累加,小车也很难在一个较长的时间里保持直立平衡.为了解决这一问题,我们引入了卡尔曼滤波,从软件算法的角度来优化车子的准确性能。卡尔曼滤波器是一种高效率的递归滤波器,它可以从夹杂有噪声的测量中,估算动态系统的状态。包括过去、现在、甚至是下一步的状态信息,针对本设计而言,本设计所使用的惯性器件卡尔曼滤波将更合适。简单来说,卡尔曼滤波器有预判与更新两个阶段。首先预判时,滤波器依靠前一刻的信息,估算出目前的状态;下一步,滤波器根据目前的值评估下一刻的角度信息。卡尔曼滤波算法函数void Kalman_Filter(float Accel,
35、float Gyro)的入口参数有两个分别是加速度和角速度,Accel 与Gyro 为测得的角度与角速度值,通过此函数计算滤波后,将得到我们想要的实际值Angle 与Angle_dot 谭浩强.C程序设计M.北京:清华大学出版社,2005。Angle += K_0 * Angle_err; /这一步是后验估计Angle_dot = Gyro - Q_bias; /输出值(后验估计)的微分=角速度设置卡尔曼滤波参数如 Q_angle为0.01;Q_gyro为0.01;R_angle为0.003;Dt为0.005;char C_0 为 1;Q_bias, Angle_err;float PCt_0
36、, PCt_1, E;float K_0, K_1, t_0, t_1;float Pdot4 =0,0,0,0;float PP22 = 1, 0 , 0, 1 ;要想改变kalman 滤波器采样时间,改变上述程序中的dt即可。 4.4 平衡PID控制软件实现 这里首先形象的分别说明一下P、I、D控制的区别,以利于我们建立起感性认识P为比例控制,使以最快的速度达到目标。I为积分控制,使误差为0而起调和作用。D为微分控制,可以加快调节进程。 4.4.1 直立环PD控制平衡小车直立环使用PD控制,既是比例微分控制,其实像是一般的控制系统只需要P 控制或者PI 控制就已经能满足要求,但是
37、如果需要我们干扰迅速响应的控制过程就需要D微分控制。直立PD控制函数的入口参数:角度、角速度,返回值:直立控制PWM。int balance(float Angle,float Gyro)首先,要计算车身角度和预先设定需要小车保持平衡所需角度的偏差,用以下语句即可实现,其中Bias既是所要用到的偏差值。Bias=Angle-ZHONGZHI;求出平衡的角度中值和机械相关,本设计中,假设MPU6050已经完全垂直水平安装,那么中值既是0。balance=kp*Bias+Gyro*kd;计算平衡控制的电机的PWM ,其中kp是P系数 kd是D系数。最后还要把pwm值返回给直立pwm:Balance
38、。到这里,就完成了对直立环的控制。 4.4.2 速度环PI控制平衡小车速度环使用PI控制 李春文,冯元坤,多变量非线性控制的你系统方法M.北京:清华大学出版社,1991,既比例积分控制,速度控制使用频率最高的既是PI控制。PI 控制依照目标值和实际输出值的偏差,线性融合偏差的比例和积分,实现了小车模型的直立控制,下面是PI 控制函数。函数的 velocity( )入口参数是小车左右电机的编码器提供的值 encoder_left,int encoder_right。if(1=Flag_Qian) Movement=-90; /=如果前进标志位置1 位移为负else if(1=Flag_Hou)
39、Movement=90; /=如果后退标志位置1 位移为正else Movement=0;获取最新的速度偏差。Encoder_Least =(Encoder_Left+Encoder_Right)-0;对速度偏差进行低通滤波。Encoder *= 0.7;Encoder += Encoder_Least*0.3;通过对偏差积分得到位移。Encoder_Integral +=Encoder;Encoder_Integral=Encoder_Integral-Movement; /接收遥控器数据,控制前进后退if(Encoder_Integral>10000) Encoder_Integra
40、l=10000; /积分限幅if(Encoder_Integral<-10000) Encoder_Integral=-10000; /限制遥控最大速度使用速度PI 控制器计算速度控制的PWM。Velocity=Encoder*kp+Encoder_Integral*ki;到这里,就完成了对速度环的控制。小车能够站立后,要实现对小车运动的控制,我们放弃了使用WIFI、红外线控制等,而是采用了目前较为热门的蓝牙(HC-06)来实现,借助于已有的安卓客户端APP,在硬件模块上搭载相应的蓝牙模块。实验现象:蓝牙连接后,通过手机来控制小车的前进,后退,直立。主要蓝牙控制程序如下: if(USAR
41、T2_RX_STA&0X8000) /接收到一次数据了LED =! LED;得到蓝牙发送的数据。reclen = USART2_RX_STA&0X7FFF; 加入使蓝牙结束的结束符。 USART2_RX_BUFreclen = 0;判断接收的数据,并做出相应动作。u2_printf("C%srn",USART2_RX_BUF);5 系统调试 5.1 角度矫正本设计中姿态检测模块的调试是重点内容。首先,需要调试陀螺仪及加速度计,看是否正常,为了保证陀螺仪输出信号的准确性,需保持陀螺仪模块电路的偏置电压的稳定,才能使整个电路的温漂最小。将小车倾角分别
42、置于0°、45°及90°,比上位机和实际倾角,及时调整。观察数据发现陀螺仪只能在短时间里显示较为准确的值,如果时间较长,陀螺仪计算出的角度会有误差。而对于加速度计,长时间测量会因震动而不准确。 5.2 卡尔曼滤波调试通过以上分析说明了采用多传感器数据融合 王晓宇,闫继宏,臧希喆等.两轮白平衡机器人多传感器数据融合方法研究J.传感器技术学报2007的必要性。姿态检测系统中的重点必然又是卡尔曼滤波。为了方便调试,小车经串口 耿延睿,崔中兴.组合导航系统卡尔曼滤波衰减因子自适应估计算法研究J.中国惯性技术学报.2001向PC机发滤波前后倾角数据,通离散的数据点描绘可以直
43、接对比滤波效果。卡尔曼滤波整定参数有:卡尔曼增益、加速度计和陀螺仪权值。经过滤波之后,含有噪声的波形变得平稳。 5.3 PID参数的整定 5.3.1 PD控制调试首先要确定平衡小车的机械中值,一般在0°附近。其次是确定kp 值的极性(令kd=0)。如果给定值之后,小车往哪边倒,电机会往那边加速让小车到下,说明kp 极性反了。再确定kp值的大小,让kp 一直增加,直至低频抖动。确定之后,就需要增加微分控制削弱来P控制。确定kd 值的极性(令kp=0)当我们旋转小车的时候,车轮会同向以相同的速度跟随转动,这说明我们实现了角速度闭环,至此,我们可以确定kd 的极性是正的。确定参数的原则是:
44、kd 一直增加,直到出现高频抖动。完成以上步骤,就完成了PD的调试。5.3.2 PI控制调试 首先计算速度偏差,偏差=测量值-目标值。再确定kp 与ki 值的极性,根据经验,一般我们可以把ki 值设置为ki=kp/200;这样,只要我们可以得到kp 值的大小和极性,就可以完成速度控制部分的参数整定了。这样就可以缩短了PID 参数整定的时间。根据7200 代表占空比100%,我们可以大概估算kp 最大值=7200/(160*50%)=90。当小车以一定的速度运行的时候,我们要让小车停下来,小车需要行驶更快的速度,这是典型的正反馈 谢克明.自动控制原理M.北京:电子工业出版社,2009,果,也是我
45、们期望看到的。至此,我们可以确定kp,ki的符号应该是正的,我们可以确定kp,ki的符号应该是正的。设kp=80,ki=kp/200 时,小车可以保持直立。完成以上步骤,就完成了PI的调试。6 结论 整个平衡车设计期间,总是认为算法最复杂,也是最为困难的部分,其实在真正进行设计时,恰恰是这个最复杂的部分,反而我们最容易解决最先的问题。设计过程有几个难点:一是传感器的数据处理。传感器容易受震动影响,易超量程;二是传感器数据漂移。采用卡尔曼滤波算法,融合陀螺仪和加速度传感器数据得出小车倾角。再就是PID控制,比例系数的调节需要耐心的测试和调节。我要说的是,单纯靠倾角做PID不能使小车平衡,因为当小
46、车倾角接近0度时,改变的PWM值无法使小车越过平衡点,造成小车朝一边加速前进,所以要将速度也添加至PID调节中。一方面可以改进成更为简洁方便的控制方式,诸如体感控制而不在采用手机端的蓝牙控制,由于本设计使用的是STM32单片机,拥有较高其强大的扩展功能,主控芯片本身就带有引脚服用功能,数据处理能力迅速,应该充分的利用这些资源,使平衡车实现更多的功能,诸如转弯,遇到障碍自动停止,这部分自然要加装类似于超声波避障的模块,针对本设计,由于是第一次做相关设计,必然有很多的不足,对论文的理解还不够透彻,之后再有机会做相关设计时,肯定能实现更加人性化,智能化的平衡车。两轮平衡车和传统四轮车相比,两轮平衡车
47、有诸如如下几种优点:车身体积更小、重量更轻、车身结构相对简单、并且便于携带,使用方便、操作简单、灵活、车身稳定性更好。双轮平衡车作为一个通过运用姿态传感器等利用非线性的控制系统实现小车的平衡自主前进。本设计目的是设计一款更加经济简洁的两轮平衡车是使它能满足人们的日常需求。理论意义:两轮平衡小车的应用前景将会十分广泛。如果我们可以设计制造出外形简洁、性能更稳定、可以随时随地拓展平衡车功能的模块化 高健, 黄心汉, 彭刚等. 基于Fuzzy-PID的移动机器人运动控制J. 控制工程,2004的平衡车,将会带来极大的方便更具有经济性。两轮自平衡车的发展前景十分
48、广阔,广泛实用化以后它将有可能取代汽车这种传统的交通工具。 致谢在整个论文设计学习的几个月里,到今天我的毕业设计才算完成。一开始,我把毕业设计的主要工作放在了STM32的学习上,但是姜老师建议说毕业设计并不是让我们学习新的东西,而是考验我们的大学四年的学习之后,对我们的进行设计的能力的一个主要的考验过程。在决定设计平衡车之后,反复提出了许多问题,又不断地解决问题,整个的小车设计的过程中,不仅让我巩固了已学到知识,又使我个人的自学能力、解决问题的能力都有了极大提高,最重要的是对嵌入式技术有了了解,这必将为以后更好的发展奠定了坚实的基础。 可想而知这边年来的成绩的取得肯定离不开老师、各位
49、同学的同学的热情指导和帮助。第一个要感谢的是学校校提供各位的一个良好的优美的学习环境,而且还要感谢学院对我在进行毕业设计相关工作的整个过程中最初的精心的合理的安排,对于我的指导老师姜宏伟老师我要表达出我最真诚的谢意,姜老师在我们毕业设计的整个过程中不厌其烦的每周为大家作出指导,自始至终都不断地督促鼓励我们,设计过程中耐心地解决我们的问题,老师的指点和鼓励给了我不断前进创新的勇气。在此同时,我还要感谢同班同学给于我的不管是在论文设计上的真诚指点还是在我遇到困难是鼓励,以及其他的各位前辈,各位认识不认识的同行朋友,发烧友的帮助,最终我度过了紧张而又充实的几个月。在这几个月中,不仅让我收获了能力和知
50、识,也更让我也深刻感受到了师生情和友情的美好,这段珍贵的时光将成为不可忘记的回忆,我自然会以此鼓励自己继续努力前行。附录1 程序主程序#include "stm32f10x.h"#include "bsp_SysTick.h"#include "bsp_usart1.h"#include "bsp_mpu6050.h"#include "bsp_key.h"#include "bsp_pwm.h"#include "bsp_motor.h"#include
51、 "bsp_12864.h"/#include "math.h"void Delay(_IO uint32_t nCount);VoidKalman_Filter(float Accel,float Gyro);void PWM_Calcu(void);void Angle_Calcu(void);/角度参数float Gyro_y; /Y轴陀螺仪数据暂存float Angle_gy; /由角速度计算得的倾斜角度float Accel_x; /X轴加速度暂存float Angle_ax; /由加速度计算的倾斜角度 float Angle; /小车最终的倾
52、斜角度uint8_t value; /角度正负极性标记/PWM参数int PWM_R; /前进的PWM参数int PWM_L; /后退的PWM参数float PWM; /综合PWM参数/PID 参数static float Kp = 205; / 185static float Kd = 22; /10卡尔曼滤波void Kalman_Filter(float Accel,float Gyro) Angle+=(Gyro - Q_bias) * dt; /先验估计 Pdot0=Q_angle - PP01 - PP10; / Pk-先验估计误差协方差的微分Pdot1=- PP11;Pdot2=
53、- PP11;Pdot3=Q_gyro;PP00 += Pdot0 * dt; / Pk-先验估计误差协方差微分的积分PP01 += Pdot1 * dt; / =先验估计误差协方差PP10 += Pdot2 * dt;PP11 += Pdot3 * dt;Angle_err = Accel - Angle; /zk-先验估计PCt_0 = C_0 * PP00;PCt_1 = C_0 * PP10;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 * PP01;PP00 -= K_0
54、 * t_0; /后验估计误差协方差PP01 -= K_0 * t_1;PP10 -= K_1 * t_0;PP11 -= K_1 * t_1;Angle += K_0 * Angle_err; /后验估计Q_bias += K_1 * Angle_err; /后验估计Angle_dot = Gyro - Q_bias; /输出值(后验估计)的微分=角速度直立PD 控制的代码:int balance(float Angle,float Gyro)float Bias,kp=300,kd=1;int balance;Bias=Angle-0; /计算直立偏差balance=kp*Bias+Gyro*kd; /计算直立PWMreturn balance; /返回直立PWM速度PI 控制函数int velocity(int encoder_left,int encoder_right) static float Velocity,Encoder_Least,Encoder,Movement;static float Encoder_Integral;float kp=80,ki=0.4;if(1=Flag_Qian) Movement=-90; /=如果前进标志位置1 位移为负else
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论