PID参数整定具体方法-圆周倒立摆

2023-05-16

0.前言

关于PID参数的整定,网上调节的口诀、原则、方法满天飞,但是并没有具体的到步的教程,作为初学者且非自动化相关专业学生有点看不懂、一脸懵逼,走了不少弯路,呕心沥血才调节好,之后才看得懂那些口诀、原则。为了让大家少走弯路,这里将给出圆周倒立摆直立环PID参数整定的具体步骤。

多图预警!

圆周倒立摆整体图

 1.PID编程及理解

磨刀不误砍材工,是骡子是马,咱先看看,要想调好PID参数必须理解每个参数的意义,具体来说就是每个参数在那条PID曲线的作用,这需要一点点高等数学功底,如果你对PID有很深的理解,可以跳下文。必须认识到:不了解PID公式是没办法了解各个参数的意义的。如果你不知道微分系数D为什么能增加系统稳定性、不知道为什么微分系数I可以消除偏差,我们需要了解PID重要参数的数学意义对应的实际意义,可以去看:https://blog.csdn.net/qq_36720691/article/details/97252418#comments

2.具体调试方法

在调试PID之前,先保证几件事情:

1.PID调节周期(T)为固定值,(也就是说你需要一个定时器实现精确周期调用PID调节,具体原因,请看上文:PID编程及理解)

2.相关辅助系统是稳定运行的,(比如你需要PID控制电机转速,你需要保证驱动器的供电电压稳定,假设:pwm占空比是50%,驱动器电压输出给电机电压=供电电压 X 50%,如果你供电电压不稳定的话,相同PWM下,电机电压不是相同值,会造成pid怎么调节都无法调稳)

3.给上位机发送信息的周期为固定值(你需要一个上位机,用于观察波形、方便计算其余参数)

一句话总结:要保证所有的不行都是PID参数的不行

接下来开始调节PID了:我采用的是圆周倒立摆进行演示,采用临界比例度法,演示调节直立环的具体方法。

第一步:找到临界比例项系数P

1.将调节器积分时间设定为无穷大、微分时间设定为零(即ti=∞,Td=0),也就是说:积分项I、微分项D先清零,P随便给个值,这里给了35.5

double Balance_PID(double *Angle,double SET)

{		 
	static double E_sum,Error_last;          //上一次误差  	
	double  kp=35.5,ki=0,kd=0;
	double pid;
	double Error_now;          //当前误差  

	Error_now = SET-*Angle;               //当前误差
	
        E_sum +=  Error_now;                       //误差累计 

	pid= kp * Error_now + ki * E_sum + kd * (Error_now-Error_last);     //pid计算公式
			
	Error_last=Error_now;
			
return -pid;					
} 

2.给倒立摆摆杆一个偏置,然后启动,开始调节、观察波形。(倒立摆摆杆目标值180°,开始时把摆杆放在165°或者195°或者其他非目标值(180°)的度数上、按下按键开始调节)

 按下按键后,系统开始周期性调用PID进行姿态调节,单片机周期性给上位机传输角度数据,因此会得到一个角度波形,

我这里是给的偏置大约是-10°,从170°开始调节,可以看到只有P的作用时,系统挣扎了几下,摆杆来回摆动了加下,然后失去稳定落下来

我们放大来看:

初始位置是170度左右,目标位置是180°,角度在迅速变大之后迅速变小,来回几下之后,失去稳定

如果你理解了PID公式,那么你应该知道,在存比例调节的时候,能让摆杆等幅度震荡的P是最合适的,我们需要找的就是能让摆杆等幅度震荡的P

可以看到上面的那个角度波形图中,角度再上去之后下来是超过了一开始的偏置,因此可以判断P大了,这不是我们想要的P

我们换个值看看,直接缩小一半左右:P=26.5,给同样的偏置,按下按键开始调节,看波形。

角度再上去之后下来是没有达到一开始的偏置,因此可以判断P小了。

重复工作,慢慢测试,有时候同一个数要多测几次,如果你手斗的话,可以采用某一种策略改变P(如每次+10,每次翻倍,两边夹逼),工作量很大,慢慢找,直到找到比较好的等幅震荡的曲线:

P=27.5

P=28.5

P=34.5

P=35.2

 测试到最好找到了最好的曲线:

P=35.135

P=35.135放大来看:

至此我们找到了临界的P值。

第二步:根据临界比例度方法计算I和D

PID经验计算方法这里有很好的介绍:

http://bbs.elecfans.com/jishu_1502798_1_1.html

 

表中\delta k是临界比例度,Tk是临界周期

Tk通过观察波形曲线计算出来:

当时大概两个波峰之差算是9,我单片机是每10ms给上位机发送一次数据,因此Tk = 90ms,(所以给上位机发送数据的周期必须使固定的,不然会有比较大的误差)

而:临界比例度\delta k = 1/Kp;

如果你了解PID的公式(不了解可以去看上文),轻易知道:

                              

 上面的T是调节周期,也就是你调用PID调节函数的周期,我是每4ms调节一次,因此我的T = 4ms

 接下来就是计算的问题了:

 

 至此,P、I、D三个参数全部得到;(不好意思,上图,Td算错了

同样给个偏置,看看波形

放大来看:

从150°开始,按下按键,开始调节,杆子瞬间就直立了,觉还可以。

至此:直立环调节基本完成,不过值得注意的是,一个直立环无法让倒立摆稳定。

第三步:P、I、D微调

如果你有强迫症,对直立环响应曲线不满意,这时候就需要对三个参数进行微调,

调节原则如下:

1、在输出不振荡时,增大比例增益P。

2、在输出不振荡时,减小积分时间常数Ti。

3、输出不振荡时,增大微分时间常数Td。

口诀:

参数整定找最佳,从小到大顺序查。

先是比例后积分,最后再把微分加。

曲线振荡很频繁,比例度盘要放大。

曲线漂浮绕大湾,比例度盘往小扳。

曲线偏离回复慢,积分时间往下降。

曲线波动周期长,积分时间再加长。

曲线振荡频率快,先把微分降下来。

动差大来波动慢。微分时间应加长。

理想曲线两个波,前高后低4比1。

一看二调多分析,调节质量不会低

 

调节PID把我强迫症被治得差不多了,微调我并没有有花太多时间研究,了解了再补充。

说一些额外的:

圆周倒立摆需要两个环让其稳定,一个是直立环,一个是位置环,本文分享的是直立环的调节方法,只有直立环时倒立摆虽然能直立但是会朝一个方向一直转,越来越快,最后达到最大PWM值,然后失去稳定。

和直立环不同的是位置环是正反馈,让倒立摆追上去,让其多往回摆一点,通过直立环的调节回到设定的位置目标,因此屏蔽掉直立环时,推着倒立摆转,他会朝那个方向越转越快,所以位置环其实会削弱直立环的作用。

圆周倒立摆需要两个环并联(串联?),我在调节位置环时采用前一种方法,但是效果不显著,勉强可以,两个环的联调方法我看了上网查了不少资料却没有一点思路。

如果你会调串联PID,请务必教教我。

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

PID参数整定具体方法-圆周倒立摆 的相关文章

  • JDK1.8Stream根据条件过滤出两个List集合中不一样的数据

    文章目录 前言1 基础类2 核心代码2 1 单条件筛选2 2 多条件筛选 前言 需求 xff1a 对两个数据库 xff08 一个SqlServer xff0c 一个MySQL xff09 xff0c 同一张表做数据同步 xff0c 保证两边
  • Dockers更新镜像(保留原始数据)

    文章目录 一 前言 二 使用步骤 1 拉取需要更新的镜像版本 2 获取当前镜像启动参数 3 停止当前镜像 4 启动新镜像 5 删除旧镜像 三 测试验证 一 前言 日常工作中 应用程序为了避免漏洞 体验等等肯定是需要定期更新的 使用Docke
  • FRP实现内网穿透

    文章目录 前言一 frp是什么 xff1f 二 使用步骤1 安装frp2 有公网IP Centos2 1 frps配置2 2 防火墙配置 xff08 有坑 xff09 3 配置无公网IP Centos4 内网穿透测试 前言 使用旧笔记本电脑
  • Linux创建普通用户并设置目录权限

    文章目录 前言 使用步骤 1 创建普通用户 2 创建docker用户组 3 测试 4 扩展 前言 实际工作中 通常为什么不直接使用root账户而要使用普通账户呢 因为root的权限太大了 一旦用户 特别是小白用户直接使用root账户的话 那
  • Error response from daemon: unauthorized: unauthorized to access repository:xxx

    问题描述 Jenkins构建项目异常 xff1a Unable to span class token function find span image span class token string 39 xxx latest 39 sp
  • 宝塔Linux面板phpMyAdmin无法打开/打开404完美解决方案

    文章目录 问题描述解决方案1 宝塔放行端口2 放行安全组端口3 解决开启防火墙方案3 1 方案一 xff1a 放行防火墙端口3 2 方案二 xff1a 关闭防火墙 问题描述 宝塔面板安装phpMyAdmin后打不开 xff0c 无响应 解决
  • Ubuntu18.04配置PX4编译环境

    最近尝试使用Ubuntu18 04重新配置了一下PX4编译环境 http dev px4 io master en setup dev env linux ubuntu html 跟着官网走 非常简单 1 运行ubuntu sim ros
  • Windows高精度时钟

    封装几个代码 xff0c 方便以后查询和使用 Windows高精度时钟 精度 xff1a lt 1us 微秒 1 1Function 1统计一段代码的CPU时间 LARGE INTEGER freq span class token pun
  • LAMP平台配置

    Apache安装 安装httpd 96 yum y install httpd 96 启动apache服务 xff1a service httpd start验证apache的端口是否开放 xff1a ss antpl grep 80建立a
  • ROS实战篇(二)如何创建自定义的msg文件以及自己编写launch文件?

    一 如何创建自定义的msg文件 xff1f msg文件介绍 xff1a 1 msg文件是用来描述ROS中自定义的消息类型的 xff0c 可以被不同语言调用 2 msg文件以 msg 结尾 xff0c 必须存放在软件包的msg文件夹下 3 m
  • 十五、Linux驱动之USB鼠标驱动

    1 如何编写USB鼠标驱动 结合十四 Linux驱动之USB驱动分析中的分析 xff0c 我们开始写一个USB鼠标驱动 USB的驱动可以分为3类 xff1a SoC的USB控制器的驱动 xff0c 主机端USB设备的驱动 xff0c 设备上
  • kazam录制视频转码

    Ubuntu安装kazam录制视频转码问题 录制转码 录制 在ubuntu下录制视频发现录制mp4视频在windows中大部分无法打开播放只有potplayer可以 xff0c 主要是两边视频格式不支持 xff0c 为此需要进行转码 转码
  • layui实现文件分片上传

    html代码 lt DOCTYPE html gt lt html gt lt head gt lt meta charset 61 34 utf 8 34 gt lt title gt layui lt title gt lt meta
  • C++ day42 C++的其他类库(除STL外)

    STL已经提供了一个非常好的可重用代码源 xff0c STL工具可以被用来解决很多编程问题了 xff0c 但是C 43 43 还是觉得不够 xff0c 在STL之外 xff0c 也提供了一些模板类 xff0c 这些模板类基本都是用来做一件很
  • python爬虫beautifulsoup详细教程

    BeautifulSoup4是爬虫必学的技能 BeautifulSoup最主要的功能是从网页抓取数据 xff0c Beautiful Soup自动将输入文档转换为Unicode编码 xff0c 输出文档转换为utf 8编码 Beautifu
  • pandas用法详解

    一 生成数据表 1 首先导入pandas库 xff0c 一般都会用到numpy库 xff0c 所以我们先导入备用 xff1a import numpy as np import pandas as pd 2 导入CSV或者xlsx文件 xf
  • 程序员读书顺序!

    程序猿的读书历程 xff1a xx语言入门 gt xx语言应用实践 gt xxx语言高阶编程 gt xxx语言的科学与艺术 gt 编程之美 gt 编程之道 gt 编程之禅 gt 颈椎病康复指南
  • 基于STM32的倾斜仪设计(二)—— 硬件设计(2)

    2 4控制电路 本实验中选用的控制核心是STM32系列单片机 xff0c 具体型号为STM32F103R8T6 STM32F103R8T6是一款嵌入式 微控制器集成电路 xff0c 是ST旗下的一款常用的增强型系列微控制器 此芯片工作电压为
  • win32多媒体定时器

    win32多媒体定时器 因为编程需要以1ms为周期调用一个函数 xff0c 故在Windows平台上测试了一些定时器 xff0c 并进行比较 xff0c 最终选用timeSetEvent作为最终选项 几个拉跨的定时器精度 select选择模
  • 树莓派005_L298N电机控制板

    硬件接口 ENA IN1 IN2 控制左边的电机A xff0c ENB IN3 IN4控制右边的电机B 以上六个全部接GPIO口 xff0c 可通过pwm控制ENA ENB实现调速 43 12V为外接电源正极接入口 GND为外接电源负极接入

随机推荐

  • Vue实现Enter键查询

    单个条件 xff1a 64 keyup span class token punctuation span enter span class token punctuation span native span class token op
  • 图文详解教你在线换系统(无须U盘)

    1 先去msdn下载需要安装的系统 建议不要下载到系统盘 系统下载传送门 2 系统下载后 xff0c 双击打开找到setup xff0c 然后以管理员权限打开 3 打开windows安装界面后 xff0c 选择更改windows安装程序下载
  • 从零开始写一个图像处理程序之一(BMP彩色图转灰度图)

    图像二值化可以直接调用opencv的二值化函数去完成处理 xff0c 但是不利用OpenCV从头手写一个处理图片程序未尝不是一件有意思的事情 xff0c 就拿BMP图片为例去做一个 BMP图像 xff1a BMP xff08 Bitmap
  • 智能革命和未来社会《智能时代--大数据和智能革命重新定义未来》

    通过区块链 xff08 Block Chain xff09 在未来跟踪每一件商品从制造出来到被消费的完整行踪 比特币在一定程度上起到货币的作用 xff0c 并且成为全球很安全的洗钱工具 xff0c 源于它背后的一个技术 区块链 block即
  • Git 版本回退方法

    场景一 xff1a 如果想将代码恢复到之前某个提交的版本 xff0c 且那个版本之后提交的版本都不要了 xff0c 就可以使用 git rest 原理 xff1a git reset的作用是修改HEAD的位置 xff0c 即将HEAD指向的
  • Antd form表单的使用、设值、取值、清空值

    1 使用 this props form getFieldDecorator 34 key 34 lt Input gt 3 设值 this props form setFieldsValue key 39 123 39 2 取值 this
  • 静态类,方法,成员

    说起静态类 xff0c 你可能会联想到实例类 这两者并不难区分 xff0c 前者 静态类 只在内存中创建一个 xff0c 而后者 实例类 则是每次实例化后 xff0c 就会再内存创建一份 今天来简单聊一下静态类的理解 代码情景 xff1a
  • shell脚本批量执行可执行文件

    touch一个test sh文件 xff0c 按下方例子vim写入 xff1a span class token comment bin bash span span class token function echo span span
  • git 本地改动了,不保留,直接拉取线上最新代码

    如果您在本地做了改动 xff0c 但是又不想保留这些改动 xff0c 可以使用以下命令强制拉取远程最新代码 xff0c 覆盖掉本地代码 xff1a span class token function git span fetch all s
  • C语言创建单链表

    单链表 链表是一种物理存储单元上非连续 非顺序的存储结构 xff0c 数据元素的逻辑顺序是通过链表中的指针链接次序实现的 链表由一系列结点 xff08 链表中每一个元素称为结点 xff09 组成 xff0c 结点可以在运行时动态生成 每个结
  • kvaser二次开发

    总结归纳 xff1a 实施步骤 xff1a 通过浏览网上的大量关于can总线开发的资料 xff0c 建立起对can总线软件开发的大致流程记录优质资料将开发过程流程化通过官方资料研究技术细节开工 技术要点 xff1a can协议 xff0c
  • vue瀑布流布局插件vue-masonry

    插件npm网址 https www npmjs com package vue masonrygithub xff1a https github com shershen08 vue masonry安装 npm install vue ma
  • 双目视觉——点云与RGB图像融合

    目录 一 固定向量类1 cv Vec2 读取像素 二 点云着色四 结果展示1 图像2 点云3 彩色点云 五 参考链接 一 固定向量类 1 cv Vec 在OpenCV中针对三通道矩阵 xff0c 定义的Vec类型有 xff1a cv Vec
  • PX4二次开发环境搭建及报错解决(v1.9.2)

    PX4二次开发环境搭建及报错解决 xff08 v1 9 2 xff09 正文脚本安装方式手动安装编译环境 网上之前已经有很完善的环境搭建教程了 xff0c 但是大多是支持v1 8 0及之前版本的 xff0c 但自从v1 9 0版本之后 xf
  • 双系统安装Ubuntu(16.04)(含重装教程)

    双系统安装Ubuntu xff08 16 04 xff09 正文制作启动盘给Ubuntu分硬盘空间安装Ubuntu系统 笔者之前装过Ubuntu的双系统 xff0c 现在是重装 xff0c 但本教程同时适用初次安装和二次安装的 xff0c
  • (五)通俗易懂理解——双向LSTM

    中文翻译作者博客 xff1a https www cnblogs com wangduo p 6773601 html utm source 61 itdadao amp utm medium 61 referral 英文原文作者网址 xf
  • linux服务器升级node版本

    最近部署前端代码时 xff0c 发现服务器node版本太低 xff0c 导致前端工程编译不成功 于是升级了一下 下载node安装包 这里我们在node官网下载LTS xff08 即当前稳定版本 xff09 xff0c 找到对应当前服务器环境
  • 【坐标转换】lla转换成enu坐标(无损版)

    import numpy as np import smpy utils as smpy utils import ditu topbind as tb from scipy spatial transform import Rotatio
  • C++ : 力扣_Top(62-84)

    C 43 43 力扣 Top 62 84 文章目录 C 43 43 力扣 Top 62 84 62 不同路径 xff08 中等 xff09 66 加一 xff08 简单 xff09 69 x的平方根 xff08 中等 xff09 70 爬楼
  • PID参数整定具体方法-圆周倒立摆

    0 前言 关于PID参数的整定 xff0c 网上调节的口诀 原则 方法满天飞 xff0c 但是并没有具体的到步的教程 xff0c 作为初学者且非自动化相关专业学生有点看不懂 一脸懵逼 xff0c 走了不少弯路 xff0c 呕心沥血才调节好