直立智能车(平衡车)毕业论文
直立智能车设计
摘 要
随着微电子控制技术的发展和人们对出行工具的日益增长的需求,一款简单易操作、容易携带、清洁无污染的两轮自平衡车开始走进大众的视野,但这种小型代步工具仍可能存在一定的不稳定性和安全隐患,本次课题主要通过在实验室制作一款简易的自平衡小车,通过手机蓝牙控制,以此模拟真实的使用者驾驶体验,在模拟实验中提升平衡车的稳定性,解决可能出现的实际问题。最终通过改造自平衡小车系统,实现基本的状态控制,并为以后其用到其它复杂的环境中提供一些实验参考。
本次毕业设计所做的直立智能车可以在不需要人为干预的情况下通过PID等算法保持长时间的平衡状态,同时可以通过相应的蓝牙控制APP进行控制,控制运动状态包括前进、后退、左转、右转和停止,带有进行转弯提示的蜂鸣器和进行运动状态指示的LED灯。
关键词:平衡车;蓝牙;PID;STM32
Vertical intelligent vehicle design
ABSTRACT
With the development of microelectronics control technology and people's growing demand for travel tools, a simple and easy to operate, easy to carry, clean pollution-freetwo wheels of the balance of the car began to come into the mind of the public, but this small transport is there may be some instability and potential safety hazard, this topic mainly by making a simple balance car by mobile phone bluetooth control in thelaboratory, in order to simulate real user driving experience, enhance the stability of thebalance of the car in simulation experiment, solving actual problems that may occur
finally, the basic state control is realized by reforming the self-balancing trolley system, and some experimental references are provided for its use in other complex environments.
This upright smart car of graduate design can be in the case of don't need human intervention by PID algorithm to maintain equilibrium state for a long period of time, at the same time can be controlled by the corresponding bluetooth APP procedure control,including forward, backward, left, right and stop, with the buzzer that indicates a turn and indicator lights indicating the status.
Key words:Balance car;Bluetooth;PID;STM32
目 录
1 绪论..................................................... 1
1.1 课题背景................................................ 1
1.2 国内外研究情况.......................................... 1
1.3 研究意义................................................ 1
2 系统总体方案设计......................................... 3
2.1 设计主要工作及基本要求................................... 3
2.2 方案论证与选择.......................................... 3
2.3 系统框图分析............................................ 5
2.4 系统总体方案设计........................................ 5
3 系统的硬件设计及系统流程................................ 7
3.1 单片机控制电路.......................................... 7
3.2 电源模块电路............................................ 8
3.3 电机驱动模块电路........................................ 8
3.4 其它外设................................................ 9
4 系统的软件设计及系统流程............................... 13
4.1 下位机程序............................................. 13
4.2 上位机程序............................................. 16
5 开发中遇到的问题和成果图............................... 19
5.1 硬件上的问题和解决方法.................................. 19
5.2 下位机开发中的问题和解决方法............................ 20
5.3 上位机开发中的问题和解决方法............................ 21
6 结论.................................................... 23
7 总结.................................................... 24
参考文献................................................... 25
致 谢................................................... 26
附 录................................................... 27
1 绪论
随着我国轨道交通和道路交通建设的越来越完善,人们可供选择的出行方式更加多样化,作为一款新型代步工具的平衡车开始走进人们的视野。相较于其它交通工具,直立平衡车体积小巧、绿色环保、响应迅速、运动灵活,逐渐受到人们的青睐。除了作为交通工具,直立智能车上的控制算法和结构同样可以移植到其它类型的机器人身上,作为新型机器人的驱动机构,可以在更加狭小空的间里远程执行特殊任务。设计以倒立摆原理为核心,设计出一款可以长时间保持平衡的迷你直立智能车,通过模拟用户真实驾驶体验,为今后载人平衡车的发展提供一些借鉴意义。
1.1 课题背景
1.2 国内外研究情况
1986年,日本东京电信大学自动化系的山藤一雄教授设计了一个两轮车模型,为了保证重心在上面,将芯片和电机放在模型上面,通过陀螺仪进行姿态检测和电机控制,制造出最简单的直立智能车模型。2002年,美国赛格威公司推出了第一款真正意义上可以自主平衡的直立两轮代步车。近年来,随着传感器技术和能源动力技术的发展,控制理论的成熟,美国、日本、瑞士等国的平衡车研究得到了迅速发展,并且迅速推出了商业化产品。
国内方面,得益于技术和人才引进以及响应的资金支持,我国的智能车虽然起步较晚,但两轮智能车方面的研究也取得了一定成果。高校方面,西安电子科技大学研究出来可以自平衡的两轮机器人[2];商业方面,中国的纳恩博平衡车公司在2015年收购了知名品牌Segway公司。相信随着国家对高新技术的大力支持和群众对新鲜事物接受能力的提升,作为新兴科技产物之一的平衡车在我国一定可以得到快速良性的发展。
1.3 研究意义
智能车控制算法方面的研究内容,不仅仅是用在智能车上面,同样可以广泛的用在其它机器人控制或无人控制领域;智能车的使用大大减少了燃油的使用,对提升环境质量大有好处;其体积小巧,携带方便,可以有效较少大城市里交通阻塞拥挤的问题,方便市民出行;在大型商场、餐厅、地下车库或者某些大型赛事的安保现场,其响应迅速的特点得到了最大应用。
2 系统总体方案设计
2.1 设计主要工作及基本要求
本次课程设计的主要任务是通过设计软硬件以及相应蓝牙控制APK程序,远程控制两轮小车实现各种自平衡运动,运动状态包括前进、后退、左转、右转,同时带有进行转弯提示的蜂鸣器和进行运动状态指示的LED灯。
2.2 方案论证与选择
- 方案一: 卡尔曼滤波,可以在有大量干扰的情况下,从已知测量方差的存在噪声的数据中预测估算出系统的最优状态[3],利用卡尔曼滤波可以从MPU6050的原始数据中得到一组接近真值、较为准确的智能车姿态数据。
- 方案二: 经典数字滤波器,主要包括低通、高通、带通滤波器,互补滤波器属于带通滤波器的变种。计算角度时,一般通过角加速度和角速度两种方式计算得到角度,因为两种角度的得出方式不同,在融合原始数据时需要一个融合系数[4]。在将两种方式得到的角度进行互补滤波后即可得到一个反应迅速、角度跟踪较为准确的姿态数据。
2.3 系统框图分析
2.4 系统总体方案设计
- 芯片选型方面
主芯片:因为和MPU6050通信过程中要移植其固件库,而库函数内容较多,单片机的ROM,考虑到以后可能要加的外设,单片机的引脚数,故放弃了类似51单片机的小单片机;考虑开发周期,使用ARM架构的单片机;本智能车电路板虽然用镍铬电池供电,但只是用来实验模拟,2000mAH的镍铬电池完全够用,放弃了一般用在低功耗或超低功耗的场合的MSP430;而随着智能互联终端成为国内外研究的热点后,基于STM32的应用方案也越来越成熟[8]。所以最终选用市场上较为主流的STM32单片机。
驱动芯片:选用的是驱动电流达43A的大电流集成芯片BTN7960,内部集成的驱动Ic具有逻辑电平输入功能,因此主芯片可以直接给驱动芯片PWM信号即可控制电机转动,不过因为是半桥驱动芯片,所以需要两片芯片控制一个电机。实测过程中,电机全速运转消耗电流不超过500mA,驱动能力完全够用,并且其控制简单,电路成熟,性能稳定[9],所以选择BTN7960驱动芯片。
- 电源方面
7.2V给智能车电路板供电后,被两个稳压电路转换为两种电压,其中两颗LDO分别是将7.2V降到5V的LM2596和将5V降到3.3V的AMS117_3.3。LM2596是TI生产的可输出3A电流稳压降压芯片,输入电压可达37V,外围器件较少,其输出的5V电压给智能车电路板上的蜂鸣器、蓝牙、MPU6050和其它一些外设供电;AMS117_3.3是一种正向低压降稳压器,输出电流为1A,智能车电路板用的是3.3V固定输出版本,精度为1%,输出电压给主芯片STM32F103、74lvc245、霍尔编码器和LED灯等的其它外设。
- 下载方面
STM32的下载方式主要有两种,ISP下载(串口下载)、JLINK下载和STLINK下载。串口下载不可以在线仿真,会对后期的软硬件调试造成不便,故舍弃;JLINK下载方式和STLINK下载方式都支持仿真调试且支持市面上的大部分ARM内核芯片,不同的是主流的JLINK下载工具有20个引脚,而STLINK只需4个引脚,出于对智能车电路板体积不易过大和要安装调试方便的考虑,选择使用STLINK下载工具对主芯片进行程序下载和后期仿真调试。
- 通信方面
在早期物联网应用中,出于对嵌入式系统安全的考虑,设备之间的连接大多采用有线方式,但随着技术的发展和设备安装位置的增多,无线传输被应用的更加广泛,其中蓝牙模块化繁为简,只需一个接受模块和一个发送模块即可实现数据无线透传[10],因此智能车通过一个蓝牙模块和手机app进行通信。
3 系统的硬件设计及系统流程
3.1 单片机控制电路
晶振电路:智能车电路板采用的是高速晶振电路,晶振起振为单片机提供时钟信号流。
复位电路:采用自动复位电路,上电后单片机自动复位,复位之后单片机程序重新运行。
启动方式设置电路:通过配置STM32的BOOT0和BOOT1引脚设置单片机的启动模式,即从哪个区域启动单片机,本实验板主芯片从主闪存存储器区域启动。
3.2 电源模块电路
图3-2 电源模块电路
3.3 电机驱动模块电路
因为主芯片引脚驱动电流太小,且直接控制驱动芯片容易被反相电流损坏引脚,所以在主芯片和驱动芯片之间加了一个三态输出的八路总线收发器74LVC245,进行驱动隔离,如下图。
图3-3 74LVC245电路
主芯片输出的PWM信号在经过隔离芯片后,到达BTN7960的逻辑信号输入引脚,进行驱动芯片输出电压的调整,通过给两个驱动芯片发送不同的PWM信号,保证电机之间出现规定的电压差,即可控制电机进行不同程度的正反转,如下图所示为驱动智能车一个电机的电路图。为了防止芯片损坏或其它异常情况导致电路输出一个特别大的电压,进而烧毁电机,在电机两端加了一个压敏电阻,当电机间电压超过12V时,压敏电阻吸收多余的电流,进行电压钳位保证电机不被烧坏。
图3-4 电机驱动电路
3.4 其它外设
- 蜂鸣器:使用的5V有源蜂鸣器,通电就响,控制方便。如图,蜂鸣器正端接5V,负极接一个NPN三极管,三极管基极通过一个电阻接到主芯片引脚上,当引脚置为高电平时,三极管导通,蜂鸣器工作,反之,蜂鸣器不工作。
图3-5 蜂鸣器电路
- MPU6050模块接口:MPU6050没有单独做电路,直接用的是GY-521三轴加速度电子陀螺仪,不过该模块并未添加任何多余的电路,单片机和其通信得到的就是MPU6050的原始数据。单片机和MPU6050通过I2C方式进行通信,如下图所示,四根接口线分别为电源、地、数据线和时钟线。
图3-6 MPU6050接口
- LED指示灯:如下图所示,为智能车电路板上的前后左右四个方向上的指示灯,分布在电路板四个角上,1k电阻起限流作用,如果LED灯不太亮,可以替换为小阻值电阻。
图3-7 LED指示灯电路
- 下载接口:如图所示,下载接口的四根线分别是给主芯片供电的电源和地,和单片机进行通信的SWCLK和SWDIO。
图3-8 下载电路
- 测速接口:电机测速采用的是霍尔编码器,可以将角位移转换为一串数字脉冲输出。当齿轮转过一圈编码器A相会输出固定的脉冲数,编码器B相输出转向,编码器AB相接到到单片机引脚上,单片机对信号进行捕获然后正交解码,通过M法,即计算固定时间内接收到的脉冲数可以换算出速度。如下图所示,四根接口线分别为编码器供电电源、地、编码器A相和B相。
图3-9 测速接口
- 蓝牙接口:蓝牙模块选用的是主从一体的HC05蓝牙串口模块,蓝牙参数、单片机串口参数和手机程序蓝牙接收参数都是9600bits/s、停止位1位、无校验位,单片机通过串口2和蓝牙模块进行通信,蓝牙将单片机指令以TTL电平发送到手机上,数据反相传输同样类似。如下图,蓝牙模块采用5V供电,模块RX引脚接TX2,TX引脚接RX2。
图3-10 蓝牙接口
- 避障接口:当光电传感器模块遇到障碍物时会输出一个高电平,将其输出引脚接到下图接口上,单片机检测到高电平,进行避障处理。
图3-11 避障接口
- 舵机控制接口:采用的9g舵机SG90属于模拟舵机,5V供电后,有PWM信号即可控制舵机转向。
图3-12 舵机控制接口
智能车电路板通过添加合适的电阻、电容、电感、二极管、保险丝等元器件,进行滤波、去耦、防大电流等操作,同时消除一些小概率干扰[13] 。同时在设计电路板过程中除了进行抗干扰方面的处理,在焊接元器件过程中也对焊接位置、焊接温度和焊接材料进行了严格把控[14],在根源上杜绝了电路板可能出现的安全隐患。
4 系统的软件设计及系统流程
4.1 下位机程序
程序中对STM32进行的主要操作:和MPU6050进行I2C通信获知当前姿态;通过PWM控制电机转动;检测当前电机转速;控制蜂鸣器和LED等的GPIO;软件看门狗;和蓝牙双向通信。
4.1.1 下位机程序流程图
中断内部的处理步骤参见下图中的读取倾角到驱动电机,蓝牙接收后的相应处理包括前进、后退、左转、右转、蜂鸣器提示和LED指示等。
4.1.2 算法介绍
Velocity=Encoder*CarSpeed.Kp+Encoder_Integral*CarSpeed.Ki;
Turn = -Turn_Target * Kp - gyro * Kd;
4.2 上位机程序
4.2.1 上位机程序流程图
4.2.2 上位机功能介绍
4.2.3 上位机使用说明
5 开发中遇到的问题和成果图
5.1 硬件上的问题和解决方法
- 由于驱动芯片是从其它电路板上吹下来的,导致第一次温度没控制好把芯片吹坏
- 手工焊接STM32F103C8T6时,引脚间间距只有0.5mm,把引脚焊短接;为了避免出现引脚间再因滚进锡球而短路,将主芯片用透明胶带粘起来
- 固定孔的直径设置成2.54mm,固定用的塑料螺柱买的是3mm的,只能用胶棒固定
- 指示灯的亮度偏暗,因为选用的限流电阻过大
- PID调参时,长时间的高频大幅抖动将芯片烧坏
- 蜂鸣器不太响,是因为上面的贴纸没有揭下来
- 先给主芯片供电,再给驱动芯片供电,否则供电主芯片初始化的时候容易出现轮子乱转的情况
下图是电路板PCB图,在Altium Designer软件中先画出原理图,再把原理图转换为PCB,通过把PCB中杂乱的元器件布局并进行电气连接后即为下图。
5.2 下位机开发中的问题和解决方法
- 蓝牙不能进行数据收发:蓝牙模块的默认波特率是115200bits/s,和单片机不一样,要用AT指令将其设置成一样
- 有时候接收不到MPU6050的外部中断:外部中断被其它中断打断了,将对应的外部中断的优先级放到第一位
- 小车完全倒地时还会瞎转:判断MPU6050倾角是否超出正负25度,超出后就不进行控制
- PID调节有直立环、速度环、转向环,调试时要直立环和速度环一起调,否则不能保持直立
- I2C地址的通信地址和MPU6050的某个引脚是否接地有关,默认悬空是0X68
- 速度发生迟滞:速度要限幅,否则当变量超调的时候容易出现速度降不下来或者升不上去的情况
- 小车总是向一个方向跑偏:程序上设置的机械中值和MPU6050的实际安装位置有差别。
- 在STM32cubeMX中uart2的tx引脚模式默认只有PP(复用推挽)一种,要改成OD(开漏)模式,可以直接在源程序里面改
- STM32cubemx HAL的硬件I2C有一个BUG,就是要把__HAL_RCC_I2C2_CLK_ENABLE()这句时钟初始化代码放到GPIO初始化之后。
- 修改STM32cubemxUSER生成的程序,内容要写在 “CODE BEGIN x”和“CODE END x”之间,否则下次再次生成后自己的程序会消失
下图为PCB电路图经过工厂加工并焊接上元器件的成品图,通电并将相应的线路连接正确后即可使用。
5.3 上位机开发中的问题和解决方法
- 无法添加背景图:listWidget添加背景图,必须先设置成透明
- 手机扫描不到蓝牙:Android 6.0以上设备扫描Ble设备前要开启位置权限
- 无法显示不规则图标:使用专门的图标按钮
- 兼容性不太好,初次打开软件时会出现android detected problems with API compatibility Android ,原因是手机系统升级到Android 9.0以后谷歌后台限制了开发者调用非官方公开API,这个问题因为手机系统更新导致出现的比较晚,尚未解决,但是点击确定后不影响使用
[1] 林枫,蔡延光.双轮自平衡车的双闭环式PID控制系统设计与实现[J].工业控制计算机,2017,30(06):73-75.
[2] 刘永鹏. 基于STM32的智能平衡车设计[J].科技经济导刊,2018,26(30):39.
[3] 刘二林,姜香菊.基于卡尔曼滤波的两轮自平衡车姿态检测[J].自动化与仪器仪表,2015(02):52-54.
[4] 夏国清,陈华珍,甄文劲.基于互补滤波的两轮机器人运动控制系统设计[J].自动化技术与应用,2018,37(10):72-78.
[5] 王耀辉,强天伟.PID控制原理简析[J].洁净与空调技术,2013(03):79-82.
[6] 严冬.基于PID控制算法的自主平衡小车的设计[J].科技视界,2018(33):14-15.
[7] 赵北庚.Windows系统下Qt图形界面集成开发环境搭建[J].科技经济导刊,2016(09):20.
[9] 杨明辉,孙猛猛,张玉炳等.BTN7960直流伺服电动机驱动板的设计[J].科技展望,2015,25(18):110.
[10] 曹树伟,杨雪.智能家居手机蓝牙开关控制电路设计与实现[J].赤峰学院学报(自然科学版),2019,35(01):25-27.
[11] 李帅男.基于STM32控制的双轮自平衡小车的设计[J]. 现代工业经济和信 化,2018,8(13):34-35.
[12] 王磊,宁欣.基于STM32的两轮自平衡小车控制系统设计[J].山东工业技术,2018(13):54.
[13] 凌林玉.印制电路板的抗干扰性设计[J].电子测试,2017(09):93-94.
[14] 阴涛.对PCB双面板手工焊接缺陷的探讨[J].科技创新与应用,2018(28):114-115.
[16] 袁鑫宏,王兴.基于MPU6050六轴传感器的平衡车姿态检测及控制方案[J].信息与电脑(理论版),2018(23):103-104.
[17] 赵良好,王澜,戴贤春等.搭建基于Qt的嵌入式开发平台[J].铁道通信信号,2018,54(02):37-40.
6 结论
7 总结
直立智能车(平衡车)毕业论文相关推荐
- 直立两轮平衡车核心代码
两轮平衡车相关算法 卡尔曼滤波函数 /************************************************************** 函数名称:float KalmanF ...
- [智能车]平衡车/直立车的入门经验(代码讲解)
做为第十六届智能车的FW,在半年的做车经历中把能踩的坑都踩了个遍.写这篇文章是为了留个纪念,也是为了帮新车友快速入门(可能完全0基础).我自己的经验也不足,所以可能会存在一些漏洞,还请大佬指正. 车模 ...
- 双轮载人平衡车设计完整教程之调校测试篇
双轮载人平衡车设计完整教程之调校测试篇 实验及路测结果 6.1 硬件测试 6.1.1车体与元件安装 车体采用的是精钢打造的船型包厢,车体机械部分的安装及重量分布,直接影响到小车的平衡性能.拿起螺丝准备 ...
- pid算法(平衡车+风力摆)
前段时间做了一辆平衡车,移植学长的代码,虽然做出来了,但是对于其中的pid控制还是不熟,这几天又重新研究了一下,现在来做一个总结,也供大家学习. 1.为什么要用pid 1.PID即:Proportio ...
- 测速源码_物联网之智能平衡车开发实战项目(附源码)
自从上次分享了"适合练手的10个前端实战项目(附源码)"之后,很多小伙伴就私信问有没有物联网相关的实战项目教程,那么今天就给大家分享一个物联网工作初期经常接触的项目:智能平衡车开发 ...
- 北邮智能车仿真培训(八)—— 两轮摄像头平衡车
前言 上一节:北邮智能车仿真培训(七)-- 使用c++编写程序 这一节实现两轮平衡车的仿真,工程还是在之前的基础上搭建的. 模型包含: 两个驱动轮.摄像头.陀螺仪.车身 搭建模型 一会将SmartCa ...
- 中科深谷开源智能两轮平衡车
中科深谷开源智能两轮平衡车 中科深谷开源智能平衡车,集多学科交叉融合为一,具备自平衡,行走控制,无线通讯和4G远程控制,视觉识别跟随等功能,接口丰富,扩展性强,可支持多台调度控制. 提示:以下是本篇文 ...
- 飞思卡尔直立车结构_生而不凡从容驾驭,出行新利器PIOWAY X1平衡车,平衡车中的越野车...
因为上班地铁口和公交都有个2公里左右,以前都是下了地铁/公交后,就会找辆共享单车过去,但后来道路改造,公司楼下共享单车不能停了.所以要去上班,总要走上那么一段,有时候出门晚了,总是差那么几分钟然后迟到 ...
- 直立平衡车PID控制策略以及数据平滑算法
在某些场合下,如果我们把一个突变的数据直接加到一个已经稳定的系统中,那么这个系统可能会很难再次达到稳定,这个时候就需要对突变的数据进行平滑处理,逐渐的加大.可能这样说不太容易理解,举个例子,最近在做一 ...
最新文章
- Martin Fowler对全世界程序员的建议
- C语言数组知识体系整理大学霸IT达人
- xml publisher 笔记
- 山东财经大学python试卷_山东财经大学微观经济学试卷1及答案
- Python基础教程:括号()[]{}详解
- 关闭微信朋友圈的第二天的感悟
- 基于图结构的图合成与差分隐私【LDPGen】
- 不可小视的贝叶斯(一)
- java map 教程_Map和Set
- BPT(Business Process Testing)
- Redis的使用场景及其介绍
- windows 10目标文件夹访问被拒绝(没有权限)或者(你需要来自XXX的权限才能对此文件夹进行更改 )
- 垂直距页边距5厘米_Word页面设置,含纸张大小与方向、页边距和文字方向
- 车载智能导航系统有没有采用嵌入式计算机,嵌入式车载导航系统的应用与研究...
- 网球爱好者小程序的设计与实现
- RestTemplate的用法
- rancher2.6部署k8s集群示例
- 关于idea配置方法注释问题——完美注释
- web html常用标签含义,WEB前端开发之HTML:常用标签知多少
- 富爸爸,穷爸爸读后的一些认知