IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 嵌入式 -> 纪念一下我之前做过的平衡车 -> 正文阅读

[嵌入式]纪念一下我之前做过的平衡车

1.PCB板子的设计(引脚的定义在程序里面有专门的ReadMe文件里面会有写的)

在我的博客里面有平衡车PCB板子的开源(有原理图和Pcb图),实物图如下:

?(不过有一个bug,就是超声波的Trig没有设计为PA6,因为要用定时器3输入捕获通道1,确实有点不够完美,但是问题不大毕竟我也搞过超声波输入捕获的小项目,在平衡车超声波避障程序设计也不是很难,只要在规定的距离内,实时修改速度环的期望速度就好了)

?

?2.选购物品

1)stm32f103c8t6

2)? ?4引脚OLED

3)8引脚MPU6050

4)HC-05

5)TB6612

6)稳压模块输出5V

7)超声波模块

8)12V锂电池

9)大鱼电子的底板和轮子

10)一些排针,小开关(3个脚的),电源接口(3个脚的)

3.学习一些基本的STM32知识,陀螺仪知识,编码器知识,PID知识

1)STM32的学习可以去看江科大的教程,不建议野火和原子,我也不喜欢他们的代码风格

2)陀螺仪的学习看这个就好:

电控组寒假培训(四)MPU6050简介_哔哩哔哩_bilibili

2)编码器的知识(只需要看这个视频的理论部分就好):STM32第十次培训(正交解码类型编码器的原理和使用)_哔哩哔哩_bilibili

3)PID的知识学习

先看这个(看完这个其实可以不用看下面的文章了)

PID超详细教程——PID原理+串级PID+C代码+在线仿真调参_skythinker616的博客-CSDN博客_pid教程

有多的时间看下面的(多阅读没有坏处的):

从不懂到会用!PID从理论到实践~_哔哩哔哩_bilibili

学会PID-基于板球平衡系统-初中基础就能听懂的简单讲_哔哩哔哩_bilibili

最通俗的PID讲解,从控制出发,全程不管公式,还不来学习?倒立摆,平衡车,无人机,哪有那么神秘,你也可以啊!!_哔哩哔哩_bilibili

4.解释一下代码的框架

1)对于轮子

a.编码器的编程

左边编码器PA0和PA1,定时器2的通道1和通道2

右边编码器PB6和PB7,定时器4的通道1和通道2

b.PWM的编程

左PA8和右PA11,对应定时器1的通道1和通道4

c.电机引脚的编程

右轮需要PB12,PB13,左轮需要PB14,PB15

2)对于OLED

我用的是江科大的模块

3)对于MPU6050

在我上面说的陀螺仪知识学习中会有相关的代码开源的,然后要注意的是陀螺仪的采样频率可以修改的(修改两个地方)

1.在mpu6050源文件中,MPU_Init函数中的尾部有采样频率的修改,也就是这句话:MPU_Set_Rate(100);

2.在inv_mpu.h头文件中修改采样频率数值,也就是这句话:#define DEFAULT_MPU_HZ ?(100)

其次就是要使用MPU6050的INT引脚,因为每次MPU6050得到数据后要送给STM32,在平衡车中要定时的去接收这些数据,那其实也可以用定时器,但是既然MPU6050都可以设置采样频率了不就相当于修改定时时间了,而且MPU6050给STM32发送完数据后它的INT引脚会有电平变化,那就可以利用这个电平变化写一个外部中断函数来处理数据进行PID的控制运算,所以也就是为什么我写的代码会有MPU_EXTI这个文件了

4)对于HC-05蓝牙

其实原理就是串口,如果你已经学过江科大关于串口的讲解那看我的代码应该问题不大,

蓝牙的指令可以自己修改,如果你想要修改蓝牙的名字,密码可以去看[软件]6_蓝牙APP控制小车_注意新旧HC-05_哔哩哔哩_bilibili或者你用我代码里写的MyUSART_SendString函数也行,也就是这种写法:MyUSART_SendString("AT+NAME Walk the world\r\n");

5)对于PID(默认你已经看完了我上面推荐的文章和视频讲解)

注意目标值,反馈值,输出值和他们的物理意义;输出限幅,积分限幅,积分分离;串级PID中的外环积分限幅,外环输出限幅,内环积分限幅,内环输出限幅

这里要使用串级PID这个毫无疑问,速度环PI控制,直立环PD控制,实现小车不仅平衡而且在受到干扰后能够回到原处并且速度可控

?重点:我主要介绍为什么速度环在外面,直立环在里面?

其实这个问题我想了很久,因为我纠结的是速度环输出的是角速度单位(或者你理解成直行速度单位也问题不大),直立环又是角度单位,为啥就可以这么串在一起呢不需要进行物理量纲处理吗?但是当我看完这篇文章:PID超详细教程——PID原理+串级PID+C代码+在线仿真调参_skythinker616的博客-CSDN博客_pid教程,我才弄懂了道理。

在速度环中有一个I项也就是积分项,那积分肯定是要对时间进行积分,并且我们也知道STM32每隔一小段(10ms)时间采集数据,那就有了时间的概念,并且速度环的单位确实是速度,速度对时间的积分不就是角度或者位移了吗,那也就解决了这个问题,也就是经过PI运算后输出的就是角度了,可以作为直立环的输入!

6)PID函数的编程

速度环:PI控制????????输出=比例系数*角度误差+微分系数*Y轴角速度

直立环:PD控制和低通滤波? ? ?

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?输出=比例系数*速度误差+积分系数*速度误差的积分

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?ErrorNew=(1-a)*ErrorThis+a*ErrorLast;

转向环:P控制? ? ? ? 输出=比例系数*Z轴角速度

7)外部中断函数的编程

1.判断中断标志位并清除

2.读取MPU6050数据和编码器数据

3.蓝牙控制

4.将数据经过PID控制器得到三个环的输出

5.电机的保护

6.给电机PWM值并进行限幅和加载

8)PID参数整定

可以看这个第3.2节:串级PID三环调参&最后四分钟_哔哩哔哩_bilibili

5.总结

一开始我想做平衡车的时候总是听到别人说很难很难,但其实平衡车真的不难,只要你各方各面要用到的模块的知识都明白了也曾自己用过了,那上手平衡车最多三天时间就可以搞定,我大概是用了两天,其实这两天基本都是在查2个bug(一个是调试端口用作普通IO口,一个是MPU6050要用到延时函数但是我忘记在主函数调用延时函数的初始化了)和调参。。。

最后附上代码(看到这了不点个赞收藏一下咩,拜托这真的对我很重要!你也可以去看我别的文章哦)

链接:https://pan.baidu.com/s/19AKMbIqSShg_V4BhJTqJDg?
提取码:rp32?
--来自百度网盘超级会员V2的分享

  嵌入式 最新文章
基于高精度单片机开发红外测温仪方案
89C51单片机与DAC0832
基于51单片机宠物自动投料喂食器控制系统仿
《痞子衡嵌入式半月刊》 第 68 期
多思计组实验实验七 简单模型机实验
CSC7720
启明智显分享| ESP32学习笔记参考--PWM(脉冲
STM32初探
STM32 总结
【STM32】CubeMX例程四---定时器中断(附工
上一篇文章      下一篇文章      查看所有文章
加:2022-09-04 01:27:45  更:2022-09-04 01:30:43 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/25 22:28:22-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码