直流伺服电机 PID 控制系统仿真
1. 项目概述
项目源码下载:https://download.csdn.net/download/DeepLearning_/92812704
1.1 项目背景
直流伺服电机因其控制简单、调速性能好、动态响应快,在工业自动化、机器人、数控机床、跟踪系统和教学实验平台中得到广泛应用。为了分析直流伺服电机在闭环控制下的动态行为,并验证 PID 控制器对速度调节的有效性,本项目基于 MATLAB/Simulink 搭建了一个"直流伺服电机 PID 控制系统仿真平台"。
本项目是在原有"直流电机动力学建模与 PID 调速"的基础上进行扩展与优化,重点增强了以下内容:
- 明确伺服控制对象为直流伺服电机;
- 建立适用于伺服调速场景的状态空间模型;
- 采用 PID 闭环实现速度跟踪控制;
- 加入驱动电压饱和环节,增强工程真实性;
- 加入负载扰动输入,测试系统抗扰能力;
- 比较不同数值求解器
ode45与ode15s的仿真性能。
1.2 项目目标
本项目的主要目标如下:
- 建立直流伺服电机的数学模型;
- 基于 Simulink 搭建速度闭环控制系统;
- 设计 PID 控制器,使电机转速能够跟踪给定值;
- 观察系统在外部负载扰动下的动态响应;
- 比较两种数值求解器在该系统中的仿真效果与运行效率;
- 为课程设计、实验报告或毕业设计提供一个可复现实验平台。
1.3 项目特点
本项目具有以下特点:
- 使用脚本自动生成 Simulink 模型,减少手工搭建工作;
- 模型结构清晰,便于二次开发和控制器扩展;
- 参数集中管理,便于调整电机参数和控制参数;
- 支持不同求解器自动切换并输出对比结果;
- 适合用于教学、课程设计、控制系统分析与论文展示。
2. 系统组成与总体方案
2.1 系统组成
本项目构建的直流伺服电机速度控制系统主要由以下几个部分组成:
-
给定模块
- 用于生成目标速度信号;
- 采用阶跃输入形式,模拟系统启动后的速度设定。
-
误差计算模块
- 将参考速度与实际输出速度进行比较;
- 产生速度误差信号,作为 PID 控制器输入。
-
PID 控制器模块
- 对误差信号进行比例、积分、微分调节;
- 输出驱动控制电压。
-
电压饱和模块
- 模拟实际伺服驱动器输出电压上限;
- 防止控制信号无界增长,增强模型工程意义。
-
负载扰动模块
- 在指定时刻向电机施加外部扰动转矩;
- 用于测试系统抗扰能力和恢复性能。
-
直流伺服电机模型模块
- 采用状态空间模型描述电机动态;
- 输入为控制电压和负载转矩,输出为电机角速度。
-
结果显示与数据导出模块
- 使用 Scope 观察动态波形;
- 使用 To Workspace 将速度、控制电压和参考信号输出到 MATLAB 工作区。
2.2 总体控制结构
本系统采用单闭环速度控制结构,属于典型的伺服调速系统。控制流程如下:
- 系统接收目标速度指令;
- 实际转速反馈到比较环节;
- 比较结果形成速度误差;
- PID 控制器根据误差输出控制电压;
- 电压经过饱和处理后作用于电机;
- 电机产生速度输出;
- 在扰动加入后,控制器自动调节以恢复目标速度。
该结构简单、清晰,适合作为直流伺服系统基础建模方案。
3. 数学模型设计
3.1 电气部分建模
根据直流电机电枢回路电压平衡方程,有:
U_a = R_a i_a + L_a \\frac{di_a}{dt} + e_b
其中反电动势为:
e_b = K_e \\omega_m
因此电流动态方程可写为:
L_a \\frac{di_a}{dt} = U_a - R_a i_a - K_e \\omega_m
整理可得:
\\frac{di_a}{dt} = -\\frac{R_a}{L_a} i_a - \\frac{K_e}{L_a} \\omega_m + \\frac{1}{L_a}U_a
3.2 机械部分建模
根据转矩平衡方程,有:
J_m \\frac{d\\omega_m}{dt} + B_m \\omega_m = T_e - T_L
其中电磁转矩为:
T_e = K_t i_a
因此机械动态方程可写为:
J_m \\frac{d\\omega_m}{dt} = K_t i_a - B_m \\omega_m - T_L
整理可得:
\\frac{d\\omega_m}{dt} = \\frac{K_t}{J_m} i_a - \\frac{B_m}{J_m} \\omega_m - \\frac{1}{J_m} T_L
3.3 状态空间表达式
选取状态变量:
x = \\begin{bmatrix} i_a \\ \\omega_m \\end{bmatrix}
输入变量:
u = \\begin{bmatrix} U_a \\ T_L \\end{bmatrix}
输出变量:
y = \\omega_m
则系统状态空间模型为:
\\dot{x} = Ax + Bu
y = Cx + Du
其中:
A = \\begin{bmatrix} -\\frac{R_a}{L_a} \& -\\frac{K_e}{L_a} \\ \\frac{K_t}{J_m} \& -\\frac{B_m}{J_m} \\end{bmatrix}
B = \\begin{bmatrix} \\frac{1}{L_a} \& 0 \\ 0 \& -\\frac{1}{J_m} \\end{bmatrix}
C = \\begin{bmatrix}0 \& 1\\end{bmatrix}, \\quad D = \\begin{bmatrix}0 \& 0\\end{bmatrix}
3.4 项目中采用的实际参数
本项目中设置的直流伺服电机参数如下:
- 电枢电阻:
Ra = 0.8 Ω - 电枢电感:
La = 0.015 H - 反电动势系数:
Ke = 0.055 V/(rad/s) - 转矩常数:
Kt = 0.055 N·m/A - 转动惯量:
Jm = 2.5e-3 kg·m² - 粘性阻尼:
Bm = 1.2e-3 N·m·s/rad
该参数组合体现了一个中小功率伺服电机的仿真特征,便于在教学环境下观察响应过程。
4. PID 控制器设计
4.1 控制目标
本项目中 PID 控制器的设计目标主要包括:
- 使电机速度能够快速跟踪参考输入;
- 降低稳态误差;
- 抑制响应过程中的振荡;
- 提高系统在负载扰动下的恢复能力;
- 保证控制电压在合理范围内变化。
4.2 PID 控制规律
PID 控制器输出表达式为:
u(t) = K_p e(t) + K_i \\int e(t)dt + K_d \\frac{de(t)}{dt}
其中:
- (e(t)):速度误差;
- (K_p):比例系数;
- (K_i):积分系数;
- (K_d):微分系数。
项目中还设置了微分滤波系数 N,用于减弱高频噪声对微分项的影响。
4.3 控制器参数
当前项目采用的 PID 初始参数如下:
Kp = 0.45Ki = 28Kd = 0.0025N = 120
该组参数适合作为初始调试值,用于获得较好的速度响应和一定的抗扰能力。后续可以根据超调量、调节时间和稳态误差进一步整定。
4.4 电压饱和设计
考虑实际伺服驱动器存在输出上限,系统在 PID 控制器后增加饱和模块,限制输出电压范围为:
-24V \\le U_a \\le 24V
这样可以避免控制电压过大,同时更符合工程实际。
5. Simulink 模型设计
5.1 模型名称
自动生成的 Simulink 模型名称为:
DC_Servo_PID_Control.slx
5.2 模型模块组成
模型由以下模块组成:
-
Speed Reference- 速度阶跃给定模块;
- 阶跃时刻由
step_time指定; - 阶跃幅值由
servo_ref_speed指定。
-
Load Disturbance- 外部负载扰动模块;
- 扰动时刻由
disturbance_time指定; - 扰动幅值由
load_torque指定。
-
Error Sum- 完成参考值与反馈值相减。
-
PID Controller- 实现比例、积分、微分调节。
-
Voltage Saturation- 对控制电压进行限幅。
-
Plant Inputs- 将控制电压与扰动转矩合并成两输入向量。
-
DC Servo Motor- 采用 State-Space 模块建立电机模型;
- 参数矩阵由脚本自动写入模块内部。
-
Scope Mux- 将多个观测信号合并后送入 Scope。
-
System Scope- 用于显示参考速度、实际速度和控制电压。
-
To Workspace系列模块
omega:导出电机实际转速;u_ctrl:导出控制电压;w_ref:导出参考速度。
5.3 自动建模脚本说明
build_dc_servo_pid_model.m 脚本负责自动生成上述模型,其主要工作流程如下:
- 加载伺服电机与 PID 参数;
- 检查同名模型是否已经打开;
- 如果存在旧模型文件则删除;
- 创建新模型并设置求解器和仿真时间;
- 按顺序添加各个功能模块;
- 写入状态空间矩阵参数;
- 自动连接信号线;
- 保存并打开模型。
该脚本使项目更具自动化和可复现性,便于不同环境下快速部署。
6. 仿真流程设计
6.1 仿真参数设置
当前项目主要仿真设置如下:
- 仿真总时间:
sim_stop_time = 2.0 s - 给定速度阶跃时刻:
step_time = 0.02 s - 目标速度:
servo_ref_speed = 120 rad/s - 负载扰动时刻:
disturbance_time = 1.0 s - 负载扰动大小:
load_torque = 0.04 N·m
6.2 仿真逻辑
仿真过程中,系统执行逻辑如下:
- 初始阶段,电机静止;
- 在
0.02 s时刻,参考速度从 0 跳变到120 rad/s; - PID 控制器根据误差输出驱动电压;
- 电机在控制作用下逐步达到目标速度;
- 在
1.0 s时刻加入负载扰动; - 控制器自动调整输出,使速度尽快恢复;
- 仿真结束后输出速度、控制电压和参考信号数据。
6.3 自动运行脚本说明
run_dc_servo_pid_simulation.m 脚本用于一键完成整个仿真流程,其主要功能包括:
- 调用参数脚本;
- 自动生成或刷新 Simulink 模型;
- 依次设置
ode45与ode15s求解器; - 调用
sim()执行仿真; - 提取工作区中的响应数据;
- 计算性能指标;
- 绘制对比图;
- 在命令窗口输出结果汇总。
7. 求解器比较设计
7.1 比较目的
由于不同数值求解器在处理系统动态时的效率和适用性不同,本项目设计了 ode45 和 ode15s 的对比实验,以分析:
- 两种求解器的运行时间差异;
- 对系统响应曲线的影响;
- 对可能刚性问题的适应能力。
7.2 求解器说明
1)ode45
- 基于 Runge-Kutta 方法;
- 适用于一般非刚性系统;
- 使用广泛,结果直观;
- 对多数教学仿真较为合适。
2)ode15s
- 适用于刚性系统和微分代数系统;
- 对包含快慢动态差异较大的模型更有优势;
- 在某些情况下运行更稳定。
7.3 项目中比较的指标
项目中比较了以下结果:
- 仿真运行时间;
- 最终速度;
- 稳态误差;
- 超调量。
通过这些指标,可以对控制效果和数值求解效率进行综合分析。
8. 主要程序文件设计说明
8.1 motor_parameters.m
该文件是原始项目中的基础电机参数脚本,主要用于早期直流电机模型设置。其参数较简单,保留用于对照参考。
8.2 servo_motor_parameters.m
该文件是当前项目参数配置中心,负责统一管理:
- 电机参数;
- 控制目标;
- 负载扰动参数;
- PID 参数;
- 仿真时长;
- 状态空间矩阵。
通过集中定义这些变量,可以避免参数分散,提高维护效率。
8.3 build_dc_servo_pid_model.m
该文件用于自动创建 Simulink 模型,是整个项目模型生成的核心脚本。其特点如下:
- 不需要手动拖拽模块;
- 自动完成模块放置和连接;
- 可重复执行;
- 模型结构统一规范。
8.4 run_dc_servo_pid_simulation.m
该文件用于一键仿真和结果分析,适合作为实验主入口脚本。其特点如下:
- 自动运行两种求解器;
- 自动计算性能指标;
- 自动绘图;
- 自动输出汇总结果。
9. 项目运行方法
9.1 环境要求
建议软件环境:
- MATLAB R2020a 及以上版本;
- 已安装 Simulink;
- 当前工作目录设置为项目根目录。
9.2 运行步骤
在 MATLAB 命令窗口中按以下顺序执行:
matlab
cd('F:/google_download/Dynamic-Modeling-and-PID-Control-of-a-DC-Motor-Using')
clear
close all
bdclose all
build_dc_servo_pid_model
run_dc_servo_pid_simulation
9.3 结果查看
运行完成后,可从以下方面查看结果:
- 图形窗口中的速度、控制电压、求解器时间对比图;
- Simulink 中
System Scope的波形; - MATLAB 命令窗口中的指标输出;
- 工作区中的
omega、u_ctrl、w_ref数据。
10. 参数整定与优化建议
10.1 PID 参数整定建议
若系统表现不理想,可按如下方向调整:
- 增大
Kp:提高响应速度,但可能加大超调; - 增大
Ki:减小稳态误差,但可能降低稳定性; - 增大
Kd:改善阻尼,减小振荡,但过大可能放大噪声。
10.2 扰动测试建议
可以通过改变 load_torque 和 disturbance_time,测试系统在不同负载变化条件下的抗扰性能。
10.3 目标速度测试建议
可以通过改变 servo_ref_speed,测试不同速度指令下系统的响应特性,比较高低速情况下的控制效果。
11. 项目创新点与工程意义
11.1 项目创新点
与原始模型相比,本项目的主要改进包括:
- 将普通直流电机调速系统提升为直流伺服电机速度控制系统;
- 引入自动建模脚本,提高工程自动化水平;
- 增加电压饱和与负载扰动,更接近实际工况;
- 将控制器设计、建模、仿真和求解器比较集成到统一工程中。
11.2 工程意义
本项目不仅适合控制理论教学和实验验证,也具备一定工程分析意义,可用于:
- 直流伺服调速系统原理验证;
- PID 参数整定实验;
- 求解器性能分析;
- 控制课程设计与毕业论文基础平台。
12. 后续扩展方向
在当前项目基础上,后续可以进一步扩展为:
-
双闭环伺服系统
- 外环位置控制;
- 内环速度控制。
-
离散 PID 控制
- 更接近数字控制器实现;
- 便于嵌入式控制算法验证。
-
电流环设计
- 构建电流内环 + 速度外环的经典伺服结构。
-
先进控制方法对比
- 模糊 PID;
- 状态反馈控制;
- 自适应控制。
-
更丰富的测试工况
- 斜坡输入;
- 正弦跟踪输入;
- 多级扰动输入。
13. 结论
本项目完成了直流伺服电机速度控制系统的建模、PID 控制器设计、Simulink 自动建模、动态仿真和求解器性能对比。系统能够实现对目标速度的有效跟踪,并在扰动作用下表现出一定的恢复能力,验证了 PID 控制方法在直流伺服调速中的有效性。
通过该项目,可以系统掌握以下内容:
- 直流伺服电机数学模型建立;
- 状态空间建模方法;
- PID 控制器设计与参数整定;
- Simulink 闭环仿真建模;
- 数值求解器对比分析;
- 控制系统课程设计文档撰写方法。