1. 他励直流电动机实验概述
他励直流电动机作为电机学实验中的经典研究对象,因其励磁绕组和电枢绕组分别供电的特性,成为理解电机控制原理的理想载体。在实验室环境下,我们通常采用MATLAB/Simulink或Python进行建模与仿真,通过代码实现对他励直流电动机的启动、调速、制动等特性的研究。
这种电机最显著的特点是励磁电流和电枢电流可以独立调节,这使得它比串励或并励直流电机具有更灵活的控制特性。在实际工程中,他励直流电动机常用于需要宽范围调速的场合,如机床、轧钢机等工业设备。
2. 实验环境搭建与参数测量
2.1 实验设备准备
进行他励直流电动机实验需要准备以下核心设备:
- 他励直流电动机实验台(含电机本体、负载装置)
- 可调直流电源(至少两路独立输出)
- 数据采集卡(如NI USB-6000系列)
- 转速测量装置(光电编码器或霍尔传感器)
- 电流/电压传感器
- 上位机(安装MATLAB或Python环境)
注意:在接线时务必确保励磁回路先通电后断电,避免电枢电流过大导致电机损坏。
2.2 电机参数测定
在开始控制实验前,需要准确测量电机的基本参数:
-
电枢电阻Ra测量:
使用直流电桥法,在电机静止状态下测量电枢两端电阻。考虑到电刷接触电阻的影响,建议在不同转子位置测量多次取平均值。 -
励磁电阻Rf测量:
直接使用万用表测量励磁绕组电阻,注意环境温度对测量结果的影响。 -
空载特性测定:
保持额定转速,逐步增加励磁电流If,记录对应的电枢电动势Ea,绘制Ea-If曲线。 -
转矩常数Kt和反电动势常数Ke:
通过堵转实验和空载实验分别测定,理论上Kt=Ke(国际单位制)。
3. 数学建模与仿真实现
3.1 电机动态数学模型
他励直流电动机的基本方程包括:
-
电枢回路方程:
code复制Ua = Ra*Ia + La*(dIa/dt) + Ea其中Ea = KeΦω为反电动势
-
机械运动方程:
code复制Te - Tl = J*(dω/dt) + B*ω其中Te = KtΦIa为电磁转矩
-
励磁回路方程(当励磁电流恒定时可简化为Φ=常数)
3.2 MATLAB仿真实现
matlab复制% 他励直流电动机参数
Ra = 0.5; % 电枢电阻(Ω)
La = 0.01; % 电枢电感(H)
Rf = 100; % 励磁电阻(Ω)
Lf = 1; % 励磁电感(H)
J = 0.02; % 转动惯量(kg·m²)
B = 0.001; % 摩擦系数(N·m·s/rad)
Kt = 0.8; % 转矩常数(N·m/A)
Ke = 0.8; % 反电动势常数(V·s/rad)
% 状态空间模型
A = [-Ra/La -Ke/La 0;
Kt/J -B/J 0;
0 1 0];
B = [1/La 0; 0 -1/J; 0 0];
C = [0 1 0];
D = [0 0];
sys = ss(A,B,C,D);
% 阶跃响应仿真
t = 0:0.01:10;
Ua = 48*(t>=0); % 48V阶跃输入
Tl = 0*(t>=0); % 空载
lsim(sys,[Ua' Tl'],t);
3.3 Python实现方案
对于更灵活的控制器设计,可以使用Python控制库:
python复制import numpy as np
import matplotlib.pyplot as plt
from scipy.integrate import odeint
def motor_model(state, t, Ua, Tl):
Ia, omega, theta = state
dIa = (Ua - Ra*Ia - Ke*omega)/La
domega = (Kt*Ia - B*omega - Tl)/J
dtheta = omega
return [dIa, domega, dtheta]
# 参数同MATLAB示例
Ra, La = 0.5, 0.01
J, B = 0.02, 0.001
Kt = Ke = 0.8
t = np.linspace(0, 10, 1000)
sol = odeint(motor_model, [0,0,0], t, args=(48, 0))
plt.plot(t, sol[:,1]) # 转速响应
plt.xlabel('Time (s)')
plt.ylabel('Speed (rad/s)')
plt.show()
4. 控制策略实现
4.1 开环调速控制
最简单的控制方式是调节电枢电压实现调速:
python复制def open_loop_control(desired_speed):
# 简单线性映射:电压与转速近似成正比
Ua = (Ra/Kt)*desired_speed + 2 # 加2V克服静摩擦
return min(Ua, 48) # 不超过额定电压
4.2 PID闭环控制
更精确的控制需要采用闭环策略:
python复制class PIDController:
def __init__(self, Kp, Ki, Kd):
self.Kp, self.Ki, self.Kd = Kp, Ki, Kd
self.last_error = 0
self.integral = 0
def update(self, error, dt):
self.integral += error * dt
derivative = (error - self.last_error) / dt
output = self.Kp*error + self.Ki*self.integral + self.Kd*derivative
self.last_error = error
return output
# 使用示例
pid = PIDController(Kp=0.5, Ki=2.0, Kd=0.01)
current_speed = measure_speed()
desired_speed = 100 # rad/s
error = desired_speed - current_speed
Ua = pid.update(error, 0.01) # 10ms采样周期
4.3 抗饱和PID实现
实际应用中需要考虑执行器饱和问题:
python复制class AntiWindupPID(PIDController):
def __init__(self, Kp, Ki, Kd, max_output):
super().__init__(Kp, Ki, Kd)
self.max_output = max_output
def update(self, error, dt):
output = super().update(error, dt)
if abs(output) > self.max_output:
output = np.sign(output) * self.max_output
# 抗饱和处理:限制积分项增长
self.integral -= error * dt
return output
5. 实验数据分析与优化
5.1 转速-转矩特性测试
通过改变负载转矩Tl,记录稳态转速ω,可以绘制机械特性曲线:
python复制def test_speed_torque():
speeds = []
torques = np.linspace(0, 5, 20) # 0到5N·m
for Tl in torques:
# 使用PID控制器维持给定电压
pid = PIDController(0.5, 2.0, 0.01)
for _ in range(1000): # 仿真步数
speed = simulate_motor(pid)
speeds.append(speed)
plt.plot(torques, speeds)
plt.xlabel('Torque (N·m)')
plt.ylabel('Speed (rad/s)')
5.2 控制器参数整定
采用Ziegler-Nichols方法整定PID参数:
- 先设Ki=Kd=0,逐渐增大Kp直到系统出现等幅振荡
- 记录临界增益Ku和振荡周期Tu
- 根据下表设置PID参数:
| 控制器类型 | Kp | Ki | Kd |
|---|---|---|---|
| P | 0.5Ku | 0 | 0 |
| PI | 0.45Ku | 0.54Ku/Tu | 0 |
| PID | 0.6Ku | 1.2Ku/Tu | 0.075Ku*Tu |
5.3 实验常见问题排查
-
电机不启动:
- 检查励磁回路是否通电
- 测量电枢电压是否正常
- 检查机械负载是否卡死
-
转速波动大:
- 检查PID参数是否合适(通常需要减小Kp,增加Ki)
- 检查传感器信号是否有噪声
- 确认电源电压稳定
-
电机发热严重:
- 检查是否长时间超载运行
- 测量电枢电流是否超过额定值
- 确认散热条件良好
6. 高级控制策略探索
6.1 模糊PID控制
对于非线性较强的系统,可以采用模糊逻辑调整PID参数:
python复制class FuzzyPID:
def __init__(self):
# 初始化模糊规则表
self.rules = [...] # 模糊规则
def adjust_params(self, error, derror):
# 根据误差和误差变化率调整Kp,Ki,Kd
# 实现模糊推理过程
return adjusted_params
# 使用方式
fuzzy_pid = FuzzyPID()
pid = PIDController(0,0,0)
error = desired - actual
derror = (error - last_error)/dt
Kp, Ki, Kd = fuzzy_pid.adjust_params(error, derror)
pid.Kp, pid.Ki, pid.Kd = Kp, Ki, Kd
6.2 状态反馈控制
基于现代控制理论的状态空间设计:
python复制def state_feedback_control(x, desired_speed):
# x = [Ia, omega, theta]
K = np.array([-0.5, -1.2, -0.1]) # 状态反馈矩阵
u = -np.dot(K, x) + desired_speed*0.8
return u
6.3 自适应控制
对于参数时变的系统:
python复制class AdaptiveController:
def __init__(self):
self.estimated_params = initial_guess
def update_estimation(self, measurements):
# 实现参数估计算法(如最小二乘法)
self.estimated_params = new_estimate
def compute_control(self):
# 基于估计参数计算控制量
return control_action
7. 实验报告与结果分析
完整的电机实验应包括以下分析内容:
-
稳态特性分析:
- 绘制不同电枢电压下的转速-转矩曲线
- 计算速度调整率:δn = (n0 - nN)/nN × 100%
-
动态响应分析:
- 记录阶跃响应曲线
- 计算上升时间、超调量、调节时间
- 分析PID参数对动态性能的影响
-
能效评估:
- 计算不同工况下的效率η = Pout/Pin
- 绘制效率-负载特性曲线
- 识别最佳工作区间
-
控制性能对比:
- 比较开环控制与闭环控制的抗扰能力
- 分析不同控制策略的优缺点
- 提出改进建议
实操心得:在实际调试中发现,电机参数的准确性对控制性能影响极大。建议在正式实验前,花费足够时间精确测量各项参数。另外,对于实验室常用的中小功率直流电机,电枢电感La往往很小,在离散控制中容易导致数值不稳定,此时需要在软件中加入适当的低通滤波。
