1. 直流电机速度闭环P控制

任务目标

搭建直流电机速度单闭环控制系统,仅使用比例控制器(P控制),通过改变比例增益 Kp 观察系统响应,重点记录并分析稳态误差随 Kp 的变化规律。

被控对象与闭环结构

直流电机电枢电压-转速传递函数可简化为一阶惯性环节:

G(s) = K<sub>m</sub> / (T<sub>m</sub>·s + 1)

其中 Km 为电机增益(rpm/V),Tm 为机电时间常数(s)。速度闭环采用单位反馈,P控制器输出 u = Kp·(nref − n),其中 nref 为目标转速,n 为实际转速。

环境依赖

本案例使用 Python 3 + NumPy + Matplotlib,无需额外硬件。安装命令:

pip install numpy matplotlib

关键完整代码

以下代码完成系统仿真、P控制闭环计算,并绘制不同 Kp 下的阶跃响应曲线:


import numpy as np
import matplotlib.pyplot as plt

# 电机参数(示例值)
Km = 200.0      # rpm/V
Tm = 0.5        # s

# 仿真参数
dt = 0.001      # 步长 s
t_end = 3.0     # 仿真时长 s
t = np.arange(0, t_end, dt)
n_steps = len(t)

# 目标转速
n_ref = 1000.0  # rpm

# 不同比例增益
Kp_list = [0.5, 1.0, 2.0, 5.0]

plt.figure(figsize=(10, 6))

for Kp in Kp_list:
    n = 0.0                 # 实际转速初值
    n_history = np.zeros(n_steps)

    for i in range(n_steps):
        error = n_ref - n
        u = Kp * error      # P控制输出
        # 一阶惯性系统离散化(前向欧拉)
        dn_dt = (Km * u - n) / Tm
        n = n + dn_dt * dt
        n_history[i] = n

    # 理论稳态误差: e_ss = n_ref / (1 + Kp*Km)
    e_ss = n_ref / (1 + Kp * Km)
    print(f"Kp={Kp:.1f}  仿真稳态值={n_history[-1]:.1f} rpm  "
          f"理论稳态误差={e_ss:.1f} rpm")

    plt.plot(t, n_history, label=f'Kp={Kp}')

plt.axhline(y=n_ref, color='k', linestyle='--', linewidth=1, label='目标转速')
plt.xlabel('时间 (s)')
plt.ylabel('转速 (rpm)')
plt.title('直流电机速度闭环P控制阶跃响应')
plt.legend()
plt.grid(True)
plt.xlim(0, t_end)
plt.ylim(0, n_ref * 1.2)
plt.tight_layout()
plt.savefig('p_control_response.png', dpi=150)
plt.show()

运行方式

将上述代码保存为 p_control_speed.py,在终端执行:

python p_control_speed.py

验证方法与判定标准

  • 程序运行后应输出4行结果,每行包含对应 Kp 的仿真稳态值与理论稳态误差。
  • 观察输出:仿真稳态值应接近 n_ref − e_ss,且与理论稳态误差公式 e_ss = n_ref / (1 + Kp·Km) 计算值一致(误差小于1 rpm 即通过)。
  • 观察图形:所有曲线从0开始上升,最终趋于各自稳态值;Kp 越大,稳态值越接近目标转速1000 rpm,稳态误差越小,但响应超调量不增加(P控制一阶系统无超调)。
  • 判定通过条件:Kp=0.5 时稳态误差约为 500 rpm,Kp=5.0 时稳态误差约为 99 rpm,与理论值吻合。

预期输出(由代码逻辑直接推出)


Kp=0.5  仿真稳态值=500.0 rpm  理论稳态误差=500.0 rpm
Kp=1.0  仿真稳态值=666.7 rpm  理论稳态误差=333.3 rpm
Kp=2.0  仿真稳态值=800.0 rpm  理论稳态误差=200.0 rpm
Kp=5.0  仿真稳态值=909.1 rpm  理论稳态误差=90.9 rpm

关键结论

纯P控制下,稳态误差 e_ss = n_ref / (1 + Kp·Km),增大 Kp 可减小但无法消除稳态误差。若需完全消除,必须引入积分作用(PI控制),将在后续案例中实现。

P控制稳态误差与Kp关系曲线 时间 (s) 转速 (rpm) 0 250 500 750 0 0.5 1.0 1.5 2.0 目标 1000 rpm Kp=0.5 Kp=1.0 Kp=2.0 Kp=5.0 稳态误差 Kp增大 → 稳态误差减小