【平衡车】PID控制原理到底如何理解?建议收藏!

2023-05-16

在这里插入图片描述

文章目录

  • 前言
  • PID算法
  • PID算法的形成
  • P算法,即比例控制算法:
  • I算法,即积分控制算法
  • D算法,即微分控制算法
  • PID总体的数学模型:
  • 基于单片机的PID控制算法:
  • 单片机中的PID算法的表达式:
  • 采样周期
  • 结语

前言

如何学习PID控制,最开始需要先抛开各种软硬件,单纯从数学上进行分析,弄懂底层的控制原理是什么?理解清楚后,无非把数学公式变成代码。剩下就是不断的实践,来确定三个参数,使控制结果更加准确。

开始介绍之前需要一个例子,我们就以电机控制为例,我们设置所要到达的速度为100。假如我们没有使用PID控制算法,就单纯电机通断一条线,刚开始的时候速度没有达到100,那电机肯定是通,速度就往100冲,当速到超过100时,电机断,速度掉到100以下,然后电机再通,如此反复,使得速度一直在100左右波动。缺点:控制不稳定,没法维持在100;电机一直处于通断状态,十分不稳定。这就需要算法来进行调节,而用到的就是PID算法

PID算法

在这里插入图片描述
在这里插入图片描述
将偏差的比例(Proportion)、积分(Integral)和微分(Differential)通过线性组合构成控制量,用这一控制量对被控对象进行控制,这样的控制器称 PID 控制器

在理解之前我们要搞清楚一个点就是:我们通过PID算法对传感器采集回来的数据进行运算,最后会输出一个值,而这个值就是用来控制PWM的占空比,从来控制电机的转速,这样就可以使控制达到准确、平滑的特点。

PID算法的形成

P算法,即比例控制算法:

分析:
1、从开机以来,传感器会采集到一系列的数据,存放到存储器中构成一串序列X1,X2,X3,X4…X(K-2),X(K-1),X(K),在例子当中也就电机编码器会采集到一些列的电机速度;

2、每次传感器采集到一个Xk都会与我们最开始的设定值相减即Ek=Sv-Xk;
当Ek>0时,表示控制未达标;当Ek=0时,表示正好达标;当Ek<0时,表示已经超标。
同时我们引入一个系数Kp;

公式表示为:Pout=Kp*Ek+OUT0(为什么要有Kp呢,这样我们才能通过调整系数来改变P算法在PID三个算法中的比重;为什么要有OUT0呢,这样当EK=0时,我们还能输出一定量的占空比来维持电机转动,而不至于让电机停止转动)

这个P算法怎么理解呢?
P算法的特点就是它只考虑当前的状态,通过与设定值相减的值来判断我们要给PWM多少占空比。当Ek>0时表示当前控制位达标,那这时我们就要加大PWM的占空比。当Ek<0时,表示已经超标,这是我们就要减小占空比。当EK=0时表示正好达标,此时P算法的缺点也就出来了,当我们达标了,我们算法要干嘛?不知道!所以此时整个系统是失控的。也就是P算法的缺点就在于它只能在有误差的情况下运行,当没有误差的情况它就失控了!
为什么叫比例算法:因为它前面有一个比例系数,我们可以通过调节比例系数,来控制输出的大小,因此类似与比例运算。

I算法,即积分控制算法

我们把运算得到的一系列EK数据存放到存储器中构成一串序列E1,E2,E3,E4...E(K-2),E(K-1),E(K),我们把它成为历史偏差序列. 令SK=E1+E2+E3+E4+...+E(K-2)+E(K-1)+E(K),当SK>0,表示过去这段时间的大部分时间都不达标;当SK=0,表示过去大部分时间达标;当SK<0,表示过去这段时间大多时间超标; 引入公式:Iout=Kp*Sk+OUT0;(Kp和OUT0存在原因和P算法公式一样) 如何理解I算法? I算法的特点就是它只考虑历史的状态,通过SK值来判断我们要给PWM多少占空比。当SK>0时表示过去这段时间的大部分时间都不达标,那这时我们就要加大PWM的占空比。当SK<0时,表示已经超标,这是我们就要减小占空比。当SK=0时表示正好达标。那么I算法有什么缺点吗?有,它太依赖历史数据了,很久以前的数据也会干扰现在的控制,这是I算法最大的缺点。 举个例子:比如我们刚开机,在第一次达到设置值之前,我们可以知道EK都是大于0的,SK都是大于0的,那么在传感器传回来的值是设置时,此时根据I算法判断SK>0,所以要加大PWM输出,可是我们现在已经是达到稳定值了,所以也就是会产生过冲现象。这种现象通常是怎么解决,就是利用积分分离,也就是另I算法权重为0.

在这里插入图片描述

为什么叫积分算法?因为我们进行的是对偏差求和的运算,类似积分运算。

D算法,即微分控制算法

引入DK=EK-E(K-1),因为EK与E(K-1)之间的时间间隔相同,当DK>0时,表示偏差有增大的趋势,当DK<0时,表示偏差有减小的趋势,当DK=0,表示偏差无增大或减小的趋势。

引入公式:Dout0=KP*DK+OUT0;

如何理解D算法?
D算法的特点就是它只考虑偏差EK有没有变大趋势,偏差存不存在不是D算法管的内容,举个例子,比如平衡车受到碰撞,突然要倒了,那种情况D算法就起了重要作用。那么D算法有什么缺点吗?有,它的控制是在误差一直存在的情况下进行,所以它不能单独对系统进行控制。

为什么叫微分算法?因为我们求的是变化率,类似进行微分运算。

PID总体的数学模型:

在这里插入图片描述

基于单片机的PID控制算法:

1、SK的处理:
在这里插入图片描述

这个公式怎么理解?
(1)、T:计算周期(采样周期)这个很重要,因为我们的程序会对传感器采集回来的数据进行PID算法运算,运算完会送到PWM上面。但是如果我们上一次的PWM还没调控完,算法就已经送来另一个控制PWM占空比的数,这时不就矛盾了吗。所以我们要保证每次传感器采集到的数据都能加到PWM上面真正起作用,就要控制T的大小。
(2)、Ti:积分时间常数,通常可以通过设置按钮进行调控。Ti值越大,SK越小,相应该算法所占权重就小。

2、DK的处理:
在这里插入图片描述

这个公式怎么理解?
(1)、T:计算周期,与上面一样;
(2)、Td:微分常数,同样的是通过控制其大小,来控制该算法所占的权重。

单片机中的PID算法的表达式:

1、位置式PID算法:
在这里插入图片描述
这种算法的缺点是:由于全量输出,所以每次输出均与过去状态有关,计算时要对EK进行累加,工作量大。并 且,因为计算机输出的对应的是执行机构的实际位置,如果计算机出现故障,输出的将大幅度变化,会引起执行机构的大幅度变化,有可能因此造成严重的生产事故,这在实际生产际中是不允许的。

2、增量式PID算法:(计算出的是控制量的增加值)
在这里插入图片描述
特点:如果计算机控制系统采用恒定的采样周期 T ,一旦确定 A、 B、 C,只要使用前后三次测量的偏差值,就可以求出控制量。增量式 PID 控制算法与位置式 PID 算法相比,计算量小的多,因此在实际中得到广泛的应用。

而位置式 PID 控制算法也可以通过增量式控制算法推出递推计算公式:
u = u + △u
上式就是目前在计算机控制中广泛应用的数字递推 PID 控制算法

采样周期

采样周期的选择
香农(Shannon) 采样定律 :为不失真地复现信号的变化,采样频率至少应大于或等于连续信号最高频率分量的二倍。根据采样定律可以确定采样周期的上限值。实际采样周期的选择还要受到多方面因素的影响,不同的系统采样周期应根据具体情况来选择。
采样周期的选择,通常按照过程特性与干扰大小适当来选取采样周期:即对于响应快、(如流量、压力) 波动 大、易受干扰的过程,应选取较短的采样周期;反之,当过程响应慢(如温度、 成份)、滞后大时,可选取较长的采样周期。 采样周期的选取应与 PID 参数的整定进行综合考虑, 采样周期应远小于过程的扰动信号的周期,在执行器的响应速度比较慢时,过小的采样周期将失去意义,因此可适当选大一点;在计算机运算速度允许的条件下,采样周期短, 则控制品质好;当过程的纯滞后时间较长时, 一般选取采样周期为纯滞后时间的 1/4~1/8。

结语

大家可以收藏!!!顺便帮我点个赞,给我点鼓励!
在这里插入图片描述

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

【平衡车】PID控制原理到底如何理解?建议收藏! 的相关文章

  • 匿名拓空者Pro开源飞控使用介绍-2-硬件配置及拓展接口

    硬件配置 主控 STM32F407 xff1a 1M FLASH xff0c 192K RAM xff0c 运行频率168MHz xff1b 惯性传感器 icm20602 xff1a 3轴陀螺 43 3轴加速度 43 恒温设计 xff08
  • 匿名拓空者Pro开源飞控使用介绍-3-连接上位机及基本测试

    飞控连接上位机方法 飞控可以通过底板上的USB端口连接上位机 xff0c 使用USB线连接飞控和电脑 xff0c 飞控买家版程序会将USB端口初始化成HID设备 xff0c 免安装驱动程序 xff0c 只要打开匿名上位机 xff0c 打开程
  • 匿名拓空者Pro开源飞控使用介绍-4-飞控安装及坐标系定义

    飞控安装 将机架组装好 xff0c 电机安装于机架上 xff0c 飞控安装于机架重心位置 xff08 一般为机架中心板中心位置 xff0c 也就是两条电机对角线交点 注意 xff0c 飞控尽量水平安装于机架上 xff0c 飞行效果最好 xf
  • 匿名拓空者Pro开源飞控使用介绍-5-接收机连接

    确定使用何种接收机连接方式 匿名拓空者PRO飞控支持SBUS PPM PWM型接收机 xff0c 根据推荐程度依次为SBUS gt PPM gt PWM SBUS PPM均可以实现1根信号线传输多通道遥控数据的功能 xff0c SBUS为串
  • 匿名科创--匿名拓空者PRO—TI版全开源飞控使用入门—TM4C123

    1 飞控介绍 匿名团队针对TI芯片的强烈学习需求 xff0c 推出了匿名拓空者PRO飞控的TI版 使用TI公司的 TM4C123G 主控芯片 xff0c 打造了一款完全开源的飞控产品 xff0c 提供完全开源的飞控整体工程文件 xff0c
  • 匿名科创--ANO_OPENMV视觉开发板介绍

    1 ANO OPENMV介绍 官方OPENMV体积大 xff1f 在飞行器上不方便安装 xff1f 串口通过杜邦线容易接触不良 xff1f 不可否认 xff0c OPENMV为大家提供了一个非常方便 易用的视觉开发环境 xff0c 但是在实
  • 匿名科创--匿名拓空者PRO--开源光流融合算法使用教程

    1 总体介绍 为了更好的支持匿名TI飞控买家 xff0c 匿名团队开源了基于优象光流模块的飞控算法 xff0c 光流传感器直接连接至匿名拓空者PRO TI版飞控 xff0c 由飞控读取原始光流传感器的光流数据 xff0c 结合高度传感器以及
  • Linux 设备驱动开发实例

    编译和运行 驱动编译要用到kernel的Makefile文件 也就是源码树的编译系统 因此 xff0c 源码需要被配置和编译 xff0c 以ubuntu自带的源码为例 xff1a 编译外部模块 ko 的编译命令是 xff1a make C
  • 匿名科创-匿名光流V3版对天安装介绍

    安装介绍 光流模块对天安装时 xff0c 方向参考上图 注意 xff0c 只有光流模块对上安装 xff0c 激光或超声波测距模块仍然对地安装 配置介绍 如需使用对天模式 xff0c 硬件安装好后 xff0c USB线连接光流模块至上位机 x
  • 从 C51+uCos-II 近距离了解操作系统任务切换原理

    前言 从 C51 43 uCos II 简单介绍下任务切换的原理 方便大家更形象的理解多任务怎么切换 为后续写 x86 43 Linux 任务切换做铺垫练手吧 参考资料如下 xff1a uCos II 源码 单片机原理与应用及 C51 编程
  • Keil+Simulink生成Xcp标定协议A2L文件

    Keil 43 Simulink生成Xcp标定协议A2L文件 由于最近要为ECU移植XCP协议 xff0c 所以记录一下 xff0c 我使用的MCU为NXP S32K144 IDE选用MDK 官方IDE S32DS无代码联想功能 xff0c
  • 记录一下关于MPC5744P CAN总线学习

    记录一下关于MPC5744P CAN总线学习 主要是针对开发出BUSOFF管理 xff0c NXP感觉都是一个套路 xff0c 无论powerpc xff0c 还是arm m status t span class token functi
  • 通过.map文件填写XCP标定需要的A2L文件

    首先你得有一个模板 xff0c 通过python脚本打开编译后的 map文件自动填写到A2L文件对应位置 xff0c 目前只实现了填写Mesurement 区域 xff0c 但是这个填写主要是更新变量名和对应的ECU ADRRESS 因为
  • Autosar Xcp移植

    前言 xff1a 可能有兄弟胸中有点疑问 Vector ETAS等软件包都有XCP xff0c 你移植个吊 xff0c 但是我的MICORSAR BSW中没发现XCP静态代码 xff0c 倒是在CFG中发现了XCP配置选项 xff0c 难道
  • Tricore学习-芯片启动流程

    第一次接触Tricore 学习下从芯片上电到运行到main函数的过程 xff0c 本文以TC36X为例 xff0c 具体可参考英飞凌官方的Infineon AURIX TC3xx Part1 UserManual v02 00 EN 首先T
  • ETAS-AUTOSAR学习-0.1Task配置思考

    span class token function TASK span span class token punctuation span OsTask BSW span class token punctuation span span
  • AurixDevStudio集成MCAL

    这是Tricore MCAL安装路径 打开ADS新建一个AURIX Project 我手上的是龙邱的TC377最小系统 就这样选 理解下第一个选项 新建好的基础工程是这个样子 删除掉Library文件夹 因为我们这里要使用的MCAL而不是i
  • git 使用命令创建新分支

    如何使用Git 命令创建一个新分支 使用场景 xff1a 本文主要详细介绍了如何使用git命令基于一个项目的master分支创建一个新的git分支 xff0c 并且推向远程仓库 xff0c 使其他开发人员能够功能使用该分支进行开发 操作步骤
  • go web gin框架实战1

    文章目录 go web gin框架实战1 参考资料2 demo3 demo运行4 demo解析 go web gin框架实战 1 参考资料 gin框架官方文档 链接 2 demo span class token keyword packa
  • Hadoop之MapReduce

    摘要 xff1a MapReduce是Hadoop的又一核心模块 xff0c 从MapReduce是什么 xff0c MapReduce能做什么以及MapReduce的工作机制三方面认识MapReduce 关键词 xff1a Hadoop

随机推荐

  • Linux常用命令

    摘要 xff1a 采用命令行模式操控Linux系统非常重要 本文总结Linux常用的命令 xff0c 包括命令的含义 xff0c 命令的用法以及命令的拓展 关键词 xff1a 命令行模式 Linux常用命令 给Linux系统下达命令 xff
  • Hadoop之HDFS文件操作

    摘要 xff1a Hadoop之HDFS文件操作常有两种方式 xff0c 命令行方式和JavaAPI方式 本文介绍如何利用这两种方式对HDFS文件进行操作 关键词 xff1a HDFS文件 命令行 Java API HDFS是一种分布式文件
  • R实战读书笔记四

    第三章 图形入门 本章概要 1 创建和保存图形 2 定义符号 线 颜色和坐标轴 3 文本标注 4 掌控图形维数 5 多幅图合在一起 本章所介绍内容概括如下 一图胜千字 xff0c 人们从视觉层更易获取和理解信息 图形工作 R具有非常强大的绘
  • R语言——数据分析的一把利剑

    R语言 xff0c 我把它称之为数据分析的一把利剑 为什么这么说呢 xff1f 先让我们看一下 xff0c 什么是数据分析 xff1f 所谓数据分析 xff0c 就是以商业目的为驱动 xff0c 所开展的获取数据 处理数据 分析数据 展示数
  • 【爱上Linux】第一课 Linux概述

    学习应该是快乐的事情 快乐的东西应该要分享开来 xff0c 人人都快乐 xff01 爱上Linux 第一课 Linux概述 在本课中 xff0c 和朋友们一起来思考这些问题 问题一 xff1a 谈Linux学习 xff1f 从四个方面来看
  • 链表的创建与遍历

    链表 xff0c 简而言之 xff0c 就是基于链式储存结构下的线性表 链表包括单向链表 双向链表以及循环链表 链表是一种很常用的数据结构 xff0c 其定义如下 xff1a 单向链表的定义 定义说明 xff1a 包括数据域和指针域 typ
  • Java异常机制

    Java异常 xff08 Exception xff09 又称例外 xff0c 是一种运行时错误 Java异常机制就是对于Java异常的处理方法 xff0c 使用Java异常机制能提升程序的容错性 xff0c 从而使程序更加健壮与安全 ja
  • Java序列化与反序列化

    Java序列化与反序列化是什么 xff1f 为什么需要序列化与反序列化 xff1f 如何实现Java序列化与反序列化 xff1f 本文围绕这些问题进行了探讨 1 Java序列化与反序列化 Java序列化是指把Java对象转换为字节序列的过程
  • Java语言中几个常用的包

    Java采用包结构来组织和管理类和接口文件 本文介绍Java语言类库中几个常用的包 xff0c 因为这几个包在软件开发与应用中经常需要用到 xff0c 其中有些包是必要的 若是离开它 xff0c 还真不能做事情了 第一个包 xff1a ja
  • 计算机网络

    Cname和A记录 CNAME和A记录 A记录 Address记录 xff0c 代表指向关系 www xx com 1 1 1 1 www yy com 2 2 2 2 CNAME cname 代表一种映射关系 www yy com www
  • AI芯片面试总结

    基础书籍有哪些 xff1f 重点章节以及概念 xff1f 计算机体系结构 量化研究方法 xff1b 计算机组成与设计 软硬件接口 xff1b deep learning 深度学习 xff1b python xff1b CMOS数字集成电路
  • Android的系统架构

    Android的系统架构采用了分层架构的思想 xff0c 如图1所示 从上层到底层共包括四层 xff0c 分别是应用程序程序层 应用框架层 系统库和Android运行时和Linux内核 图1 xff1a Android系统架构图 每层功能简
  • ensp实验一网络设备基本操作

    实验一 网络设备基本操作 一 实验目的 熟悉网络设备的基本配置 xff1b 掌握网络设备文件系统管理 xff1b 掌握设备的基本调试方法 二 实验学时及环境 1 实验学时 xff1a 2 2 操作系统 xff1a Windows 3 模拟环
  • sudo rosdep init出错 rosdepc update的解决方案

    https mp weixin qq com s VGs8oWdhHH6XsHcx21lN4Q 或者搜索 本文之后 xff0c 世上再无rosdep更新失败问题 xff01 如果有 小鱼就
  • pixhawk学习笔记---创建新的应用程序

    最近转到无人机领域的开发中 xff0c 感觉和以往搞android驱动差别比较大 xff0c 以前搞android驱动的时候网上的资料满天飞 xff0c 但是现在关于飞控相关的资料却少之又少 xff0c 一些资料都是从原理上入手 xff0c
  • 伽马贝塔函数

    在数理方程 概率论等学科经常遇到以下的含参变量的积分 xff0c 它们依次为第一类和第二类欧拉 xff08 Euler 1707 1783瑞士数学家 xff09 积分 xff0c 或依次称为贝塔 xff08 Bata xff09 函数和伽马
  • http-parser用法

    头文件说明 xff1a 解析类型定义 xff1a enum http parser type HTTP REQUEST HTTP RESPONSE HTTP BOTH 解析函数声明 xff1a void http parser init h
  • gazebo崩溃

    1 虚拟机下打开gazebo报错 xff1a VMware vmw ioctl command error Invalid argument INFO 1610283240 619937255 0 180000000 LeePosition
  • k8s中文网站

    https www kubernetes org cn doc 11
  • 【平衡车】PID控制原理到底如何理解?建议收藏!

    文章目录 前言PID算法PID算法的形成P算法 xff0c 即比例控制算法 I算法 xff0c 即积分控制算法D算法 xff0c 即微分控制算法PID总体的数学模型 xff1a 基于单片机的PID控制算法 xff1a 单片机中的PID算法的