数字PID算法基础

news2025/1/17 13:54:48

        数字PID是由编程语言实现的PID算法并烧录到控制芯片中,控制芯片与电机驱动连接,将PID控制算法的输出转换为PWM控制信号发送给电机驱动电路,电机驱动电路与直流电机相连并将PWM控制信号转换为具有相同占空比的PWM供电电压,通过对输入电机的PWM供电电压占空比的控制实现对电机转速的调节;通过传感器监测电机转速,反馈至控制芯片,实现闭环。

1、公式推导

        PID控制算法在连续时间序列下的公式如下:

        对连续时间信号进行等间隔采样,就得到离散化的数字信号。

        容易得到PID的离散化表达式,该表达式也成为位置式PID:

        增量式PID,即ux - ux-1,表达式为:

        所以,可以看出,位置式PID和增量式PID在本质上是同一种表达式。

2、PID控制的实际含义

        以电机控制为例,期望转速是1000rpm,与实际电机转速(400rpm)的差值为600rpm输入PID控制器,电机驱动产生PWM波调节电机转速。

2.1、使用比例环节进行控制

        只是用比例环节进行控制,e(t)为控制转速与电机实际转速的差值。

        这是用比例环节进行电机控制的转速曲线,随着系数Kp的增加,转速曲线的波动越来越陡峭,波峰也越来越高。从Kp调节控制器的转速曲线可以发现,这里有两个问题:

        1、存在转速波动。转速调节的初始阶段,电机转速有一段上下波动阶段(7秒前),这一段波动在实际应场景往往是不可以接受的;

        2、存在稳态误差。在比例环节的控制下,电机的稳态转速始终与目标转存在偏差。根据比例环节的公式,当偏差消失后比例环节的输出也为0,因此稳态转速永远无法与目标转速一致。

        实际中,随着Kp增加,前期转速波动增加、稳态误差降低,但始终无法消除。

2.2、增加微分环节

        针对问题1的转速波动,可以通过增加微分环节来解决。

        通过,下面的转速曲线,来看积分环节如何解决转速波动问题的。e(t)大于e(t-1)表示当前转速正在远离目标转速,根据积微分环节的公式,此时微分环节会将转速往靠近目标值进行调整。可以看到微分环节相当于一个阻尼器,转速原理目标值时,它阻止远离;转速靠近目标值时,它阻止靠近。从而让被控对象更快的稳定在一个状态,不进行波动。

2.3、增加积分环节

        针对问题2的稳态误差问题,可以通过增加积分环节来解决。

        对于稳态误差,系统稳定后目标值和实际中始终存在一个偏差。如果此时,积分环节增加进来,它会对这部分偏差进行正向积分,在积分作用下,积分环节的输出变得越来越大,因此PID控制起的输出也变得越来越大,从而当前转速开始升高。当转速超过目标转速后,积分环节又会对这部分偏差进行负向积分,PID控制器的输出变小,从而转速开始下降。

        只要转速没有停在目标转速上,积分环节就会一直发挥调节作用,被控对象会因为这种调节作用,最终稳定在目标转速上。

3、总结

        PID控制器在只有比例环节时,存在转速波动和稳态误差。通过增加积分环节可以消除稳态误差,通过微分环节消除转速调节的波动问题。因此,在PID三个环节的共同努力下,就可以实现如下理想的转速调节曲线。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1345315.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

MacBook查看本机IP

嘚吧嘚 其实这也不是什么困难的问题,但是今年刚刚入坑Mac,外加用的频率不是很高,每次使用的时候都查,用完就忘,下次用的时候再查🤮。真的把自己恶心坏了🙈。 所以写篇文章记录一下&#x1f92…

Linux:apache优化(4)—— 隐藏版本号

运行环境 yum -y install apr apr-devel cyrus-sasl-devel expat-devel libdb-devel openldap-devel apr-util-devel apr-util pcre-devel pcre gcc make zlib-devel 源码包配置 ./configure --prefix/usr/local/httpd --enable-cgi --enable-rewrite --enable-so --enabl…

MySQL数据库的安装与环境配置

下载 下载MySQL8 安装 解压 配置MySQL环境变量 系统环境变量path D:\ProgramFiles\mysql-8.0.20-winx64\bin 1.点击属性 2.点击高级系统设置 3.点击环境变量 4.在系统变量中找到path 注意这里不是用户变量 5.新建后输入解压的地址 MySQL初始化和启动 以管理员身份运行cmd…

macos下转换.dmg文件为 .iso .cdr文件的简单方法

为了让镜像文件在mac 和windows平台通用, 所以需要将.dmg格式的镜像文件转换为.iso文件, 转换方法也非常简单, 一行命令即可 hdiutil convert /path/to/example.dmg -format UDTO -o /path/to/example.iso 转换完成后的文件名称默认是 example.iso.cdr 这里直接将.cdr后缀删…

Efficient Classification of Very Large Images with Tiny Objects(CVPR2022补1)

文章目录 Two-stage Hierarchical Attention SamplingOne-stageTwo-Stage内存需求 Efficient Contrastive Learning with Attention Sampling Two-stage Hierarchical Attention Sampling 一阶段缩放是hw,提取的特征是h1w1, 二阶段缩放是uv(…

Vue中的默认插槽详解

Vue中的默认插槽详解 在 Vue 中,插槽(Slot)是一种非常强大且灵活的机制,用于在组件中插入内容。Vue 提供了两种类型的插槽:默认插槽(Default Slot)和具名插槽(Named Slot&#xff09…

24、Web攻防-通用漏洞SQL注入MYSQL跨库ACCESS偏移

文章目录 一、SQL注入原理   脚本代码在与数据库进行数据通讯时(从数据库取出相关数据进行页面显示),使用预定义的SQL查询语句进行数据查询。能通过参数传递自定义值来实现SQL语句的控制,执行恶意的查询操作,例如查询…

[Angular] 笔记 20:NgContent

chatgpt: 在Angular中&#xff0c;NgContent是用于内容投影&#xff08;Content Projection&#xff09;的一个重要概念。它允许你在一个组件中插入内容&#xff0c;并将这些内容投影到另一个组件中。 当你在一个组件中使用<ng-content></ng-content>标签时&…

Python新手教程 —— Hello, World!

文章目录 Hello, World!作者自述关于本系列什么是编程语言什么是Python安装Python运行Python3解释器IDLE编写代码文件 本文复习Python技术资源分享1、Python所有方向的学习路线2、学习软件3、入门学习视频4、实战案例5、清华编程大佬出品《漫画看学Python》6、Python副业兼职与…

黑马程序员SSM框架-Maven进阶

分模块开发与设计 分模块开发意义 分模块开发 依赖管理 依赖传递 依赖传递冲突问题 可以点击红框按钮查看依赖情况。 可选依赖和排除依赖 继承和聚合 聚合 聚合工程开发 继承 聚合和继承的区别 属性 属性的配置与使用 资源文件引用属性 其他属性&#xff08;了解&#xff0…

<JavaEE> 协议格式 -- 应用层协议 HTTP

目录 一、HTTP的概念 1&#xff09;什么是HTTP协议&#xff1f; 2&#xff09;什么是超文本&#xff1f; 二、HTTP协议格式 三、请求&#xff08;request&#xff09; 1&#xff09; 方法&#xff08;Method&#xff09; 1> GET方法 2> POST方法 3> GET和POS…

lv13 内核模块参数和依赖

1 模块传参 1.1 模块参数设置 将指定的全局变量设置成模块参数 module_param(name,type,perm);//将指定的全局变量设置成模块参数 /* name:全局变量名 type&#xff1a;使用符号 实际类型 传参方式bool bool insmod xxx.ko 变量名0 …

拍照就能建模!手机就能访问! 这个技术正成为宣传新手段!

随着人工智能技术的不断进步&#xff0c;现在可以通过拍摄照片结合AI技术来实现3D模型生成。这种技术的出现&#xff0c; 不仅能更加方便快捷地创建3D模型&#xff0c;而且还能真实复原现实中物件的质感、纹理等。同时&#xff0c;极大地降低了各行业对3D技术的应用门槛&#x…

[Angular] 笔记 24:ngContainer vs. ngTemplate vs. ngContent

请说明 Angular 中 ngContainer&#xff0c; ngTemplate 和 ngContent 这三者之间的区别。 chatgpt 回答&#xff1a; 这三个在 Angular 中的概念是关于处理和组织视图的。 1. ngContainer&#xff1a; ngContainer 是一个虚拟的 HTML 容器&#xff0c;它本身不会在最终渲染…

二分查找(非朴素)--在排序数组中查找元素的第一个和最后一个位置

个人主页&#xff1a;Lei宝啊 愿所有美好如期而遇 目录 本题链接 输入描述 输出描述 算法分析 1.算法一&#xff1a;暴力求解 2.算法二&#xff1a;朴素二分算法 3.算法三&#xff1a;二分查找左右端点 3.1查找左端点 3.1.1细节一&#xff1a;循环条件 3.1.2细节二…

【详解】KMP算法——每步配图让你打穿KMP

介绍 什么是KMP算法&#xff1a; KMP算法主要运用串的模式匹配中&#xff08;简单来说就是在s串中找到一个与t串相等的子串&#xff0c;称为模式匹配&#xff09;例如s为abcdef&#xff0c;t为bcd&#xff0c;那么就是在s中找到bcd&#xff0c;并返回其在s中的首下标&#xf…

【C++】STL 容器 - set 集合容器 ⑦ ( 查找元素 - set#find 函数 | 获取元素个数 - set#count 函数 )

文章目录 一、查找元素 - set#find 函数1、函数原型 简介2、代码示例 - set#find 函数 二、获取元素个数 - set#count 函数1、函数原型 简介2、代码示例 - set#find 函数 一、查找元素 - set#find 函数 1、函数原型 简介 在 C 语言的 STL 标准模板库 , std::set 集合容器 是一个…

优化模型:matlab二次规划

1.二次规划 1.1 二次规划的定义 若某非线性规划的目标函数为自变量 x x x的二次函数&#xff0c;且约束条件全是线性的&#xff0c;则称这种规划模型为二次规划。 1.2 二次规划的数学模型 min ⁡ 1 2 x T H x f T x \min \frac{1}{2}\boldsymbol{x}^{\boldsymbol{T}}\bolds…

Android实验:contentprovider 实验+SQLite 数据库的实现

目录 SQLite实验目的实验内容实验要求项目结构代码实现结果展示 SQLite SQLite 是一个开源的嵌入式关系数据库&#xff0c;实现了自给自足的、无服务器的、配置无需的、事务性的 SQL 数据库引擎。它是一个零配置的数据库&#xff0c;这意味着与其他数据库系统不同&#xff0c;…

三子棋(c语言)

前言&#xff1a; 三子棋是一种民间传统游戏&#xff0c;又叫九宫棋、圈圈叉叉棋、一条龙、井字棋等。游戏规则是双方对战&#xff0c;双方依次在9宫格棋盘上摆放棋子&#xff0c;率先将自己的三个棋子走成一条线就视为胜利。但因棋盘太小&#xff0c;三子棋在很多时候会出现和…