平衡小车调试总结及心得

2023-11-11

目录

一、知识点

1、PID控制算法

 2、平衡原理

二、硬件

1、编码器

2、电机

 3、PWM

4、陀螺仪MPU6050

三、PID调节过程

1、理论部分

1.1直立环

1.2速度环、串级PID

1.3、纯比例控制

2、调参步骤:

2.1大致步骤:

2.2直立环

2.3速度环

2.4转向环


一、知识点

1、PID控制算法

PID控制即为对偏差进行比例、积分和微分控制。由三个元素构成,分别是比例(P)积分(I)微分(D)
  工程中P必然存在,在P的基础上又有如PI控制(比例积分控制),PD控制(比例微分控制),PID控制(比例积分微分控制)。

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

 2、平衡原理

小车往前倒,电机加速往前,从而达到平衡。反之亦然。

 首先我们要知道,电机通过PWM控制转速,单片机PWM给到电机驱动,从而控制电机的转速和方向。

  具体流程如下:

或者用方框图表示:


 二、硬件

硬件占用的GPIO

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

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

  1. 电机1——PB12/PB13

电机2——PB14/PB15

  1. PWM1——PA8---TIM1_1

PWM2——PA11---TIM1_4

4、 MPU6050中断引脚——PB5

MPU6050所用IIC——PB3/PB4

硬件连接:

讲解:

1、编码器

这里以霍尔编码器为主介绍(光电编码器精度比霍尔高38倍)。霍尔编码器是有霍尔马盘和霍尔元件组成。霍尔马盘是在一定直径的圆板上等分的布置有不同的磁极。霍尔马盘与电动机同轴,电动机旋转时,霍尔元件检测输出若干脉冲信号,为判断转向,一般输出两组存在一定相位差的方波信号。示意图如下:

我用的电机是GM25-370直流减速电机(带霍尔编码器),其对应编码器引脚图如下:

通常有两种方式,第一种软件技术直接采用外部中断进行采集,根据AB相位差的不同可以判断正负。第二种硬件技术直接使用定时器的编码器模式,这里采用第二种。也是大家常说的四倍频,提高测量精度的方法。其实就是把AB相的上升沿和下降沿都采集而已,就是所有边沿都计数,AB两相有90度的相位差,可以判断出旋转方向和旋转速度,也可以提高精度,所以1变4。自己使用外部中断方式实现就比较占用资源了,这里建议使用定时器的编码器模式来测量脉冲变化值。

2、电机

这里所说的电机也就是通过电机驱动控制电机,电机驱动我们使用的是tb6612,一定要用tb6612的芯片,国产做的兼容板子质量太差,钽电容很脆,一不注意就炸了,比如我当时就差点当场去世,前期调试不建议使用,虽然便宜一半,但是为了系统的稳定和安全,还是用tb6612吧,但是调试完成后可以换成兼容板。

电机驱动引脚定义:

可见,电机驱动最多可接两个电机,tb6612的稳定性是比L298N稳定的,如果感兴趣可以试试L298N。下面以一个电机的配置举例如下:

电源,地,STBY这里不做过多赘述。

输入端大致配置为:

Ain1=1,Ain2=0,电机正转

Ain1=0,Ain2=1,电机反转

输出端AO1 AO2接编码器的动力线部分

PWM信号输入端接单片机定时器的PWM输出

3、PWM

   软件PWM的配置过程不再详解,具体可参考正点原子的用户手册,这里讲解一下代码中的Load(Moto1,Moto2)加载到电机的函数,加载的值实际是占空比CCRX的值,也就是通过控制占空比达到控制速度的效果。PID算法就是把需要的CCRX实时地算出来,然后控制电机,达到平衡。

   讲解一下PWM周期的计算,具体公式如下:

        72MHZ*T=(ARR+1)(PSC+1);

占空比:CCRX/ARR=高电平时间/T;

PWM时序图如下:重装载值是ARR,比较值是CCRX

这里再讲解一下PWM限幅,实际是限制CCRX的值,避免CCRX大于ARR的值。

再讲解一下低通滤波,期间需要低频滤波,我们是以直立环为主,速度环为辅,速度环相对于直立环来说是一个干扰,最终目的是直立。低频滤波作用是使得波形更加平滑,滤除高频干扰,防止速度过大影响直立环正常工作。

4、陀螺仪MPU6050

作用:检测倾斜角。

主要用到如下三个引脚:
MPU6050中断引脚——PB5
MPU6050所用I2C——PB8/PB9

中断引脚的定义为配置PB5为上拉输入,检测到数据后电平变低,则进入外部中断,整个控制周期都是再在中断中进行,这里我们的检测周期设为10ms,则我们读取的编码器的值/10ms就是速度值,因为时间是固定的,所以编码器的值即可理解为速度。


三、PID调节过程

1、理论部分

牢记如下知识点:

PID控制即为对偏差进行比例、积分和微分控制。由三个元素构成,分别是比例(P)积分(I)微分(D)
  工程中P必然存在,在P的基础上又有如PI控制(比例积分控制),PD控制(比例微分控制),PID控制(比例积分微分控制)。

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

1.1直立环

1.理论

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

2.公式

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

3.结构框图

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

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

1.2速度环、串级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.(3)Kp2:Velocity_Kp.)

【中文】

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

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

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

1.3、纯比例控制

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

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

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

 

比例微分控制器

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

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

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

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

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

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

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

2、调参步骤:

2.1大致步骤:

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

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

2.2直立环

         Kp极性:

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

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

        Kp大小:

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

        Kd极性:

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

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

        Kd大小:

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

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

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

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

2.3速度环

速度环参数调节前注意:

一、

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

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

二、

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

Kp&Ki:

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

Kp&Ki极性:

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

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

Kp&Ki大小:

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

2.4转向环

Kp极性:

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

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

Kp大小:

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


代码资料均已打包,有需要的找我要即可。

B站:天下行走ㅍ_ㅍ (相关视频)

知乎:天下行走 (相关文章)

CSDN:技术创造无限可能

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

平衡小车调试总结及心得 的相关文章

随机推荐

  • python环境变量配置

    python现在的版本 主要是python2和python3两个大版本 这两个版本有很大的不同 当我们在自己电脑上同时安装了python2 x和python3 x版本的解释器的时候 就需要对环境变量的配置进行一定的修改 大概解释一下 我对环
  • 什么是 前端&后端,始端&末端

    前端 后端 前端和后端是指不同的开发领域和技术 前端指的是用户可见的界面 比如网页 移动应用 游戏等 使用的技术包括HTML CSS JavaScript等 后端指的是用户看不见的部分 比如服务器 数据库 业务逻辑等 使用的技术包括Java
  • 数据结构笔记--图

    数据结构笔记 图 图 本章总结 图的概念 基本术语 抽象数据类型 图的存储结构 邻接矩阵表示法 数组 无向图 有向图 有权图 邻接矩阵的优缺点 代码实现 邻接表表示法 链式 结构 无向图 有向图 邻接表的优缺点 邻接矩阵与邻接表的对比 代码
  • 详解spring的IOC控制反转和DI依赖注入

    转载 详解spring的IOC控制反转和DI依赖注入 2018 06 05 15 45 34 jiuqijack 阅读数 2945 文章标签 spring IOC控制反转 DI依赖注入 更多 分类专栏 spring
  • 关于Android的不同分辨率图片适配

    看了几篇相关的博客 根据自己的实际开发 总结了一下 首先要搞清楚 图片的分辨率单位是像素 也就是px 比如72x72的图片 就是长宽都是72px 手机屏幕的分辨率跟图片类似 但是它还有个很重要的指标 dpi 叫做像素密度 代表1英寸长度的屏
  • 【C++】C++11 STL算法(三):分隔操作(Partitioning operations)、排序操作(Sorting operations)

    目录 分隔操作 Partitioning operations 一 is partitioned 1 原型 2 说明 3 官网demo 二 partition 1 原型 2 说明 3 官方demo 三 partition copy 1 原型
  • Spring MVC静态资源映射

    Spring MVC静态资源映射 静态资源映射 使用容器的默认Servlet location mapping cache period order Spring MVC需要对RESTful风格的URL提供支持 而真正的RESTful风格的
  • C++11中std::thread线程实现暂停(挂起)功能

    一 封装Thread类 我们基于C 11中与平台无关的线程类std thread 封装Thread类 并提供start stop pause resume 线程控制方法 为了让线程在暂停期间 处于休眠 不消耗CPU 我们使用C 11提供的锁
  • Amazon Gamelift游戏托管服务

    Amazon GameLift是亚马逊云科技推出的一种用于托管专用游戏服务器的托管服务 它可以安全地预置实例 在正在运行的实例上部署游戏服务器 在游戏服务器队列间对流量进行负载均衡 监控实例和游戏服务器的运行状况 并在无需人工干预的情况下替
  • jaffe 数据库百度网盘下载

    供学术研究讨论使用 禁止商用 如有引用请注明jaffe论文出处 链接 https pan baidu com s 1Rc18GnVqP7WRmayFAhrtYA 提取码 2jq8
  • 前端常用的几种加密方法

    目前在前端开发中基本都会用到加密 最常见的就是登录密码的加密 接下来会为大家介绍几种加密方法 md5 加密 MD5 加密后的位数有两种 16 位与 32 位 默认使用32位 16 位实际上是从 32 位字符串中取中间的第 9 位到第 24
  • 《C和C++安全编码》读书笔记(一)

    第一章 夹缝求生 1 1 衡量危险 生产不安全软件系统的风险可以从历史风险和潜在的未来风险两方面进行评估 威胁的来源 黑客 内部人员 罪犯 竞争情报从业者 恐怖分子 信息战士 CERT CC 美国计算机紧急事件响应小组协调中心 监控漏洞信息
  • 图解通信原理与案例分析-21:4G LTE多天线技术--天线端口、码流、分集Diveristy、波束赋形BF、空分复用MIMO、空分多址

    目录 前言 第1章 MIMO多天线技术概述 1 1 三大目的 1 2 六大分类 第2章 单天线SISO 单输入单输出 2 1 概述 2 2 实现原理 多路 异频 发送 接收 对 第3章 接收分集MISO 多输入单输出 冗余接收 3 1 概述
  • 受够了初级排序算法,今天来个效率高的——归并排序。

    受够了初级排序算法 今天来个效率高的 归并排序 前情回顾 在前几篇文章中我们学习了选择排序 插入排序 以及插入排序的优化版希尔排序 但是他们的时间复杂度都是O N 2 现在我们终于迎来了我们算法效率大幅度提升的 时间复杂度为O NlogN
  • 【vue】vue组件之间相互调用问题处理

    背景 最近再使用抽屉组件的时候 遇到一个棘手的问题 就是抽屉是座位详情功能使用的 这就会带来一个问题 可能在 用户详情抽屉 中需要调用 订单详情抽屉 而 订单详情抽屉 也可能调用 用户详情抽屉 简单来说过就是A组件调用B组件 B组件又调用A
  • 私有化部署即时通讯平台,完美替代飞书和钉钉的SaaS系统

    在当今快速发展的数字化时代 企业对于安全 灵活 可定制的即时通讯平台需求不断增长 作为一家领先的品牌 WorkPlus专注于提供私有化部署的即时通讯平台 完美替代飞书和钉钉的SaaS系统 本文将重点介绍WorkPlus如何通过创新的解决方案
  • iOS开发中的敏捷方法

    敏捷开发是现在比较流行的软件开发方法 因为方法决定效率 好的方法可以大大地提高开发效率 什么是敏捷 Agile 敏捷源于2001年美国犹他州雪鸟滑雪圣地的一次聚会 聚会是敏捷方法发起者和实践者的聚会 他们经过两天的讨论 通一份简明扼要的 敏
  • ExtJS Sencha CMD 打包异常报错分析处理 - 2

    今天使用 sencha app build testing 进行编译 然后运行的时候 出现错误 app js dc 1666874035180 81578 Uncaught TypeError t 1 is not a function a
  • yar框架的并行原理分析(libcurl+epoll)

    yar是一个轻量级的php rpc框架 有意思的是它的并行 其实就是libcurl作为网络库提供http请求 然后用epoll做为事件监听来实现整个异步并行调用的 在此基础上 就是如何利用zend api来对整个逻辑的封装了 我们先抛开ze
  • 平衡小车调试总结及心得

    目录 一 知识点 1 PID控制算法 2 平衡原理 二 硬件 1 编码器 2 电机 3 PWM 4 陀螺仪MPU6050 三 PID调节过程 1 理论部分 1 1直立环 1 2速度环 串级PID 1 3 纯比例控制 2 调参步骤 2 1大致