0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

“万能”的PID

痞子衡嵌入式 来源:痞子衡嵌入式 作者:痞子衡嵌入式 2022-09-09 10:13 次阅读

最近跟一个同事聊了聊天,他说一直用的位置式PID,从来没在具体项目中用过增量式PID,感觉两者没啥区别呀?

于是跟他讨论了一番,不由得让人深思~

1

“万能”的PID

PID是一种非常经典的控制类算法,凭着它的简单易用在工程上得到了广泛的应用,并且影响力也是极高,那为什么说其简单易用呢?

可以说只要你对PID的主要的参数对系统的影响理解得足够好,完全可以通过手动试凑的方式来获得一套合适的PID参考,所以对一些非控制类的工程师应用起来也是非常友好的。

当然还有一个非常重要的原因,PID算法对大部分系统稳定性、鲁棒性以及可靠性都非常的高,有调试PID控制算法经验的朋友应该都有类似的感觉,即便根据经验随便给系统一套参数都可以到达一个不错的控制效果。

所以在很多人眼里这算法就是"万能的",适应的场景也非常的广泛,然而自古有一种规律"熊掌和鱼不可以兼得",PID算法虽然适应性非常广泛,对于处理一些特定的应用场景,或许其并不会最优的解决办法。

基于大家在实际应用中各种各样的需求,曾经一个发展涌现了非常的PID的变种,也就是对PID算法在特定的应用场景进行优化、或者与其他一些控制方法进行结合,以便达到相应控制场景下的不错控制效果,比如微分先行PID、PID与智能控制的算法的结合等等。

当然如果PID算法实在无法满足需求了,那也不能勉强,就只能考虑寻找另外更为匹配的控制策略,比如现在非常流行的自抗扰控制技术等等。

2

PID的理解

PID算法主要就是三项,比例(P)-积分(I)-微分(D),在连续的时间域内的表达式如下:

f97f0c50-2fe3-11ed-ba43-dac502259ad0.png

从上面的公式可以看出PID算法是一个非常纯粹的数学表达式,既然是数学表达式那必然可以通过数学的方式进行分析,拉式变换一下,获得传递函数,然后采用控制理论分析方法,结合被控对象分析其对动态系统的稳定性、准确性以及快速性进行分析,从而达到性能上的最优解,这个控制系统的设计过程不是本文重点,暂时就不进行展开了。

还记得最开始了解这个算法的时候,有一句话非常相信的彰显其魅力所在:P-I-D分别代表着当前、过去和未来。P对当前误差的抑制作用;I对历史误差的累积控制,以便消除静态误差;D根据误差的变化率进行补偿,从表达式也非常容易从根本上理解这几句话。

3

数字PID

在前面跟大家简单描述了连续域内的PID算法表达式,而连续域中该算法需要通过相应的模拟电路来进行实现,特别是一些没有数字芯片嵌入式系统是经常可见的。

但随着数字系统的应用,特别是单片机系统,数字PID更加得到广泛的应用,被大部分人所熟知的两种数字PID,分别是位置式PID和增量式PID。

大部分的教材都会描述着两种形式的数字PID,然而这些教材一上来就介绍位置式PID与历史状态相关,过去会对现在的控制输出产生影响,而增量式PID仅仅只与最近的几次误差数据相关。

如下是位置式PID表达式:

f99c5c6a-2fe3-11ed-ba43-dac502259ad0.png

而增量式PID的形式则可以通过位置式进行如下表达式处理得到:

f9b1951c-2fe3-11ed-ba43-dac502259ad0.png

如下便可以得到增量式的表达式:

f9c22f44-2fe3-11ed-ba43-dac502259ad0.png

这样看来增量式PID只与最近的两次误差有关系,不会存在累积误差的问题,说来增量式PID必然是更好的,那为何还要介绍位置式PID呢?

也有伙计在自己的程序中使用增量式PID的表达式,毕竟增量式PID其输出仅仅只是控制量的增量,最后还是需要把输出量进行累积,这与位置式根本没啥区别。

于是很多初学者,甚至一些用PID多年的工程师对此都抱有一丝疑问。

其实这两种数字PID的应用场景是有区别的,增量式PID控制输出的仅仅只是控制量的增量,其主要是应用在执行机构带有积分部件的被控对象,而位置式PID其输出的是实际的控制量,则用于不带积分环节的执行机构。

当然如果在一些不带积分环节的执行结构系统中你执意要使用增量PID的形式也无伤大雅,只是最后用数字积分进行处理后输出,其与位置式PID式没有差异,增量式PID的优势并没有展现,因为真正单独使用增量式PID的执行机构的积分环节是连续的,这是数字离散的方式无法比拟的。

审核编辑 :李倩

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 模拟电路
    +关注

    关注

    125

    文章

    1492

    浏览量

    102136
  • PID算法
    +关注

    关注

    2

    文章

    169

    浏览量

    24165

原文标题:不要只成为PID调参工程师

文章出处:【微信号:pzh_mcu,微信公众号:痞子衡嵌入式】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    位置式PID与增量式PID的区别

    PID(比例-积分-微分)控制器作为工业自动化领域中的核心控制算法,广泛应用于各种需要精确控制的系统中。在PID控制器的实现中,有两种主要的控制模式:位置式PID和增量式PID。虽然两
    的头像 发表于 06-05 16:23 817次阅读

    万能表如何测量电瓶

    电瓶作为汽车、摩托车等交通工具的重要能源储存装置,其性能的好坏直接影响到车辆的正常运行。因此,定期检查电瓶的状态,确保其电量充足、性能稳定,是每位车主都应重视的事项。在众多的电瓶检测工具中,万能
    的头像 发表于 05-20 17:02 319次阅读

    万能表和摇表有什么区别?

    万能表(也称万用表或多用电表)和摇表(兆欧表)是两种不同类型的电气测量工具,它们在电气检测中发挥着各自独特的作用。
    的头像 发表于 05-11 11:27 432次阅读

    什么是PIDPID各个参数有什么作用?

    PID,就是“比例(proportional)、积分(integral)、微分(derivative)”,是一种很常见的控制算法。 PID已经有107年的历史了,它并不是什么很神圣的东西,大家一定都见过PID的实际应用。
    发表于 03-18 11:24 2834次阅读
    什么是<b class='flag-5'>PID</b>?<b class='flag-5'>PID</b>各个参数有什么作用?

    万能遥控器的设置和使用方法

    万能遥控器是一种能够控制不同品牌电器的设备,它可以将多个遥控器的功能整合到一个遥控器上,方便用户操作。在本文中,我将详细介绍万能遥控器的设置和使用方法。 设置万能遥控器 步骤一:准备工作 在开始设置
    的头像 发表于 01-24 10:57 7620次阅读

    什么是pid控制原理 pid各个参数对系统的影响

    PID(Proportional-Integral-Derivative)控制是一种常见的控制算法,广泛应用于工业过程控制、机器人控制、自动驾驶等领域。本文将详细介绍PID控制的原理以及其中的各个
    的头像 发表于 01-22 15:35 3075次阅读

    何为PID?为何需要PIDPID能达到什么作用?

    何为PID?为何需要PIDPID能达到什么作用? PID是英文Proportional-Integral-Derivative的缩写,即比例-积分-微分控制器。它是一种常用的反馈控制
    的头像 发表于 12-07 13:37 986次阅读

    HarmonyOS开发案例分享:万能卡片也能用来玩游戏

    一、前言 作为一名开发爱好者,从大了讲,我学习并进行 HarmonyOS 相关开发是为了能为鸿蒙生态建设尽一份绵薄之力,从小了讲,就是为了自己的兴趣。而万能卡片是一个让我非常感兴趣的东西。 很多
    发表于 12-01 09:35

    PID算法原理分析及优化

    欢迎来到森木磊石「技术微课堂」,本期为大家分享经典控制算法之一的PID控制方法。PID控制方法从提出至今已有百余年历史,其由于结构简单、易于实现、鲁棒性好、可靠性高等特点,在机电、冶金、机械、化工
    的头像 发表于 11-08 08:23 1057次阅读
    <b class='flag-5'>PID</b>算法原理分析及优化

    HarmonyOS/OpenHarmony原生应用-ArkTS万能卡片组件Toggle

    组件提供勾选框样式、状态按钮样式及开关样式。该组件从API Version 8开始支持。 仅当ToggleType为Button时可包含子组件。 一、接口 Toggle(options: { type: ToggleType, isOn?: boolean }) 从API version 9开始,该接口支持在ArkTS卡片中使用。 参数: ToggleType枚举说明 从API version 9开始,该接口支持在ArkTS卡片中使用。 二、属性 除支持通用属性外,还支持以下属性: 三、事件 除支持通用事件外,还支持以下事件: 四、示例 // xxx.ets @Entry @Component struct ToggleExample { build() { Column({ space: 10 }) { Text(\'type: Switch\').fontSize(12).fontColor(0xcccccc).width(\'90%\') Flex({ justifyContent: FlexAlign.SpaceEvenly, alignItems: ItemAlign.Center }) { Toggle({ type: ToggleType.Switch, isOn: false }) .selectedColor(\'#007DFF\') .switchPointColor(\'#FFFFFF\') .onChange((isOn: boolean) => { console.info(\'Component status:\' + isOn) }) Toggle({ type: ToggleType.Switch, isOn: true }) .selectedColor(\'#007DFF\') .switchPointColor(\'#FFFFFF\') .onChange((isOn: boolean) => { console.info(\'Component status:\' + isOn) }) } Text(\'type: Checkbox\').fontSize(12).fontColor(0xcccccc).width(\'90%\') Flex({ justifyContent: FlexAlign.SpaceEvenly, alignItems: ItemAlign.Center }) { Toggle({ type: ToggleType.Checkbox, isOn: false }) .size({ width: 20, height: 20 }) .selectedColor(\'#007DFF\') .onChange((isOn: boolean) => { console.info(\'Component status:\' + isOn) }) Toggle({ type: ToggleType.Checkbox, isOn: true }) .size({ width: 20, height: 20 }) .selectedColor(\'#007DFF\') .onChange((isOn: boolean) => { console.info(\'Component status:\' + isOn) }) } Text(\'type: Button\').fontSize(12).fontColor(0xcccccc).width(\'90%\') Flex({ justifyContent: FlexAlign.SpaceEvenly, alignItems: ItemAlign.Center }) { Toggle({ type: ToggleType.Button, isOn: false }) { Text(\'status button\').fontColor(\'#182431\').fontSize(12) }.width(106) .selectedColor(\'rgba(0,125,255,0.20)\') .onChange((isOn: boolean) => { console.info(\'Component status:\' + isOn) }) Toggle({ type: ToggleType.Button, isOn: true }) { Text(\'status button\').fontColor(\'#182431\').fontSize(12) }.width(106) .selectedColor(\'rgba(0,125,255,0.20)\') .onChange((isOn: boolean) => { console.info(\'Component status:\' + isOn) }) } }.width(\'100%\').padding(24) } } 五、场景 在卡片中和单选多选配合使用,可以做出各种选择框的效果。 本文根据HarmonyOS官方文档整理。
    发表于 10-11 14:52

    HarmonyOS/OpenHarmony原生应用-ArkTS万能卡片组件Stack

    堆叠容器,子组件按照顺序依次入栈,后一个子组件覆盖前一个子组件。该组件从API Version 7开始支持。可以包含子组件。 一、接口 Stack(value?: { alignContent?: Alignment }) 从API version 9开始,该接口支持在ArkTS卡片中使用。 二、属性 除支持通用属性外,还支持以下属性: 三、示例 // xxx.ets @Entry @Component struct StackExample { build() { Stack({ alignContent: Alignment.Bottom }) { Text(\'First child, show in bottom\').width(\'90%\').height(\'100%\').backgroundColor(0xd2cab3).align(Alignment.Top) Text(\'Second child, show in top\').width(\'70%\').height(\'60%\').backgroundColor(0xc1cbac).align(Alignment.Top) }.width(\'100%\').height(150).margin({ top: 5 }) } } 四、效果展示 五、场景 卡片上实现堆叠的场景使用。 本文根据HarmonyOS官方文档整理。
    发表于 10-09 14:29

    PID刚入门?新手必看的15个PID基本概念!

    PID调节系统PID功能由PID调节器或DCS系统内部功能程序模块实现,了解与PID调节相关的一些基本概念,有助于PID入门新手快速熟悉调节
    的头像 发表于 09-25 19:40 1766次阅读
    <b class='flag-5'>PID</b>刚入门?新手必看的15个<b class='flag-5'>PID</b>基本概念!

    继续,万能的中继开关#工作原理大揭秘 #电路原理

    电路电子技术
    浓夫山泉
    发布于 :2023年09月09日 09:43:03

    PID经典教程

    PID算法通过误差信号控制被控量,而控制器本身就是比例、积分、微分三个环节的加和。史上最全的PID算法教程,从建模到实际应用!
    发表于 08-23 16:46 3次下载

    什么是PIDPID算法的P、I、D部分的作用和解释

    PID控制算法是自动控制中的一个非常典型且重要的算法,可以明确的说,对于学自动控制的朋友来说,不懂PID控制,那就等于没真正的学过自动控制。
    的头像 发表于 08-22 11:01 1.5w次阅读
    什么是<b class='flag-5'>PID</b>?<b class='flag-5'>PID</b>算法的P、I、D部分的作用和解释