【DIY】基于STM32的两轮平衡车
【DIY】基于STM32的两轮平衡车
本文最后更新于338 天前,其中的信息可能已经过时,如有错误请发送邮件到273925452@qq.com
Avatar
这个项目是大一的时候做的,学了stm32入门后,打了一下蓝桥杯嵌入式后做的,平衡效果一般,还可以调更好,小鹿太懒了,后续更新无线调参的方法,这个为小鹿后来打智能车起到了很大作用😉 这里有三个版本,一个是“炸毛版”,一个是Openmv寻迹版,一个是花了几天给别人调的版本。 工程链接都在文章的末尾哦。 这里的教程是做完“炸毛版”后记录的,比较粗略,现在把它发出来😉

炸毛版

系统概述

1.利用IIC和MPU6050进行通信,使用pid算法到自平衡,熟练掌握PID算法,串级PID的运用

2.本设计是一个具有自动调节平衡功能的两轮小车。由主控核心板STM32C8T6,陀螺仪MPU6050、电机驱动块L298N、GM37-520直流电机、供电电路等模块组成。本项目研究一种使用单片机PID算法的自平衡方案。这种方案后续可以制作成为自平衡代步工具,自平衡自行车等等。

项目目标:

1.通过PID调节使小车实现自平衡

2.通过手机蓝牙控制小车行走 

a.设计流程

b.设计框架

原理认识

平衡原理

我们可以将平衡小车的运动方式类比为手指上放置一根筷子,保持其直立状态,根据生活经验可知,当筷子向某个方向倒下时,我们眼睛观察到筷子倒下反馈给大脑,大脑控制手迅速向筷子倒下的方向运动,使其始终保持原有直立状态。同样,平衡小车道理相同,当传感器检测到小车有倒下的趋势时,控制轮子向相同方向运动,不同角度会输出不同速度即可保持平衡。

平衡小车的控制可以分为直立控制,速度控制以及转向控制,即直立环、速度环和转向环,使小车能够保持平衡状态的是速度环以及直立环,通过传感器读取角度输出不同的PWM即不同的速度使其保持平衡。其中单独的直立环可以使小车保持直立,但如果受到外力的影响,那么不用多想,小车一定会倒下,将直立环和速度环串起来,那么当小车受到外力时,也能迅速平衡。

运动控制

正回馈 (英语: positive feedback ),是反馈的一种。是指一系统的输出影响到输入,使得输出变动后会影响到输入,造成输出变动持续加大的情形

负回馈:输出变动持续减少、负面效应加大。

a.直立控制

小车的直立控制是通过负反馈控制的

直立控制实际上就是将小车控制在一定角度内,这个角度由小车的机械零点有关(你搭建的小车重心),上文提到如果只有直立环不足以小车完全保持平衡,所以我们还需要加入速度环。

b.速度控制

小车的速度控制是通过正反馈控制的

我们可以假设此时小车处于直立状态,如果小车想向前运动,那么小车必然要向前倾斜获取向前的加速度,但是向前倾斜轮子必然要向后转动,那么小车的速度会下降(轮子向后转动了)假如为负反馈那么小车必然会增加倾角(速度不够,加大加速度),一直循环下去这样则会加速小车的倒下,所以在速度控制中反馈系统应该是正反馈。

c. 转向控制

所谓转向环即当小车已经能保证基本的平衡时,通过蓝牙控制使小车改变方向的控制系统

材料购买清单

名称型号数量价格
核心板STM32F103C8T6(国产版)119.5
陀螺仪模块MPU6050 6轴112.8
电机驱动模块L298N16
大鱼底盘套件电机(GM37-520)+底盘+轮子+联轴器+排线1114
蓝牙模块HC-05主从一体113
电池+充电器18650×3(3.7v-4.2v)140
面包板400孔 8.5*5.5cm13.4
开关船型,大电流若干
铜柱单头六角3mm直径若干
螺栓3mm直径若干
杜邦线若干
209

硬件认识

1.陀螺仪MPU6050模块

——————————————————————————————————————————————————

1.MPU6050内部整合了三轴MEMS陀螺仪、三轴MEMS加速度计以及一个可扩展的数字运动处理器DMP(Digital Motion Processor),而且还可以连接一个第三方数字传感器(如磁力计),这样的话,就可以通过IIC接口输出一个9轴信号(链接第三方数字传感器才可以输出九轴信号,否则只有六轴信号)。更加方便的是,有了DMP,可以结合InvenSense公司提供的运动处理资料库,实现姿态解算。通过自带的DMP,可以通过IIC接口输出9轴融合演算的数据,大大降低了运动处理运算对操作系统的负荷,同时也降低了开发难度。其实,简单一句话说,陀螺仪就是测角速度的,加速度传感器就是测角加速度的,二者数据通过算法就可以得到PITCH(俯仰角)、YAW(偏航角)、ROLL(横滚角)角了。

2.陀螺仪是用高速回转体的动量矩敏感壳体相对惯性空间绕正交于自转轴的一个或二个轴的角运动检测装置。利用其他原理制成的角运动检测装置起同样功能的也称陀螺仪。陀螺仪是测试角速度的传感器,也有人把角速度说成角速率,说的是一样的

物理量。拿电机做例子,当我们说一个电机10转每秒。一转是360度,那么它的主轴在一秒内转过3600度。也就是说这个电机在转动时的角速度是3600dps.dps 就是dergee per second 度每秒(或者写成 deg/s).MPU6050 集成了三轴的陀螺仪.角速度全格感测范围为±250、±500、±1000与±2000°/sec (dps).当选择量程为±250dps的时候,将会得到分辩率为131LSB/(º/s).也就是当载体在X+轴转动1dps时,ADC将输出131.

从力学的观点近似的分析陀螺的运动时,可以把它看成是一个刚体,刚体上有一个万向支点,而陀螺可以绕着这个支点作三个自由度的转动,所以陀螺的运动是属于刚体绕一个定点的转动运动。更确切地说,一个绕对称铀高速旋转的飞轮转子叫陀螺。将陀螺安装在框架装置上,使陀螺的自转轴有角转动的自由度,这种装置的总体叫做陀螺仪。

陀螺仪的原理就是,一个旋转物体的旋转轴所指的方向在不受外力影响时,是不会改变的。人们根据这个道理,用它来保持方向,制造出来的东西就叫陀螺仪。我们骑自行车其实也是利用了这个原理。轮子转得越快越不容易倒,因为车轴有一股保持水平的力量。陀螺仪在工作时要给它一个力,使它快速旋转起来,一般能达到每分钟几十万转,可以工作很长时间。然后用多种方法读取轴所指示的方向,并自动将数据信号传给控制系统。

3.需要注意的是AD0接口如果接地,则6050的IIC地址为0x68,如果接vcc,则6050的IIC地址0x69

——————————————————————————————————————————————————

————————

2.电机驱动块LN298N

—————————————————————————————————————————————————

L298N是专用驱动集成电路,属于H桥集成电路,与L293D的差别是起输出电流增大,功率增强。其输出电流为2A,最高电流4A,最高工作电压50V,可以驱动感性负载,如大功率直流电机,步进电机,电磁阀等等,特别是其输入端可以与单片机直接相连,从而很方便地受单片机控制。当驱动直流电机时,可以直接控制步进电机,并可以实现电机的正转和反转,实现此功能只需要改变输入端的逻辑电平。

—————————————————————————————————————————————————

3.霍尔磁力编码器

要调节小车的倾角,首先需要获取小车电机的转动速度.引出AB两相,因为stm32的定时器有编码器模式,因此特定的GPIO口可以直接连接电机上的编码器接口,从而读取脉冲,获得速度值。

—————————————————————————————————————————————————

1.编码器是一种将角位移或者角速度转换成一连串电数字脉冲的旋转式传感器,我们可以通过编码器测量到底位移或者速度信息。编码器从输出数据类型上分,可以分为增量式编码器绝对式编码器。从编码器检测原理上来分,还可以分为光学式、磁式、感应式、电容式。常见的是光电编码器(光学式)和霍尔编码器(磁式)

2.光电编码器是一种通过光电转换将输出轴上的机械几何位移量转换成脉冲或数字量的传感器。光电编码器是由光码盘和光电检测装置组成。光码盘是在一 定直径的圆板上等分地开通若干个长方形孔。由于光电码盘与电动机同轴,电动机旋转时,检测装置检测输出若干脉冲信号,为判断转向,一般输出两组存在一 定相位差的方波信号

3.霍尔编码器是一种通过磁电转换将输出轴上的机械几何位移量转换成脉冲或数字量的传感器。霍尔编码器是由霍尔码盘和霍尔元件组成。霍尔码盘是在一 定直径的圆板上等分地布置有不同的磁极。霍尔码盘与电动机同轴,电动机旋转时,霍尔元件检测输出若干脉冲信号,为判断转向,一般输出两组存在一定相位差的方波信号。

如上两张图对应着来看,显然用T1,T2共同计数比较精确,也就是实现了“四倍频”

4.GM37-520直流电机

6.蓝牙模块HC-05

6.蓝牙模块HC-05

CubeMX配置

1.时钟树

2.TIM-PWM配置

配置10KHZ的频率,PWM最大控制7200

3.TIM-Encorder配置

4.TIM-10ms中断配置

/

/////

5.I2C配置

用于MPU6050与32的通信

6.USART配置

用于蓝牙与串口通信

电路搭建

根据自己CubeMX所配置的GPIO口进行电气连接

PID理论简述与调试

引用

【STM32平衡小车】平衡小车的PID环体会心得

【平衡小车制作】(五)位置式PID、直立环与速度环概念(超详解)

一·PID控制算法

PID视频讲解:学会PID-基于板球平衡系统-初中基础就能听懂的简单讲

一文读懂PID控制算法(抛弃公式,从原理上真正理解PID控制)

1.PID控制,即为对偏差进行比例、积分和微分控制。由三个元素构成,分别是比例(P),积分(I),微分(D)。

  工程中P必然存在,在P的基础上又有如PI控制(比例积分),PD控制(比例微分),PID控制(比例积分微分)。

  • 比例项P:提高响应速度,减小静差。
  • 积分项I:消除稳态误差。
  • 微分项D:减小震荡以及超调。

二·位置式PID

1.理论分析

  位置式PID是根据编码器的脉冲累加测量电机的位置信息,并与目标值进行比较,得到控制偏差,然后通过对偏差的比例、积分、微信进行控制,使偏差趋向于零的过程。

2.公式

PWM_out=Kp×e(k)+Ki×Σe(k)+Kd×[e(k)-e(k-1)]

e(k):本次偏差 e(k-1):上一次偏差 Σe(k):e(k)以及以前的偏差的累积和,其中k为1,2,… PWM_out:输出

3.结构框图

4.C语言实现

int Position_PID(int Encoder, int Target)
{
    static float Bias, PWM_out, Integral_bias, Last_bias;
    Bias = Encoder-Target;        // 计算偏差
    Integral_bias += Bias;        // 计算偏差的积分
    // 位置式PID控制器公式
    PWM_out = Position_Kp*Bias+Position_Ki* Integral_bias+ Position_KD*(Bias- Last_bias)
    Last_bias = Bias;            // 保存上一次==偏差
    return PWM_out;                // 输出
}

三·直立环

1.公式

a=b1×θ+b2×θ’; (比例微分控制【PDout=Kp×Angle+Kd×(Angle- Angle_last)】

2.比较

① 纯比例P控制:

 只存在大小与角度偏差成正比的回复力

 a=b1×θ;

(纯比例控制【Pout=Kp×Angle】)

② 比例微分PD控制:

 大小与角度成正比,方向与角速度成正比的回复力;

 大小与角速度成正比,方向与回复力成反比的阻尼力。

 a=b1×θ+b2×θ’;

(比例微分控制【PDout=Kp×Angle+Kd×(Angle- Angle_last)】)

速度环、串级PID

1.理论

  通过速度反馈使得小车保持平衡。

2.串级控制系统

  • 速度环输入:① 给定速度;② 速度反馈。
  • 速度环输出:角度值(直立环的期望角度输入)
  • 直立环输入: 角度反馈。
  • 直立环输出:PWM(直接控制小车)

① 【PD控制器】直立环输出=Kp1×角度偏差+Kd×角度偏差微分

(角度偏差=真实角度-期望角度)

② 【PI控制器】速度环输出=Kp2×编码器偏差+Ki×编码器偏差的积分

(编码器偏差=反馈编码器值-期望编码器值)

【Notes:(1)速度环输出=直立环的期望角度;(2)Kp1:直立环Kp;(3)Kp2:速度环Kp】

③ 串级输出out=Kp1×真实角度+Kd×角度偏差的微分

-Kp1×(Kp2×编码器偏差-Ki×编码器偏差的积分)

PID调试

调试视频可参考视频 【平衡小车PID】直立环+速度环完整调参过程 (开源)

调试前在理解一下PID 怎样使用上位机调PID

学习使用上位机看波形调PID 图文详解PID调参

1.注意

—————————————————————————————————————————————

平衡环:

P可增加响应速度

P过小,响应太慢,不能达到直立。

P过大,会出现大幅度的低频抖动。

D可消除P大了之后产生的大幅低频抖动。

D过大,会出现高频抖动。

速度环:

P可增加速度的响应,I和P有比例关系I=P/200.

P过小,响应慢,出现的现象是加速减速慢,迟钝。

P过大,会出现低频抖动。

转向环

P过小,转弯不及时

P过大,大幅度抖动

————————————————————————————————————————

三个东西待解决

1、左右轮编码器之和数值输出的范围确定

2、小车转向的gyro范围确定

3、MPU6050陀螺仪误差(加上初始值)

————————————————————————————————————————

调参步骤

确立机械中值

直立环(内环)——Kp极性、Kp大小、Kd极性、Kd大小

速度环(外环)——Kp&Ki极性、Kp&Ki大小

转向环——系数极性、系数大小

直立环

1.Kp极性

极性错误:小车往哪边倒,车轮就往反方向开,会使得小车加速倒下。  

极性正确:小车往哪边倒,车轮就往哪边开,以保证小车有直立的趋势。

2.Kp大小:

 Kp一直增加,直到出现大幅低频振荡。(即小车平衡时出现抖动)

3.Kd极性:

极性错误:拿起小车绕电机轴旋转,车轮反向转动,无跟随。

极性正确:拿起小车绕电机轴旋转,车轮同向转动,有跟随。

4.Kd大小:

 Kd一直增加,直到出现高频振荡。(即触碰小车出现剧烈抖动)

直立环调试完毕后,对所有确立的参数乘以0.6作为最终参数。

原因:之前得到的参数都是Kp、Kd最大值,根据工程经验平衡小车的理想参数为最大参数乘以0.6求得。   

结果:乘0.6后,小车抖动消失,但同时直立效果也变差。待下面加入速度环就能得到更好的性能。

速度环

(1)

在调节【速度环参数极性】时,需要去掉【直立环运算】;

  在调节【速度环参数大小】时,需要引入【直立环运算】。

2.Kp&Ki线性关系:Ki=(1/200)*Kp,仅调Kp即可。

3. Kp&Ki极性:(直立环注释)

极性错误:手动转动其中一个车轮,另一车轮会以同样速度反向旋转——典型负反馈。

极性正确:手动转动其中一个车轮,两个车轮会同向加速,直至电机最大速度——典型正反馈。

4.Kp&Ki大小

 增加Kp&Ki,直至:小车保持平衡的同时,速度接近于0,且回位效果好。

寻迹版

Avatar
采用的是Openmv采集图像二值化后拟合中线,计算偏差,串口发给STM32后PID输出,在保持平衡的基础上寻迹,调的时间不多,效果勉强。

修改版

Avatar
给别人接的一个项目,赶上了期末,时间紧迫,匆忙调的。也是STM32.不过用了FreeRTOS。节省了IO资源。

下载链接

炸毛版链接:https://pan.baidu.com/s/1Up9QYBzHQ-SkjILmaqbmOg?pwd=2dsj
提取码:2dsj
寻迹版链接:https://pan.baidu.com/s/158g7ABGLeUlWjxmNjzmy7A?pwd=gb40
提取码:gb40
修改版链接:https://pan.baidu.com/s/1RiVbx8Sy0TkdN3uEqkeVFw?pwd=tsct
提取码:tsct
💡商业转载请联系作者获得授权,非商业转载请注明出处。
协议(License):署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0)。
使用这些免费资源的时候应遵守版权意识,切勿非法利用,售卖,尊重原创内容知识产权。未经允许严禁转载。

评论

  1. FAN
    Windows
    11 月前
    2024-7-25 11:14:12

    GOOD

    • 博主
      FAN
      Windows
      11 月前
      2024-7-25 16:50:15

      😊

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇