简单的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。

离散PIDPID参数整定

离散PIDPID参数整定

U(s)
其离散位置式算式: U(k) aU(k-1) (1 a)U(k)
其中: a Tf T0 Tf
k
U(k) kce(k) ki e(i) k0[e(k) e(k-1)] i0
其离散增量式等式 U(k) aU(k - 1) (1 a)U(k)
其中: U(k) k ce(k 1) k ie(k) k D[e(k) 2e(k - 1) e(k - 2)]
液体压力:调节近似流量调节 蒸汽压力:调节近似温度调节 温度系统:存在传递滞后和较大的时间常数,所以引入微分作用 注意:这种按照受控变量类型来选择控制器参数的做法,都是对 典型的过程特性而言的。
表1-4 经验法整定参数的参考范围
系统
温度 流量 压力 液位
比例度 20~60 40~100 30~70 20~80
exp( / 1 2 ) 1/ n
n exp(2 / 1 2 ) 1/ n
9、对不稳定系统,Kc越小则越稳定
一、经验凑试法:
按照人们长期从事过程控制的经验来调整控制器参数 流量系统:宜用PI控制,往往需要精确控制 液位系统:宜用纯比例,比例度要大 压力系统:液体压力,气体压力,蒸汽压力
参数
Ti min 3~10 0.1~1 0.4~3
Td min 0.5~3
整定步骤: (1)纯比例下调出4:1衰减振荡 (2)如需消除余差,则适当增加比例度,引入积分作用 (3)如需要再加入微分:允许适当减小比例度和积分时 间 不同参数对过渡过程曲线的影响: (1)比例度过小、积分时间过小、微分时间过大所引起 的振荡的区别
Ui (k)
ki e(k )
U i
(k)
ki
e(k )
e(k 2

PID算法-增量(详细)

PID算法-增量(详细)

共三十六页
积分(jīfēn)调节器
e(t) t
0 y
t 0
图2积分作用(zuòyòng)响应曲线
共三十六页
比例(bǐlì)积分调节器
❖若将比例和积分两种作用结合起来(qǐ lái),就构成 PI调节器,调节规律为:

(3)
❖ PI调节器的输出特性曲线如图3所示
共三十六页
比例(bǐlì)积分调节器
❖ e(t)作为PID 控制器的输入,u(t)作为PID 控制器的 输出和被控对象的输入。
共三十六页
❖所以模拟PID控制器的控制规律为:
u(t)
K
p
e(t)
1 TI
t
e(t)dt
0
TD
de(t)
dt
uo
❖其中 : (qízhōng) u(t)——调节器的输出信号;
❖ e(t)——调节器的偏差信号,它等于给定值与测量值之差
微分时间选择合适情况下,可以减少超调,减少调节时间。微分作用对噪声干扰有
放大作用,因此过强的加微分调节,对系统抗干扰不利。
共三十六页
❖ 三个参数要综合考虑,一般先将I,D设为0,调好 P,达到基本的响应速度和误差,再加上I,使误差 为0,这时再加入D,三个参数要反复调试,最终 达到较好的结果。不同(bù tónɡ)的控制对象,调试的 难度相差很大!
?uk第k次采样时刻的计算机输出值?ek第k次采样时刻输入的偏差值?ek?1第k1次采样时刻输入的偏差值?ki积分系数积分时间ti即为累积多少次个t?kd微分系数?u0开始进行pid控制时的原始初值应为前一次的给定值?如果采样周期取得足够小则以上近似计算可获得足够精确的结果离散控制过程与连续控制过程十分接近

PID控制算法

PID控制算法

PID控制原理和特点工程实际中,应用最为广泛调节器控制规律为比例、积分、微分控制,简称PID控制,又称PID调节。

PID控制器问世至今已有近70年历史,它以其结构简单、稳定性好、工作可靠、调整方便而成为工业控制主要技术之一。

当被控对象结构和参数不能完全掌握,或不到精确数学模型时,控制理论其它技术难以采用时,系统控制器结构和参数必须依靠经验和现场调试来确定,这时应用PID控制技术最为方便。

即当我们不完全了解一个系统和被控对象﹐或不能有效测量手段来获系统参数时,最适合用PID控制技术。

PID控制,实际中也有PI和PD控制。

PID控制器就是系统误差,利用比例、积分、微分计算出控制量进行控制。

1、比例控制(P):比例控制是最常用的控制手段之一,比方说我们控制一个加热器的恒温100度,当开始加热时,离目标温度相差比较远,这时我们通常会加大加热,使温度快速上升,当温度超过100度时,我们则关闭输出,通常我们会使用这样一个函数:e(t) = SP – y(t)u(t) = e(t) * PSP——设定值e(t)——误差值y(t)——反馈值u(t)——输出值P——比例系数滞后性不是很大的控制对象使用比例控制方式就可以满足控制要求,但很多被控对象中因为有滞后性。

也就是如果设定温度是200度,当采用比例方式控制时,如果P选择比较大,则会出现当温度达到200度输出为0后,温度仍然会止不住的向上爬升,比方说升至230度,当温度超过200度太多后又开始回落,尽管这时输出开始出力加热,但温度仍然会向下跌落一定的温度才会止跌回升,比方说降至170度,最后整个系统会稳定在一定的范围内进行振荡。

如果这个振荡的幅度是允许的比方说家用电器的控制,那则可以选用比例控制。

2、比例积分控制(PI):积分的存在是针对比例控制要不就是有差值要不就是振荡的这种特点提出的改进,它常与比例一块进行控制,也就是PI控制。

其公式有很多种,但大多差别不大,标准公式如下:u(t) = Kp*e(t) + Ki*∑e(t) + u0u(t)——输出Kp——比例放大系数Ki——积分放大系数e(t)——误差u0——控制量基准值(基础偏差)大家可以看到积分项是一个历史误差的累积值,如果光用比例控制时,我们知道要不就是达不到设定值要不就是振荡,在使用了积分项后就可以解决达不到设定值的静态误差问题,比方说一个控制中使用了PI控制后,如果存在静态误差,输出始终达不到设定值,这时积分项的误差累积值会越来越大,这个累积值乘上Ki后会在输出的比重中越占越多,使输出u(t)越来越大,最终达到消除静态误差的目的。

PID算法的两种表达形式及各自的特点

PID算法的两种表达形式及各自的特点

2、PID 算法的两种表达形式及各自的特点。

答:①位置型算式:u(n)=Kp{e(n)+T/Ti ∑(n,i=0)e(j)+Td/T[e(n)-e(n-1)]}特点:计算机实现位置式算式不够方便,其D/A 转换器具有零阶保持器的作用。

②增量型算式: △u (n)=Kp{[e(n)-e(n-1)]+T/Tie(n)+Td/T[e(n)-2e (n-1)+e(n-2)]} u(n)=u(n-1)+△u(n)特点:釆用增量型算式计算u(n)的优点是编程简单,历史数据可以递推使用,占用存储单元少,运算速度快,但它仅仅是计算方法上的改进,并没有改变位置算式的本质。

3、PID 参数的自整定方法有哪些?答:①模型参数法:即在线辩识被控对象的模型参数,再利用这些模型参数来自整定PID 控制器的参数;②特征参数法:即抽取被控对象的某些技术参数,以其为依据自动整定PID 控制参数;③专家整定:即模仿人工自整定参数的推理决策过程,自动整定PID 控制参数。

3-1、简述用特征参数法进行PID 参数自整定的思路。

答:所谓特征参数法就是抽取控制对象的某些特征参数,以其为依据自动整定PID 控制参数,下面以釆用具有滞环的继电器非线性反馈控制系统为例说明,系统框图如下:首先通过人工控制使系统进入稳定工况,然后将整定开关S 接通T ,获得极限环,使被按量y 出现临界等幅振带。

其振带幅值勤a ,振荡周期即为临界周期Tu ,临界增益为Ku=4d /∏a ,一旦获得Tu 和Ku ,再查表即可得到PID 控制器的整定参数,最后整定开关S 接通A ,使PID 控制器投入正常运行。

3-2、简述用专家整定法进行PID 参数自整定的思路。

答:所谓专家整定法就是模仿人工整定参数的推理,决策过程,自整定PID 控制参数,其系系列整定规则,再对实时釆集的被控系统信息进行分析判断,然后自动选择某个整定规则,并将被控对象的响应曲线与控制目标曲线比较,反复调整比较直到满足控制目标为止。

自整定pid控制算法c代码

自整定pid控制算法c代码

自整定PID控制算法是一种能够自动调整PID控制器的参数以优化其性能的方法。

下面是一个简单的自整定PID控制算法的C代码示例:double output = pid->kp * error + pid->ki * pid->integral + pid->kd * derivative;// 更新误差和积分项pid->last_error = error;// 自整定PID参数// 这里使用一个简单的自整定规则:当误差较大时,增加比例系数;当误差较小时,减小比例系数if (fabs(error) > 1.0) {pid->kp += 0.1;} else if (fabs(error) < 0.1) {pid->kp -= 0.01;}return output;}int main() {// 初始化PID控制器PIDController pid = {1.0, 0.0, 0.1, 0.0, 0.0};// 模拟控制过程double setpoint = 10.0; // 设定值double actual_value = 0.0; // 实际值double dt = 0.1; // 控制周期在这个示例中,我们定义了一个PIDController结构体来表示PID控制器,并实现了一个self_tuning_pid函数来进行自整定PID控制。

在self_tuning_pid函数中,我们首先计算误差和误差变化率,然后计算PID输出,并更新误差和积分项。

接着,我们使用一个简单的自整定规则来根据误差大小调整比例系数。

最后,我们返回PID输出作为控制量。

在main函数中,我们初始化了一个PID控制器,并使用一个循环来模拟控制过程。

在每个控制周期中,我们调用self_tuning_pid函数计算PID输出,并更新实际值。

最后,我们打印输出时间、设定值、实际值和PID输出等信息。

5中最常用的PID算法

5中最常用的PID算法

5中最常用的PID算法1. Proportional Integral Derivative (PID) 控制算法是最常用的反馈控制算法之一, 它结合了比例、积分和微分三个控制环节,用以调节和稳定系统的输出。

比例 (Proportional) 控制环节:比例控制环节根据系统的当前误差与设定值之间的差异来产生控制输出。

当误差较小时,比例控制输出相对较小,当误差较大时,输出相对较大。

比例控制环节可以通过调整比例增益参数来控制输出的灵敏度。

积分 (Integral) 控制环节:积分控制环节通过对系统误差的累积来产生控制输出。

当误差存在较大的积累时,积分控制输出会相对较大,以减小误差;当误差较小时,输出相对较小。

积分控制环节可以通过调整积分时间常数来控制输出的平稳性。

微分 (Derivative) 控制环节:微分控制环节根据当前误差变化率的快慢来产生控制输出。

当误差快速增加时,微分控制输出会相对较大,以加快系统响应;当误差变化缓慢时,输出相对较小,以减小控制震荡。

微分控制环节可以通过调整微分时间常数来控制输出的响应速度。

以上是经典PID控制算法的基本构成,但在实际应用过程中,会对PID算法进行改进和调整以满足不同系统的要求。

下面列举了五种常用的PID算法改进版本:2. 位置式PID控制算法 (Position Form PID):在位置式PID控制算法中,控制器的输入是误差,即设定值与反馈值之间的差异。

该算法是最基本的PID算法,但具有较强的实用性。

位置式PID算法相对简单,可以较容易地通过调整增益参数来实现控制目标。

3. 增量式PID控制算法 (Incremental Form PID):增量式PID控制算法是基于位置式PID控制算法的改进版本。

该算法的输入是控制量的增量,即当前控制量与前一时刻控制量之间的差异。

增量式PID算法通过计算增量控制量来调节系统,相对于位置式PID算法,在控制过程中更加稳定,可有效避免积分饱和现象。

西门子PLC1200内使用SCL实现简化版PID算法

西门子PLC1200内使用SCL实现简化版PID算法

西门⼦PLC1200内使⽤SCL实现简化版PID算法
西门⼦⾃带的PID效果很好,但是会⽐较吃性能,使⽤次数有限,很多地⽅需要PID但不需要这么精准的PID,所以⽹上找个简单的算法⾃⼰调⽤。

新建数据类型
前三个就是PID三个参数
新建FC块:
#PIDInfo.Step += 1;IF #PIDInfo.Step >= #PIDInfo.MaxStep-1 THEN #PIDInfo.Step := 0; #PIDInfo.Ek := #SetValue - #ActualValue; #PIDInfo.LocSum += #PIDInfo.Ek; //累计误差 #PIDResult := #PIDInfo.Kp * #PIDInfo.E 调⽤:
DB块内增加变量
Step和MaxStep⽤于控制扫描多少次调⽤⼀次,以及可以错开调⽤
左边填⼊设置值,实际值,和刚才添加的变量,右边输出PID,PID输出值没有明确的范围,⾃⼰⽤Limite限制范围,调整P值让输出值在范围内浮动
附C#实现
class PID_Info { float Kp = 1; //⽐例系数Proportional float Ki = 0.2f; //积分系数Integral float Kd = 0.1f; //微分系数Derivative float Ek; //当前误差 float Ek1; //前⼀算法来⾃
blog。

csdn。

net/weibo1230123/article/details/80812211。

PID控制算法

PID控制算法

PID (Proportional Integral Differential )控制是比例、积分、微分控制的简称。

在自动控制领域中,PID 控制是历史最久、生命力最强的基本控制方式。

PID 控制器的原理是根据系统的被调量实测值与设定值之间的偏差,利用偏差的比例、积分、微分三个环节的不同组合计算出对广义被控对象的控制量。

图1是常规PID 控制系统的原理图。

其中虚线框内的部分是PID 控制器,其输入为设定值)(t r 与被调量实测值)(t y 构成的控制偏差信号)(t e :)(t e =)(t r -)(t y (1)其输出为该偏差信号的比例、积分、微分的线性组合,也即PID 控制律:])()(1)([)(0⎰++=tDIP dtt de T dt t e T t e K t u (2)式中,P K 为比例系数;D T 为积分时间常数;D T 为微分时间常数。

根据被控对象动态特性和控制要求的不同,式(2)中还可以只包含比例和积分的PI 调节或者只包含比例微分的PD 调节。

下面主要讨论PID 控制的特点及其对控制过程的影响、数字PID 控制策略的实现和改进,以及数字PID 控制系统的设计和控制参数的整定等问题。

1.PID 控制规律的特点 (1)比例控制器比例控制器是最简单的控制器,其控制规律为0)()(u t e K t u P += (3)式中,Kp 为比例系数;0u 为控制量的初值,也就是在启动控制系统时的控制量。

图2所示是比例控制器对单位阶跃输入的阶跃响应。

由图2可以看到,比例控制器对于偏差是及时反应的,偏差一旦产生,控制器立即产生控制作用使被控量朝着减小偏差的方向变化,控制作用的强弱取决于比例系数Kp 。

图2 比例控制器的阶跃响应比例控制器虽然简单快速,但对于具有自平衡性(即系统阶跃响应终值为一有限值)的被控对象存在静差。

加大比例系数Kp 虽然可以减小静差,但当Kp 过大时,动态性能会变差,会引起被控量振荡,甚至导致闭环系统不稳定。

位置式pid算法c语言程序

位置式pid算法c语言程序

位置式pid算法c语言程序下面是一个简单的位置式PID算法的C语言程序示例: c.#include <stdio.h>。

// 定义PID控制器的参数。

#define Kp 1.0。

#define Ki 0.1。

#define Kd 0.2。

// 定义全局变量。

double error_sum = 0; // 误差累积。

double last_error = 0; // 上一次的误差。

// PID控制器函数。

double pid_controller(double setpoint, double measured_value) {。

double error = setpoint measured_value; // 计算当前误差。

double p_term, i_term, d_term, output;// 比例控制器。

p_term = Kp error;// 积分控制器。

error_sum += error;i_term = Ki error_sum;// 微分控制器。

d_term = Kd (error last_error);last_error = error;// 计算PID输出。

output = p_term + i_term + d_term;return output;}。

int main() {。

double setpoint = 100; // 设定值。

double measured_value = 0; // 测量值。

double output;// 模拟PID控制过程。

for (int i = 0; i < 100; i++) {。

// 模拟测量值的变化。

measured_value += 1;// 计算PID输出。

output = pid_controller(setpoint, measured_value);// 输出PID控制器的输出。

printf("PID输出: %f\n", output);}。

pythonpid控制算法

pythonpid控制算法

Python PID控制算法PID控制算法是一种常用的控制算法,用于调节系统的输出值,使其尽可能接近预期的目标值。

PID是Proportional-Integral-Derivative的缩写,分别代表比例、积分和微分三个参数。

在Python中,我们可以使用PID库来实现PID控制算法。

本文将详细介绍PID控制算法的原理和使用方法,并给出一些实际应用的例子。

1. PID控制算法原理PID控制算法的原理是通过根据系统的误差和误差的变化率来调节控制器的输出值。

具体来说,PID控制器的输出值是由以下三个部分组成的:•比例项(Proportional):与误差成正比,用于快速响应系统的变化。

•积分项(Integral):与误差的积分成正比,用于消除稳态误差。

•微分项(Derivative):与误差的变化率成正比,用于抑制系统的震荡。

PID控制器的输出值可以表示为以下公式:Output = Kp * error + Ki * integral + Kd * derivative其中,Kp、Ki和Kd分别是比例、积分和微分参数,error是当前的误差,integral是误差的积分,derivative是误差的变化率。

2. PID控制算法的实现在Python中,我们可以使用PID库来实现PID控制算法。

下面是一个使用PID库实现PID控制算法的示例:from pid import PID# 初始化PID控制器pid = PID(Kp=0.5, Ki=0.2, Kd=0.1)# 设置目标值pid.setpoint = 10.0# 循环更新控制器输出while True:# 获取当前值current_value = get_current_value()# 计算控制器输出output = pid(current_value)# 执行控制操作perform_control_action(output)在上面的示例中,我们首先导入PID库,并创建一个PID对象。

相关主题
  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输出稳定之前,它的曲线越平滑。

相关文档
最新文档