物联网控制技术期末复习 知识点总结 第六章 物联网控制算法(PID算法 PWM算法)

发布于:2025-06-19 ⋅ 阅读:(16) ⋅ 点赞:(0)

物联网控制算法

PID控制算法

什么是PID控制,PID控制的含义?
在工业生产控制中,对于偏差,用比例,积分和微分的适当组合形式来反映,形成适当的控制算法来实现控制目的的控制方法,称为PID控制

P、I、D的意义和作用

P: proportional 比例的(比例系数)
I :i ntegral 积分的(积分时间)
D: differential 微分的(微分时间)
在实际应用中,常根据对象的特征和控制要求,将比例,积分,微分基本控制规律进行适当组合,以达到对被控对象进行有效控制的目的。

数字化公式和程序实现

在模拟系统中,PID算法的表达式:

P ( t ) = K p [ e ( t ) + 1 T I ∫ e ( t ) d t + T D d e ( t ) d t ] P(t)=K_p[e(t)+\frac{1}{T_I}\int{e(t)dt}+\frac{T_Dde(t)}{dt}] P(t)=Kp[e(t)+TI1e(t)dt+dtTDde(t)]

P ( t ) P(t) P(t):调节器输出
e ( t ) e(t) e(t):调节器的偏差信号
K p K_p Kp:比例系数
T I T_I TI:积分时间
T D T_D TD:微分时间

位置式PID算法程序设计

按模拟PID控制算法,以一系列的采样时刻点kT代表连续时间t,以矩形法数值积分近似代替积分,以一阶后向差分近似代替微分。(将连续改为离散)
在这里插入图片描述
得数字式的差分方程:
在这里插入图片描述
T T T:采样周期;
E ( k ) E(k) E(k):第k次采样时的偏差值;
E ( k − 1 ) E(k-1) E(k1):第k-1次采样时的偏差值;
k k k:采样序号;
P ( k ) P(k) P(k):第k次采样时的调节器输出
上式中,输出值与阀门的开度的位置一一对应,因此称之为位置式控制算式
在这里插入图片描述

将上述数字式差分方程
在这里插入图片描述
变换为
在这里插入图片描述
K P K_P KP系数乘进去,再统一修改系数 K I K_I KI K D K_D KD
至此,可明显分为P I D三项:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
程序设计计算流程:
在这里插入图片描述

增量式PID算法程序设计

P ( k ) = P ( k − 1 ) + K P [ E ( k ) − E ( k − 1 ) ] + K I E ( k ) + K D [ E ( k ) − 2 E ( k − 1 ) + E ( k − 2 ) ] P(k)=P(k-1)+K_P[E(k)-E(k-1)]+K_IE(k)+K_D[E(k)-2E(k-1)+E(k-2)] P(k)=P(k1)+KP[E(k)E(k1)]+KIE(k)+KD[E(k)2E(k1)+E(k2)]
Δ P ( k ) = P ( k ) − P ( k − 1 ) = K P [ E ( k ) − E ( k − 1 ) ] + K I E ( k ) + K D [ E ( k ) − 2 E ( k − 1 ) + E ( k − 2 ) ] \Delta P(k)=P(k)-P(k-1)=K_P[E(k)-E(k-1)]+K_IE(k)+K_D[E(k)-2E(k-1)+E(k-2)] ΔP(k)=P(k)P(k1)=KP[E(k)E(k1)]+KIE(k)+KD[E(k)2E(k1)+E(k2)]

K P K_P KP:比例系数
K D = K P ( T D / T ) K_D=K_P(T_D/T) KD=KP(TD/T):微分系数
K I = K P ( T / T I ) K_I=K_P(T/T_I) KI=KP(T/TI):积分系数

至此,可明显分为P I D三项:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
即为:
在这里插入图片描述
增量式PID程序计算流程:
在这里插入图片描述

增量式PID与位置式PID算法比较

  1. 位置式PID算法每次的输出与整个过去状态有关,容易产生较大的累积计算误差;增量式PID只需计算增量,计算误差或精度不足时对控制量的计算影响较小。
  2. 控制从手动切换到自动时,位置式PID算法必须先将计算机的输出至置为原始阀门开时,才能保证无冲击切换;增量式算法与原始值无关,易于实现无冲击切换。

标准PID算法的改进

不足

数字控制与模拟调节器相比的不足:

  1. 模拟调节器进行的控制是连续的,而数字控制器采用的是采样控制,在保持器作用下,控制量在一个采样周期内部是变化的。
  2. 由于计算的数值运算和输入输出需要一定时间,控制作用在时间上有延迟。
  3. 计算机的有限字长和A/D、D/A转换器的转换精度使控制有误差。
改进
  1. 微分项的改进:不完全微分型PID控制算法。用实际PID环节代替理想PID环节,使微分作用对于偏差的变化不会有太大的反应。在这里插入图片描述
  2. 微分先行
  3. 输入滤波
  4. 积分项的改进:
  5. 抗积分饱和:积分限幅法,积分分离法,积分变速
    消除积分不灵敏区

参数的确定

物联网控制技术PWM

PWM控制技术

什么是脉宽调制,结合采样定理理解其含义

脉宽调制(PWM,Pulse Width Modulation)是利用微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术,广泛应用在从测量、通信到功率控制与变换的许多领域中。
PWM控制技术就是对脉冲的宽度进行调制的技术,即通过对一系列脉冲的宽度进行调制,来等效的获得所需要的波形(含形状和幅值)。
采样控制理论中有一个重要结论:冲量相等而形状不同的窄脉冲加在具有惯性的环节上时,其效果基本相同。PWM控制技术就是以该结论为理论基础,对半导体开关器件的导通和关断进行控制,使输出端得到一系列幅值相等而宽度不相等的脉冲,用这些脉冲来代替正弦波或其他所需要的波形。按一定的规则对各脉冲的宽度进行调制,既可改变逆变电路输出电压的大小,也可改变输出频率。

PWM控制的基本原理

PWM是一种对模拟信号电平进行数字编码的方法。通过高分辨率计数器的使用,方波的占空比被调制用来对一个具体模拟信号的电平进行编码。
PWM信号仍然是数字的,因为在给定的任何时刻,满幅值的直流供电要么完全有(ON),要么完全无(OFF)。电压或电流源是以一种通(ON)或断(OFF)的重复脉冲序列被加到模拟负载上去的。

占空比

占空比是指在一个脉冲循环内,通电时间相对于总时间所占的比例。
占空比(Duty Ratio)在电信领域中有如下含义:
基本含义:
在一段连续工作时间内脉冲占用的时间与总时间的比值。
引申义:
在周期型的现象中,某种现象发生后持续的时间与总时间的比。

PID与PWM控制算法应用实例

PID算法

1. PID算法实现核心

代码实现了两种PID算法:

// 增量式PID 
int PID() {
    int change;
    err_now = set - now;       // 当前误差
    err_bef = set - bef;       // 上次误差
    err_bbef = set - bbef;     // 上上次误差
    
    change = kp*(err_now - err_bef) + 
             ki*err_now + 
             kd*(err_now - 2*err_bef + err_bbef);
    return change;
}

// 位置式PID 
int PID2() {
    static float error_add = 0; // 误差累加器
    int num;
    err_now = set - now;       // 当前误差
    err_bef = set - bef;       // 上次误差
    
    error_add += err_now;       // 积分项累加
    
    num = kp*err_now +         // 比例项
          ki*error_add +       // 积分项
          kd*(err_now - err_bef); // 微分项
    return num;
}
2. 控制系统的关键组件
组件 功能说明 代码实现
反馈采集 通过编码器获取电机转速 GetPulse() + 定时器0计数
PWM输出 驱动电机功率的占空比控制 定时器1中断生成PWM波形
PID计算 根据误差计算控制量 PID()PID2()函数
参数调整 实时调整PID参数 UP/DOWN按键修改kp,ki,kd
设定值 目标转速值 set变量 + ADD/SUB按键调整
3. PID参数整定技巧
  1. 比例系数(kp):决定系统响应速度
    • 过大 → 超调振荡
    • 过小 → 响应迟缓
  2. 积分系数(ki):消除稳态误差
    • 过大 → 积分饱和
    • 过小 → 静差残留
  3. 微分系数(kd):抑制超调
    • 过大 → 响应迟钝
    • 过小 → 抑制效果差
4. 控制流程(主循环)
void main() {
    // 初始化
    lcd_init();
    timer_init();
    
    while(1) {
        // 1. 方向控制
        GORB ? ZZ : FZ;  // 正转/反转
        
        // 2. 设定值调整
        if(ADDSPEED) set++;
        if(SUBSPEED) set--;
        
        // 3. 采样周期控制(100ms)
        if(Just_Get) {
            GetPulse();  // 启动脉冲计数
        } 
        else if(t2_over) {
            pulse = t0_flag;  // 获取100ms内脉冲数
            bbef = bef;       // 更新历史数据
            bef = now;
            now = pulse;      // 当前转速值
            
            // 4. PID计算
            tpwm = PID2();    // 使用位置式PID
            
            // 5. PWM使能控制
            set ? (TR1=1) : (TR1=0, PWM=0);
        }
        
        // 6. 参数调整
        if(UP) kp++;
        if(DOWN) kp--;
    }
}

PWM控制算法

1. PWM硬件配置
sbit PWM = P1^7;  // PWM输出引脚
uint tuint = 65535; // 定时器最大值
uint tpwm = 1;     // 高电平时间(决定占空比)
2. PWM生成机制(关键中断)
void timer1() interrupt 3 {
    if(!t1_flag) {
        PWM = 1;  // 开启高电平
        TH1 = (tuint - tpwm)/256;  // 设置高电平时间
    } else {
        PWM = 0;  // 开启低电平
        TH1 = (tuint - (10000 - tpwm))/256; // 低电平时间
    }
    t1_flag = !t1_flag;  // 状态翻转
}
3. PWM参数说明
参数 说明
周期 10000μs (10ms) 固定不变
频率 100Hz 周期倒数
tpwm范围 0-10000 占空比0%-100%
分辨率 0.01% 1/10000
4. PWM工作流程
定时器1计数开始
计数达到 tuint-tpwm?
输出高电平
计数达到 tuint-10000+tpwm?
输出低电平

PWM与PID的结合

1. 控制闭环结构

设定转速 → PID计算 → PWM占空比 → 电机驱动 → 实际转速 → 编码器反馈
      ↑_________________________________________|

2. PID输出转换为PWM

// 主循环中
tpwm = PID2();  // PID输出直接作为PWM高电平时间

// 限制PWM范围防止溢出
if(tpwm > 10000) tpwm = 10000;
if(tpwm < 0) tpwm = 0;

3. PWM使能控制

// 当设定速度为0时关闭PWM
if(set != 0) {
    TR1 = 1;  // 启动PWM定时器
} else {
    TR1 = 0;  // 关闭PWM定时器
    PWM = 0;  // 确保输出低电平
}

网站公告

今日签到

点亮在社区的每一天
去签到