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()

运行方式

  1. 安装依赖:pip install numpy matplotlib
  2. 将上述代码保存为 pd_position_control.py
  3. 运行: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,超调量回落而稳态误差基本不变。

参数影响分析

KpKd稳态误差(rad)超调量(%)响应特征
100.5~0.050响应慢,无超调
200.5~0.01~2%响应适中,轻微超调
500.5~0.002~15%响应快,明显超调
502.0~0.002~1%响应快,超调被抑制

注:表中数据为基于模型的理论预期值,实际运行结果可能因离散化误差略有差异。

常见问题

  • 系统发散:Kp过大或Ts过大导致离散化不稳定,需减小Kp或缩小采样周期。
  • 微分噪声:实际系统中Kd项会放大测量噪声,可增加低通滤波器或使用不完全微分。
  • 稳态误差无法消除:PD控制对阶跃输入存在稳态误差,若需完全消除需引入积分项(PID)。