简单的PID算法库

合集下载

位置式PID控制算法和增量式PID控制算法

位置式PID控制算法和增量式PID控制算法

位置式PID控制算法和增量式PID控制算法1.位置式PID控制算法:u(t) = Kp * e(t) + Ki * ∫e(t)dt + Kd * de(t)/dt其中,u(t)为控制量,Kp为比例增益,Ki为积分增益,Kd为微分增益,e(t)为偏差即系统输出值与期望值的差值,∫e(t)dt为偏差的积分,de(t)/dt为偏差的微分。

-简单易懂:位置式PID控制算法的计算公式直接描述了控制量与偏差之间的关系,容易理解和实现。

-稳定性好:位置式PID控制算法通过不断修正控制量的大小,能够使系统快速、准确地达到期望值,具有较好的稳定性和控制精度。

-适用范围广:位置式PID控制算法适用于各种控制系统,包括线性系统和非线性系统。

2.增量式PID控制算法:增量式PID控制算法是相对于位置式PID控制算法而言的,它的基本原理是通过计算当前偏差和上一次偏差之间的差异来决定修正控制量的大小,从而达到系统稳定的状态。

增量式PID控制算法的计算公式如下:u(t)=u(t-1)+Kp*[e(t)-e(t-1)]+Ki*e(t)+Kd*[e(t)-2*e(t-1)+e(t-2)]其中,u(t)为控制量,Kp为比例增益,Ki为积分增益,Kd为微分增益,e(t)为当前的偏差,e(t-1)为上一次的偏差,e(t-2)为上两次的偏差。

增量式PID控制算法的特点:-相对稳定性好:增量式PID控制算法通过计算偏差的变化速率,能够更快地修正控制量的大小,对系统的稳定性有着较大的改善。

-抗积分饱和:增量式PID控制算法在积分项的计算中,使用了当前的偏差,而非历史的偏差,减小了积分饱和的影响。

-操作舒适性好:增量式PID控制算法的输出量是控制量的增量,对控制对象的操作更加平稳,减少了骤变和震荡。

综上所述,位置式PID控制算法和增量式PID控制算法各有其优势,应根据具体的系统需求和控制目标选择使用。

一般来说,位置式PID控制算法适用于对控制精度要求较高的系统,而增量式PID控制算法则适用于要求操作平稳度较高的系统。

离散化 Pid 模糊控制算法

离散化 Pid  模糊控制算法

论文标题: 设计PID ,离散化,模糊化控制器PID 控制器设计一 PID 控制的基本原理和常用形式及数学模型具有比例-积分-微分控制规律的控制器,称PID 控制器。

这种组合具有三种基本规律各自的特点,其运动方程为:dt t de dt t e t e t m K K K K K dp ti p p )()()()(0++=⎰相应的传递函数为:⎪⎪⎭⎫ ⎝⎛++=S S s K K K d i p c 1)(D S S S K K K d ip 12++∙=二 数字控制器的连续化设计步骤假想的连续控制系统的框图1 设计假想的连续控制器D(s)由于人们对连续系统的设计方法比较熟悉,对由上图的假想连续控制系统进行设计,如利用连续系统的频率的特性法,根轨迹法等设计出假想的连续控制器D(S)。

2 选择采样周期T香农采样定理给出了从采样信号到恢复连续信号的最低采样频率。

在计算机控制系统中,完成信号恢复功能一般有零阶保持器H(s)来实现。

零阶保持器的传递函数为3将D(S)离散化为D(Z)将连续控制器D(S)离散化为数字控制器D(Z)的方法很多,如双线性变换法,后向差分法,前向差分法,冲击响应不变法,零极点匹配法,零阶保持法。

双线性变换法然后D(S)就可以转化离散的D(Z)三Matlab仿真实验直接试探法求PID根据这个框图,求出该传递函数的P=0.35 I=0 D=0根据⎪⎪⎭⎫ ⎝⎛++=S S s K K K d i p c 1)(D D (Z )=0.35 T=0.01数字连续话PID 控制器设计MA TLAB 仿真框图实验结果 没有经过调节的结果为结果分析一阶阶跃信号的幅值选择为5经过数字连续化PID控制器后,对比图形发现,结果变得非常稳定,没有发现超调量,而没有经过PID控制的图形发生了超调变化达到稳定的时间变得更长。

二离散化控制器的设计离散系统设计是指在给定系统性能指标的条件下,设计出控制器的控制规律和相应的数字控制算法。

pid参数计算方法

pid参数计算方法

pid参数计算方法
PID参数计算方法是一种控制算法,用于调节控制系统中的比例、积分和微分参数,以实现系统的稳定性和响应速度。

PID控制器的参数计算一般通过以下几种方法:
1. 经验法:根据经验和实际调试结果选择合适的参数。

这种方法较为简单,但需要经验丰富的工程师进行调试。

2. Ziegler-Nichols方法:通过对系统进行临界增益试验,确定临界增益Ku和周期Tu,然后通过经验公式计算出比例参数Kp、积分时间Ti和微分时间Td。

- P控制器:Kp = 0.5 * Ku
- PI控制器:Kp = 0.45 * Ku, Ti = 0.83 * Tu
- PID控制器:Kp = 0.6 * Ku, Ti = 0.5 * Tu, Td = 0.125 * Tu
3. 调整法:根据系统的特性曲线进行参数调整。

可以通过将控制系统的输出响应与期望的响应进行比较,计算出误差,并根据误差调整参数,使系统响应更接近期望值。

4. 自适应控制法:使用自适应控制算法,通过实时监测系统的状态和性能指标,自动调整PID参数。

这种方法可以根据系统的实时变化来调整参数,提高系统的稳定性和鲁棒性。

需要注意的是,PID参数的计算方法根据具体的应用和系统特性可能会有所不同,以上介绍的方法仅为一般情况下的参考。

在实际应用中,还需要进行实验和调试,根据系统的实际情况进行参数的微调。

PID控制算法(PID控制原理与程序流程)

PID控制算法(PID控制原理与程序流程)

PID控制算法(PID控制原理与程序流程)⼀、PID控制原理与程序流程(⼀)过程控制的基本概念过程控制――对⽣产过程的某⼀或某些物理参数进⾏的⾃动控制。

1、模拟控制系统图5-1-1 基本模拟反馈控制回路被控量的值由传感器或变送器来检测,这个值与给定值进⾏⽐较,得到偏差,模拟调节器依⼀定控制规律使操作变量变化,以使偏差趋近于零,其输出通过执⾏器作⽤于过程。

控制规律⽤对应的模拟硬件来实现,控制规律的修改需要更换模拟硬件。

2、微机过程控制系统图5-1-2 微机过程控制系统基本框图以微型计算机作为控制器。

控制规律的实现,是通过软件来完成的。

改变控制规律,只要改变相应的程序即可。

3、数字控制系统DDC图5-1-3 DDC系统构成框图DDC(Direct Digital Congtrol)系统是计算机⽤于过程控制的最典型的⼀种系统。

微型计算机通过过程输⼊通道对⼀个或多个物理量进⾏检测,并根据确定的控制规律(算法)进⾏计算,通过输出通道直接去控制执⾏机构,使各被控量达到预定的要求。

由于计算机的决策直接作⽤于过程,故称为直接数字控制。

DDC系统也是计算机在⼯业应⽤中最普遍的⼀种形式。

(⼆)模拟PID调节器1、模拟PID控制系统组成图5-1-4 模拟PID控制系统原理框图2、模拟PID调节器的微分⽅程和传输函数PID调节器是⼀种线性调节器,它将给定值r(t)与实际输出值c(t)的偏差的⽐例(P)、积分(I)、微分(D)通过线性组合构成控制量,对控制对象进⾏控制。

a、PID调节器的微分⽅程式中b、PID调节器的传输函数a、⽐例环节:即时成⽐例地反应控制系统的偏差信号e(t),偏差⼀旦产⽣,调节器⽴即产⽣控制作⽤以减⼩偏差。

b、积分环节:主要⽤于消除静差,提⾼系统的⽆差度。

积分作⽤的强弱取决于积分时间常数TI,TI越⼤,积分作⽤越弱,反之则越强。

c、微分环节:能反应偏差信号的变化趋势(变化速率),并能在偏差信号的值变得太⼤之前,在系统中引⼊⼀个有效的早期修正信号,从⽽加快系统的动作速度,减⼩调节时间。

(完整版)PID控制算法介绍与实现

(完整版)PID控制算法介绍与实现

PID控制算法介绍与实现一、PID的数学模型在工业应用中PID及其衍生算法是应用最广泛的算法之一,是当之无愧的万能算法,如果能够熟练掌握PID算法的设计与实现过程,对于一般的研发人员来讲,应该是足够应对一般研发问题了,而难能可贵的是,在很多控制算法当中,PID控制算法又是最简单,最能体现反馈思想的控制算法,可谓经典中的经典。

经典的未必是复杂的,经典的东西常常是简单的,而且是最简单的。

PID算法的一般形式:PID算法通过误差信号控制被控量,而控制器本身就是比例、积分、微分三个环节的加和。

这里我们规定(在t时刻):1.输入量为i(t)2.输出量为o(t)3.偏差量为err(t)=i(t)− o(t)u(t)=k p(err(t)+1T i.∫err(t)d t+T D d err(t)d t)二、PID算法的数字离散化假设采样间隔为T,则在第K个T时刻:偏差err(k)=i(k) - o(k)积分环节用加和的形式表示,即err(k) + err(k+1) + …微分环节用斜率的形式表示,即[err(k)- err(k−1)]/T; PID算法离散化后的式子:u(k)=k p(err(k)+TT i.∑err(j)+T DT(err(k)−err(k−1)))则u(k)可表示成为:u(k)=k p(err(k)+k i∑err(j)+k d(err(k)−err(k−1)))其中式中:比例参数k p:控制器的输出与输入偏差值成比例关系。

系统一旦出现偏差,比例调节立即产生调节作用以减少偏差。

特点:过程简单快速、比例作用大,可以加快调节,减小误差;但是使系统稳定性下降,造成不稳定,有余差。

积分参数k i:积分环节主要是用来消除静差,所谓静差,就是系统稳定后输出值和设定值之间的差值,积分环节实际上就是偏差累计的过程,把累计的误差加到原有系统上以抵消系统造成的静差。

微分参数k d:微分信号则反应了偏差信号的变化规律,或者说是变化趋势,根据偏差信号的变化趋势来进行超前调节,从而增加了系统的快速性。

PID算法的C语言实现

PID算法的C语言实现

PID算法的C语言实现PID(Proportional-Integral-Derivative)算法是一种常用的控制算法,被广泛应用于自动控制系统中。

它是通过计算系统当前的误差,来调整控制器的输出值,从而使得系统的输出与期望输出之间达到期望的关系。

以下是一个简单的PID算法的C语言实现示例:```c#include <stdio.h>//PID控制器参数float Kp = 1.0; // 比例系数float Ki = 0.5; // 积分系数float Kd = 0.2; // 微分系数//预设值float setpoint = 100.0;//PID控制器输出限制float outMin = 0.0;float outMax = 255.0;//PID控制器变量float integral = 0.0;float lastError = 0.0;//PID控制器计算函数//计算误差float error = setpoint - input;//计算比例项float proportional = Kp * error;//计算积分项integral += Ki * error;//计算微分项float derivative = Kd * (error - lastError);//保存上一次的误差lastError = error;//计算PID输出float output = proportional + integral + derivative; //限制输出值在指定范围内if (output > outMax)output = outMax;} else if (output < outMin)output = outMin;}return output;int maifloat processVariable = 0.0; // 进程变量,即被控制物理系统的输出值//模拟控制循环for (int i = 0; i < 100; i++)//获取控制器输出值//模拟物理系统processVariable += (output * 0.1);printf("Iteration: %d\tOutput: %.2f\tProcessVariable: %.2f\n", i, output, processVariable);}return 0;```上述代码中,首先定义了PID控制器的参数(比例系数Kp、积分系数Ki和微分系数Kd)、预设值(setpoint)以及PID控制器的输出限制(outMin和outMax)。

pid算法

pid算法

在过程控制中,由偏差的比例(P),积分(I)和微分(D)控制的PID控制器(也称为PID调节器)是使用最广泛的自动控制器。

具有原理简单,易于实现,应用范围广,控制参数独立,参数选择简单等优点。

从理论上可以证明,对于过程控制的典型对象“一阶滞后+纯滞后”,对于“二阶滞后+纯滞后”的控制对象,PID控制器是一种最优控制。

控制点目前包含三种比较简单的PID控制算法,分别是:增量式算法,位置式算法,微分先行。

这三种PID算法虽然简单,但各有特点,基本上能满足一般控制的大多数要求。

算法种类:1) PID增量式算法离散化公式:注:各符号含义如下u(t);;;;; 控制器的输出值。

e(t);;;;; 控制器输入与设定值之间的误差。

Kp;;;;;;; 比例系数。

Ti;;;;;;; 积分时间常数。

Td;;;;;;; 微分时间常数。

T;;;;;;;; 调节周期。

对于增量式算法,可以选择的功能有:(1) 滤波的选择可以对输入加一个前置滤波器,使得进入控制算法的给定值不突变,而是有一定惯性延迟的缓变量。

(2) 系统的动态过程加速在增量式算法中,比例项与积分项的符号有以下关系:如果被控量继续偏离给定值,则这两项符号相同,而当被控量向给定值方向变化时,则这两项的符号相反。

由于这一性质,当被控量接近给定值的时候,反号的比例作用阻碍了积分作用,因而避免了积分超调以及随之带来的振荡,这显然是有利于控制的。

但如果被控量远未接近给定值,仅刚开始向给定值变化时,由于比例和积分反向,将会减慢控制过程。

为了加快开始的动态过程,我们可以设定一个偏差范围v,当偏差|e(t)|< β时,即被控量接近给定值时,就按正常规律调节,而当|e(t)|>= β时,则不管比例作用为正或为负,都使它向有利于接近给定值的方向调整,即取其值为|e(t)-e(t-1)|,其符号与积分项一致。

利用这样的算法,可以加快控制的动态过程。

(3) PID增量算法的饱和作用及其抑制在PID增量算法中,由于执行元件本身是机械或物理的积分储存单元,如果给定值发生突变时,由算法的比例部分和微分部分计算出的控制增量可能比较大,如果该值超过了执行元件所允许的最大限度,那么实际上执行的控制增量将时受到限制时的值,多余的部分将丢失,将使系统的动态过程变长,因此,需要采取一定的措施改善这种情况。

pid调节

pid调节

pid调节1,首先理解pid公式算法,这里简单说一下pi算法P=p系数*(SV-PV )(先忽略死区写上去看起来乱)I=循环时间/积分时间*(这次P值+上次P值)*0.5+上次的I值OUT=P+I=p系数*(SV-PV )+循环时间/积分时间*(这次P值+上次P值)*0.5+上次的I值按循环时间cycle变量=1s计算2,我们公司的对fb41的运用是把它放在ob1的子程序里面,这时候fb41是按plc扫描周期10ms等级的时间快速扫描(ACECOOK程序很长但扫描周期只有6ms),积分累加很快,比如负压sv-pv=5pa时候,这时候如果p=1,i=100那么p值是1*5=5hz,然后i值每一秒增加1/100*1000/6*5hz=8.3hz,这个时候只有通过调节i值来减小,若想5pa差值这一刻频率增加0.2hz那么i值是100*5/0.2HZ=2500,理论上是可行的,但是数据看上去比较难理解,只可以增加i,不可以通过减小P值来调节,比如p=0.001,i=100这个时候,p=0.001*5=0.005hz基本没作用,i的调节速度是5pa时刻每秒1/100*1000/6*0.005hz=.016hz,这个参数在正常运行后一定程度上可以维持负压稳定。

但是由于几乎没有p的作用负压调节跟进比较缓慢,特别是在刚启动鼓风时候,如果鼓风增加快,那么引风机调节无法快速跟上,这时候炉膛会出现正压,所以这个无法有效防止负荷波动,1,如果放在0b33(默认1s)这时候设置p=0.1,i=20这样比较容易调出读数而且比较好理解,节约plc扫描周期。

首先这个值是预估值,因为现场测试30hz左右常用值,负压变化10pa引风机频率变化1hz,随着引风机频率升高,功率和转速平方成正比,49到50hz会产生更高的负压变化!这时候我们的p值p=1/(sv-pv)=0.1。

就是负压差多少补多少,差10pa,补上1hz,多10pa 减去1hz。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

记得在做测温仪校准台的时候,在做到用PID算法控制温度的时候,对于PID算法的理解的过程很难受也很纠结,尽管有凤舞天和tomsu两位大师在旁边指导还是费了不少时间和精力去理解、领悟和调试。

后来另外一个同事需要做高频加热设备的温度控制,也需要用到PID算法对温度的控制,因为这位同事是今年刚毕业的大学生,在学校主要是学软件,基本上没有什么硬件基础,所以她对整个温度控制很难理解和领悟,对PWM的理解刚开始总是很难精确,所以在她做温控的过程更加的纠结和痛苦,同事耗费的时间、精力和人力(需要在旁边指导的同事)也更大。

并且她的经历跟我的经历是重复的,在我经历过一遍之后她又按照我走过的经历再经历一遍,这种重复的工作对公司来说是一种很严重的人力资源的浪费。

对于一个公司来说,人力资源是最宝贵的一种资源。

而在工控行业,PID算法是软件控制所常用的一种算法,所以对于我们嵌入式组来说,基本上是需要每个人都会用的。

那么我们就必须要找到一种方法既能降低学习成本,又能统一软件,降低维护成本,而且还简单、易学、易用。

所以,凤舞天建议我先在msOS的基础上添加一个PID算法库的试用实例,面向对象的,把算法都封装在底层,用户只需要调节相对应的门限值和系数就行。

那么我们来介绍一下PID算法库的分层。

msOS是采用分层的,整个系统分为App和System两个目录:
而System是系统库。

我们把PID库添加在System目录下,以实现真正的库封装。

在PID目录下,包含Pid.c和Pid.h两个文件。

首先我们从PID库的应用开始入手。

我们把用户根据实际情况需要调整的参
数做成界面菜单放在event.c文件中。

用户可以根据特定需求来更改目标值TargetPointer和获取当前值CurrentPointer;也可以根据控制过程所需要的控制曲线来定P、I、D引入的门限值;还可以设置运算过程中P、I、D的系数和积分处理的模式,用户只需要对此进行注册即可。

同时需要对在底层运算后传上来的结果进行怎样的处理在static void Mycallback( int data)中进行控制。

那么该怎样去调节这些参数就得需要我们了解PID的原理和物理意义了。

其实关于PID算法的文章网上很多,可基本上都是基于数学模型讲解的,很难理解也很难运用,后来凤舞天也写了一篇《PID算法》,深入浅出,比较通俗易懂。

而作者结合具体项目的实践,和对PID算法理论的理解,简单总结了一下:
P是根据测量值和目标值的误差来决定的负反馈的大小。

P的取得公式:P=系数*(目标值-当前值)。

但是如果一开始就引入负反馈,很有可能达不到目标值,所以需要设定引入负反馈的门限值。

而在引入负反馈门限值之前,如果(目
标值-当前值)大于负反馈引入门限值应当全速加热;如果(目标值-当前值)小于负反馈引入门限值应当全速减。

I就是积分,也就是极限误差。

当目标值和当前值很接近的时候,如果继续只根据负反馈来调节,那么有可能与目标值产生误差值,而达不到目标值,所以这时候需要引入一个趋势与负反馈相同的期望值来消除这个误差。

把这些误差累加起来正向反馈给结果来抑制负反馈,在正负反馈的共同作用下当前值逐渐逼近目标值。

D是为了防止在当前值在P和I的正负反馈作用下出现过冲或者还没达到目标值的情况下更快速的稳定下来而引入的。

所以D的门限值不宜太高,应该取比较接近目标值的门限,这样可以减小当前值的振荡,使其更快速的稳定。

接下来我们来分析分析PID算法库的底层。

首先是定义一个PID的结构体:
然后通过注册方式来获取应用层给不同参数的赋值。

在获取了参数之后,就开始PID运算。

PID的运算原理就是前面我们所提到的。

在这里我们使用systemtick每个10ms调用一次,来确保实时、稳定的控温。

在这个PID运算中,我们为了让计算结果更能符合控制逻辑的曲线分布,需要对积分进行一定的预处理,做积分预处理是为了防止积分过大而导致目标值的过冲或者过冲太大,这里提供了三种积分模式:LineMode(线性模式)、TwoRootMode(开二次方根号模式)、ThreeRootMode(开三次方根号模式)。

关于这三种积分模式,作者以测温仪校准台为基础(校准台的发热体是氮化硅)做了三组测试并获取了数据绘制成曲线图来做分析。

在这三组测试中,我们设目标温度都为800度,负反馈门限、负反馈系数、积分门限、微分门限都相同,取积分模式和积分系数不相同。

在积分线性模式下积分系数为0.02,二次根号和三次根号积分模式下,积分系数为1。

在线性积分系数远小于开根号的积分系数的情况下,其稳定的波形还是没有开根号的平滑,稳定。

此图为线性积分模式在引入积分和微分后的温度趋于稳定过程的PWM输出。

可以看到,在PWM输出稳定之前还会有一个小的波峰。

这个波峰的幅度大小就取决于积分系数的大小。

而这两个图是积分模式取开二次方和三次方根号在引入积分和微分后的温度趋于稳定过程PWM的输出。

可以看出即使积分系数为1,开根号的次方数越多,在PWM输出稳定之前,它的曲线越平滑。

相关文档
最新文档