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

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

3天内不再提示

自动控制系统PID控制器的基本实现

454398 来源:博客园 作者:木南创智 2020-11-04 14:16 次阅读

在自动控制中,PID及其衍生出来的算法是应用最广的算法之一。各个做自动控制的厂家基本都有会实现这一经典算法。我们在做项目的过程中,也时常会遇到类似的需求,所以就想实现这一算法以适用于更多的应用场景。

1PID算法基本原理

PID算法是控制行业最经典、最简单、而又最能体现反馈控制思想的算法。对于一般的研发人员来说,设计和实现PID算法是完成自动控制系统的基本要求。这一算法虽然简单,但真正要实现好,却也需要下一定功夫。首先我们从PID算法最基本的原理开始分析和设计这一经典命题。

PID算法的执行流程是非常简单的,即利用反馈来检测偏差信号,并通过偏差信号来控制被控量。而控制器本身就是比例、积分、微分三个环节的加和。其功能框图如下:

根据上图我们考虑在某个特定的时刻t,此时输入量为rin(t),输出量为rout(t),于是偏差就可计算为err(t)=rin(t)-rout(t)。于是PID的基本控制规律就可以表示为如下公式:

其中Kp为比例带,TI为积分时间,TD为微分时间。PID控制的基本原理就是如此。

2PID算法的离散化

上一节简单介绍了PID算法的基本原理,但要在计算机上实现就必须将其离散化,接下来我们就说一说PID算法的离散化问题。在实现离散化之前,我们需要对比例、积分、微分的特性做一个简单的说明。

比例就是用来对系统的偏差进行反应,所以只要存在偏差,比例就会起作用。积分主要是用来消除静差,所谓静差就是指系统稳定后输入输出之间依然存在的差值,而积分就是通过偏差的累计来抵消系统的静差。而微分则是对偏差的变化趋势做出反应,根据偏差的变化趋势实现超前调节,提高反应速度。

在实现离散前,我们假设系统采样周期为T。假设我们检查第K个采样周期,很显然系统进行第K次采样。此时的偏差可以表示为err(K)=rin(K)-rout(K),那么积分就可以表示为:err(K)+ err(K+1)+┈┈,而微分就可以表示为:(err(K)- err(K-1))/T。于是我们可以将第K次采样时,PID算法的离线形式表示为:

也可以记为:

这就是所谓的位置型PID算法的离散描述公式。我们知道还有一个增量型PID算法,那么接下来我们推到一下增量型PID算法的公式。上面的公式描述了第k个采样周期的结果,那么前一时刻也就是k-1个采样周期就不难表示为:

那么我们再来说第K个采样周期的增量,很显然就是U(k)-U(k-1)。于是我们用第k个采样周期公式减去第k-1个采样周期的公式,就得到了增量型PID算法的表示公式:

当然,增量型PID必须记得一点,就是在记住U(k)=U(k-1)+∆U(k)。

3PID控制器的基本实现

完成了离散化后,我们就可以来实现它了。已经用离散化的数据公式表示出来后,再进型计算机编程已经不是问题了。接下来我们就使用C语言分别针对位置型公式和增量型公式来具体实现。

1)位置型PID的简单实现

位置型PID的实现就是以前面的位置型公式为基础。这一节我们只是完成最简单的实现,也就是将前面的离散位置型PID公式的计算机语言化。

首先定义PID对象的结构体:

 1 /*定义结构体和公用体*/
 2 
 3 typedef struct
 4 
 5 {
 6 
 7   float setpoint;       //设定值
 8 
 9   float proportiongain;     //比例系数
10 
11   float integralgain;      //积分系数
12 
13   float derivativegain;    //微分系数
14 
15   float lasterror;     //前一拍偏差
16 
17   float result; //输出值
18 
19   float integral;//积分值
20 
21 }PID;

接下来实现PID控制器:

 1 void PIDRegulation(PID *vPID, float processValue)
 2 
 3 {
 4 
 5   float thisError;
 6 
 7   thisError=vPID->setpoint-processValue;
 8 
 9   vPID->integral+=thisError;
10 
11   vPID->result=vPID->proportiongain*thisError+vPID->integralgain*vPID->integral+vPID->derivativegain*(thisError-vPID->lasterror);
12 
13   vPID->lasterror=thisError;
14 
15 }

这就实现了一个最简单的位置型PID控制器,当然没有考虑任何干扰条件,仅仅只是对数学公式的计算机语言化。

2)增量型PID的简单实现

增量型PID的实现就是以前面的增量型公式为基础。这一节我们只是完成最简单的实现,也就是将前面的离散增量型PID公式的计算机语言化。

首先定义PID对象的结构体:

 1 /*定义结构体和公用体*/
 2 
 3 typedef struct
 4 
 5 {
 6 
 7   float setpoint;       //设定值
 8 
 9   float proportiongain;     //比例系数
10 
11   float integralgain;      //积分系数
12 
13   float derivativegain;    //微分系数
14 
15   float lasterror;     //前一拍偏差
16 
17   float preerror;     //前两拍偏差
18 
19   float deadband;     //死区
20 
21   float result; //输出值
22 
23 }PID;

接下来实现PID控制器:

void PIDRegulation(PID *vPID, float processValue)

{

  float thisError;

  float increment;

  float pError,dError,iError;

 

  thisError=vPID->setpoint-processValue; //得到偏差值

  pError=thisError-vPID->lasterror;

  iError=thisError;

  dError=thisError-2*(vPID->lasterror)+vPID->preerror;

  increment=vPID->proportiongain*pError+vPID->integralgain*iError+vPID->derivativegain*dError;   //增量计算

 

  vPID->preerror=vPID->lasterror;  //存放偏差用于下次运算

  vPID->lasterror=thisError;

  vPID->result+=increment;

}

这就实现了一个最简单的增量型PID控制器,也没有考虑任何的干扰条件,仅仅只是对数学公式的计算机语言化。

4、基本特点

前面讲述并且实现了PID控制器,包括位置型PID控制器和增量型PID控制器。界限来我们对这两种类型的控制器的特点作一个简单的描述。

位置型PID控制器的基本特点:

位置型PID控制的输出与整个过去的状态有关,用到了偏差的累加值,容易产生累积偏差。

位置型PID适用于执行机构不带积分部件的对象。

位置型的输出直接对应对象的输出,对系统的影响比较大。

增量型PID控制器的基本特点:

增量型PID算法不需要做累加,控制量增量的确定仅与最近几次偏差值有关,计算偏差的影响较小。

增量型PID算法得出的是控制量的增量,对系统的影响相对较小。

采用增量型PID算法易于实现手动到自动的无扰动切换。
编辑:hfy

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

    关注

    10

    文章

    649

    浏览量

    43678
  • PID控制器
    +关注

    关注

    2

    文章

    156

    浏览量

    18332
收藏 人收藏

    评论

    相关推荐

    电气控制系统图的三种分类

    电气自动控制系统可以根据不同的分类标准分为多种类型。基于系统结构而言,可分为开环控制系统、闭环控制系统和复合式控制系统
    的头像 发表于 04-09 16:01 157次阅读
    电气<b class='flag-5'>控制系统</b>图的三种分类

    lora大棚蔬菜种植自动控制系统解决方案

    lora大棚蔬菜种植自动控制系统解决方案
    的头像 发表于 03-12 14:37 122次阅读
    lora大棚蔬菜种植<b class='flag-5'>自动控制系统</b>解决方案

    基于51单片机的室内温湿度自动控制系统设计

    电子发烧友网站提供《基于51单片机的室内温湿度自动控制系统设计.rar》资料免费下载
    发表于 01-12 09:15 6次下载

    基于51单片机的室内温湿度自动控制系统设计

    电子发烧友网站提供《基于51单片机的室内温湿度自动控制系统设计.rar》资料免费下载
    发表于 01-03 11:45 7次下载

    水泵自动控制系统解决方案

    和服务质量,保障城市水务系统正常运行,从而确保居民生活用水安全。 水泵自动控制系统解决方案,主要通过对泵站设备运行情况的实时监测、故障诊断与自动处理等手段,来实现对泵站设备的智能化管理
    的头像 发表于 12-20 16:32 346次阅读

    变频器在污水处理自动控制系统中的应用

    电子发烧友网站提供《变频器在污水处理自动控制系统中的应用.pdf》资料免费下载
    发表于 11-03 09:44 0次下载
    变频器在污水处理<b class='flag-5'>自动控制系统</b>中的应用

    糖化工艺自动控制系统的设计

    电子发烧友网站提供《糖化工艺自动控制系统的设计.pdf》资料免费下载
    发表于 10-20 11:40 0次下载
    糖化工艺<b class='flag-5'>自动控制系统</b>的设计

    基于物联网技术的设施农业自动控制系统

    电子发烧友网站提供《基于物联网技术的设施农业自动控制系统.pdf》资料免费下载
    发表于 10-20 09:40 1次下载
    基于物联网技术的设施农业<b class='flag-5'>自动控制系统</b>

    基于8052单片机在给水自动控制系统中的设计

    电子发烧友网站提供《基于8052单片机在给水自动控制系统中的设计.pdf》资料免费下载
    发表于 10-12 10:39 0次下载
    基于8052单片机在给水<b class='flag-5'>自动控制系统</b>中的设计

    求一种基于PLC的小车自动配料控制系统设计方案

    随着经济的发展和科技的进步,自动控制系统在工业生产中的应用越来越广泛,基于西门子PLC的自动控制系统获得了长足的发展与应用。利用PLC控制技术[1]、触摸屏组态技术[2]以及网络通信技术[3],可以
    发表于 10-10 16:12 1185次阅读
    求一种基于PLC的小车<b class='flag-5'>自动</b>配料<b class='flag-5'>控制系统</b>设计方案

    PID算法在控制系统中的特性和指标

    PID算法广泛的被应用在很多的控制系统中,最终的目的都是希望通过pid控制器实现被控量能稳定在预期的目标值。
    的头像 发表于 08-22 11:05 703次阅读
    <b class='flag-5'>PID</b>算法在<b class='flag-5'>控制系统</b>中的特性和指标

    基于单片机制作的养生壶自动控制系统

    本次设计的家用养生壶自动控制系统便是基于单片机制作的,多种控制方式可以按用户需要快捷操作。
    发表于 08-22 10:38 779次阅读
    基于单片机制作的养生壶<b class='flag-5'>自动控制系统</b>

    基于单片机的三种模式家用养生壶自动控制系统设计

    本次设计的家用养生壶自动控制系统便是基于单片机制作的,多种控制方式可以按用户需要快捷操作。
    的头像 发表于 08-01 01:04 567次阅读
    基于单片机的三种模式家用养生壶<b class='flag-5'>自动控制系统</b>设计

    智能温室/大棚自动控制系统提供了一个科学、智能的种植管理工具

    智能温室/大棚自动控制系统是专门为农业温室、农业环境控制开发生产的环境自动控制系统。根据温室作物生长要求,自动控制灌溉、开窗、卷膜、风机湿帘、生物补光、灌溉施肥等环境
    的头像 发表于 07-27 17:11 587次阅读
    智能温室/大棚<b class='flag-5'>自动控制系统</b>提供了一个科学、智能的种植管理工具

    pid控制器原理 PID控制器调节

    等。自动控制系统可分为开环控制系统和闭环控制 系统。一个控制系统包括控制器、传感器、变送器、执行
    发表于 07-20 15:50 0次下载