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 小米 华为 单反 装机 图拉丁
 
   -> 嵌入式 -> 平衡小车制作STM32+cubeMX(直立环+速度环+转向换)串级PID学习,快速上手 -> 正文阅读

[嵌入式]平衡小车制作STM32+cubeMX(直立环+速度环+转向换)串级PID学习,快速上手

硬件使用

1.大鱼电子的平衡小车系统板

2.大鱼电子平衡小车电机和底盘

3.航模3s电池

硬件占用的GPIO框架

编码器1——PA0/PA1---TIM2

编码器2——PB6/PB7---TIM4

电机1——PB12/PB13

电机2——PB14/PB15

PWM1——PA8

PWM2——PA11

MPU6050中断引脚——PB5

MPU6050所用IIC——PB3/PB4

14151312

Encoder.c

GPIO初始化

定时器初始化

设置编码器模式

清除标志位

中断配置

清零计数

开定时器

PWM.c

GPIO初始化

定时器初始化

输出比较模式初始化

MOE主输出使能

通道预装载使能

使定时器在ARR寄存器上的预装载寄存器

Moto.c

GPIO初始化

Mpu6050中断引脚

Exit.c

GPIO初始化

EXTI外部中断初始化

NVIC

PWM赋值函数

PWM限幅

绝对值函数

小车异常关闭函数

PID函数(位置式PID)

直立环(V)

速度环(V)

转向环(X)

平衡小车的控制理论和控制过程的编程

PID调参

TIM_EncoderInterfaceConfig

(TIM2,TIM_EncoderMode_TI12,TIM_ICPolarity_Rising,TIM_ICPolarity_Rising);

TIM2:定时器2

TIM_EncoderMode_TI12:T1和T2的每个跳变沿均计数。

TIM_ICPolarity_Rising:不反相。

TIM_ICPolarity_Rising:不反相。

根据两个输入信号(TI1&TI2跳变顺序,产生了计数脉冲方向信号

依据两个输入信号的跳变顺序,计数器向上或向下计数,同时硬件对TIMx_CR1寄存器的DIR位进行相应的设置。

不管计数器是依靠TI1计数、依靠TI2计数或者同时依靠TI1和TI2计数。

在任一输入端(TI1或者TI2)的跳变都会重新计算DIR位。

【正反】

正转:T1超前T2相位90度。

反转:T1滞后T2相位90度。

【模式】

TI1模式:在T1的所有边沿 计数。

TI2模式:在T2的所有边沿 计数。

TI12模式:在T1和T2的所有边沿 计数。

PID控制

PID控制,就是对偏差进行比例积分微分的控制。

PID由3个单元组成,分别是比例(P)单元、积分(I)单元、微分(D)单位。

工程中P必然存在,在P的基础上又有如PD控制器、PI控制器、PID控制器等。

比例项:提高响应速度,减小静差。

积分项:消除稳态误差。只要有偏差,我就积分,有一丁点偏差,我也会积分。积积,就会非常大。直到你偏差变为0.

微分项:减小震荡以及超调。

Pwm=Kp*e(k)+Ki*∑e(k)+Kd*[e(k)-e(k-1)]

Kp*e(k)

Ki*∑e(k)

Kd*[e(k)-e(k-1)]

Ki=Kp*(1/Ti) *Ti

Kd=Kp*(1/T)*Td

位置PID

1.理论分析

位置闭环控制就是根据编码器的脉冲累加测量电机的位置信息,并与目标值进行比较,得到控制偏差

然后通过对偏差的比例积分微分进行控制,使偏差趋向于零的过程。

2.公式

Pwm=Kp*e(k)+Ki*∑e(k)+Kd*[e(k)-e(k-1)]

e(k):本次偏差

e(k-1):上一次的偏差 ?

∑e(k):e(k)以及之前的偏差的累积和;其中k为1,2,,k;

Pwm代表输出

3.结构框图

4.C语言实现

int Position_PID (int Encoder??,??int Target)

??{

???static float Bias,? Pwm,? Integral_bias,? Last_Bias;

???Bias=Encoder-Target; //计算偏差

???Integral_bias+=Bias; //求出偏差的积分 ?????

???Pwm=Position_KP*Bias+Position_KI*Integral_bias+Position_KD*(Bias-Last_Bias); ??//位置式PID控制器 ???

???Last_Bias=Bias; ??????//保存上一次偏差

???return Pwm; ??????????//输出

??}

直立环

1.理论

小车往那边倒,车轮就往哪边开,既可以保持车子的平衡。

2.公式

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

3.结构框图

直立环:让小车角度趋近0;

速度环:让电机速度趋近0;

速度环、串级PID

速度环输入:1.给定速度。2.速度反馈。

输出:角度值(直立环的期望速度输入)

直立环输入:1.给定角度(速度环输出)。2.角度反馈

输出:PWM(直接控制小车)

Vertical_out=Kp1*( real_Angle- expect_Angle)+Kd*D( real_Angle- expect_Angle) ?//直立PD控制器

Velocity_out =Kp2*(Encoder_ real- Encoder_ expect)+Ki*S(Encoder_ real- Encoder_ expect) ?//速度PI控制器

(NOTE:(1)Velocity_out?=?expect_Angle.(2)Kp1:Vertical_Kp.3Kp2:Velocity_Kp.

【中文】

直立环输出=Kp1*(真实角度-期望角度+机械中值)+Kd*角度偏差的微分 ????//角度偏差=真实角度-期望角度

速度环输出=Kp2*(反馈编码器值-期望编码器值)+Ki*编码器偏差的积分 //编码器偏差=反馈编码器值-期望编码器值

(NOTE:(1)速度环输出=直立环的期望角度。(2)Kp1:直立环Kp。(3)Kp2:速度环Kp。)

合并推导:

直立环输出Vertical_out=Kp1*(θ_r-θ_e)+Kd*?(θ_r-θ_e)

速度环输出Velocity_out=Kp2*(E_r- E_e)+Ki*Σ(E_r- E_e)

因为:θ_e = Velocity_out

所以直立环输出Vertical_out =

=?Kp1*{?θ_r-[ Kp2*(E_r- E_e)+Ki*Σ(E_r- E_e)?]}+Kd*(θ_r-θ_e)

=?Kp1*?θ_r-?Kp1* Kp2*(E_r- E_e)- Kp1*Ki?*Σ(E_r- E_e)?+Kd*(θ_r-θ_e)

=?Kp1*?θ_r+?Kd*(θ_r-θ_e)- Kp1* [Kp2*(E_r- E_e)+?Ki?*Σ(E_r- E_e)]

【中文】

=Kp1*真实角度+?Kd*角度偏差的微分-Kp1* [Kp2*编码器偏差- Ki?*编码器偏差的积分]

即:

串级输出OUT=

Kp1*?real_Angle?+Kd* D( real_Angle- expect_Angle)

Kp1*[Kp2*(Encoder_ real- Encoder_ expect)+Ki*?S(Encoder_ real- Encoder_ expect)]

纯比例控制

单摆的加速度单摆的倾角成正比

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

a=b1*θ; ——> 比例控制【Pout=Kp*Angle】

比例微分控制器

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

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

a=b1*θ+b2*θ;?——>比例微分控制【PDout=Kp*Angle+Kd*( Angle-Angle_last)】

  1. 编写PID相关函数以及平衡小车控制函数
  2. 编写缺少的一个函数
  3. 完善主函数----初始化&变量的定义

控制函数写在外部中断服务函数里面。

10ms控制周期由MPU6050的INT引脚给定。

保证数据的采集和处理的同步性。

3.1:

《修正control.c的遗漏处》、

《速度环的反馈系统》、

《平衡小车硬件结构与组装》

3.2:

《PID调参》?

3.2:调参步骤:

  1. 确立机械中值。
  2. 直立环(内环)—Kp极性、Kp大小。Kd极性、Kd大小。
  3. 速度环(外环)——Kp&Ki极性、Kp&Ki大小。
  4. 转向环——系数极性、系数大小。

机械中值把平衡小车放在地面上,从前向后以及从后向前绕电机轴旋转平衡小车,两次的向另一边倒下的角度的中值,就是机械中值。

直立环

Kp极性:

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

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

Kp大小:

Kp一直增加,直到出现大幅低频震荡

Kd极性:

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

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

Kd大小:

Kd一直增加,直到出现高频震荡

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

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

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

速度环

速度环参数调节前注意:

一、

在调试【速度环参数极性】时:需要去掉(注释掉)【直立环运算】

在调试【速度环参数大小】时:再次引入(取消注释)【直立环运算】

二、

【转向环运算】始终是去掉(注释)的一个状态。若转向环已提前将参数调试好,则未注释也影响不大。

Kp&Ki:

线性关系、Ki=(1/200)*Kp、仅调Kp即可。

Kp&Ki极性:

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

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

Kp&Ki大小:

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

转向环

Kp极性:

极性错误:拿起小车,并将小车绕Z轴旋转,两车轮旋转的趋势与小车旋转趋势一致——典型正反馈。

极性正确:拿起小车,并将小车绕Z轴旋转,两车轮旋转的趋势与小车旋转趋势相反——典型负反馈。

Kp大小:

加大Kp,直至走直线效果较好,且无剧烈抖动。

  嵌入式 最新文章
基于高精度单片机开发红外测温仪方案
89C51单片机与DAC0832
基于51单片机宠物自动投料喂食器控制系统仿
《痞子衡嵌入式半月刊》 第 68 期
多思计组实验实验七 简单模型机实验
CSC7720
启明智显分享| ESP32学习笔记参考--PWM(脉冲
STM32初探
STM32 总结
【STM32】CubeMX例程四---定时器中断(附工
上一篇文章      下一篇文章      查看所有文章
加:2022-09-24 21:12:15  更:2022-09-24 21:14:46 
 
开发: 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年12日历 -2024/12/28 1:40:03-

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