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

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

3天内不再提示

重温经典 PID 算法

黄工的嵌入式技术圈 来源:网站整理 2020-03-12 11:09 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

PID算法可以说是在自动控制原理中比较经典的一套算法,在现实生活中应用的比较广泛。

大学参加过电子竞赛的朋友都应该玩过电机(或者说循迹小车),我们要控制电机按照设定的速度运转,PID控制在其中起到了关键的作用。

说来惭愧,大学这门课程学的不咋滴,老师讲的课基本没听进去过。直到后面接触竞赛,算是对PID有了很基础的一点点认识,直到现在工作实际应用的比较广泛才知道它的重要性。所以,这里特地回顾一下。

Ⅰ什么是PID

PID,即比例Proportion、积分Integral和微分Derivative三个单词的缩写。

闭环自动控制技术是基于反馈的概念以减少不确定性,在闭环自动控制原理中,我们把它叫做“PID控制器”,拿控制电机来说,参考下面模型:

下面引用一段网上经典的话:

在工业应用中PID及其衍生算法是应用最广泛的算法之一,是当之无愧的万能算法,如果能够熟练掌握PID算法的设计与实现过程,对于一般的研发人员来讲,应该是足够应对一般研发问题了,而难能可贵的是,在我所接触的控制算法当中,PID控制算法又是最简单,最能体现反馈思想的控制算法,可谓经典中的经典。经典的未必是复杂的,经典的东西常常是简单的,而且是最简单的,想想牛顿的力学三大定律吧,想想爱因斯坦的质能方程吧,何等的简单!简单的不是原始的,简单的也不是落后的,简单到了美的程度。

ⅡPID原理

常规的模拟 PID 控制系统原理框图如下:

该系统由模拟 PID 控制器和被控对象组成。

上面框图中, r(t) 是给定值, y(t) 是系统的实际输出值,给定值与实际输出值构成控制偏差e(t) = r(t) − y(t).

e(t)作为 PID 控制的输入,u(t)作为 PID 控制器的输出和被控对象的输入。 所以模拟 PID 控制器的控制规律为:

三个重要的参数:

Kp:控制器的比例系数.

Ti:控制器的积分时间,也称积分系数.

Td:控制器的微分时间,也称微分系数.

1、P - 比例部分

比例环节的作用是对偏差瞬间作出反应。偏差一旦产生控制器立即产生控制作用, 使控制量向减少偏差的方向变化。 控制作用的强弱取决于比例系数Kp, 比例系数Kp越大,控制作用越强, 则过渡过程越快, 控制过程的静态偏差也就越小; 但是Kp越大,也越容易产生振荡, 破坏系统的稳定性。 故而, 比例系数Kp选择必须恰当, 才能过渡时间少, 静差小而又稳定的效果。

2、I - 积分部分

从积分部分的数学表达式可以知道, 只要存在偏差, 则它的控制作用就不断的增加; 只有在偏差e(t)=0时, 它的积分才能是一个常数,控制作用才是一个不会增加的常数。 可见,积分部分可以消除系统的偏差。

积分环节的调节作用虽然会消除静态误差,但也会降低系统的响应速度,增加系统的超调量。积分常数Ti越大,积分的积累作用越弱,这时系统在过渡时不会产生振荡; 但是增大积分常数Ti会减慢静态误差的消除过程,消除偏差所需的时间也较长, 但可以减少超调量,提高系统的稳定性。

当 Ti 较小时, 则积分的作用较强,这时系统过渡时间中有可能产生振荡,不过消除偏差所需的时间较短。所以必须根据实际控制的具体要求来确定Ti 。

3、D - 微分部分

实际的控制系统除了希望消除静态误差外,还要求加快调节过程。在偏差出现的瞬间,或在偏差变化的瞬间, 不但要对偏差量做出立即响应(比例环节的作用), 而且要根据偏差的变化趋势预先给出适当的纠正。为了实现这一作用,可在 PI 控制器的基础上加入微分环节,形成 PID 控制器。

微分环节的作用使阻止偏差的变化。它是根据偏差的变化趋势(变化速度)进行控制。偏差变化的越快,微分控制器的输出就越大,并能在偏差值变大之前进行修正。微分作用的引入, 将有助于减小超调量, 克服振荡, 使系统趋于稳定, 特别对髙阶系统非常有利, 它加快了系统的跟踪速度。但微分的作用对输入信号的噪声很敏感,对那些噪声较大的系统一般不用微分, 或在微分起作用之前先对输入信号进行滤波。

ⅢPID算法代码

PID 控制算法可以分为位置式 PID和增量式 PID控制算法。

两者的区别:

(1)位置式PID控制的输出与整个过去的状态有关,用到了误差的累加值;而增量式PID的输出只与当前拍和前两拍的误差有关,因此位置式PID控制的累积误差相对更大;

(2)增量式PID控制输出的是控制量增量,并无积分作用,因此该方法适用于执行机构带积分部件的对象,如步进电机等,而位置式PID适用于执行机构不带积分部件的对象,如电液伺服阀。

(3)由于增量式PID输出的是控制量增量,如果计算机出现故障,误动作影响较小,而执行机构本身有记忆功能,可仍保持原位,不会严重影响系统的工作,而位置式的输出直接对应对象的输出,因此对系统影响较大。

下面给出公式直接体现的C语言源代码(请结合项目修改源代码):

1.位置式PID

typedef struct { float Kp; //比例系数Proportional float Ki; //积分系数Integral float Kd; //微分系数Derivative float Ek; //当前误差 float Ek1; //前一次误差 e(k-1) float Ek2; //再前一次误差 e(k-2) float LocSum; //累计积分位置 }PID_LocTypeDef; /************************************************函数名称 : PID_Loc功 能 : PID位置(Location)计算参 数 : SetValue ------ 设置值(期望值) ActualValue --- 实际值(反馈值) PID ----------- PID数据结构返 回 值 : PIDLoc -------- PID位置作 者 : strongerHuang*************************************************/ float PID_Loc(float SetValue, float ActualValue, PID_LocTypeDef *PID){ float PIDLoc; //位置 PID->Ek = SetValue - ActualValue; PID->LocSum += PID->Ek; //累计误差 PIDLoc = PID->Kp * PID->Ek + (PID->Ki * PID->LocSum) + PID->Kd * (PID->Ek1 - PID->Ek); PID->Ek1 = PID->Ek; return PIDLoc;}

2.增量式PID

typedef struct { float Kp; //比例系数Proportional float Ki; //积分系数Integral float Kd; //微分系数Derivative float Ek; //当前误差 float Ek1; //前一次误差 e(k-1) float Ek2; //再前一次误差 e(k-2) }PID_IncTypeDef; /************************************************函数名称 : PID_Inc功 能 : PID增量(Increment)计算参 数 : SetValue ------ 设置值(期望值) ActualValue --- 实际值(反馈值) PID ----------- PID数据结构返 回 值 : PIDInc -------- 本次PID增量(+/-)作 者 : strongerHuang*************************************************/ float PID_Inc(float SetValue, float ActualValue, PID_IncTypeDef *PID){ float PIDInc; //增量 PID->Ek = SetValue - ActualValue; PIDInc = (PID->Kp * PID->Ek) - (PID->Ki * PID->Ek1) + (PID->Kd * PID->Ek2); PID->Ek2 = PID->Ek1; PID->Ek1 = PID->Ek; return PIDInc;}

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

    关注

    143

    文章

    9490

    浏览量

    153235
  • PID算法
    +关注

    关注

    2

    文章

    172

    浏览量

    25543
  • Integrate
    +关注

    关注

    0

    文章

    8

    浏览量

    9128
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    怎样理解变频器内置PID控制参数的含义

    应用三个维度展开分析。 一、PID控制的基本原理与变频器实现 PID(比例-积分-微分)控制是一种通过误差反馈实现系统调节的经典算法。在变频器中,P
    的头像 发表于 12-06 07:39 1111次阅读

    PID调参实用方法

    一、什么是PID 在工程中,如果我们要用单片机做一个温控系统,其系统组成一般如下:一个采集温度的ADC,一个输出温度的加热头以及一个用于运行控制算法的单片机,如果我们要维持温度为100度,在不加任何
    发表于 11-28 07:17

    明晚!基于RT-Thread 的 PID 控制实践,从驱动到算法到监控,一次学会!| 问学直播

    在嵌入式开发中,PID控制是最常见、最实用的控制算法之一,应用场景涵盖温度控制、电机调速、机械臂控制等各类智能设备。我们很荣幸邀请到2025RT-Thread大学生夏令营优秀学员陈宇锋,为大家带来
    的头像 发表于 09-01 17:04 1116次阅读
    明晚!基于RT-Thread 的 <b class='flag-5'>PID</b> 控制实践,从驱动到<b class='flag-5'>算法</b>到监控,一次学会!| 问学直播

    PID控制算法学习笔记资料

    用于新手学习PID控制算法
    发表于 08-12 16:22 7次下载

    PID串级控制在同步发电机励磁控制中的应用

    摘 要:为提高发电机勋磁控制系统的稳定性,分析了同步发电机的自并励励磁系统的结构和数学模型,介绍了神经网络预测控制的结构和算法,分别基于PID控制、神经网络预测控制和神经网络预测-PID申级控制
    发表于 06-16 21:56

    扫描电机的PID恒速控制仿真及实验

    数学模型,并通过 Matlab Simulink 搭建了仿真模型。提出了使用增量式PID控制算法实现电机的恒速控制,并进行了仿真,最后,利用STC89C52将PID控制与BIDCM结合在一起,通过实验
    发表于 06-16 21:53

    改进粒子群算法的永磁同步电机PID控制器

    采用粒子优化算法进行PID模糊控制训练能提高永磁同步电机的控制精度,提出一种基于改进粒子群算法的永磁同步电机 PID控制方法,构建永磁同步电机PD模糊控制目标画数,选择电压、转矩、速度
    发表于 05-28 15:44

    改进的BP网络PID控制器在无刷直流电机中的应用

    通过分析学习速率对BP算法的影响,提出一种分层调整学习速率的改进BP 网络算法,并把该方法设计成 PID控制器应用在无刷直流电机控制系统中,仿真结果验证了基于改进的 BP 网络的PID
    发表于 05-28 15:42

    每周推荐!实用电路、开关电源、电机控制系统、PCB手册!都值得收藏下载

    LTC3855同步开关模式降压电源的电流检测电路。LTC3855是一款具有逐周期限流功能的电流模式控制器件。检测电阻RS监测电流。 5、PID电机控制系统(控制原理+控制算法+程序范例) 资料免费下啦!本资料
    发表于 03-07 17:51

    限时免积分下载:增量式与位置式PID算法的C语言实现分享

    前面咱们有分享对PID算法离散化和增量式PID算法原理进行来探索,之后又使用Matlab进行了仿真实验,对PID三个参数又有了更深入的认识,
    发表于 03-05 18:32

    用硬件电路去实现PID的控制

    PID是一种非常经典的控制方法,该方法被广泛的应用在工业领域,通常PID算法是通过对希望控制的模拟量进行数字化采样后得到的数据与预先希望的数据进行做差,对得到的差值进行积分、微分与比例
    的头像 发表于 03-03 19:33 1961次阅读
    用硬件电路去实现<b class='flag-5'>PID</b>的控制

    PID控制详解(可下载)

    一、PID控制简介 PID( Proportional Integral Derivative)控制是最早发展起来的控制策略之一,由于其算法简单、鲁棒 性好和可靠性高,被广泛应用于工业过程
    发表于 02-27 15:42 6次下载

    资料免费下!PID电机控制系统(控制原理+控制算法+程序范例)

    资料免费下啦!本资料包括PID调节控制做电机速度控制、ourdevBasic PID经典文章、PID测速、由入门到精通-吃透PID2.0版
    发表于 02-27 14:17

    PID控制算法的C语言实现:PID算法原理

    的是,在我所接触的控制算法当中,PID 控制算法又是最简单,最能体现反馈思想的控制算法,可谓经典中的经典
    发表于 02-26 15:24

    西门子PID控制算法-FB块封装

    西门子的PID控制算法-FB(功能块)封装主要应用于工业自动化和过程控制系统中,用于实现闭环控制。具体来说,它广泛应用于需要维持某一设定值的过程变量,如温度、压力、流量、速度等的精确控制。 01主要
    的头像 发表于 12-30 11:01 2063次阅读
    西门子<b class='flag-5'>PID</b>控制<b class='flag-5'>算法</b>-FB块封装