给新手的两轮自平衡小车开发实战指南
  • Introduction
  • 前言
    • 前言
    • 推荐学习路线
  • 套件上手
    • 必看开箱组装
    • 参数特点一览
    • 蓝牙遥控模式
    • 红外循迹模式
    • 超声跟随模式
    • 超声避障模式
    • 提起识别
    • 着陆识别
    • OLED显示说明
    • 烧录程序指南
    • 修改遥控APP
    • 修改开机模式
    • 硬件组成概述
    • IO引脚分配
    • 软件功能说明
    • 程序框架介绍
    • 分析排除故障
  • 原理分析篇
    • 平衡原理
    • 动力学分析
    • 数学建模
    • Simulink仿真
  • 电路开发篇
    • 系统框架一览
    • 主控模块
    • 稳压模块
    • 驱动模块
    • 蓝牙模块
    • 传感器模块
    • 底板功能说明
    • 电机参数说明
    • 洞洞板底板手工焊接教程
  • 软件开发篇
    • 约定代码编写规则
    • 安装MDK-ARM软件
    • 使用MDK-ARM软件编译代码
    • 安装STM32CubeMX软件
    • STM32CubeMX软件生成工程
    • GPIO与LED闪烁的仪式感
    • Timer与按键消抖的应用
    • Usart与Printf函数重定向
    • Timer编码器模式读取编码器
    • PWM与TB6612FNG驱动电机
    • 硬件I2C读取MPU6050原始数据
    • 加速度计、陀螺仪的工作原理和数据融合
    • MPU6050姿态解算和数据融合
    • PID控制原理与增量式PID算法
    • 电机速度闭环内环PID控制
    • 直立平衡角度环PID控制
    • 运动速度闭环外环PID控制
    • 提高PWM频率为24kHz
    • 移植U8g2单色图形库驱动OLED
  • 其他
    • 扩展投稿
由 GitBook 提供支持
在本页
  • 模拟 PID 控制
  • 数字 PID 控制
  • 位置式 PID 算法
  • 增量式 PID 算法
  • 采样周期的选择

这有帮助吗?

  1. 软件开发篇

PID控制原理与增量式PID算法

上一页MPU6050姿态解算和数据融合下一页电机速度闭环内环PID控制

最后更新于5年前

这有帮助吗?

本小节纯粹在理论上讲解 PID 控制原理,先引出模拟 PID 控制公式,然后离散化处理,推导出位置式 PID 控制公式,再进一步推导出增量式 PID 控制公式。

将偏差的比例(Proportion)、积分(Integral)和微分(Differential)通过线性组合构成控制量,用这一控制量对被控对象进行控制,这样的控制器称 PID 控制器。

模拟 PID 控制

在模拟控制系统中,控制器最常用的控制规律是 PID 控制。为了说明控制器的工作原理,先看一个例子。下图所示是一个小功率直流电机的调速框图。

抽象化的模拟 PID 控制系统原理框图,如下图所示。该系统由模拟 PID 控制器和被控对象组成。

数字 PID 控制

由于计算机的出现,计算机进入了控制领域。人们将模拟 PID 控制规律引入到计算机中来。对(式 1-2)的 PID 控制规律进行适当的变换,就可以用软件实现 PID 控制,即数字 PID 控制。

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

位置式 PID 算法

由于计算机控制是一种采样控制,它只能根据采样时刻的偏差计算控制量,而不能像模拟控制那样连续输出控制量,进行连续控制。由于这一特点,(式 1-2)中的积分项和微分项不能直接使用,必须进行离散化处理。离散化处理的方法为:以 T 作为采样周期,k 作为采样序号,则离散采样时间 kT对应着连续时间 t,用矩形法数值积分近似代替积分,用一阶后向差分近似代替微分,可作如下近似变换:

将(式 2-1)代入(式 1-2),就可以得到离散的 PID 表达式为

或

其中,

如果采样周期足够小,则 (式 2-2)或(式 2-3)的近似计算可以获得足够精确的结果,离散控制过程与连续过程十分接近。

(式 2-2)或(式 2-3) 表示的控制算法式直接按(式 1 -2) 所给出的 PID 控制规律定义进行计算的,所以它给出了全部控制量的大小,因此被称为全量式或位置式 PID 控制算法。

增量式 PID 算法

增量式 PID 控制算法可以通过(式 2-2)推导出。由(式 2-2)可以得到控制器的第 k-1 个采样时刻的输出值为:

用(式 2-2)减去(式 2-4)相减并整理,就可以得到增量式 PID 控制算法公式:

其中,

由(式 2-5)可以看出,如果计算机控制系统采用恒定的采样周期 T ,一旦确定 A、 B、 C,只要使用前后三次测量的偏差值,就可以由(式 2-5)求出控制量。

增量式 PID 控制算法与位置式 PID 算法(式 2-2)相比,计算量小的多,因此在实际中得到广泛的应用。

而位置式 PID 控制算法也可以通过增量式控制算法推出递推计算公式:

(式 2-6)就是目前在计算机控制中广泛应用的数字递推 PID 控制算法。

采样周期的选择

香农(Shannon) 采样定律 :为不失真地复现信号的变化, 采样频率至少应大于或等于连续信号最高频率分量的二倍。根据采样定律可以确定采样周期的上限值。实际采样周期的选择还要受到多方面因素的影响,不同的系统采样周期应根据具体情况来选择。

采样周期的选择,通常按照过程特性与干扰大小适当来选取采样周期:即对于响应快、(如流量、压力) 波动大、易受干扰的过程,应选取较短的采样周期;反之,当过程响应慢(如温度、 成份)、滞后大时,可选取较长的采样周期。

采样周期的选取应与 PID 参数的整定进行综合考虑, 采样周期应远小于过程的扰动信号的周期,在执行器的响应速度比较慢时,过小的采样周期将失去意义,因此可适当选大一点;在计算机运算速度允许的条件下,采样周期短, 则控制品质好;当过程的纯滞后时间较长时, 一般选取采样周期为纯滞后时间的 1/4~1/8。

上图中,给定转速 n0(t)n_0(t)n0​(t) 与实际转速 n(t)n(t)n(t) 进行比较,其差值 e(t)=n0(t)−n(t)e(t)=n_0(t)-n(t)e(t)=n0​(t)−n(t),经过 PID 控制器调整后输出电压控制信号 u(t)u(t)u(t),u(t)u(t)u(t) 经过功率放大后,驱动直流电动机改变其转速。

图中,r(t)r(t)r(t) 是给定值,y(t)y(t)y(t) 是系统的实际输出值,给定值与实际输出值构成控制偏差:

e(t)=r(t)−y(t)e(t)=r(t)-y(t)e(t)=r(t)−y(t) (式 1-1)

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

u(t)=kp[e(t)+1Ti∫e(t)dt+Tdde(t)dt]u(t)=kp[e(t)+\frac{1}{Ti}\int e(t)dt+Td\frac{de(t)}{dt}]u(t)=kp[e(t)+Ti1​∫e(t)dt+Tddtde(t)​] (式 1-2)

其中,KpK_pKp​ 为控制器的比例系数,TiT_iTi​ 为控制器的积分时间,也称积分系数,TdT_dTd​为控制器的微分时间,也称微分系数。

t≈kT(k=0,1,2,...)t\approx kT (k = 0,1,2,...)t≈kT(k=0,1,2,...)

∫e(t)dt≈T∑j=0ke(jT)=T∑j=0kej\int e(t)dt\approx T\sum_{j=0}^{k} e(jT) = T\sum_{j=0}^{k} e_j∫e(t)dt≈T∑j=0k​e(jT)=T∑j=0k​ej​

de(t)dt≈e(kT)−e[(k−1)T]T=ek−ek−1T\frac{de(t)}{dt} \approx \frac{e(kT)-e[(k-1)T]}{T} = \frac{e_k-e_{k-1}}{T}dtde(t)​≈Te(kT)−e[(k−1)T]​=Tek​−ek−1​​

上式中,为了表达的方便,将类似于 e(kT)e(kT)e(kT) 简化成 eke_kek​ 等。

uk=Kp[ek+(T)Ti∑j=0kej+Td(ek−ek−1)T]u_k = Kp[e_k+\frac{(T)}{Ti}\sum_{j=0}^{k}e_j+Td\frac{(e_k-e_{k-1})}{T}]uk​=Kp[ek​+Ti(T)​∑j=0k​ej​+TdT(ek​−ek−1​)​] (式 2-2)

uk=Kp∗ek+Ki∑j=0kej+Kd(ek−ek−1)Tu_k = Kp*e_k+Ki\sum_{j=0}^{k}e_j+Kd\frac{(e_k-e_{k-1})}{T}uk​=Kp∗ek​+Ki∑j=0k​ej​+KdT(ek​−ek−1​)​ (式 2-3)

kkk 为 采样序号,k = 0,1,2,...;

uku_kuk​ 为第 k 次采样时刻的计算机输出值;

eke_kek​ 为第 k 次采样时刻输入的偏差值;

ek−1e_{k-1}ek−1​ 为第 k-1 次采样时刻输入的偏差值;

KiKiKi 为积分系数,Ki=kp∗TTiKi=kp*\frac{T}{Ti}Ki=kp∗TiT​;

KdKdKd 为微分系数,Kd=Kp∗TdTKd=Kp*\frac{Td}{T}Kd=Kp∗TTd​。

这种算法的缺点是:由于全量输出,所以每次输出均与过去状态有关,计算时要对 eke_kek​ 进行累加,工作量大。并且,因为计算机输出的对应的是执行机构的实际位置,如果计算机出现故障,输出的将大幅度变化,会引起执行机构的大幅度变化,有可能因此造成严重的生产事故,这在实际生产际中是不允许的。

所谓增量式 PID 是指数字控制器的输出只是控制量的增量 △uk\bigtriangleup u_k△uk​ 。 当执行机构需要的控制量是增量,而不是位置量的绝对数值时,可以使用增量式 PID 控制算法进行控制。

u(k−1)=Kp[e(k−1)+(T)Ti∑j=0k−1ej+Td(e(k−1)−e(k−2))T]u_(k-1) = Kp[e_(k-1)+\frac{(T)}{Ti}\sum_{j=0}^{k-1}e_j+Td\frac{(e_(k-1)-e_(k-2))}{T}]u(​k−1)=Kp[e(​k−1)+Ti(T)​∑j=0k−1​ej​+TdT(e(​k−1)−e(​k−2))​] (式 2-4)

△uk=uk−uk−1=Kp[ek−ek−1+(T)Tiek+Tdek−2ek−1+ek−2T]\bigtriangleup u_k = u_k - u_{k-1} = Kp[e_k-e_{k-1}+\frac{(T)}{Ti}e_k+Td\frac{e_k-2e_{k-1}+e_{k-2}}{T}]△uk​=uk​−uk−1​=Kp[ek​−ek−1​+Ti(T)​ek​+TdTek​−2ek−1​+ek−2​​]

=Kp(1+TTi+TdT)ek−Kp(1+2TdT)ek−1+KpTdTek−2= Kp(1+\frac{T}{T_i}+\frac{Td}{T})e_k - Kp(1+\frac{2Td}{T})e_{k-1}+Kp\frac{Td}{T}e_{k-2}=Kp(1+Ti​T​+TTd​)ek​−Kp(1+T2Td​)ek−1​+KpTTd​ek−2​ (式 2-5)

=Aek+Bek−1+Cek−2=Ae_k+Be_{k-1}+Ce_{k-2}=Aek​+Bek−1​+Cek−2​

A=Kp(1+TTi+TdT)A=Kp(1+\frac{T}{T_i}+\frac{Td}{T})A=Kp(1+Ti​T​+TTd​);

B=Kp(1+2TdT)B=Kp(1+\frac{2Td}{T})B=Kp(1+T2Td​);

C=KpTdTC=Kp\frac{Td}{T}C=KpTTd​。

uk=uk−1+△uku_k=u_{k-1}+\bigtriangleup u_kuk​=uk−1​+△uk​ (式 2-6)

小功率直流电机调速系统
模拟 PID 控制系统原理图