基于STM32的自平衡车设计与实现_第1页
基于STM32的自平衡车设计与实现_第2页
基于STM32的自平衡车设计与实现_第3页
基于STM32的自平衡车设计与实现_第4页
基于STM32的自平衡车设计与实现_第5页
已阅读5页,还剩31页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

基于STM32的自平衡车设计与实现摘要:自平衡车作为一种常见的轮式倒立摆系统,有着静态不稳、动态能稳的特点,同样也拥有结构简单、运动灵活、能原地转弯等优势,在日常生活、工业运输、安全检查等领域有着较好的应用前景,本文以STM32F103C8T6单片机为主要控制部件,设计并制作了一款自平衡车系统。首先介绍了自平衡车的力学平衡原理以及主要控制方法,完成了系统硬件电路的设计以及制作,含有主控最小系统、电源降压稳压、姿态检测、电机驱动、无线通讯、OLED显示等主要部分,接着依据Keil开发环境完成了系统软件程序的编写,实现了姿态数据采集以及滤波、PID平衡控制、编码器测速、无线指令接收与状态显示等功能;最后完成了各模块的测试以及系统整体调试,该自平衡车可以保持稳定的直立平衡,可以借助无线手柄完成前进、后退、转向等动作控制。关键词:STM32单片机;自平衡车;PID控制;卡尔曼滤波;姿态检测DesignandimplementationofselfbalancingvehiclebasedonSTM32Abstract:asatypicalwheeledinvertedpendulumsystem,twowheeledselfbalancingvehicleshowsstaticinstabilitybutkeepsstablewhenmoving.Italsohascompactstructureflexiblemovementandzeroradiusturning.Itshowspromiseinciviltransportation,industriallogistics,securityinspectionandotherareas.ThispaperusesSTM32f103c8t6microcontrollerascorecontrollertodesignandimplementtwowheelselfbalancingvehiclesystem.Startwithexplaininghowtheselfbalancingvehiclekeepsitsbalancemechanicallyandthemaincontrolalgorithmbehindit.Buildthehardwarecircuitcoveringkeypartslikemastercontrolminimumsystem,powervoltagereductionandstabilization,attitudedetection,motordrive,wirelesscommunication,OLEDdisplay.WritesoftwareinKEILenvironmenttohandleattitudedatareadingandcleaning,PIDbalancecontrol,encoderspeedcheck,wirelesscommandpickup,andstatusshowing.Wrapupbytestingeachpartalonethenalltogethertoprovethesystemworkssteadyandusable.Testresultsshowselfbalancingvehicleachievesstableverticalbalanceandcompletesforwardbackwardsteeringandothermotioncontrolthroughwirelesshandle.Itrespondswelldynamicallyandhandlesinterferencefineonregularroads.STM32singlechipmicrocomputer;Twowheelselfbalancingvehicle;PIDcontrol;Kalmanfilter;Attitudedetection目录第1章绪论 11.1选题背景与意义 11.2国内外研究现状 21.3论文研究内容 3第2章自平衡车原理 42.1平衡车力学平衡原理 42.2.1左右车轮力平衡分析 42.2.2倒立摆模型 42.2自平衡车控制算法原理 52.2.1PID控制算法原理 52.2.2Kalman滤波算法原理 6第3章自平衡车系统硬件设计 73.1STM32最小系统电路设计 73.2降压稳压模块电路设计 83.3姿态获取模块电路设计 93.4通讯模块电路设计 103.5OLED显示屏电路设计 113.6动力驱动电路设计 12第4章自平衡车软件设计 144.1程序总体方案设计 144.2姿态获取程序设计 154.3无线通讯程序设计 164.4OLED显示程序设计 174.5电机调速程序设计 184.6Kalman滤波器的设计与实现 19第5章系统调试与分析 215.1OLED显示模块调试与分析 215.2姿态传感器模块调试与分析 215.3通讯模块调试与分析 225.4PID控制器调试与分析 22结论 24参考文献 25附录 27致谢 28第1章绪论1.1选题背景与意义在全球智能制造以及机器人技术快速发展的背景之下,移动机器人技术已经变成了电子信息、自动化控制、机械工程等多学科交叉融合的研究热点,自平衡车作为一种特殊的轮式移动机器人,其本质为单级倒立摆系统,天然地有着多变量、强耦合、非线性、开环不稳定的控制特性,是验证各类控制算法效益的经典物理模型,同样也具备较高的工程应用价值[1]。以及传统的多轮移动载体相比,自平衡车有着结构简单紧凑、占地面积小、转弯半径为零的运动优势,可以在狭小、拥挤的繁复环境中完成灵活移动,有效地弥补了履带式、多轮式移动机器人的场景短板,目前,自平衡车相关技术已经在民用短途代步、工业园区物流运输、安防巡检、军事排爆等领域实现了商业化应用,展现出较强的场景适配能力以及市场潜力。目前自平衡车技术依然存在部分需要改良的问题:一是传统PID控制算法存在参数调整麻烦、繁复路况下适应性不够的情况,容易造成车身晃动、平衡不稳定;二是传感器数据容易受环境干扰及电磁噪声影响,继而让姿态检测不够精确,直接影响平衡控制效果,三是多数高性能自平衡车系统存在硬件成本高、结构复杂的问题,不利于技术的推广以及应用[2]。依据这一点,本文以较低的成本、较强的实用性为设计目标,使用STM32F103C8T6单片机作为重点控制器,融合MPU6050姿态传感器、PID控制算法以及卡尔曼滤波算法,完成了自平衡车系统的软硬件设计以及实现。本研究凭借改良硬件电路布局减少了电磁干扰,并借助参数调试改良了PID控制的动态响应能力,在保障系统平衡稳定性的时候,实现了硬件方案的小型化与低成本化,然后可以为自平衡车的技术改良给予参照,同时也可为倒立摆系统相关的控制算法研究给出实验平台,具备重要的理论研究价值以及工程实践意义[3]。1.2国内外研究现状自平衡车的技术研究源自于国外,欧美以及日本等发达国家在该领域起步较早,技术积累更为丰富,1986年,日本电气通讯大学的山腾一雄教授首次提出了两轮自平衡机器人的设计构想,并且研发出了首款PBRobot两轮自平衡机器人,但由于受限于当时的微电子技术水平,该机器人仅能在特定直线轨道上实现平衡保持,而无法完成灵活的运动控制,但是为后续技术发展打下了理论基础[4]。2002年,瑞士联邦工业大学的Drasser以及Arrigo团队研制了JOE两轮遥控自平衡机器人,该系统使用陀螺仪作为姿态检测重点,并凭借自适应模糊控制算法完成运动耦合解耦,继而实现了自平衡机器人的速度与偏航角稳定控制[5]。2003年,美国南卫理公会大学的DavidP.Anderson设计了nBot两轮自平衡机器人,使用状态反馈控制策略,增进了系统的鲁棒性以及抗干扰能力,进而变成当时两轮自平衡机器人领域的经典设计方案[6]。我国自平衡车研究开始较晚,但发展速度较快,且商业应用效果明显,2004年,中国科学技术大学的屠运武团队研发出了Freemover自平衡车,使用状态反馈极点配置方法,凭借多个传感器获取车身倾角、角速度及车轮转速等数据,准确地判断控制意图,继而实现了车身平衡的稳定控制,是国内首个有着实用价值的自平衡车原型[7]。2005年,哈尔滨工业大学的王晓宇团队首次将卡尔曼滤波算法应用于两轮自平衡机器人的姿态估计中,并融合能量最优控制算法,明显增加了姿态检测的准确性以及系统的抗干扰能力[8];同一时期,西安交通大学研发了有着自主巡航功能的自平衡机器人系统,更深一步扩大了自平衡车的智能化应用范围。内容:近些年,自平衡车技术的研究方向主要集中在三个维度:一是控制算法的精进,凭借融合模糊控制、强化学习、模型预测控制等智能算法,解决传统PID控制参数自适应能力不足的问题,增强系统对冗杂路况的适应性;二是硬件方案的改良,借助多传感器融合技术与低成本芯片方案,在保证系统性能的时候减少硬件成本,助推技术的推广,三是智能化功能的增加,融合环境感知、自主导航、防撞预警等技术,扩大自平衡车在更多工业以及民用场景的应用[9]。1.3论文研究内容本文以STM32单片机为基础,实现了自平衡车系统的整体设计、制作以及调试,主要探究了自平衡车的硬件电路设计、重点控制算法的实现以及系统稳定性的改良,全文按照以下的结构实行研究。第1章为绪论,说明了本课题的研究背景以及意义,整理了自平衡车技术的国内外的研究情况以及发展方向,确定了本文的主要研究内容与整体框架。第2章为自平衡车的原理,先分析自平衡车的力学平衡原理,完成了左右车轮的力平衡分析与倒立摆数学模型的建立,而后说明系统核心控制算法的原理,囊括PID控制算法以及卡尔曼滤波算法的理论基础与它在自平衡车系统中的应用逻辑。第3章为自平衡车系统的硬件设计,完成了系统整体的硬件方案的设计,详细地说明了主控最小系统、降压稳压模块、姿态获取模块、通讯模块、OLED显示模块、动力驱动模块的电路设计以及芯片选型依据,完成了硬件电路的原理图与PCB设计。能力已经增加了,同样也减少了成本。第4章为自平衡车的软件设计,依据Keil的开发环境中完成了系统软件程序的编写,包含了程序的总体方案设计、姿态的获取程序、无线的通讯程序、OLED的显示程序、PID的控制器设计、编码器的测速程序、电机的调速程序以及卡尔曼的滤波程序的设计以及实现。内容:第5章为系统调试以及分析,完成了系统各硬件模块的单独调试与软件功能的验证,重点分析了OLED显示模块、姿态传感器模块、通讯模块的调试结果,并且完成了PID控制器的参数调试与系统整体的平衡性能测试,然后验证系统设计的成效。最后为本文的结论部分,总结本课题的研究成果以及系统实现的功能,分析目前设计存在的不足,并对后续的改良方向实行展望。第2章自平衡车原理2.1平衡车力学平衡原理2.2.1左右车轮力平衡分析为简化分析过程,本文将自平衡车的车身看作刚体,左右两个车轮的结构以及参数基本相同,忽略车轮以及地面的滑动摩擦,仅考虑纯滚动工况,对自平衡车的左右车轮实行受力分析,车轮受到的作用力主要有:车身对车轮的垂直压力、地面的支持力、电机输出的驱动力矩、地面的摩擦力、车身运动产生的惯性力。对于左右两个车轮,在直线行驶工况下,左右车轮的电机输出力矩相同,车轮转速一致,车身无偏航,左右车轮的受力基本对称;在转向工况下,控制器借助调整左右车轮的电机输出力矩,使左右车轮产生转速差,继而实现车身的转向控制,零半径转弯可借助控制左右车轮以相同转速反向转动来实现[10]。在平衡控制过程中,地面对车轮的静摩擦力是实现车身平衡的重点力量,车轮的加速运动借助摩擦力将作用力传递到车身,以抵消车身的倾角重力矩,然后使车身恢复竖直平衡状态,当车身倾角超出摩擦力的调节极限时,车轮会发生打滑现象,系统将无法维持平衡控制,所以自平衡车的倾角调节范围存在物理限制。2.2.2倒立摆模型自平衡车的车身可等效为单级倒立摆的摆杆,车轮与地面的接触点为倒立摆的支点,其数学模型可借助拉格朗日方程建立。为简化模型,做出如下假设:车身为均匀刚体,质量均匀分布;车轮与地面为纯滚动,无相对滑动;忽略电机的响应延迟以及传动机构的间隙;忽略空气阻力的影响。定义系统的重点参数:车身总质量为M,车轮质量为m,车身重心到轮轴的垂直距离为L,车轮半径为R,车身相对竖直方向的倾角为θ,车轮的位移为x,重力加速度为g,系统的转动惯量为I。依据拉格朗日力学原理,系统的拉格朗日函数L为系统总动能T与总势能V的差值,即L=T−V[11]。2.2自平衡车控制算法原理2.2.1PID控制算法原理PID控制是工业控制领域应用最大量的经典闭环控制算法,有着结构简单、参数调试便捷、鲁棒性强的优势,无需依赖系统的精确数学模型,仅凭借偏差量即可完成控制量的计算,完全适配自平衡车的动态平衡控制需求。PID控制器由比例(P)、积分(I)、微分(D)三个环节组成,三个环节在自平衡车控制中的作用如下:1.比例环节:比例环节的输出以及偏差量成正比,可以快速响应系统的偏差。在自平衡车平衡控制中,车身倾角偏差越大,比例环节输出的控制量越大,电机的驱动力矩越强,可以快速将车身拉回平衡位置,是平衡控制的重点环节。但比例环节无法消除稳态误差,过大的比例增益会导致系统超调量增大,出现车身震荡的问题。2.积分环节:积分环节的输出与偏差量对时间的积分有关,主要的作用是减少系统的稳态误差,在自平衡车的控制中,由于车身重心的偏移、电机参数的不同等因素,车身会出现固定的静态倾角偏差,积分环节借助对偏差的持续累积,输出补偿的控制量,减少该稳态误差,使车身大致地保持在竖直的平衡位置。可是积分环节会影响系统的响应速度,较大的积分增益会导致系统出现积分饱和,继而引起车身的超调失稳。3.微分环节:微分环节的输出以及偏差量的变化情况有关,可以预判偏差的变化趋势,提前输出抑制控制量,主要的作用是抑制系统的震荡以及超调,在自平衡车的控制中,微分环节凭借检测车身倾角的变化速度,在车身出现快速倾倒的趋势时提前增大电机的驱动力,然后缓冲车身的晃动,进而加强系统的动态稳定性,并且特别适配颠簸路面的工况。在本系统中,使用双环PID控制策略,内环为倾角环PID控制,以车身竖直倾角为控制目标,维持车身的直立平衡;外环为速度环PID控制,以车轮转速为控制目标,实现车身的前进、后退与速度稳定控制,两个PID环的输出叠加后作为电机的最终控制量,实现平衡以及运动的协同控制[12]。2.2.2Kalman滤波算法原理自平衡车的姿态检测主要靠着MPU6050传感器来完成,该传感器内部装有3轴的加速度计以及3轴的陀螺仪,其中加速度计可以测量重力加速度的分量来估算车身的静态倾角,但容易受车身运动加速度的影响;陀螺仪可以测量车身的倾角角速度,并凭借积分得出倾角变化量,虽然动态响应较好,但是存在温漂与积分累积误差,而且长时间测量会使倾角数据失真。卡尔曼滤波是一种高效的递归滤波器,可以从含噪声的测量数据中,较优地估计出系统的状态变量,不光适合加速度计以及陀螺仪的数据融合需求,又可以较好地滤除传感器噪声,并消除陀螺仪的积分累积误差,然后得到较准确的车身倾角以及角速度数据。在本系统中,卡尔曼滤波的状态变量为车身倾角以及倾角角速度,观测值为加速度计计算得到的倾角以及陀螺仪测量的角速度,凭借上述的递归算法,可以实时地输出较优的车身姿态数据,并为后续的PID平衡控制给出较准确的输入[13]。第3章自平衡车系统硬件设计本系统的硬件设计以模块化的设计为重点原则,将自平衡车的硬件系统划分为主控模块、电源模块、姿态检测模块、电机驱动模块、无线通讯模块、OLED显示模块六大重点部分,整体的硬件方案以STM32F103C8T6单片机为重点,实现各模块的协同工作。系统硬件设计重点围绕自平衡车主体展开,无线通讯模块仅需实现与手柄的指令接收,无需对手柄硬件实行详细的设计。3.1STM32最小系统电路设计内容:主控芯片选用意法半导体公司生产的STM32F103C8T6单片机,该芯片使用ARMCortex-M3内核,最高主频可达72MHz,内置64KBFlash存储器以及20KBSRAM,具备丰富的外设接口,囊括3路USART串口、2路SPI接口、2路I2C接口、3路12位ADC、多个定时器以及GPIO接口,可以完全满足自平衡车系统的外设驱动、数据运算与控制逻辑实现需求,同时具备低成本、低功耗、高稳定性的优势,完全适配本系统的设计目标[14]。STM32最小系统是单片机正常工作的重点基础,主要含有电源电路、复位电路、晶振电路、BOOT启动配置电路与SWD调试下载电路五部分,详细设计如下。电源电路:单片机的工作电压大约为3.3V,由AMS1117-3.3V稳压芯片输出的3.3V电源供电,在芯片的VDD引脚以及GND引脚之间并联一些0.1uF的去耦电容,放置在芯片引脚附近,以滤除电源中的高频噪声,然后保证供电的稳定性。2.晶振电路:使用一个8MHz的无源晶振作为系统的外部高速时钟(HSE),晶振的两端分别连接到单片机的OSC_IN以及OSC_OUT引脚,并且同时并联两个20pF的负载电容到地,方便为单片机给予稳定的时钟源;除了上述内容以外,单片机内部还有一个8MHz的RC振荡器,可以当作备用的时钟源。复位电路使用了低电平的复位方式,借助一个电阻以及电容的组合来实现复位功能,并且连接到单片机的复位引脚,在上电时可以自动复位,另外还设计了手动复位的按钮。4.BOOT启动配置电路:单片机的BOOT0以及BOOT1引脚分别借助10kΩ的电阻连接到GND,被设置为闪存存储器的启动方式,即单片机上电后从内部的Flash中读取用户的程序,来满足本系统的常规使用要求。5.SWD调试下载电路:预留了6针SWD接口,囊括3.3V的电源、GND、SWDIO的数据引脚、SWCLK的时钟引脚,支持凭借ST-Link仿真器完成程序的下载以及在线调试,大幅提高了软件开发的能力。图3.1单片机最小系统3.2降压稳压模块电路设计自平衡车的动力电源为12V的锂电池组,系统内各模块的工作电压存在差异,主控单片机、MPU6050传感器、OLED显示屏等模块需要3.3V的供电,而电机驱动芯片、无线通讯模块则需要5V的供电,所以需要设计多级的降压稳压电路,以实现不同电压等级的稳定输出。本系统的降压稳压电路共分为两级:第一级为12V转5V的降压电路,第二级则为5V转3.3V的降压电路[15]。12V转5V的降压电路:选用TI公司的TPS5450DDAR同步降压的DC-DC芯片,该芯片的输入电压范围在5.5V~36V之间,最大的连续输出电流可以到了5A,开关的频率为500kHz,具备过流保护、过压保护、热关断以及欠压锁定等功能,可以满足系统的5V供电需求。电路的设计依据芯片的数据手册,输入端并联47uF以及100nF的滤波电容,以减少输入电源的噪声干扰;输出端利用LC的滤波电路实现电压的平滑输出,输出的电压借助分压的电阻设置为5V,同样并联10uF与100nF的滤波电容,继而保证输出电压的稳定性。图3.212V转5V电路5V转3.3V的降压电路:使用AMS1117-3.3V的线性稳压LDO芯片,该芯片最大输出电流约为1A,输出电压纹波较小,可以为单片机、传感器等对电源噪声敏感的模拟器件给予较为纯净的3.3V供电,电路设计中,输入以及输出端都并联10uF与100nF的滤波电容,并且在输出端串联反向二极管,以防止反向电压损坏芯片。图3.35V转3.3V电路3.3姿态获取模块电路设计姿态获取模块是自平衡车平衡控制的重点部分,主要负责实时地收集车身的倾斜思路和角速度信息,并且为PID控制器给予准确的输入数据,本设计使用MPU6050六轴姿态传感器作为主要检测元件,MPU6050内部包含3轴MEMS加速度计以及3轴MEMS陀螺仪,加速度计的测量范围可以设置为±2g到±16g,陀螺仪的测量范围可以设置为±250°/s到±2000°/s,内部还集成了16位ADC转换器,可以把模拟信号转换为数字信号,借助I2C接口以及单片机通信,不需要额外的外部组件,集成度高、价格实惠,完全符合本系统的设计要求[16]。MPU6050模块的电路设计如下:传感器的VCC引脚接入3.3V电源,并且并联0.1uF电容到地,SCL串行时钟引脚以及SDA串行数据引脚分别凭借4.7kΩ电阻连接至3.3V电源,同样连接至STM32单片机的I2C引脚,然后实现I2C通讯;INT中断引脚连接至单片机的GPIO引脚,可以配置为数据就绪中断,以增强数据采集的实时性,ADO地址选择引脚下拉至GND,由此配置传感器的I2C设备地址为0x68。为了减少电磁干扰对传感器数据的影响,电路设计中将MPU6050模块放置在车身的重心位置,且离电机驱动电路以及电源电路较远,并且同样使用屏蔽线连接传感器与主控板,然后有效减少电机启停所产生的电磁噪声对传感器测量精度的影响。图3.4姿态获取模块电路设计3.4通讯模块电路设计通讯模块的重点功能是实现自平衡车与无线控制手柄之间的指令传输,自平衡车接收手柄下发的前进、后退、转向、挡位调节等控制指令,同时向手柄反馈车身的运行状态数据,本设计选用nRF24L01无线射频模块完成无线通讯功能。nRF24L01是一款在2.4GHz~2.5GHzISM频段工作的单片射频收发器件,内部集成了频率合成器、功率放大器、调制器及增强型ShockBurst协议引擎,输出功率以及通讯频道可以借助程序实行配置,最高通讯速率可达2Mbps,有着低功耗、抗干扰能力强、外围电路简单的优势,适用于嵌入式系统的短距离无线通讯场景。nRF24L01模块的电路设计如下:模块的VCC引脚接入3.3V电源,严禁接入5V电源,并联100nF去耦电容滤除电源噪声;CE芯片使能引脚、CSN片选引脚、SCK串行时钟引脚、MOSI主机输出引脚、MISO主机输入引脚分别连接至STM32单片机的SPI接口GPIO引脚,凭借SPI总线完成寄存器配置以及数据收发,IRQ中断引脚连接至单片机的外部中断引脚,可以配置为发送完成、接收完成中断,加强无线通讯的响应速度[17]。在这个系统中,自平衡车上的nRF24L01模块被设置为接收状态,手柄上的模块则被设置为发送状态,两者凭借相同的通讯地址及频道来完成配对,并使用增强型ShockBurst形式来实行数据的双向传输,数据包长度固定为6字节,其中含有前进后退指令、转向指令、挡位调节指令、灯光控制指令等内容,通讯周期为20ms,以保证控制指令的及时性。图3.5通讯模块电路设计3.5OLED显示屏电路设计OLED显示模块的作用是即时地表现自平衡车的运行情况,包含了车身的倾斜思路、电机的转动速度、电池的电量、档位的状态及无线的连接情况等信息,方便系统的调试以及运行的观察,本设计使用0.96寸I2C接口的OLED屏幕,该屏幕的分辨率为128×64,工作的电压为3.3V,内置SSD1306驱动芯片,不需要背光,耗电少、显示的清晰度高,反应迅速,外部的电路简洁,适用于嵌入式系统的显示需求。OLED模块的电路设计如下:显示屏的VCC引脚接入到了3.3V的电源,GND引脚接地;SCL时钟引脚以及SDA数据引脚分别连接至STM32单片机的I2C总线引脚,并以及MPU6050传感器共用同一路I2C总线,凭借不同的设备地址实行区分,继而节省了单片机的IO口资源,RES复位引脚以及DC数据/命令引脚分别连接至单片机的普通GPIO引脚,以实现显示屏的复位以及驱动控制。图3.6OLED显示屏电路设计3.6动力驱动电路设计本设计使用了JGB37-520直流减速电机,该电机适用于12V的直流电源,内部装有行星齿轮减速装置,减速比可以按需选择,最大输出扭矩约35KG・CM,空载转速最高约1590RPM,调速范围广,扭矩较大,可以为自平衡车给出足够的驱动力;另外电机内部配有双通道霍尔编码器,可以输出正交编码脉冲,利用单片机的定时器输入捕获功能,可以准确检测电机的转速以及转向,为速度环PID控制给予反馈信息,充分满足自平衡车的控制要求。电机驱动的芯片选用东芝公司的TB6612FNG双路直流电机驱动芯片,该芯片内部含有低导通电阻的MOSFET全桥电路,电机供电的电压范围在4.5V至13.5V之间,单路最大的持续输出电流约为1.2A,峰值的电流可达3A左右,PWM输入信号最高的频率支持100kHz上下,同样具备低压检测、热关断以及过流保护等功能,可以驱动两个直流电机,符合本系统的双电机驱动需求,相比传统的L298N驱动芯片,其导通的损耗较小,发热较低,驱动的能力较高。TB6612FNG芯片的电路设计如下:1.电源电路:VM引脚为电机功率电源的输入端,接入12V的电池电源,并且并联100uF的大容量电解电容以及100nF的陶瓷电容,以滤除电机启停产生的电源噪声;VCC引脚为芯片逻辑电源的输入端,接入5V的电源,且并联100nF的去耦电容。2.控制信号接口:STBY待机控制引脚连接至STM32的GPIO引脚,高电平时芯片正常工作,低电平时芯片进入待机形式,电机停止输出,AIN1、AIN2、PWMA引脚分别连接至单片机的GPIO引脚以及定时器PWM输出引脚,控制A路电机的正反转与转速;BIN1、BIN2、PWMB引脚分别连接至单片机的另一组GPIO以及定时器PWM输出引脚,控制B路电机的正反转以及转速。配置AIN1以及AIN2的电平组合,可以实现电机的正转、反转、制动以及停止四种工作形式,改变PWMA引脚输出的PWM波占空比,可以实现电机的无级调速。3.电机输出接口:AO1、AO2引脚连接到左路的直流电机的两个接线端,BO1、BO2引脚连接到右路的直流电机的两个接线端,继而完成电机的驱动控制;两路电机的输出端均并联100nF的消弧电容,以减少电机电刷产生的电火花干扰。内容:4.编码器接口:两个电机的霍尔编码器输出引脚分别连接到STM32单片机的定时器编码器接口,单片机借助定时器的编码器形式,对编码器输出的正交脉冲实行计数,继而计算出电机的实时转速以及累计位移,进而为速度环PID控制给出反馈数据。为保证电机驱动电路的稳定,电路设计中在电机接线端预留了续流二极管,以避免电机反向电动势对驱动芯片造成损害;PCB布局时,大电流的电机功率回路与小信号的控制回路分开布线,功率回路使用较粗的铜箔走线,然后减少走线阻抗与发热,减少大电流回路对控制信号的电磁干扰。图3.7电机驱动电路设计第4章自平衡车软件设计4.1程序总体方案设计内容:自平衡车的系统软件使用了前后台架构设计,前台乃是中断服务程序,负责处理实时性较高的任务,囊括姿态数据采集、PID控制计算、电机调速、编码器测速、无线数据收发等;后台则是while(1)主循环,负责处理实时性较低的任务,含有OLED显示刷新、电池电压检测、系统状态监测、异常报警等。系统上电后,先执行初始化程序,依次完成系统时钟配置、NVIC中断优先级分组、SysTick延时定时器初始化、GPIO端口初始化、定时器PWM输出初始化、I2C总线初始化、SPI总线初始化、ADC采集初始化、MPU6050传感器初始化、nRF24L01无线模块初始化、OLED显示屏初始化、编码器接口初始化。初始化完成后,系统进入主循环,同样启动定时器中断,每10ms进入一次中断服务程序,以完成重点的控制任务。定时器中断服务程序是系统软件的重要部分,其执行流程如下:首先读取MPU6050传感器的加速度计以及陀螺仪相关的数据,借助卡尔曼滤波算法的计算得到车身的倾角以及角速度;随后读取编码器的计数值,计算得到左右电机的实时转速;接着接收nRF24L01模块的无线控制指令,解析得到目标的速度以及转向指令,然后执行倾角环与速度环的PID控制算法,计算得到左右电机的控制量,最后将控制量转换为PWM波的占空比,输出至电机的驱动芯片,控制电机的转速以及转向,完成一次闭环的控制。主循环中,根据中断程序更新的系统状态数据,完成OLED显示屏的内容刷新,同样监测电池的电压,电压低于阈值时触发蜂鸣器的报警,如图4.1为系统的逻辑流程图。4.2姿态获取程序设计姿态获取程序的作用是实现MPU6050传感器的初始化以及数据读取,继而为系统给出基础的姿态测量数据,程序首先利用I2C总线对MPU6050实行初始化设置:解除芯片的休眠状态,将陀螺仪的量程设置为±2000°/s,加速度计的量程设置为±4g,将数字低通滤波器的截止频率设置为42Hz,将采样率分频系数设置为0,使传感器的采样频率到了1kHz,同样设置FIFO寄存器,实现传感器数据的缓存读取。初始化结束后,程序在定时器中断中每10ms读取一次传感器的原始数据,含有3轴加速度计的16位二进制补码数据以及3轴陀螺仪的16位二进制补码数据,凭借量程转换公式,将原始数据转换为实际的加速度值(单位:g)以及角速度值(单位:°/s)。随后,借助利用加速度计的X轴及Z轴的重力加速度分量,可以算出车身的静态倾角值,计算公式为:θ=arctan2(accx,accz)×π180​其中,accx是X轴的加速度值,accz是Z轴的加速度值,θ是车身的俯仰倾角,即平衡控制的主要参数。图4.2展示了姿态获取的程序设计。图4.1系统逻辑流程图图4.2姿态获取程序设计4.3无线通讯程序设计无线通讯程序的作用是对nRF24L01模块实行设置并接收无线数据,实现自平衡车与控制手柄之间的指令传递,程序先凭借SPI总线对nRF24L01模块实行初始设置:模块的通讯地址设为5字节,通讯频道设为2.4GHz频段的40频道,空中数据传输速率设为1Mbps,发射功率设为0dBm,设置为增强型的ShockBurst接收形式,启用自动应答以及自动重发功能,重发次数设为10次,重发间隔设为500us。设置完成后,模块进入接收形式,持续地监听无线信道,模块接收到手柄发送的数据包后,IRQ引脚触发下降沿中断,单片机进入外部中断服务程序,凭借SPI总线读取接收FIFO中的数据包,解析得到控制指令,数据包格式为6字节数组,第1字节为前进后退指令,第2字节为转向指令,第3字节为挡位信息,第4字节为灯光控制指令,其余2字节为校验位,以保证数据传输的准确性。程序对接收到的数据包实行了认真的检查,检查借助之后修改了系统的控制目标参数,不符合要求则将该数据包丢弃,然后保证了控制指令的可靠性。图4.3无线通讯程序设计4.4OLED显示程序设计OLED显示程序是依据SSD1306驱动芯片的驱动库而编写的,实现了字符、数字以及图形的显示功能,程序首先完成了OLED显示屏的初始化,设置了显示分辨率为128×64,开启了显示,设定了显示形式为正显,配置了页地址寻址形式。程序在主循环中每100ms刷新一次显示屏的显示内容,分成4行显示系统的主要状态信息:第1行显示车身的俯仰倾角,单位为°,第2行显示左右电机的转速,单位为RPM;第3行显示挡位信息以及电池电压,第4行显示无线通讯的连接状态与灯光开关状态。实时显示系统状态,可以直观地观察自平衡车的运行情况,便于系统调试以及参数改良。图4.4OLED显示程序设计4.5电机调速程序设计电机调速程序的作用是将PID控制器输出的控制信号,转换为定时器PWM波的占空比,然后实现电机的平滑调速,STM32单片机的通用定时器有着PWM输出能力,程序将定时器设置为PWM输出形式,PWM频率设定为10kHz,已超过人耳的听觉范围,继而防止电机调速时出现高频噪音。程序中,PID控制器输出的控制信号范围为-1000~+1000,对应PWM占空比的-100%~+100%,正负号则对应电机的正转以及反转,程序依据控制信号的正负,设置电机驱动芯片的AIN1/AIN2、BIN1/AIN2引脚电平,以确定电机的转向;依据控制信号的绝对值,设定定时器PWM输出的比较值,调整PWM波的占空比,继而实现电机的转速控制。当控制信号为0时,设置电机驱动芯片进入制动形式,使电机迅速地停止,以增加系统的响应速度。图4.5电机调速程序设计4.6Kalman滤波器的设计与实现卡尔曼滤波程序的作用是对MPU6050的传感器数据实行处理,然后减少测量的干扰以及陀螺仪的累积偏差,以获取较为准确的车身的倾斜思路与角速度信息,程序里设置了一个二维的卡尔曼滤波器,其状态变量囊括车身的俯仰倾角θ及倾角的角速度ω,观测值来自加速度计计算的倾角及陀螺仪测量的角速度。程序的详细操作步骤如下。1.参数初始化:初始化状态转移矩阵A、观测矩阵H、过程噪声协方差矩阵Q、测量噪声协方差矩阵R、初始误差协方差矩阵P,其中Q与R的取值需根据传感器的实际噪声特性调试确定,将会直接影响滤波的效果。2.先验的预测:在每次获取传感器数据之后,首先根据上一时刻的最优状态估计,预测目前时刻的状态变量以及误差协方差矩阵。内容:3.卡尔曼增益的计算:依据预测的误差协方差矩阵以及测量的噪声协方差矩阵,已经算出了目前时刻的卡尔曼增益。内容:4.状态更新的校正:融合加速度计的倾角观测值,对先验的状态估计实行校正,计算出目前时刻的最佳倾角以及角速度的估计值,并且同样更新误差协方差矩阵,为下一次的滤波迭代做准备。借助某种滤波方法,可以较好地减少车身运动加速度对倾角测量的影响,同时减少陀螺仪的温度漂移以及积分误差,在车身的静止以及运动状态下,都能给出较为平滑、准确的倾角数据,为PID平衡控制给予较为可靠的输入,继而明显提高系统的平衡稳定性。图4.6Kalman滤波器设计第5章系统调试与分析5.1OLED显示模块调试与分析OLED显示模块的调试是系统调试的初始环节,在完成主控最小系统焊接后,先行地开展了OLED显示模块的调试工作,调试步骤含有:先焊接最小系统与OLED模块的连接线路,借助万用表检测电路的连通情况,排查短路、虚焊等问题;接着下载OLED显示测试程序,验证显示屏的初始化以及字符显示功能。初次调试时,显示屏出现了无显示的情况,经检查发现,I2C总线的上拉电阻未焊接,然后造成I2C通讯异常,重新焊接上拉电阻后,显示屏顺利地点亮,可以正常地显示字符以及数字,接着完成显示内容的调试,确认了倾角、转速、电压、挡位等信息的实时显示功能,测试结果显示,OLED显示屏刷新流畅,无卡顿、花屏等问题,可以清晰、准确地表现系统运行状态,符合设计要求。图5.1OLED模块调试5.2姿态传感器模块调试与分析姿态传感器模块的调试分为硬件通讯调试以及数据滤波调试两个部分,先实行硬件通讯调试,焊接MPU6050模块的相关电路,下载I2C通讯测试程序,凭借单片机读取MPU6050的WHO_AM_I寄存器,验证I2C通讯是否正常。首次调试中,出现了无法读取传感器寄存器的问题,凭借万用表测量发现,传感器的SDA与SCL引脚存在虚焊,重新焊接后,成功读取到传感器的设备ID,I2C通讯正常,接着实行传感器数据采集以及滤波调试,程序读取加速度计以及陀螺仪的原始数据,借助串口上传至上位机,观察数据的变化情况。测试结果显示,传感器可以正常采集3轴加速度以及角速度数据,数据输出频率为100Hz,符合设计要求;但是原始数据存在明显的噪声波动,加速度计数据受轻微震动的影响极大,陀螺仪数据存在明显的零点漂移。针对该问题,完成了卡尔曼滤波程序的调试,借助调整过程噪声协方差矩阵Q以及测量噪声协方差矩阵R的参数,改良滤波的效果,调试完成后,凭借上位机观察滤波后的倾角数据,结果显示,卡尔曼滤波可以有效地滤除传感器的测量噪声,消除陀螺仪的积分累积误差,滤波后的倾角数据平滑稳定,静态测量的误差小于±0.2°,动态响应的速度快,可以准确地跟随车身的倾角变化,为后续的平衡控制给予了可靠的姿态数据。图5.1MPU6050模块输出值5.3通讯模块调试与分析通讯模块的调试分为自平衡车端以及手柄端的双向通讯调试,首先完成了自平衡车端nRF24L01模块的硬件调试,焊接相关的电路,下载SPI通讯测试程序,读取模块的寄存器值,验证SPI通讯是否正常,调试中发现,模块无法正常地写入寄存器,排查后发现,模块的供电引脚虚焊,让供电不稳定,重新焊接后,SPI通讯正常,可以完成模块的初始化配置。接着实行双向通讯调试,把自平衡车端的模块设为接收形式,手柄端的模块设为发送形式,设置相同的通讯地址与频道,手柄端每20ms发送一次控制数据包,自平衡车端收到数据包后,凭借串口把解析后的指令传给上位机,验证通讯的稳定性。测试结果显示,在10米的通讯距离内,无线通讯的丢包率低于0.1%,通讯延迟小于20ms,可以稳定、实时地传输控制指令,满足自平衡车的远程控制需求,同样验证了前进、后退、转向、挡位调节、灯光控制等指令的解析功能,指令解析准确无误,无错码、乱码现象。5.4PID控制器调试与分析PID控制器的参数的设置是系统调试的重要部分,而且关系到自平衡车的平衡性能,调试的步骤按照先内环后外环的次序,首先设置倾角环PD参数,然后再设置速度环PI参数,最后设置转向控制参数。内容:倾角环PD参数的调试:首先把速度环的输出归零,仅留下倾角环的控制,调整比例增益Kp及微分增益Kd,调试时,先将Kd设为零,逐渐地增加Kp,直至车身有点摇晃,记下这个临界Kp值,然后将Kp调至临界值的70%,开始逐渐加大Kd,使车身不再摇晃,直至车身能在平衡点附近站稳,无明显晃动或摇晃。调试中发现,若Kp太小,则系统的反应慢,车身比较难及时回到平衡点,易倒下;若Kp太大,则系统的超调变多,车身会持续低频摇晃,若Kd太小,则止不住车身的晃动,动态稳定性不好,若Kd太大,则系统会高频抖动,电机的噪音十分明显。最终调出的最佳倾角环PD参数是:Kp=220,Kd=0.8,此时车身能稳稳地直立平衡,用手轻推车身,能快速回到平衡点,无明显超调和摇晃。速度环PI参数的调试:在倾角环的调试完成后,启动速度环的控制,调整比例增益Kp以及积分增益Ki,逐渐地增大Kp,使车身可以较快地响应目标速度的变化,接着逐渐地增大Ki,减少速度控制的稳态误差,让车身在坡道上保持较为稳定的行驶速度。最终得到较优的速度环PI参数为:Kp=80,Ki=0.3,此时车身能较为平稳地实现前进、后退的动作,速度的控制较为准确,无明显的加减速冲击,在10°以内的坡道上行驶时,仍能保持较为稳定的速度以及平衡状态。内容:转向控制调试:调试转向控制量的比例系数,使转向动作平滑地可控,无明显的卡顿以及车身失衡,最终调试完成之后,自平衡车可以借助手柄摇杆实现平滑的转向控制,支持零半径原地转弯,在转向过程中车身仍能保持稳定的平衡状态,无明显晃动。系统整体调试结束后,对自平衡车的平衡表现实行综合测试,测试结果显示:该自平衡车能在平坦的水泥地面上保持稳定的直立状态,静态倾斜思路变化不超过±0.5°,可以借助无线手柄实行前进、后退、转向、挡位调整等操作控制,最高运行速度到了1.5m/s;在5°以下的坡道上能稳定地行驶,在略有起伏的路面上依然能维持平衡,有着较好的抗干扰能力以及动态稳定性,完全符合设计要求。结论本文以STM32F103C8T6单片机作为主要控制部件,以价格低廉、实用性高作为主要设计目标,完成了自平衡车系统的硬件方案设计、嵌入式软件开发与全流程系统调试,最终实现了自平衡车的直立平衡以及无线运动控制,完整达成了课题预设的全部设计目标。本文首先深度地说明了自平衡车的力学平衡原理,凭借对左右车轮的力平衡分析,明确了静摩擦力在车身平衡调节中的重要作用,同时依据拉格朗日方程完成了单级倒立摆数学模型的建立,厘清了自平衡车系统多变量、强耦合、非线性、开环不稳定的主要控制特性;随后详细地分析了PID控制算法以及卡尔曼滤波算法的理论基础,融合自平衡车的控制需求,确定了卡尔曼滤波实现多传感器数据融合、双环PID实现平衡以及运动协同控制的主要技术方案,为系统的软硬件设计打下了扎实的理论基础。在硬件方面,本文使用模块化的设计思路,完成了系统整体硬件方案的原理图以及PCB设计制作,重点电路包含主控最小系统、多级降压稳压、姿态检测、双路电机驱动、2.4G无线通讯、OLED状态显示六个主要部分,凭借精进PCB布局以及走线设计,将大电流电机功率回路与小信号传感控制回路分开布线,减少了电磁干扰对传感器测量精度的影响,实现了硬件方案的小型化、高集成度以及低成本化,重点硬件方案整体物料成本较低,有着较高的教学实验推广价值以及工程应用潜力。在软件设计方面,本文依据Keil开发环境,使用前后台软件架构完成了系统全功能程序的编写与调试,将高实时性的姿态采集、PID闭环控制、编码器测速等任务放在定时器中断服务程序中执行,将低实时性的OLED显示刷新、系统状态监测、异常报警等任务放在主循环中执行,保障了系统控制实时性,实现了各功能模块的有序协同。软件程序已经完成了姿态数据的获取以及范围的转换、数据的融合处理、双闭环的控制、速度的测量、指令的接收解析、状态的显示等功能,各功能模块均使用了独立的设计,有着较好的移植性以及扩展性,然后为后续的升级改良给出了便利的软件条件。面向后续研究与应用开拓,本课题依然有许多可加深与改良的空间,在控制算法以及数据融合层面开展进阶改良,后续可引入自适应PID、模糊PID、滑模变结构控制、模型预测控制等先进控制算法,解决系统在负载突变、坡道行驶、颠簸路面等冗杂工况下的适应性以及鲁棒性问题;同时可扩展多传感器融合方案,引入里程计、视觉传感器、超声波模块等多源感知数据,改良滤波算法与姿态解算精度,更深一步增强系统的抗干扰

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论