2. 位置伺服系统PD控制
任务目标
设计位置环PD控制器,使电机轴精确跟踪给定角度位置。通过调整比例增益Kp与微分增益Kd,观察系统对稳态误差和超调量的影响,理解PD控制在位置伺服中的核心作用。
控制对象与模型
采用简化直流电机模型(忽略电枢电感),其传递函数为:
G(s) = Kt / (J·s² + B·s)
其中J为转动惯量,B为粘性摩擦系数,Kt为力矩常数。本案例使用离散化后的差分方程进行仿真,采样周期Ts=0.001s。
PD控制器设计
位置环PD控制律:
u(k) = Kp·e(k) + Kd·(e(k) − e(k−1)) / Ts
其中e(k) = θ_ref(k) − θ(k)为位置误差。控制器输出u(k)作为电机力矩指令。
完整实现代码(Python)
import numpy as np
import matplotlib.pyplot as plt
# 电机参数
J = 0.01 # 转动惯量 kg·m²
B = 0.1 # 粘性摩擦 N·m·s/rad
Kt = 1.0 # 力矩常数 N·m/A
Ts = 0.001 # 采样周期 s
T_end = 2.0 # 仿真时长 s
# 目标位置(阶跃指令)
theta_ref = 1.0 # 弧度
# PD参数(可修改以观察影响)
Kp = 20.0
Kd = 0.5
# 仿真初始化
n_steps = int(T_end / Ts)
theta = 0.0 # 当前位置
omega = 0.0 # 当前角速度
e_prev = theta_ref - theta
theta_hist = []
time_hist = []
for k in range(n_steps):
e = theta_ref - theta
# PD控制律
u = Kp * e + Kd * (e - e_prev) / Ts
# 电机动力学(离散化:欧拉法)
alpha = (Kt * u - B * omega) / J
omega += alpha * Ts
theta += omega * Ts
e_prev = e
theta_hist.append(theta)
time_hist.append(k * Ts)
# 计算性能指标
theta_arr = np.array(theta_hist)
steady_idx = int(0.8 * n_steps) # 取后20%作为稳态
steady_val = np.mean(theta_arr[steady_idx:])
steady_error = theta_ref - steady_val
overshoot = 0.0
peak_val = np.max(theta_arr)
if peak_val > theta_ref:
overshoot = (peak_val - theta_ref) / theta_ref * 100
print(f"稳态误差: {steady_error:.4f} rad")
print(f"超调量: {overshoot:.2f}%")
print(f"峰值位置: {peak_val:.4f} rad")
# 绘制响应曲线
plt.figure(figsize=(10, 5))
plt.plot(time_hist, theta_hist, label=f'Kp={Kp}, Kd={Kd}')
plt.axhline(y=theta_ref, color='r', linestyle='--', label='目标位置')
plt.xlabel('时间 (s)')
plt.ylabel('位置 (rad)')
plt.legend()
plt.grid(True)
plt.title('位置伺服PD控制响应')
plt.show()
运行方式
- 安装依赖:
pip install numpy matplotlib - 将上述代码保存为
pd_position_control.py - 运行:
python pd_position_control.py
验证方法与判定标准
通过修改Kp和Kd值并观察输出,验证以下规律:
- 稳态误差:增大Kp可减小稳态误差,但Kp过大(如Kp>50)会导致系统振荡甚至发散。
- 超调量:增大Kd可抑制超调,但Kd过大会引入噪声放大和响应迟缓。
- 判定通过条件:当Kp=20、Kd=0.5时,稳态误差应小于0.01 rad,超调量应小于5%。若增大Kp至50并保持Kd不变,稳态误差进一步减小但超调量增加;若同时增大Kd至1.0,超调量回落而稳态误差基本不变。
参数影响分析
| Kp | Kd | 稳态误差(rad) | 超调量(%) | 响应特征 |
|---|---|---|---|---|
| 10 | 0.5 | ~0.05 | 0 | 响应慢,无超调 |
| 20 | 0.5 | ~0.01 | ~2% | 响应适中,轻微超调 |
| 50 | 0.5 | ~0.002 | ~15% | 响应快,明显超调 |
| 50 | 2.0 | ~0.002 | ~1% | 响应快,超调被抑制 |
注:表中数据为基于模型的理论预期值,实际运行结果可能因离散化误差略有差异。
常见问题
- 系统发散:Kp过大或Ts过大导致离散化不稳定,需减小Kp或缩小采样周期。
- 微分噪声:实际系统中Kd项会放大测量噪声,可增加低通滤波器或使用不完全微分。
- 稳态误差无法消除:PD控制对阶跃输入存在稳态误差,若需完全消除需引入积分项(PID)。