PID控制是一个二阶线性闭环控制器,通过调整比例、积分和微分三项参数,使得大多数的工业控制系统获得良好的闭环控制性能。PID控制优点:a. 技术成熟,b. 易被人们熟悉和掌握,c. 不需要建立数学模型,d. 控制效果好,e. 鲁棒性。

一. 模拟量PID控制算法

模拟量PID控制器的基本算式为:

式中

u(t)——控制器(或调节器)的输出;

e(t)——控制器的输入(通常是设定值与被控量之差,即e(t)=r(t)-c(t));

Kp——比例放大系数;

Ti ——积分时间;

Td——微分时间。

模拟量PID控制器的输出是仪表标准信号(如1-5VDC,4-20mA等),对应阀门开度0%-100%。

二. 离散量PID控制算法

数字式PID控制又分为位置式PID控制增量式PID控制

由于计算机基于采样控制理论,计算方法不能沿袭传统的模拟PID控制算法(公式1),必须将控制模型离散化,这样就可以让计算机或者单片机通过采样的方式实现数字PID控制。离散化的方法:以T为采样周期,k为采样序号,用求和的形式代替积分,用增量的形式(求差)代替微分,这样可以将连续的PID计算公式离散。

1. 位置式PID控制算法

u(k)为第k次采样时刻控制器的输出值,可得离散的PID算式:

       公式(2)给出了控制量的全部大小,称之为全量式或者位置式PID控制算法。
     位置式PID输出是一个数字量,其数值范围需要设置输出下限值和上限值来决定。
    u(k)可直接控制执行机构(如阀门),u(k)的值经过D/A转换与执行机构的位置(如阀门开度)互相对应。
    位置式PID控制算法的缺点:当前采样时刻的输出与过去的各个状态有关,计算时要对e(k)进行累加,运算量大;而且控制器的输出u(k)对应的是执行机构的实际位置,如果计算机出现故障,u(k)的大幅度变化会引起执行机构位置的大幅度变化。

2. 增量式PID控制算法

增量式PID是指数字控制器的输出只是控制量的增量Δu(k)。采用增量式算法时,计算机输出的控制量Δu(k)对应的是本次执行机构位置的增量,而不是对应执行机构的实际位置,因此要求执行机构必须具有对控制量增量的累积功能,才能完成对被控对象的控制操作。执行机构的累积功能可以采用硬件的方法实现;也可以采用软件来实现,如利用算式 u(k)=u(k-1)+Δu(k)程序化来完成。

公式(3)或者(4)给出了控制量的变化大小,称之增量式PID控制算法。
    一般计算机控制系统的采样周期T在选定后就不再改变,所以,一旦确定了Kp、Ti、Td,只要使用前后3次测量的偏差值即可由式(3)或式(4)求出控制增量。
增量式算法优点:
①算式中不需要累加。控制增量Δu(k)的确定仅与最近3次的采样值有关,容易通过加权处理获得比较好的控制效果;
②计算机每次只输出控制增量,即对应执行机构位置的变化量,故机器发生故障时影响范围小、不会严重影响生产过程;
③手动—自动切换时冲击小。当控制从手动向自动切换时,可以作到无扰动切换。

位置式PID与增量式PID的比较:

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

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

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

三. 离散量PID输出信号的转换
    数字式PID运算出来的是一个没有量纲的数据,该数据的大小仅表示的PID调节的强度,数据大调节度就大。PID运算值一般需要进行合适的信号转换,才能被各种执行机构所使用。常见的信号转换有:

1、PID+D/A转换

PID运算值经过D/A转换为常见的如1-5VDC、4-20mA等仪表标准信号,再输出控制各种标准的执行机构,如电液伺服阀。

2、 PID+PWM转换

在PID控制温度时,常使用固态继电器(SSR:Solid State Relay)或者可控硅(SCR:Silicon Controlled Rectifier,又称晶闸管)作为执行机构,这时就需要把PID运算值进行脉冲宽度调制(PWM)。注意使用可控硅控制时稍为复杂,即需要检测电源相位,并使调宽脉冲与导通角同步。

PWM(简称脉宽调制)就是要改变脉冲的占空比。一般将PID计算出的数据直接赋给内部定时器控制占空比,但是要对最大值和最小值加以限定。我们假设当定时器的值为0时占空比为0%,值为2000时占空比为100%,这样PID计算出不同的值,就改变了脉冲的占空比。

3、 PID+脉冲转换

在PID控制步进/伺服电机时,需要把PID计算值转换为脉冲信号,即脉冲频率和占空比一般确定,而脉冲数量跟随PID计算值变化

数字式PID控制的应用总结的更多相关文章

  1. 【iCore3应用开发平台】发布 iCore3 应用开发平台PID控制代码

    说明:1.本代码包包含FPGA和STM32F407两部分内容2.FPGA工程为出厂代码FPGA工程,版本为REV43.STM32F407为只含PID控制的ARM工程4.在使用风扇过程中,请勿将手伸入扇 ...

  2. 两轮自平衡小车双闭环PID控制设计

                                                                                            两轮自平衡小车的研究意义 ...

  3. PID控制学习笔记(二)

    不管是基本的PID控制还是变形的PID控制算法,其核心都是对输入信号(设定值信号.测量信号或者偏差信号等)做基本的比例.积分.微分运算,最终提供给被控过程良好的调节信号. 在过程控制仪表,特别是在数字 ...

  4. SLAM+语音机器人DIY系列:(四)差分底盘设计——5.底盘PID控制参数整定

    摘要 运动底盘是移动机器人的重要组成部分,不像激光雷达.IMU.麦克风.音响.摄像头这些通用部件可以直接买到,很难买到通用的底盘.一方面是因为底盘的尺寸结构和参数是要与具体机器人匹配的:另一方面是因为 ...

  5. MATLAB-离散系统的数字PID控制仿真

    %PID Controller clear all; close all; ts=0.001; %采样时间=0.001s  sys=tf(,]); %建立被控对象传递函数 dsys=c2d(sys,t ...

  6. 了解PID控制

    @2019-03-07 [小记] 了解PID控制 比例 - 积分 - 微分 积分 --- 记忆过去 比例 --- 了解现在 微分 --- 预测未来

  7. PID控制最通俗的解释与PID参数的整定方法

    转自->这里 PID是比例.积分.微分的简称,PID控制的难点不是编程,而是控制器的参数整定.参数整定的关键是正确地理解各参数的物理意义,PID控制的原理可以用人对炉温的手动控制来理解.阅读本文 ...

  8. STM32L476应用开发之七:流量的PID控制

    在气体分析仪使用过程中,为了力求分析结果的准确性,一般要求通过的气体流量尽可能的稳定.为了保证流量控制的稳定,我们采用PID调节来控制气路阀门的开度. 1.硬件设计 我们采用的流量计为气体质量流量计, ...

  9. 转 C#实现PID控制的模拟测试和曲线绘图

    C#实现PID控制的模拟测试和曲线绘图   本文分两部分,一部分是讲PID算法的实现,另一部分是讲如何用动态的曲线绘制出PID运算的结果. 首先,PID算法的理论模型请参考自动控制理论,最早出现的是模 ...

随机推荐

  1. 用宏定义封装LoadLibrary,方便的动态加载dll

    同学们动态加载dll的时候是不是感觉挺麻烦的,每次都::LoadLibrary,::GetProcAddress,还要typedef一堆函数.最近闲来无聊,用宏封装了一下,可以少写不少代码,用来也挺方 ...

  2. [老老实实学WCF] 第三篇 在IIS中寄存服务

    老老实实学WCF 第三篇 在IIS中寄宿服务 通过前两篇的学习,我们了解了如何搭建一个最简单的WCF通信模型,包括定义和实现服务协定.配置服务.寄宿服务.通过添加服务引用的方式配置客户端并访问服务.我 ...

  3. UI5_UIAlertView与UIActionSheet

    // // ViewController.h // UI5_UIAlertView与UIActionSheet // // Created by zhangxueming on 15/7/7. // ...

  4. spring3中新增的@value注解

    在spring 3.0中,可以通过使用@value,对一些如xxx.properties文件 中的文件,进行键值对的注入,例子如下: 1 首先在applicationContext.xml中加入:   ...

  5. QT 多线程程序设计【转】

    QT通过三种形式提供了对线程的支持.它们分别是,一.平台无关的线程类,二.线程安全的事件投递,三.跨线程的信号-槽连接.这使得开发轻巧的多线程Qt程序更为容易,并能充分利用多处理器机器的优势.多线程编 ...

  6. 转帖:使用TortoiseGit处理代码冲突

    原址:http://www.cnblogs.com/jason-beijing/p/5718190.html   场景一  user0 有新提交 user1 没有pull -> 写新代码 -&g ...

  7. 利用二维矩阵求spanning tree

    只做了9个节点的,无权值,使用了n-1个=8个循环,非常麻烦.一级一级判断是否连接,连接及记录所在节点,以后不再使用,确保无回路. 验证后无回路,但只试过几种情况. 代码如下: #include< ...

  8. java.lang.ThreadLocal源码分析

    ThreadLocal类提供线程本地变量,为变量在每个线程创建一个副本,每个线程可以访问自己内部的副本变量. 比如,有这样一个需求,需要为每个线程创建一个独一无二的标识,这个标识在第一次调用Threa ...

  9. Silverlight独立存储

    写 private void Button_Click_1(object sender, RoutedEventArgs e) { IsolatedStorageFile isf = Isolated ...

  10. [大牛翻译系列]Hadoop(20)附录A.10 压缩格式LZOP编译安装配置

    附录A.10 LZOP LZOP是一种压缩解码器,在MapReduce中可以支持可分块的压缩.第5章中有一节介绍了如何应用LZOP.在这一节中,将介绍如何编译LZOP,在集群做相应配置. A.10.1 ...