双轮自平衡小车机器人系统设计与制作

上传人:仙*** 文档编号:60702612 上传时间:2022-03-09 格式:DOC 页数:42 大小:3.02MB
收藏 版权申诉 举报 下载
双轮自平衡小车机器人系统设计与制作_第1页
第1页 / 共42页
双轮自平衡小车机器人系统设计与制作_第2页
第2页 / 共42页
双轮自平衡小车机器人系统设计与制作_第3页
第3页 / 共42页
资源描述:

《双轮自平衡小车机器人系统设计与制作》由会员分享,可在线阅读,更多相关《双轮自平衡小车机器人系统设计与制作(42页珍藏版)》请在装配图网上搜索。

1、燕山大学课 程 设 计 说 明 书题目:双轮自平衡小车机器人系统设计与制作学院(系):机械工程学院年级专业:12级机械电子工程组 号:3学生姓名: 指导教师:史艳国 姚建涛 李艳文 史小华 张庆玲唐艳华 李富娟 刘晓飞 刘正操 胡浩波日 期: 2015.11 燕山大学课程设计(论文)任务书院(系):机械工程学院 基层教学单位:机械电子工程系组号学生姓名设计题目双轮自平衡小车机器人系统设计与制作设计要求在课程研究项目所搭建的伺服控制系统的基础上,自主设计加工双轮车的机械系统,并完成智能双轮自平衡车系统装配与调试。技术参数所搭建的双轮车系统需要具备以下基本功能:a. 具备一定的自平衡能力,自动检测

2、自身机械系统的倾角并完成姿态的调整;b. 具备一定的负载承载能力,在加载一定重量的重物时能够快速做出调整并保证自身系统的自我平衡;c. 具备速度调节能力,能够以不同的运动速度实现双轮车系统的前进、后退、左转与右转等动作;d. 具备无线通讯功能,能够实现双轮自平衡车系统的无线远程操作控制。工作量(1)资料分析:查阅相关文献资料,对资料进行分析总结。(2)机器人总体设计:确定机器人的具体任务要求,根据任务初步拟定机器人的技术参数、运动形式、机械结构、驱动方案、传动方案、控制方案等。(3)机器人机械结构设计:将机器人分解为车身结构、机械臂和手爪等若干部分,分别对各个结构的关键部件进行详细设计并校核,

3、绘制机器人总装图和关键零部件图。(4)传感和信息检测及信息传输:根据任务要求,完成相关信息检测、处理,并完成信息的正确传输。(4)运动控制方案设计;基于传感信息,采用单片机完成机器人控制系统硬件和软件的设计和系统调试。(5)编制课程设计说明书工作计划(1)资料查阅、分析总结,所需天数1天 (2)总体方案设计,所需天数2天(3)机械结构设计,所需天数2天 (4)传感、信息传输和运动控制系统的设计,所需天数2天(5)关键零部件的设计制作,所需天数2天 (6)控制程序编码与调试,所需天数3天(7)绘制总装图和关键零件图,所需天数2天(8)系统整体装配与调试所需天数3天(9)编制课程设计说明书所需天数

4、2天(10)答辩考核、演示,所需天数1天 参考资料通过校园网在我校订阅的电子资料库中可以搜索到大量的有关机电一体化以及电机和电力拖动的参考资料。同学们也可到学校的图书馆查找纸质期刊资料。机械学院的计算机中心上班时间免费对本院学生开放。指导教师签字基层教学单位主任签字燕山大学课程设计说明书摘要两轮自平衡小车是一种非线性、多变量、强耦合、参数不确定的复杂系统,他体积小、结构简单、运动灵活,适合在狭小空间内工作,是检验各种控制方法的一个理想装置,受到广大研究人员的重视,成为具有挑战性的课题之一。两轮自平衡小车系统是一种两轮左右并行布置的系统。像传统的倒立一样,其工作原理是依靠倾角传感器所检测的位姿和

5、状态变化率结合控制算法来维持自身平衡。本设计通过对倒立摆进行动力学建模,类比得到小车平衡的条件。从加速度计和陀螺仪传感器得出的角度。运用卡尔曼滤波优化,补偿陀螺仪的漂移误差和加速度计的动态误差,得到更优的倾角近似值。通过光电编码器分别得到车子的线速度和转向角速度,对速度进行PI控制。根据PID控制调节参数,实现两轮直立行走。通过调节左右两轮的差速实现小车的转向。制作完成后,小车实现了在无线蓝牙通讯下前进、后退、和左右转向的基本动作。此外小车能在正常条件下达到自主平衡状态。并且在适量干扰下,小车能够自主调整并迅速恢复稳定状态。关键词: 自平衡 陀螺仪 控制调试前言移动机器人是机器人学的一个重要分

6、支,对于移动机器人的研究,包括轮式、腿式、履带式以及水下式机器人等,可以追溯到20世纪60年代。移动机器人得到快速发展有两方面原因:一是其应用范围越来越广泛;二是相关领域如计算、传感、控制及执行等技术的快速发展。移动机器人尚有不少技术问题有待解决,因此近几年对移动机器人的研究相当活跃。 近年来,随着移动机器人研究不断深入、应用领域更加广泛,所面临的环境和任务也越来越复杂。机器人经常会遇到一些比较狭窄,而且有很多大转角的工作场合,如何在这样比较复杂的环境中灵活快捷的执行任务,成为人们颇为关心的一个问题。双轮自平衡机器人概念就是在这样的背景下提出来的。两轮自平衡小车是一个高度不稳定两轮机器人,是一

7、种多变量、非线性、强耦合的系统,是检验各种控制方法的典型装置。同时由于它具有体积小、运动灵活、零转弯半径等特点,将会在军用和民用领域有着广泛的应用前景。因为它既有理论研究意义又有实用价值,所以两轮自平衡小车的研究在最近十年引起了大量机器人技术实验室的广泛关注。本论文主要叙述了基于stm32控制的两轮自平衡小车的设计与实现的整个过程。主要内容为两轮自平衡小车的平衡原理,直立控制,速度控制,转向控制及系统定位算法的设计。通过此设计使小车具备一定的自平衡能力、负载承载能力、速度调节能力和无线通讯功能。小车能够自动检测自身机械系统的倾角并完成姿态的调整,并在加载一定重量的重物时能够快速做出调整并保证自

8、身系统的自我平衡。能够以不同运动速度实现双轮车系统的前进、后退、左转与右转等动作,同时也能够实现双轮自平衡车系统的无线远程控制操作目录摘要I前言II第1章 项目任务11.1 项目概述11.2 项目内容21.3 预期结果2第2章 方案设计22.1 芯片的选择22.2 电机驱动的选择22.3 陀螺仪的选择3第3章 平衡车控制原理43.1 控制系统要求分析43.2 平衡控制原理53.3 平衡车数学模型53.4 PID控制原理93.5 PWM调速原理10第4章 硬件设计114.1 电路原理图114.2 芯片的电路设计114.3 电机驱动的电路设计124.4 陀螺仪的电路设计134.5 编码器的电路设计

9、14第5章 平衡车结构设计155.1 元件清单及成本155.2 三维建模16第6章 软件设计186.1 程序框图186.2 源代码18第7章 实验测试197.1 keil软件简介197.2 测试过程及结果197.3 最终实物图20第8章 市场前景调查分析21结论22心得体会23参考文献24致谢25附录126III燕山大学课程设计说明书第1章 项目任务1.1 项目概述移动机器人是机器人学的一个重要分支,对于移动机器人的研究,包括轮式、腿式、履带式以及水下式机器人等,可以追溯到20世纪60年代。移动机器人得到快速发展有两方面原因:一是其应用范围越来越广泛;二是相关领域如计算、传感、控制及执行等技术

10、的快速发展。移动机器人尚有不少技术问题有待解决,因此近几年对移动机器人的研究相当活跃。近年来,随着移动机器人研究不断深入、应用领域更加广泛,所面临的环境和任务也越来越复杂。机器人经常会遇到一些比较狭窄,而且有很多大转角的工作场合,如何在这样比较复杂的环境中灵活快捷的执行任务,成为人们颇为关心的一个问题。双轮自平衡机器人概念就是在这样的背景下提出来的。两轮自平衡小车是一个高度不稳定两轮机器人,是一种多变量、非线性、强耦合的系统,是检验各种控制方法的典型装置。同时由于它具有体积小、运动灵活、零转弯半径等特点,将会在军用和民用领域有着广泛的应用前景。因为它既有理论研究意义又有实用价值,所以两轮自平衡

11、小车的研究在最近十年引起了大量机器人技术实验室的广泛关注。本文是对本质不稳定两轮小车自平衡控制问题的研究。并通过无线蓝牙远程控制小车前进、后退、和左右转向等基本动作。1.2 项目内容(1)设计两轮自平衡小车驱动电路。选择合适的电机、传感器和微控制单元并合理设计相应的外围电路,最终完成两轮自平衡小车系统的硬件设计。(2)完成驱动板的调试。通过对驱动触发脉冲、D/A输出以及电机空载进行实验,从功能上验证了其驱动板基本能够满足系统的要求。(3)处理传感器数据。选用惯性导航器件陀螺仪和加速度计,详细分析两者的工作原理和各自单独使用所存在的问题。(4)研究自平衡小车的控制策略。最终实现平衡车的左转、右转

12、、前进、后退等功能。1.3 预期结果(1)具备一定的自平衡能力,自动检测自身机械系统的倾角并完成姿态的调整;(2)具备一定的负载承载能力,在加载一定重量的重物时能够快速做出调整并保证自身系统的自我平衡;(3)具备速度调节能力,能够以不同运动速度实现双轮车系统的前进、后退、左转与右转等动作;(4)具备无线通讯功能,能够实现双轮自平衡车系统的无线远程控制操作。第2章 方案设计2.1 主控芯片的选择STM32单片机作为主控芯片。此芯片是以ARM的Cortex-M系列为内核的单片机,相对其他单片机,外设丰富,主频高,价格便宜,有专门的软件库,操作简单,调试方便,低功耗。强型系列时钟频率达到72MHz,

13、是同类产品中性能最高的产品;基本型时钟频率为36MHz,以16位产品的价格得到比16位产品大幅提升的性能,是16位产品用户的最佳选择。2.2 电机驱动的选择TB6612FNG是东芝半导体公司生产的一款直流电机驱动器件,它具有大电流MOSFET-H桥结构,双通道电路输出,可同时驱动2个电机。 TB6612FNG每通道输出最高1.2 A的连续驱动电流,启动峰值电流达2A/3.2 A(连续脉冲/单脉冲);4种电机控制模式:正转/反转/制动/停止;PWM支持频率高达100 kHz;待机状态;片内低压检测电路与热停机保护电路;工作温度:-2085;SSOP24小型贴片封装。TB6612FNG的主要引脚功

14、能(如图2.2.1):AINl/AIN2、BIN1/BIN2PWMA/PWMB为控制信号输入端;AO1/A02、B01/B02为2路电机控制输出端;STBY为正常工作/待机状态控制引脚;VM(4.515V)和VCC(2.75.5V)分别为电机驱动电压输入和逻辑电平输入端。图2.1 TB6612FNG引脚TB6612FNG是基于MOSFET的H桥集成电路,其效率高于晶体管H桥驱动器。相比L293D每通道平均600mA的驱动电流和1.2A的脉冲峰值电流,它的输出负载能力提高了一倍。相比L298N的热耗性和外围二极管续流电路,它无需外加散热片,外围电路简单,只需外接电源滤波电容就可以直接驱动电机,利

15、于减小系统尺寸。对于PWM信号,它支持高达100kHz的频率,相对以上2款芯片的5kHz和40kHz也具有较大优势。2.3 陀螺仪的选择MPU-60X0是全球首例9轴运动处理传感器。它集成了3轴MEMS陀螺仪,3轴MEMS加速度计,以及一个可扩展的数字运动处理器DMP(DigitalMotionProcessor),可用I2C接口连接一个第三方的数字传感器,比如磁力计。扩展之后就可以通过其I2C或SPI接口输出一个9轴的信号(SPI接口仅在MPU-6000可用)。MPU-60X0也可以通过其I2C接口连接非惯性的数字传感器,比如压力传感器。 MPU-60X0对陀螺仪和加速度计分别用了三个16位

16、的ADC,将其测量的模拟量转化为可输出的数字量。为了精确跟踪快速和慢速的运动,传感器的测量范围都是用户可控的,陀螺仪可测范围为250,500,1000,2000/秒(dps),加速度计可测范围为2,4,8,16g。一个片上1024字节的FIFO,有助于降低系统功耗。和所有设备寄存器之间的通信采用400kHz的I2C接口或1MHz的SPI接口(SPI仅MPU-6000可用)。对于需要高速传输的应用,对寄存器的读取和中断可用20MHz的SPI。另外,片上还内嵌了一个温度传感器和在工作环境下仅有1%变动的振荡器。芯片尺寸440.9mm,采用QFN封装(无引线方形封装),可承受最大10000g的冲击,

17、并有可编程的低通滤波器。 关于电源,MPU-60X0可支持VDD范围2.5V5%,3.0V5%,或3.3V5%。另外MPU-6050还有一个VLOGIC引脚,用来为I2C输出提供逻辑电平。VLOGIC电压可取1.85%或者VDD。第3章 平衡车控制原理3.1 控制系统要求分析根据系统要求,小车必须要能够在无外界干预下依靠一对平行的车轮保持平衡,并完成前进,后退,左右转弯等动作。分析系统要求可知,保持小车直立和运动的动力都来自于小车的两只车轮,车轮由两只直流电机驱动。因此,从控制角度来看,可以将小车作为一个控制对象,控制输入量是两个车轮的转动速度。整个控制系统可以分为三个子系统: (1) 小车平

18、衡控制以小车倾角为输入量,通过控制两个电机的正反转保持小车平衡。 (2) 小车速度控制:在保持平衡的基础上,通过调节小车倾角实现对速度的控制,实际上还是演变为对电机的控制实现小车的速度控制。 (3)小车方向控制:通过控制两个电机间的转速不同实现转向。 小车直立和方向控制任务都是直接通过控制车模两个后轮驱动电机完成的,而速度控制则是通过调节小车倾角完成的。小车不同的倾角会引起车模的加减速,从而达到对小车速度的控制。三个子系统各自独立进行控制。由于最终都是对同一个控制对象(小车的电机)进行控制,所以各个子系统之间存在着耦合。为了方便分析,在分析其中之一时,假设其它控制对象都已经达到稳定。比如在速度

19、控制时,需要小车已经能够保持直立控制;在方向控制时,需要小车能够保持平衡和速度恒定;同样,在小车平衡控制时,也需要速度和方向控制已经达到平稳。这三个任务中保持小车平衡是关键。由于小车同时受到三种控制的影响,从小车平衡控制的角度来看,其它两个控制就成为干扰。因此对小车速度、方向的控制应该尽量保持平滑,以减少对平衡控制的干扰。以速度调节为例,需要通过改变车模平衡控制中小车倾角设定值,从而改变车模实际倾斜角度,达到速度控制的要求。为了避免影响车模平衡控制,这个车模倾角的改变需要非常缓慢的进行。其中平衡控制是系统的最基本要求,也是整个控制系统的难点。3.2 平衡控制原理控制小车平衡的直观经验来自人类日

20、常生活经验。如人类身体拥有丰富的感知器官,通过大脑调节便可以控制腰部及腿部肌肉保持人体的直立。而一般人通过简单训练就可以让一根直木棍在手指尖保持直立不倒。这需要两个条件:一个是托着木棍的手指可以自由移动;另一个是人的眼睛可以观察木棍的倾斜角度与倾斜趋势(角速度)。这两个条件缺一不可,实际上这就是控制系统中的负反馈机制。自平衡车的控制也是通过负反馈来实现的,与在指尖保持木棍直立比较则相对简单。由于小车只依靠两个车轮着地,车轮与地面会发生相对滚动使得小车倾斜。而小车上装载的姿态检测系统能够对小车的倾斜状况进行实时检测,通过控制器控制车轮转动,抵消在这个维度上的倾斜力矩便可以保持小车平衡,如图3.1

21、所示。图3.1 小车平衡原理3.3 平衡车数学模型为了准确控制车轮转动,保持小车始终稳定的直立平衡,需要对自平衡车进行运动学分析并建立其数学模型,从而更好的设计控制系统。为了更加直观的分析系统受力情况,下面将直立小车与单摆模型进行对比说明小车的受力情况。重力场中使用细线悬挂的重物经抽象化便形成理想化的单摆模型,两轮自平衡车可以看作一级倒立摆模型进行分析,如图3.2所示。图3.2 一级倒立摆模型示意图对普通单摆进行受力分析如图3.3所示。图3.3 单摆受力分析当物体离开平衡位置后便会受到重力与线的合作用力,驱使物体回复至平衡位置。这个力称为回复力,其大小为:F=mgsin (式3-1)在偏移角很

22、小情况下,回复力与偏移角之间的大小成正比,方向相反。在此回复力的作用下,单摆进行周期运动。由于空气阻力的存在,单摆最终会停止在平衡位置。空气阻尼力与单摆的速度成正比,方向相反。阻尼力越大,单摆会越快停止在平衡位置。可得出,单摆保持平衡的条件有两点:(1)受到与偏移相反的回复力作用;(2)受到与运动速度相反的阻尼力作用。如果没有阻尼力,单摆会在平衡位置左右晃动而无法停止。如果阻尼力过小(欠阻尼),单摆会在平衡位置震荡。阻尼力过大(过阻尼)则导致单摆恢复平衡时间加长。因而存在一个临界阻尼系数,使单摆稳定在平衡位置所需时间最短。对静止的一级倒立摆模型进行受力分析(不考虑车轮与地面的滚动摩擦力),如图

23、3.4所示。图3.4 静止受力分析由一级倒立摆模型静止时的受力分析可知,其回复力大小为:F=mgsin (式3-2)静止的倒立摆之所以不能像单摆一样可以稳定在平衡位置,是因为在偏离平衡位置时所受回复力与其偏移方向相同,而不是相反,因此不能回复至平衡位置,而是加速偏离垂直位置直至倾倒。经分析可知,要控制倒立摆使其能够与单摆一样能够回复至平衡位置并保持稳定有两种方案。一种是改变重力方向;另一种是在系统中增加另外一种力使合回复力与偏移方向相反。显然,只能通过第二种方法实现倒立摆的平衡,即在系统中额外增加一种力使合回复力与偏移方向相反。根据牛顿第一运动定律(即惯性定律),任何一个物体在不受外力或受平衡

24、力的作用时,总是保持静止状态或匀速直线运动状态,直到有作用在其上面的外力迫使其改变这种状态为止。牛顿运动定律只在惯性参考系中成立。在非惯性参考系中,由于惯性的存在,物体会受惯性力。通过控制倒立摆底部车轮,使其做加速运动。在此条件下再次分析倒立摆受力情况,如图3.5所示。图3.5 外力干扰下受力分析倒立摆之所以不能像单摆一样可以稳定在垂直位置,就是因为在它偏离平衡位置的时候,所受到的回复力与位移方向相同,而不是相反!因此,倒立摆便会加速偏离垂直位置,直到倒下。如何通过控制使得倒立摆能够像单摆一样,稳定在垂直位置呢?要达到这一目的,只有两个办法:一个是改变重力的方向;另一个是增加额外的受力,使得恢

25、复力与位移方向相反才行。显然能够做到的只有第二种方法。控制倒立摆底部车轮,使得它作加速运动。这样站在小车上(非惯性系,以车轮作为坐标原点)分析倒立摆受力,它就会受到额外的惯性力,该力与车轮的加速度方向相反,大小成正比。这样倒立摆所受到的回复力为: (式3-3)式中,由于很小,所以进行了线性化。假设负反馈控制是车轮加速度a与偏角成正比,比例为。如果比例g(g是重力加速度)那么回复力的方向便于位移方向相反了。此外,为了使得倒立摆能够尽快地在垂直位置稳定下来,还需要增加阻尼力。虽然存在着空气和摩擦力等阻尼力,相对阻尼力比较小。因此需要另外增加控制阻尼力。增加的阻尼力与偏角的速度成正比,方向相反。因此

26、,上式可变为: (式3-4)按照上面的控制方法,可把倒立摆模型变为单摆模型,能够稳定在垂直位置。因此,可得控制车轮加速度的控制算法: (式3-5)式中,为小车倾角;为角速度; 均为比例系数;两项相加后作为车轮加速度的控制量。只要保证在g,0条件下,可以使得小车像单摆一样维持在直立状态。总结控制小车直立稳定的条件如下:(1)能够精确测量小车倾角的大小和角加速度的大小;(2)可以控制车轮的加速度。3.4 PID控制原理首先给出一个典型的PID算法框图,如下图所示:图3.6 PID算法框图在这里我们先将此图简化为仅剩P控制部分的框图:比例P图3.7 P算法框图 比例调节的公式是:u(t) = Kp

27、* e(t),e(t) = r(t) c(t) (式3-6) 其中:r(t) 是设定值,就是你想让被控系统某个参数所要保持的状态值; c(t)是系统的这个参数的实际状态值。 比例调节的过程就是即时成比例地反应控制系统的偏差信号e(t),偏差一旦产生,通过 Kp * e(t) 产生控制作用以减小偏差。理想的情况是有多大的误差,通过这个调节作用之后,就能将误差消除。但实际情况并非都是那么理想,Kp小了,修正不到位,Kp大了就会出现矫枉过正的现象。 对于自平衡小车来说,要控制的这个参数就是小车的倾斜角度,就是想办法让这个小车停在你所设定的角度上,这样小车就能稳定平衡了。 这样我们就知道了,控制的作用

28、就是想让被控系统稳定在你所设定的某个值上。拿小车的平衡来说就是让小车的倾斜角度与其物理(就是小车不控制时,能够自然稳定)平衡角度一致,始终保持在这个倾斜状态。 对于有些结构比较好的小车,仅比例这一项,在没有大的扰动的情况下,的确就能稳定的控制小车平衡。但往往情况并非这么理想,所以还要用到积分项I或微分项D。那么实际会出现小车来回摆动,或者始终往某个方向倾斜,造成小车往一边跑,最后控制不住就倒地了。 先说说来回摆动的问题吧,来回摆动是不是就是小车有一定的倾斜转动角速度,角速度就是角度的微分。要不想让他摆动,就是控制这个角速度为0,这就不摆动了。那么,我们增加D项,就能达到这个目的,虽然不是绝对的

29、解决,但还是明显的改善了很多的。 下面说下始终往一边偏的问题,如果能不往一边偏,仅来回摆动,也就是这个角度一会大、一会小,一会正、一会负,经过积分,这个角度平均值几乎是0,如果往一边偏的话,这个平均值就是某个不为0的值了,这是我们加上I项就能克服这个问题了。 总结一下PID控制:对于角度环来说:P是消除角度的误差,I是消除角度累积的误差,D是消除角度变化率(角速度)的误差;同理,对于速度环来说:P是消除速度的误差,I是消除速度累积(位置)的误差,D是消除速度变化率(加速度)的误差。3.5 PWM调速原理对于电机的转速调整,我们是采用脉宽调制(PWM)办法,控制电机的时候,电源并非连续地向电机供

30、电,而是在一个特定的频率下以方波脉冲的形式提供电能。不同占空比的方波信号能对电机起到调速作用,这是因为电机实际上是一个大电感,它有阻碍输入电流和电压突变的能力,因此脉冲输入信号被平均分配到作用时间上,这样,改变在始能端PE2和PD5上输入方波的占空比就能改变加在电机两端的电压大小,从而改变了转速。此电路中用微处理机来实现脉宽调制,通常的方法有两种:(1)用软件方式来实现,即通过执行软件延时循环程序交替改变端口某个二进制位输出逻辑状态来产生脉宽调制信号,设置不同的延时时间得到不同的占空比。(2)硬件实验自动产生PWM信号,不占用CPU处理的时间。第4章 硬件设计4.1 电路原理图图4.1 电路原

31、理图4.2 主控芯片的电路设计(stm32)ARM公司的高性能”Cortex-M3”内核1.25DMipsMHz,而ARM7TDMI只有0.95DMipsMHz1s的双12位ADC,4兆位秒的UART,18兆位秒的SPI,18MHz的IO翻转速度一流的外设,低功耗,最大的集成度,简单的结构和易用的工具在72MHz时消耗36mA(所有外设处于工作状态),待机时下降到2A复位电路、低电压检测、调压器、精确的RC振荡器等图4.2 STM32引脚4.3 电机驱动的电路设计(TB6612FNG)图4.3 TB6612FNG引脚STBY口接单片机的IO口清零电机全部停止,置1则通过AIN1 AIN2,BI

32、N1,BIN2 来控制正反转,VM接12V以内电源,VCC接5V电源,GND接地,PWMA和PWMB分别接接单片机的PWM口,A01和AO2接电机1的两个脚。BO1和BO2接电机2的两个脚。表4-1 电机1真值表 AIN1 0 0 1 AIN2 0 1 0 停止正转反转表4-2 电机2真值表 BIN1 0 0 1 BIN2 0 1 0 停止正转反转4.4 陀螺仪的电路设计MPU-60X0是全球首例9轴运动处理传感器。它集成了3轴MEMS陀螺仪,3轴MEMS加速度计,以及一个可扩展的数字运动处理器DMP,可用I2C接口连接一个第三方的数字传感器。扩展之后就可以通过其I2C或SPI接口输出一个9轴

33、的信号。MPU-60X0也可以通过其I2C接口连接非惯性的数字传感器。图4.4 Mpu6050引脚接线方法:如图4.4所示,VCC接5V电源,GND接地,SDA是数据线,接stm32单片机的PB9引脚,SCL是时钟线,接stm32单片机的PB8引脚。4.5 编码器电路设计图4.5为编码器结构示意图,中间为带有光栅的码盘,光通过光栅,接收管接收到高电平,没通过,接收到低电平。电机旋转一圈,码盘上有多少光栅,接受管就会接收多少个高电平。图4.5 编码器结构原理图由于光电管器件直接输出数字脉冲信号,因此可以直接将这些脉冲信号连接到单片机的计数器端口。每个光电管输出两个脉冲信号,它们波形相同,只是相位

34、相差90。如果电机正转,第二个脉冲落后90;如果电机反转,第二个脉冲超前90。可以通过这个关系判断电机是否正反转。在实际电路中,只检测了一路脉冲信号,通过它的频率测量得到电机的转速。电机的转向是通过施加在电机上的电压正负进行判断的。虽然由于车模惯性存在,可能在电机转速低的情况下,电机的转动方向与施加在其上的电压正负有可能不同,从而造成电机转速测量不准。由于比赛时竞速比赛,一般情况下电机都是运行在高速状态下,电机的转向与电压的方向是一致的。通过实验验证这个方法可以有效判断电机的转动方向并进行速度控制。第5章 平衡车结构设计5.1 元件清单及成本表5-1 元件清单表序号元器件数量预算合计1轮胎22

35、*9.5192带编码器电机22*551103电机座22*5104雅克力板33*2.126.365焊接电路板15.85.86stm32f103c8芯片119.619.67电机驱动模块118.7218.728陀螺仪18.88.89降压模块22*12.52510蓝牙通讯模块118.5618.5611铜柱若干1012螺栓螺母若干513开关11114排针若干215排母若干216导线若干517烧录模块1222218电池113013019串口11010合计428.84元5.2 三维建模平衡车的结构比较简单,目前我们已经完成了对小车结构的设计,用solidwoks对其进行三维建模。主要零件图如下: 图5.1

36、轮胎 图5.2 电机座 图5.3 亚克力板 图5.4 带编码器电机其装配图如下:图5.5 小车装配图第6章 软件设计6.1 程序框图开始电机速度检测PWM输出PID控制算法电机速度与姿态角度、角速度关系系统程序初始化传感器数据融合、滤波角速度检测姿态角检测串口中断中断返回计算电机输出量解析数据获得控制量图6.1 程序框图运行程序时,首先系统程序初始化,接着是检测过程,分别对姿态角和角速度进行检测。然后对所测数据进行融合与滤波。接着找出电机速度与姿态角度以及角速度的关系对电机的速度进行检测。然后通过PID控制,用PWM进行输出对速度进行调整。最后返回对姿态角和角速度检测的位置进入下一个循环。6.

37、2 源代码见附录1第7章 实验测试7.1 keil软件简介Keil是德国知名软件公司Keil(现已并入ARM 公司)开发的微控制器软件开发平台,是目前ARM内核单片机开发的主流工具。Keil提供了包括C编译器、宏汇编、连接器、库管理和一个功能强大的仿真调试器在内的完整开发方案,通过一个集成开发环境(uVision)将这些功能组合在一起。uVision当前最高版本是uVision3,它的界面和常用的微软VC+的界面相似,界面友好,易学易用,在调试程序,软件仿真方面也有很强大的功能。因此很多开发ARM应用的工程师,都对它十分喜欢。MDK-ARM软件为基于Cortex-M、Cortex-R4、ARM

38、7、ARM9处理器设备提供了一个完整的开发环境。 MDK-ARM专为微控制器应用而设计,不仅易学易用,而且功能强大,能够满足大多数苛刻的嵌入式应用。MDK-ARM有四个可用版本,分别是MDK-Lite、MDK-Basic、MDK-Standard、MDK-Professional。所有版本均提供一个完善的C / C+开发环境,其中MDK-Professional还包含大量的中间库。7.2 测试过程及结果本次项目整个过程基本都围绕着MDK-ARM软件进行着不断的测试与调试,在最初的阶段我们通过对陀螺仪和电机的初步调试实现了电机的正反转。接着便是小车的自平衡过程,一开始由于我们没有使用卡尔曼滤波计

39、算倾角所以导致在测试时小车本体抖动十分严重,完全达不到测试要求。通过卡尔曼滤波的计算后小车的抖动明显减小,但是仍不能达到项目要求。然后我们通过改变PID的控制,对其Kp和Kd进行不断的更改和调试,使小车能够基本地保持平稳状态。通过进一步的优化,小车最终能够平稳站立且基本没有抖动,甚至在有外界因素的干扰下也能自动回复其平衡状态。最后,我们通过无线蓝牙通讯技术对小车进行了远程控制,小车可以在控制下实现前进后退与刹车等功能。73 最终实物图图7.2 最终实物图根据各个零件的尺寸要求,加工各个零件,根据三维建模的装配体,我们将小车成功组装;另外还根据电路原理图,将各个电路模块正确连接。我们竟可能的降低

40、小车的重心,最终完成小车的组装,及电路的连接,最终的实物图如图7.2 所示。第8章 市场前景调查分析两轮自平衡小车是一个集动态决策和规划、环境感知、行为控制和执行等多种功能于一体的综合复杂系统,其关键是在解决自平衡的同时,还能够适应在各种环境下的控制任务。通过运用外速度传感器、角速度传感器等,可以实现小车的平衡自主前进。近十年来,两轮自平衡机器人引起同外许多研究机构和机器人爱好者极大关注,各种基于不同目的、不同设计方案和控制策略的自平衡系统相继而生。在这方面国外的研究比较超前,研制出了一些具有代表性的机器人。目前市场上已经出现了两轮自平衡小车,而且他的制造技术也越来越成熟,我们可以在广场,公园

41、,机场,展览馆、体育馆都可以看见,他越来越被人们所青睐。 之所以会如此受青睐首先,他的形体比较小,占用的空间小,特别适合在交通拥挤的城市。其次,他的制造技术也趋于成熟,制造成本不是很高,可以实现批量生产。最后,他有极其广阔的市场,开发价值特别大。结论本设计主要研究两轮自平衡小车的设计与实现。通过相应硬件与软件的设计,实现了两轮自平衡小车的动态平衡与运动控制。系统硬件结构以stm32为控制核心,采用mpu6050构成了姿态检测系统,通过电机驱动模块及旋转编码器实现了直流电机的闭环调速,最终实现了两轮自平衡车的姿态检测与平衡控制。本设计的控制策略采用PID控制算法。通过对小车的运动建模,构建了小车

42、运动控制的PD控制算法,并对PID参数进行了整定,使小车能够稳定地平衡。另外,我们还实现了蓝牙无线通讯,但是由于电机的缘故小车还不能完全实现前进、后退。后期我们将继续努力,对其完善,最终实现小车的蓝牙遥控转弯,以及一些复杂的动作。心得体会本次课设我们拿到的题目是了基于stm32控制的二轮平衡小车,由于之前我们对这方面的知识了解的比较少,许多方面对于我们来讲都是极大的挑战。对我们而言,基本上所有的知识在这之前都没接触过,这不仅给了我们对智能控制领域和自平衡领域有了一次更深层次的学习的机会,也是对我们之前学的知识的总结。 刚刚拿到这个题目的时候,我们束手无策,不知道从哪里开始但是,经过和老师已经同

43、学们的探讨,在电子开发网和各大技术论坛上和别人交流时,慢慢有了思路。基本上前期我们处于探索阶段,学STM32单片机、C语言。在进行具体的电路设计和程序设计的时候,我发现理论到实践的过程确实有相当的难度,这时候也是我们进度最慢的时候,但是厚积薄发,只要提前做好准备,并善于学习,勤于学习,没有什么事情是很困难的。在项目进行过程中,我们小组明确分工,充分发挥组内成员的优势,协同工作。最终顺利的达到我们想要的结果。这次课设对于我们来讲,意义是非深刻的,他不仅是对我们之前所学知识的总结,而且对我今后做的每一件有意义的事都会有很大的帮助和指导意义,也让我们明白实践理论相结合的重要性总而言之,我们是最大的受

44、益者。致谢 首先感谢的是学院,正是学院有心提供充足的物力财力大力鼓励咱们大家设计创新才有了我们满意的大丰收。然后感谢每一位老师和助教的悉心指导,让我们一步步地攻破了所有难点完成了本次项目。最后感谢我的每一位组员,正是因为咱们分工明确、互帮互助、坚持不懈才有了最后的成功。参考文献霍晓丽. 刘云明.单片机原理与应用(C语言版),北京:清华大学出版社,2012.12.周兴妮. 书名M. 西安:西安电子科技大学出版社,2012.12. 3秦永元,张洪钺,汪叔华.卡尔曼滤波与组合导航原理M.西安:西北工业大学出版社,1998.4 薛涛.单片机与嵌入式系统开发方法M.北京:清华大学出版社,2009.10.

45、5 谭浩强.C程序设计M.北京:清华大学出版社,20056 周丰,王南山,陈卉.C语言教程M.武汉:华中科技大学出版社,2008.7于庆广,刘葵,王冲等.光电编码器选型及同步电机转速和转子位置测量J.电气传动,2006.附录1 源代码main.c#include stm32f10x_i2c.h#include SysTick.h#include pwm.h#include I2C_MPU6050.h#include usart.h#include Angle_calculate.hextern int int_PWM;int main(void) SystemInit(); /系统初始化 Sy

46、sTick_Init();/系统滴答时钟初始化 TIM3_Config(int_PWM,int_PWM); / I2C_MPU6050_Init();/ InitMPU6050();/ GPIO_Config();/ uart_init(9600);/串口初始化 while (1) Angle_calculate.c#include Angle_calculate.h#include I2C_MPU6050.h#include math.h#include SysTick.hvoid Kalman_Filter(float Accel,float Gyro); float x_a; /x轴的角

47、加速度 float y_a; /y轴的角加速度 float z_a; /z轴的角加速度 float x; float y; float z; float AngleY_a; /由原始数据计算得到的角度 float Gyro_x; /绕x轴的角速度 float Angle; /小车最终倾斜角度 float PWM; /输出PWM值 Int int_PWM;/*us延时函数*/void Delay_us(uint32_t xus)uint8_t i;while(xus-)i=7;while(i-);/*ms延时函数*/void Delay_ms(uint32_t xms)while(xms-)De

48、lay_us(1000);/*-角度计算-*/void Angle_calculate (void) x_a = GetData(ACCEL_XOUT_H); y_a = GetData(ACCEL_YOUT_H); z_a = GetData(ACCEL_ZOUT_H); Gyro_x = GetData(GYRO_XOUT_H);if(y_a 16384)y=y_a /16384;else y=1-(y_a -49152)/16384; if(z_a32764)z=(z_a-1600)/16384;elsez=(z_a-49152)/16384; AngleY_a=(atan(y/z)*5

49、7.3;/*-角度正负号确定-*/if(y_a 32764) AngleY_a=-AngleY_a;/*-角速度计算-*/if(Gyro_x32768)Gyro_x=-(65535-Gyro_x)/16.4;Kalman_Filter(AngleY_a,Gyro_x); / 卡尔曼滤波计算倾角/*-卡尔曼参数-*/float Q_angle=0.001;/0.001 float Q_gyro=0.003;/0.03float R_angle=0.5;/0.5float dt=0.02;/dt 为kalman滤波采样时间char C_0 = 1;float Q_bias, Angle_err;f

50、loat PCt_0, PCt_1, E;float K_0, K_1, t_0, t_1;float Pdot4 =0,0,0,0;float PP22 = 1, 0 , 0, 1 ;/*- 卡尔曼函数-*/void Kalman_Filter(float Accel,float Gyro)Angle+=(Gyro - Q_bias) * dt; /先验估算Pdot0=Q_angle - PP01 - PP10; /先验估计误差协方差的微分Pdot1=- PP11;Pdot2=- PP11;Pdot3=Q_gyro;PP00 += Pdot0 * dt; / 先验估计误差协方差的积分PP01

51、 += Pdot1 * dt; /先验估计误差协方差 PP10 += Pdot2 * dt;PP11 += Pdot3 * dt;Angle_err = Accel - Angle;/先验估计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 * t_0; / 后验估计误差协方差PP01 -= K_0 * t_1;PP10 -= K_1 * t_0;PP11 -= K_1 *

52、 t_1;Angle+= K_0 * Angle_err; /后验估计Q_bias += K_1 * Angle_err; /后验估计Gyro_x = Gyro - Q_bias; /输出值的微分=角速度/*-电机PID算法-*/static float Kp=800;static float Kd =100; /PID参数void PWM_calculate() PWM=1000*(Angle/90)*Kp)+Kd*Gyro_x;int_PWM=(int)PWM;/转化为整形/*- 电机转速控制-*/void speed_control(void) if(int_PWM0) GPIO_Res

53、etBits(GPIOA,GPIO_Pin_5); GPIO_SetBits(GPIOA,GPIO_Pin_2);GPIO_ResetBits(GPIOA,GPIO_Pin_3); GPIO_SetBits(GPIOA,GPIO_Pin_4);elseGPIO_ResetBits(GPIOA,GPIO_Pin_2); GPIO_SetBits(GPIOA,GPIO_Pin_5);GPIO_ResetBits(GPIOA,GPIO_Pin_4); GPIO_SetBits(GPIOA,GPIO_Pin_3);if (int_PWM65535) int_PWM=56000; /设置极限值TIM3_

54、Config(int_PWM,int_PWM);usart2.c/蓝牙控制前进后退#include stm32f10x.h#include usart2.hint fputc(int ch, FILE *f)/*-将printf内容发往串口- */ USART_SendData(USART2, (unsigned char) ch);while (!(USART2-SR & USART_FLAG_TXE); return (ch);extern u8 Flag_Qian,Flag_Hou,Flag_Left,Flag_Right;void usart2_init(void)GPIO_InitTypeDef GPIO_InitStructure;USART_InitTypeDef USART_InitStructure;NVIC_InitTypeDef NVIC_InitStructure;/使能USART2模块的时钟,使能USART2对应引脚端口PA的时钟RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2,ENABLE);RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);/配置UART2的发

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

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!