基于stm32的自平衡小车
Posted 创客协会的阿蛋°
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了基于stm32的自平衡小车相关的知识,希望对你有一定的参考价值。
文章目录
引言
1、系统概述
1.1、设计任务
利用stm32做一辆自平衡小车
1.2、设计要求
利用IIC和MPU6050、OLED12864进行通信,使用pid算法到自平衡,熟练掌握PID算法
2、方案设计与论证
2.1、芯片选择方案
芯片可以选择stm32和arduino,基于学习目的,使用stm32
stm32是一个低功耗,高性能32位单片机,片内含4k Bytes ISP(In-system programmable)的可反复擦写1000次的Flash只读程序存储器。主要性能有:与MCS-51单片机产品兼容、全静态操作:0Hz~33Hz、 三级加密程序存储器、32个可编程I/O口线、三个16位定时器/计数器、八个中断源、全双工UART串行通道、掉电后中断可唤醒、看门狗定时器、双数据指针、掉电标识符、易编程。
2.2 、系统概述
本设计是一个具有自动调节平衡功能的两轮小车。由MPU6050、12864OLED显示屏、电机驱动块、电机、供电电路等模块组成。本项目研究一种使用单片机PID算法的自平衡方案。这种方案后续可以制作成为自平衡代步工具,自平衡自行车等等。
2.3、设计要求
- IIC通信
- PID算法的调节,要求抖动不得超过1cm’
- 小车可以正常达到自平衡
- oled显示偏航/俯仰/滚动角的数据
2.4、系统总体设计
利用stm32和MPU6050进行通信,实时获取mpu6050发送过来的数据,并且再oled上面显示,利用mpu6050的数据,结合PID算法,控制电机驱动块去控制电机的正方转,以达到自平衡的目的。
2.5、各功能模块程序实现原理分析
2.5.1、MPU6050模块的介绍
MPU6050内部整合了三轴MEMS陀螺仪、三轴MEMS加速度计以及一个可扩展的数字运动处理器DMP(Digital Motion Processor),而且还可以连接一个第三方数字传感器(如磁力计),这样的话,就可以通过IIC接口输出一个9轴信号(链接第三方数字传感器才可以输出九轴信号,否则只有六轴信号)。更加方便的是,有了DMP,可以结合InvenSense公司提供的运动处理资料库,实现姿态解算。通过自带的DMP,可以通过IIC接口输出9轴融合演算的数据,大大降低了运动处理运算对操作系统的负荷,同时也降低了开发难度。其实,简单一句话说,陀螺仪就是测角速度的,加速度传感器就是测角加速度的,二者数据通过算法就可以得到PITCH、YAW、ROLL角了。
陀螺仪知识点介绍:
陀螺仪是用高速回转体的动量矩敏感壳体相对惯性空间绕正交于自转轴的一个或二个轴的角运动检测装置。利用其他原理制成的角运动检测装置起同样功能的也称陀螺仪。
从力学的观点近似的分析陀螺的运动时,可以把它看成是一个刚体,刚体上有一个万向支点,而陀螺可以绕着这个支点作三个自由度的转动,所以陀螺的运动是属于刚体绕一个定点的转动运动。更确切地说,一个绕对称铀高速旋转的飞轮转子叫陀螺。将陀螺安装在框架装置上,使陀螺的自转轴有角转动的自由度,这种装置的总体叫做陀螺仪。
陀螺仪的原理就是,一个旋转物体的旋转轴所指的方向在不受外力影响时,是不会改变的。人们根据这个道理,用它来保持方向,制造出来的东西就叫陀螺仪。我们骑自行车其实也是利用了这个原理。轮子转得越快越不容易倒,因为车轴有一股保持水平的力量。陀螺仪在工作时要给它一个力,使它快速旋转起来,一般能达到每分钟几十万转,可以工作很长时间。然后用多种方法读取轴所指示的方向,并自动将数据信号传给控制系统。
2.5.2、OLED12864显示屏
OLED 屏幕作为一种新型的显示技术,其自身可以发光,亮度,对比度高,功耗低,在当下备受追捧。而在我们正常的显示调整参数过程中,我们越来越多的使用这种屏幕。我们使用的一般是分辨率为 128×64 ,屏幕尺寸为 0.96 寸。由于其较小的尺寸和比较高的分辨率,让它有着很好的显示效果和便携性。
2.5.3、LN298N电机驱动块
L298N是专用驱动集成电路,属于H桥集成电路,与L293D的差别是起输出电流增大,功率增强。其输出电流为2A,最高电流4A,最高工作电压50V,可以驱动感性负载,如大功率直流电机,步进电机,电磁阀等等,特别是其输入端可以与单片机直接相连,从而很方便地受单片机控制。当驱动直流电机时,可以直接控制步进电机,并可以实现电机的正转和反转,实现此功能只需要改变输入端的逻辑电平。为了避免电机对单片机的干扰,本模块加入光耦,进行光电隔离,从而使系统能够稳定可靠的工作。
3、单片机的选择及硬件设计介绍
3.1、单片机选择
出于实验目的选择STM32F103ZET6,性能足,完善功能强大,管脚也够,后续完善功能将改为STM32F103C8T6。
3.2、电路设计
4、系统程序
4.1、主程序
4.1.1主程序设计如下
由mpu6050采集角度信息,并发送到STM32上,STM32进行PID的调节,反馈给电机驱动块,电机驱动块调整电机转动方向和速度,以达到调整角度的目的,电机驱动块和mpu6050闭环。
4.1.2主程序流程图
4.2、主程序代码
4.3、模块程序代码
5、系统调试及分析
5.1、系统调试
5.2、调试现象及分析
5.3、测试结果
6、参考借鉴内容
https://www.bilibili.com/video/BV1AZ4y1V7wt?p=27&spm_id_from=pageDriver
https://blog.csdn.net/best_xiaolong/article/details/105153978
https://wenku.baidu.com/view/3e5fc765bb4cf7ec4bfed00b.html
以上是关于基于stm32的自平衡小车的主要内容,如果未能解决你的问题,请参考以下文章
大家好,,我在用stm32做平衡小车,在平衡过程中,,单片机会自动复位,,不知道该怎么解决,
基于STM32两轮自平衡小车系统设计与控制 含源码原理图及PCB文件