物联网控制技术期末复习 知识点总结 第六章 物联网控制算法(PID算法 PWM算法)
物联网控制算法
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)+TI1∫e(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(k−1):第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(k−1)+KP[E(k)−E(k−1)]+KIE(k)+KD[E(k)−2E(k−1)+E(k−2)]
Δ 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(k−1)=KP[E(k)−E(k−1)]+KIE(k)+KD[E(k)−2E(k−1)+E(k−2)]
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算法比较:
- 位置式PID算法每次的输出与整个过去状态有关,容易产生较大的累积计算误差;增量式PID只需计算增量,计算误差或精度不足时对控制量的计算影响较小。
- 控制从手动切换到自动时,位置式PID算法必须先将计算机的输出至置为原始阀门开时,才能保证无冲击切换;增量式算法与原始值无关,易于实现无冲击切换。
标准PID算法的改进
不足
数字控制与模拟调节器相比的不足:
- 模拟调节器进行的控制是连续的,而数字控制器采用的是采样控制,在保持器作用下,控制量在一个采样周期内部是变化的。
- 由于计算的数值运算和输入输出需要一定时间,控制作用在时间上有延迟。
- 计算机的有限字长和A/D、D/A转换器的转换精度使控制有误差。
改进
- 微分项的改进:不完全微分型PID控制算法。用实际PID环节代替理想PID环节,使微分作用对于偏差的变化不会有太大的反应。
- 微分先行
- 输入滤波
- 积分项的改进:
- 抗积分饱和:积分限幅法,积分分离法,积分变速
消除积分不灵敏区
参数的确定
物联网控制技术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参数整定技巧
- 比例系数(kp):决定系统响应速度
- 过大 → 超调振荡
- 过小 → 响应迟缓
- 积分系数(ki):消除稳态误差
- 过大 → 积分饱和
- 过小 → 静差残留
- 微分系数(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工作流程
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; // 确保输出低电平
}