直立智能车(平衡车)毕业论文[通俗易懂]

直立智能车(平衡车)毕业论文[通俗易懂]直立智能车设计摘要随着微电子控制技术的发展和人们对出行工具的日益增长的需求,一款简单易操作、容易携带、清洁无污染的两轮自平衡车开始走进大众的视野,但这种小型代步工具仍可能存在一定的不稳定性和安全隐患,本次课题主要通过在实验室制作一款简易的自平衡小车,通过手机蓝牙控制,以此模拟真实的使用者驾驶体验,在模拟实验中提升平衡车的稳定性,解决可能出现的实…

大家好,又见面了,我是你们的朋友全栈君。

直立智能车设计

摘  要

随着微电子控制技术的发展和人们对出行工具的日益增长的需求,一款简单易操作、容易携带、清洁无污染的两轮自平衡车开始走进大众的视野,但这种小型代步工具仍可能存在一定的不稳定性和安全隐患,本次课题主要通过在实验室制作一款简易的自平衡小车,通过手机蓝牙控制,以此模拟真实的使用者驾驶体验,在模拟实验中提升平衡车的稳定性,解决可能出现的实际问题。最终通过改造自平衡小车系统,实现基本的状态控制,并为以后其用到其它复杂的环境中提供一些实验参考。

本次毕业设计所做的直立智能车可以在不需要人为干预的情况下通过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 wordsBalance carBluetoothPIDSTM32

目  录

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],因此其发展水平甚至可以作为一个国家科技发展水平的参考依据。

1.2  国内外研究情况

1986年,日本东京电信大学自动化系的山藤一雄教授设计了一个两轮车模型,为了保证重心在上面,将芯片和电机放在模型上面,通过陀螺仪进行姿态检测和电机控制,制造出最简单的直立智能车模型。2002年,美国赛格威公司推出了第一款真正意义上可以自主平衡的直立两轮代步车。近年来,随着传感器技术和能源动力技术的发展,控制理论的成熟,美国、日本、瑞士等国的平衡车研究得到了迅速发展,并且迅速推出了商业化产品。

国内方面,得益于技术和人才引进以及响应的资金支持,我国的智能车虽然起步较晚,但两轮智能车方面的研究也取得了一定成果。高校方面,西安电子科技大学研究出来可以自平衡的两轮机器人[2];商业方面,中国的纳恩博平衡车公司在2015年收购了知名品牌Segway公司。相信随着国家对高新技术的大力支持和群众对新鲜事物接受能力的提升,作为新兴科技产物之一的平衡车在我国一定可以得到快速良性的发展。

1.3  研究意义

智能车控制算法方面的研究内容,不仅仅是用在智能车上面,同样可以广泛的用在其它机器人控制或无人控制领域;智能车的使用大大减少了燃油的使用,对提升环境质量大有好处;其体积小巧,携带方便,可以有效较少大城市里交通阻塞拥挤的问题,方便市民出行;在大型商场、餐厅、地下车库或者某些大型赛事的安保现场,其响应迅速的特点得到了最大应用。

2  系统总体方案设计

2.1  设计主要工作及基本要求

本次课程设计的主要任务是通过设计软硬件以及相应蓝牙控制APK程序,远程控制两轮小车实现各种自平衡运动,运动状态包括前进、后退、左转、右转,同时带有进行转弯提示的蜂鸣器和进行运动状态指示的LED灯。

主要工作包括:主芯片、驱动芯片、稳压芯片、蜂鸣器以及其它元器件的选型;原理图PCB的绘制;元器件检测和焊接;手机APP的编写;蓝牙通信调试;编码器测速算法编写; 滤波算法编写;串级PID算法编写及相应参数调试;状态指示灯和蜂鸣器等其它外设的程序调用;直立车组装和整体调试。

  基本要求:

  1. 直立智能车可以保持长时间的自平衡
  2. 手机软件可以和智能车进行双向通信
  3. 直立智能车可以前进、后退、左转、右转、停车
  4. 状态变化时有蜂鸣器提示和LED灯提示

2.2  方案论证与选择

  1.   关于滤波算法
  1. 方案一: 卡尔曼滤波,可以在有大量干扰的情况下,从已知测量方差的存在噪声的数据中预测估算出系统的最优状态[3],利用卡尔曼滤波可以从MPU6050的原始数据中得到一组接近真值、较为准确的智能车姿态数据。
  2. 方案二: 经典数字滤波器,主要包括低通、高通、带通滤波器,互补滤波器属于带通滤波器的变种。计算角度时,一般通过角加速度和角速度两种方式计算得到角度,因为两种角度的得出方式不同,在融合原始数据时需要一个融合系数[4]。在将两种方式得到的角度进行互补滤波后即可得到一个反应迅速、角度跟踪较为准确的姿态数据。

在进行两种方案的对比选择中,发现MPU6050芯片内部自带运动数据处理运算单元(DMP),通过DMP可以直接输出芯片的姿态角,包括俯仰角、偏航角和滚转角,而俯仰角即芯片所在平面与水平面的夹角,也就是上文提到的角度值。这样,通过使用MPU6050的DMP既可以得到一个较为准确的角度值,又可以减轻微处理器的运算负担,但为了使最后的数据更接近真值,在速度控制上仍然使用了低通滤波算法。最后采用的方案是在方案二的基础上调用了MPU6050的DMP,虽然程序上要移植大量的MPU6050的固件库,但数据更加准确。

  1. 关于控制算法

控制算法采用的是久经工业现场考验的PID算法[5],其控制算法较为简单但控制性能比较可靠稳定、鲁棒性较强、参数整定的方案较为成熟并且无需建立数学模型,因此为了实现智能车的自主平衡,控制算法采用的是PID算法,涉及到直立PID、速度PID和转向PID[6]。

  1. 关于测速算法
  1. 方案一:位置差分法(即M法),测量规定时间内齿轮转过的角度值
  2. 方案二:定角测时法(即T法),测量齿轮转过固定角度所用的时间

M法的程序编写简单,虽然测量低速脉冲时可能会有一些误差,但是测量高速时平稳性和精度都较高;T法一般是测量两个脉冲之间的时间间隔确定被测速度,适合测量低速情况,但车轮转一圈会产生几十上百个脉冲,使用T法不太方便,采用方案一。

  1. 关于下位机开发工具
  1. 方案一:使用德国Keil公司的Keil MDK-ARM
  2. 方案二:使用IAR Systems的IAR Embedded Workbench

KEIL和IAR都是针对各种嵌入式处理器的软件开发工具,主要用来编译程序。两者相比KEIL不支持层叠文件夹,而IAR不仅支持层叠,而且编译器高度优化,即编译速度要比KEIL快,但是IAR生成的工程文件用其它版本IAR打开会出现一些错误,即存在版本不兼容问题,而KEIL不存在这种问题,考虑到下位机程序以后迭代过程中会出现版本间移植的情况,并且STM32 CubeMX软件的使用者大多数使用MDK-ARM-V5,学习资料较为丰富,因此选用方案一。

  1. 关于库函数
  1. 方案一:使用标准库函数开发
  2. 方案二:使用hal库函数开发

意法半导体集团(ST)为开发者提供的开发库除了上面两种,还有LL库,但因为目前支持的芯片类型太少而舍弃。标准库较hal库出现的更早,两者互不兼容但结构和接口调用方式都类似;虽然标准库使用者更多,但HAL(Hardware Abstraction Layer)面向硬件抽象层,搭配ST公司新推的STM32 CubeMX图像化代码编辑生成软件,可以很大程度的方便开发者,实现了最大跨度的不同产品间的可移植性,并且带有一套用户友好的API函数接口。虽然初期阶段,HAL仍然存在一些小问题,但出于渴望学习新工具新技术的探索精神,智能车所有的下位机程序开发都是基于hal库函数。

  1. 关于上位机开发工具
  1. 方案一:使用Qt Company公司的Qt Creator
  2. 方案二:使用谷歌的Android Studio

Qt Creator相对于比较主流的集成开发工具Android Studio,Qt Creator显得比较小众,而且在一些复杂的操作上Qt Creator可能存在不稳定性,但是对于本次课程设计而言并没有涉及到复杂的操作,一款轻量级、易上手的软件开发工具足够实现功能,而且Qt Creator可以跨平台,即开发出的软件稍加改动即可运行在Windows、Mac OS、Android甚至Linux等平台上[7],减轻了以后上位机移植的工作量,故选用方案一。

2.3 系统框图分析

系统框图如下图所示,本智能车电路板采用7.2V镍铬电池,通过电压转换模块中的2个元器件将7.2V转换为2种电压,分别给电路板上的其它芯片供电;主芯片和姿态检测传感器MPU6050进行I2C通信,获得当前的智能车倾角,为下一步的调整智能车角度提供数据支持;主芯片通过对编码器数据的正交解码实时检测当前小车真实速度,为控制智能车速度提供数据支持;通过下载接口向主芯片下载程序;主芯片和蓝牙模块进行双向通信,蓝牙模块和手机程序双向通信,进行数据交换,主芯片接收到手机指令后通过PWM信号控制电机转动,继而进行直立智能车的姿态调整;同时也可在进行状态控制时有相应的蜂鸣器和led灯指示,软件看门狗时刻保证程序正常运行。

直立智能车(平衡车)毕业论文[通俗易懂]

图2-1  系统框图

2.4 系统总体方案设计

      1. 芯片选型方面

主芯片:因为和MPU6050通信过程中要移植其固件库,而库函数内容较多,单片机的ROM,考虑到以后可能要加的外设,单片机的引脚数,故放弃了类似51单片机的小单片机;考虑开发周期,使用ARM架构的单片机;本智能车电路板虽然用镍铬电池供电,但只是用来实验模拟,2000mAH的镍铬电池完全够用,放弃了一般用在低功耗或超低功耗的场合的MSP430;而随着智能互联终端成为国内外研究的热点后,基于STM32的应用方案也越来越成熟[8]。所以最终选用市场上较为主流的STM32单片机。

驱动芯片:选用的是驱动电流达43A的大电流集成芯片BTN7960,内部集成的驱动Ic具有逻辑电平输入功能,因此主芯片可以直接给驱动芯片PWM信号即可控制电机转动,不过因为是半桥驱动芯片,所以需要两片芯片控制一个电机。实测过程中,电机全速运转消耗电流不超过500mA,驱动能力完全够用,并且其控制简单,电路成熟,性能稳定[9],所以选择BTN7960驱动芯片。

      1. 电源方面

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灯等的其它外设。

      1. 下载方面

STM32的下载方式主要有两种,ISP下载(串口下载)、JLINK下载和STLINK下载。串口下载不可以在线仿真,会对后期的软硬件调试造成不便,故舍弃;JLINK下载方式和STLINK下载方式都支持仿真调试且支持市面上的大部分ARM内核芯片,不同的是主流的JLINK下载工具有20个引脚,而STLINK只需4个引脚,出于对智能车电路板体积不易过大和要安装调试方便的考虑,选择使用STLINK下载工具对主芯片进行程序下载和后期仿真调试。

      1. 通信方面

在早期物联网应用中,出于对嵌入式系统安全的考虑,设备之间的连接大多采用有线方式,但随着技术的发展和设备安装位置的增多,无线传输被应用的更加广泛,其中蓝牙模块化繁为简,只需一个接受模块和一个发送模块即可实现数据无线透传[10],因此智能车通过一个蓝牙模块和手机app进行通信。

3  系统的硬件设计及系统流程

3.1 单片机控制电路

ARM公司推出的 Cortex-M 系列微处理器是市场上较为主流的芯片,经多方比较,本实验平台选择 STM32F103C8T6作为核心芯片,该芯片是新一代 Cortex-M3内核的微处理器,具有 72 MHz 主频、20K字节SRAM、128K字节闪存,提供两个12位adc(16通道),三个通用16位定时器加上一个PWM定时器,多达两个I2Cs和SPIs,三个usart[11],一个USB,一个CAN, 2个看门狗定时器, CRC计算单元,7通道DMA控制器。而且有官方提供的专门的开发库,操作调试更加方便简单[12] 。外围电路模块部分围绕主芯片设计,主要组成及功能如下:

晶振电路:智能车电路板采用的是高速晶振电路,晶振起振为单片机提供时钟信号流。

复位电路:采用自动复位电路,上电后单片机自动复位,复位之后单片机程序重新运行。

启动方式设置电路:通过配置STM32的BOOT0和BOOT1引脚设置单片机的启动模式,即从哪个区域启动单片机,本实验板主芯片从主闪存存储器区域启动。

具体电路参见下图

直立智能车(平衡车)毕业论文[通俗易懂]

图3-1  单片机控制电路

3.2 电源模块电路

直立智能车(平衡车)毕业论文[通俗易懂]

图3-2  电源模块电路

3.3 电机驱动模块电路

因为主芯片引脚驱动电流太小,且直接控制驱动芯片容易被反相电流损坏引脚,所以在主芯片和驱动芯片之间加了一个三态输出的八路总线收发器74LVC245,进行驱动隔离,如下图。

直立智能车(平衡车)毕业论文[通俗易懂]

图3-3  74LVC245电路

主芯片输出的PWM信号在经过隔离芯片后,到达BTN7960的逻辑信号输入引脚,进行驱动芯片输出电压的调整,通过给两个驱动芯片发送不同的PWM信号,保证电机之间出现规定的电压差,即可控制电机进行不同程度的正反转,如下图所示为驱动智能车一个电机的电路图。为了防止芯片损坏或其它异常情况导致电路输出一个特别大的电压,进而烧毁电机,在电机两端加了一个压敏电阻,当电机间电压超过12V时,压敏电阻吸收多余的电流,进行电压钳位保证电机不被烧坏。

直立智能车(平衡车)毕业论文[通俗易懂]

图3-4  电机驱动电路

3.4 其它外设

  1. 蜂鸣器:使用的5V有源蜂鸣器,通电就响,控制方便。如图,蜂鸣器正端接5V,负极接一个NPN三极管,三极管基极通过一个电阻接到主芯片引脚上,当引脚置为高电平时,三极管导通,蜂鸣器工作,反之,蜂鸣器不工作。

直立智能车(平衡车)毕业论文[通俗易懂]

图3-5   蜂鸣器电路

  1. MPU6050模块接口:MPU6050没有单独做电路,直接用的是GY-521三轴加速度电子陀螺仪,不过该模块并未添加任何多余的电路,单片机和其通信得到的就是MPU6050的原始数据。单片机和MPU6050通过I2C方式进行通信,如下图所示,四根接口线分别为电源、地、数据线和时钟线。

直立智能车(平衡车)毕业论文[通俗易懂]

图3-6  MPU6050接口

  1. LED指示灯:如下图所示,为智能车电路板上的前后左右四个方向上的指示灯,分布在电路板四个角上,1k电阻起限流作用,如果LED灯不太亮,可以替换为小阻值电阻。

直立智能车(平衡车)毕业论文[通俗易懂]

图3-7  LED指示灯电路

  1. 下载接口:如图所示,下载接口的四根线分别是给主芯片供电的电源和地,和单片机进行通信的SWCLK和SWDIO。

直立智能车(平衡车)毕业论文[通俗易懂]

图3-8  下载电路

  1. 测速接口:电机测速采用的是霍尔编码器,可以将角位移转换为一串数字脉冲输出。当齿轮转过一圈编码器A相会输出固定的脉冲数,编码器B相输出转向,编码器AB相接到到单片机引脚上,单片机对信号进行捕获然后正交解码,通过M法,即计算固定时间内接收到的脉冲数可以换算出速度。如下图所示,四根接口线分别为编码器供电电源、地、编码器A相和B相。

直立智能车(平衡车)毕业论文[通俗易懂]

图3-9  测速接口

  1. 蓝牙接口:蓝牙模块选用的是主从一体的HC05蓝牙串口模块,蓝牙参数、单片机串口参数和手机程序蓝牙接收参数都是9600bits/s、停止位1位、无校验位,单片机通过串口2和蓝牙模块进行通信,蓝牙将单片机指令以TTL电平发送到手机上,数据反相传输同样类似。如下图,蓝牙模块采用5V供电,模块RX引脚接TX2,TX引脚接RX2。

直立智能车(平衡车)毕业论文[通俗易懂]

图3-10  蓝牙接口

  1. 避障接口:当光电传感器模块遇到障碍物时会输出一个高电平,将其输出引脚接到下图接口上,单片机检测到高电平,进行避障处理。

直立智能车(平衡车)毕业论文[通俗易懂]

图3-11  避障接口

  1. 舵机控制接口:采用的9g舵机SG90属于模拟舵机,5V供电后,有PWM信号即可控制舵机转向。

直立智能车(平衡车)毕业论文[通俗易懂]

图3-12  舵机控制接口

智能车电路板通过添加合适的电阻、电容、电感、二极管、保险丝等元器件,进行滤波、去耦、防大电流等操作,同时消除一些小概率干扰[13] 。同时在设计电路板过程中除了进行抗干扰方面的处理,在焊接元器件过程中也对焊接位置、焊接温度和焊接材料进行了严格把控[14],在根源上杜绝了电路板可能出现的安全隐患。

4  系统的软件设计及系统流程

4.1 下位机程序

下位机使用的编译开发工具是Keil Software公司的Keil μVision5 IDE;开发语言是C语言;搭配的开发工具是可以和Keil μVision5 IDE关联到一起的图形化配置工具STM32CubeMX;使用的库函数是HAL库函数;程序从主闪存存储器区域启动;下载工具是STLINK。

程序中对STM32进行的主要操作:和MPU6050进行I2C通信获知当前姿态;通过PWM控制电机转动;检测当前电机转速;控制蜂鸣器和LED等的GPIO;软件看门狗;和蓝牙双向通信。

4.1.1 下位机程序流程图

程序首先系统初始化,系统初始化包括时钟初始化、GPIO初始化、I2C初始化、定时器初始化、正交解码初始化、串口初始化、MPU6050及其DMP初始化、看门狗初始化和PID参数初始化,以上程序在while(1)之前,开机后只顺序执行一次,在下面流程图中用系统初始化统一代称。

所有的控制都在一个外部中断程序里面进行处理,此外部中断由MPU6050触发。因为设置的DMP中数据每隔10ms更新一次,所以配置MPU6050模块的中断输出引脚每隔5ms进行一次电平转换,当单片机捕获到该引脚的下降沿时进行数据处理,保证数据的准确性和处理的及时性。

中断内部的处理步骤参见下图中的读取倾角到驱动电机,蓝牙接收后的相应处理包括前进、后退、左转、右转、蜂鸣器提示和LED指示等。

直立智能车(平衡车)毕业论文[通俗易懂]

图4-1  下位机程序流程图

4.1.2 算法介绍

  1. 低通滤波器算法:Encoder_Least =(speed_left+speed_right)-0;      

                Encoder *= 0.8;                              

                Encoder += Encoder_Least*0.2;                

上式中Encoder_Least是最新速度偏差; 第2、3个程序可以理解为Y(n)=αX(n)+(1-α)Y(n-1),其中X(n)等同于Encoder_Least,代表本次采样值;Y(n-1)等同于Encoder,代表上次滤波输出值;α是滤波系数,在上式中是0.2。

  1. 一阶互补滤波算法:g_fAngle = 0.02 * Angle_ax + (0.98) * (g_fAngle + GY * dt); 

上式中左边的g_fAngle为实际得到的角度;Angle_ax为角加速度换算后的角度值,因为角加速度受车体震荡等因素会产生高频噪声,所以对其进行低通滤波,滤除高频信号,因此融合系数较小;右边的g_fAngle可以理解为上一次的角度;GY是角速度,dt是时间,GY *计算dt时间段内通过的角度,通过对角度的不断积分得到一个较为准确的角度,可信度和融合系数较大,有点类似高通滤波。

  1. PID算法:balance=CarAngle.Kp*Bias+CarAngle.Kd*Gyro;                  

          Velocity=Encoder*CarSpeed.Kp+Encoder_Integral*CarSpeed.Ki;       

          Turn = -Turn_Target * Kp – gyro * Kd;                             

上面第1个程序是直立PD算法,即角度环控制算法,属于位置PD算法[15]。通过此算法可以实现智能车短时间的直立平衡状态,其中Bias是小车偏离水平面的角度,数值为0时即与地面平行;Gyro是角速度值,通过调节Kd可以减缓小车震荡;具体调节步骤如图4-2,当小车向前倾倒时,车轮跟随小车前进的方向,使其有一个向后的力,反之亦然,调参数时的最好现象是小车对角度变化反应敏感且没有震荡。

直立智能车(平衡车)毕业论文[通俗易懂]

图4-2  直立小车运动模型

第2个程序是速度PI控制,Encoder是经过低通滤波输出的当前速度值,因为速度控制和直立控制输出值是要加到一起的,低通滤波可以减缓速度差值对直立控制的干扰;Encoder_Integral是对速度的积分,即位移,积分控制的是速度的静差,对Encoder_Integra的限幅就是对速度的限幅;直立环和速度环一起调试,即可实现小车的长时间直立[16],直立环是负反馈,速度环是正反馈,即小车因为直立环原因向一个方向加速时,速度环的作用是产生一个同方向更快的速度。

第3个程序是转向PD算法,Turn_Target是转向速度值,数值较大时转向速度块,反之慢,数值大小和转向前小车的速度有关,即小车的旋转速度可以跟随实时速度,增加小车的适应性;gyro是角速度值,gyro * Kd可以减小小车转向时的震荡;据体控制方法就是将小车的左轮PWM输出值减去转向PD输出值,小车的右轮PWM输出值加上转向PD输出值,利用小车车轮的差速进行转向。

4.2 上位机程序

上位机开发工具使用的是由Qt Company在1991年开发的跨平台的图形界面应用程序开发框架- Qt Creator;软件功能是进行开关蓝牙、蓝牙状态检测、搜寻和配对连接等,最主要的是通过蓝牙模块和单片机进行无线数据透传。

4.2.1 上位机程序流程图

系统初始化包括创建动画、设置动画、动画自适应、启动动画;设置定时器;设置滚屏显示的字符、颜色、显示时间、滚屏方向;设置蓝牙UUID码、分配socket内存、限定套接字协议;设置显示背景的大小、位置、透明度;编写按键信号对应的槽函数和其它回调函数。

  初始化之后的操作如图所示。

直立智能车(平衡车)毕业论文[通俗易懂]

图4-3  上位机程序流程图

4.2.2  上位机功能介绍

本上位机使用应用程序开发框架Qt Creator开发,在用其自带的界面设计器进行页面设计之后,在代码管理编辑页面进行C语言的程序编写、逻辑实现。在调试过程中进行了图形化调试,即程序和页面相关联之后进行全方位调试。在debug模式对程序进行实时观察跟踪,定位到问题并对其解决或者修改相应配置后,在最后实验阶段进行实际应用,效果良好。

使用Qt Creator进行开发,首先进行编译环境的搭建,主要步骤为:(1) 选择合适的编译器;2) 配置环境变量;(3) 选择Qt文件系统的编译器;(4) 选择库文件,因为本课程设计的上位机是在Windows系统下开发Android软件,所以需要交叉编译器[17]。主要功能如下:

  1. 扫描刷新附近的蓝牙设备
  2. 将蓝牙设备显示在手机上
  3. 进行控制时左上角显示有按键按下指示

4.2.3  上位机使用说明

  首次打开软件时,按照手机提示打开蓝牙,之后app会自动搜索周围的蓝牙设备,并显示在屏幕上,如果有新设备,可以点击页面下方的刷新按键,如果已经配对过的设备手机会高亮显示,双击设备即可进行连接,如图4-4。这时打开蓝牙按键会显示“正在连接…”,连接失败会显示连接失败,连接成功会自动进入440ms的小车启动动画,动画上面滚动显示“启动中…”,如图4-5。

  动画播放完毕,进入控制页面,如图4-6,按下某个按键会发送相应的指令,例如按下“上”,发送0x31、0x32,按下“下”,发送0x33、0x34,按下同时左上角变成小红点,松开手恢复原样。可以发送的指令有上、下、左、右、停车和蜂鸣器,按下右上角的蓝牙图标,APP页面跳转到蓝牙连接页面。

上位机每进行一次指令更新,蜂鸣器会响一下,前进时前面两个led灯点亮,后退时后面两个led灯点亮,左转时左面两个灯点亮,右转时右面两个灯点亮,响一下蜂鸣器,点击一下停止按键,小车停止所有指示灯点亮,并且当前指示灯状态全部反转,蜂鸣器开始长响,再次点击一次,蜂鸣器停止发出发出声音,当前所有指示灯状态再次反转。图4-7是本软件的图标,软件名称叫“中控台”。

直立智能车(平衡车)毕业论文[通俗易懂] 直立智能车(平衡车)毕业论文[通俗易懂]

图4-4  蓝牙连接图                    图4-5  开机动画图

直立智能车(平衡车)毕业论文[通俗易懂]直立智能车(平衡车)毕业论文[通俗易懂]

图4-6  蓝牙控制                           图4-7  软件图标      

开发中遇到的问题和成果图

5.1 硬件上的问题和解决方法

  1. 由于驱动芯片是从其它电路板上吹下来的,导致第一次温度没控制好把芯片吹坏
  2. 手工焊接STM32F103C8T6时,引脚间间距只有0.5mm,把引脚焊短接;为了避免出现引脚间再因滚进锡球而短路,将主芯片用透明胶带粘起来
  3. 固定孔的直径设置成2.54mm,固定用的塑料螺柱买的是3mm的,只能用胶棒固定
  4. 指示灯的亮度偏暗,因为选用的限流电阻过大
  5. PID调参时,长时间的高频大幅抖动将芯片烧坏
  6. 蜂鸣器不太响,是因为上面的贴纸没有揭下来
  7. 先给主芯片供电,再给驱动芯片供电,否则供电主芯片初始化的时候容易出现轮子乱转的情况

下图是电路板PCB图,在Altium Designer软件中先画出原理图,再把原理图转换为PCB,通过把PCB中杂乱的元器件布局并进行电气连接后即为下图。

直立智能车(平衡车)毕业论文[通俗易懂]

图5-1  电路板PCB图

5.2 下位机开发中的问题和解决方法

  1. 蓝牙不能进行数据收发:蓝牙模块的默认波特率是115200bits/s,和单片机不一样,要用AT指令将其设置成一样
  2. 有时候接收不到MPU6050的外部中断:外部中断被其它中断打断了,将对应的外部中断的优先级放到第一位
  3. 小车完全倒地时还会瞎转:判断MPU6050倾角是否超出正负25度,超出后就不进行控制
  4.  PID调节有直立环、速度环、转向环,调试时要直立环和速度环一起调,否则不能保持直立
  5. I2C地址的通信地址和MPU6050的某个引脚是否接地有关,默认悬空是0X68
  6. 速度发生迟滞:速度要限幅,否则当变量超调的时候容易出现速度降不下来或者升不上去的情况
  7. 小车总是向一个方向跑偏:程序上设置的机械中值和MPU6050的实际安装位置有差别。
  8. 在STM32cubeMX中uart2的tx引脚模式默认只有PP(复用推挽)一种,要改成OD(开漏)模式,可以直接在源程序里面改
  9. STM32cubemx HAL的硬件I2C有一个BUG,就是要把__HAL_RCC_I2C2_CLK_ENABLE()这句时钟初始化代码放到GPIO初始化之后。
  10. 修改STM32cubemxUSER生成的程序,内容要写在 “CODE BEGIN x”和“CODE END x”之间,否则下次再次生成后自己的程序会消失

下图为PCB电路图经过工厂加工并焊接上元器件的成品图,通电并将相应的线路连接正确后即可使用。

直立智能车(平衡车)毕业论文[通俗易懂]

  图5-2  电路板实物图

5.3 上位机开发中的问题和解决方法

  1. 无法添加背景图:listWidget添加背景图,必须先设置成透明
  2. 手机扫描不到蓝牙:Android 6.0以上设备扫描Ble设备前要开启位置权限
  3. 无法显示不规则图标:使用专门的图标按钮
  4. 兼容性不太好,初次打开软件时会出现android detected problems with API compatibility Android ,原因是手机系统升级到Android 9.0以后谷歌后台限制了开发者调用非官方公开API,这个问题因为手机系统更新导致出现的比较晚,尚未解决,但是点击确定后不影响使用

下图为整车实物图,蓝牙在上方,指示灯在四个角上,电池在电路板正下方并用铜柱和电路板隔开,防止因为电池散热导致小车电路板出现问题,为了保证传感器的稳定,直接用胶封在小车下方,接线插头自带防呆设计不用担心插反,带卡锁不用担心脱落。

直立智能车(平衡车)毕业论文[通俗易懂]

图5-3  平衡车整车实物图

参考文献

[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.

[8] Sizu Hou, Shengming Wu, Fengying Kong, Xiaoling Cui,Xuan Zhang.  Design andrealization of family  intelligent interactive terminal based on STM32[C].  IEEE. 2012.06.

[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.

[15]  KE LIN,TING LEI HUANG,PIN LIU.Designof the smart car comtrol system based on adaptive PID algorithm[C]. Proceedings of 2011 InternationalConference on Intelligent Computing an Integrated Systems(ICISS2011), Guilin University of Electronic Technology IEEE Beijing Section,2011.

[16]  袁鑫宏,王兴.基于MPU6050六轴传感器的平衡车姿态检测及控制方案[J].信息与电脑(理论版),2018(23):103-104.

[17]  赵良好,王澜,戴贤春等.搭建基于Qt的嵌入式开发平台[J].铁道通信信号,2018,54(02):37-40.

6  结论

在硬件方完成了对主芯片的控制、对电机的驱动和速度检测、平衡车角度方面的检测、和控制相关电压的稳压输出;硬件程序用到了PID控制算法和滤波算法,以及其它用到的PWM控制、串口接收发送、时钟管理、I2C通信、引脚配置、定时器和外部中断等的相关程序;手机程序方面通过编写相应的蓝牙控制apk程序,实现了远程连接平衡车蓝牙,对其进行简单的方向控制和电路板上一些相应模块的控制(比如转向灯和蜂鸣器)。

本次毕业设计通过软硬件设计以及编写相应蓝牙控制apk程序,实现了控制两轮小车的各种自平衡运动,包括前进、后退、左转、右转和停车,同时可以通过蜂鸣器进行转弯提示和通过LED灯进行运动状态指示。通过简单的实验测试了在不同载重、不同电压、不同路段下小车的运动状态,载重过大会导致重心上移,相应的PID参数需要调节;电压过低时,小车的的电机无法被充分驱动,导致响应不及时甚至无法直立;路段越差,速度积分的误差会越来越大,导致可以平衡的时间变短。

设计的最大优点是程序的移植性较强,下位机开发用的基于CUBE的HAL库,因此只要是ST公司的芯片,只需要在图形化配置页面更改一下参数和对应引脚即可移植完毕;同样的上位机APP如果需要运行在linux、 Windows等其它平台,只需要在Qt软件上更改编译输出的环境即可完成。

7  总结

技术的快速发展导致了学科之间的深度融合,为直立智能车的这一新型事物的诞生提供了理论基础。随着直立智能车走进人们的生活,其应用场景也越来越多,相信随着物联网时代和“无人”时代的到来,直立智能车上搭载的传感器和处理的数据量会呈指数级增长,人机交互变得简单且高效,功能会更强大。

本次毕业设计所做的直立智能车实现了基本的自主平衡和手机近程操控功能,附加的一些外设也能让使用者的驾驶浸入感更强。但仍然存在一些问题,比如需要前后稍微摆动一下才能保持平衡,而且平衡后也不是完全的静止,还有就是手机APP存在一些不兼容的问题。这些问题仍需寻求解决方法,同时以后会竭力将智能车改进的更加智能化,紧跟时代技术发展的步伐,向更高层次迈进。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/139592.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • 鸿蒙三部曲为什么不写第四部,“鸿蒙三部曲”比“斗罗四作”评分高,为何动画人气远远不如?…

    鸿蒙三部曲为什么不写第四部,“鸿蒙三部曲”比“斗罗四作”评分高,为何动画人气远远不如?…“鸿蒙三部曲”与“斗罗四作”相信熟悉玄幻小说的朋友对于“鸿蒙三部曲”比“斗罗四作”是哪几部就很熟悉了,但更多的是熟悉“斗罗四作”,《斗罗大陆》、《斗罗大陆2:绝世唐门》、《斗罗大陆3:龙王传说》、《斗罗大陆4:终极斗罗》,出自大神作家唐家三少之手。对于“鸿蒙三部曲”就很陌生了,这三部曲分别是:《盘龙》、《星辰变》、《吞噬星空》。这三部小说同样出自大神作家,我爱吃西红柿之手。在2008年的时候,“鸿…

  • python语言func_python中func什么意思[通俗易懂]

    python语言func_python中func什么意思[通俗易懂]python中的func表示自定义的函数,func只是一个函数名,它的名字不是固定不变的,自定义的函数的参数包括无参数,也可以根据函数动能传递必备参数、位置参数以及关键字参数等。小白在学习python的时候,都会遇到func,一脸蒙!是什么意思呢?在python中,func表示的自定义函数。python中的函数分为内置函数和自定义函数,内置函数是python本身自带的,func函数是人为定义的。f…

    2022年10月27日
  • SpringBoot 启动报 No bean named ‘org.springframework.context.annotation.ConfigurationClassPostProcessor.importRegistry’ available 异常

    SpringBoot 启动报 No bean named ‘org.springframework.context.annotation.ConfigurationClassPostProcessor.importRegistry’ available 异常

    2020年11月19日
  • mysql 建前缀索引_MySQL_前缀索引_建立[通俗易懂]

    mysql 建前缀索引_MySQL_前缀索引_建立[通俗易懂]–查看出现频率selectcount(*)ascnt,cityfromsakila.city_demogroupbycityorderbycntdesclimit10;1.selectcount(distinctcity)/count(*)fromsakila.city_demo;*完整列的选择性2.selectcount(distinctleft(ci…

  • eplan激活码【2021最新】

    (eplan激活码)本文适用于JetBrains家族所有ide,包括IntelliJidea,phpstorm,webstorm,pycharm,datagrip等。IntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,下面是详细链接哦~https://javaforall.cn/100143.html…

  • ACL-访问控制列表

    ACL-访问控制列表目录一.概述二.访问控制列表的调用的方向三.策略做好后,在入接口调用和出接口调用的区别四.访问控制列表的处理原则五.访问控制表类型总结一.概述作用:读取三层、四层头部信息,根据预先定义好的规则对流量进行筛选、过滤三层头部信息:源、目的IP四层头部信息:源、目的端口号二.访问控制列表的调用的方向:入:流量将要进入本地路由器,将被本地路由器处理出:流量已经被本地路由器处理,将离开本地路由器三.策略做好后,在入接口调用和出接口..

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号