目录
任务要求
建立传递方程
1. 电机的基本方程:
在直流电机中,电压 通过电流 控制电机的转矩输出。同时,电机的转速 会影响电机的反电动势 。基本方程可以表示为:
(1)
(2)
其中, 是电机的转矩常数, 是电机的反电动势常数。
2. 电机的机械方程:
电机的机械方程描述了角动量的变化与施加在电机上的转矩之间的关系:
(3)
其中, 是电机的转动惯量, 是摩擦系数。
3. 电流-电压方程:
我们可以使用电压-电流方程(基尔霍夫电压定律)来消除电流 :
(4)
其中 是电机的电阻, 是电机的电感, 电机的反电动势(公式2已给出)是。这里假设电机是由一个电阻 和电感 构成的。
4. 将方程组合并:
令
将上述方程(1)与方程(3)合并:
(5)
将上述方程(2)与方程(4)合并:
(6)
5. 进行拉普拉斯变换:
将上述方程(5)、(6)联立,消除,并进行拉普拉斯变换得到传递函数:
又因为电机轴角度是减数器输出角度的n倍,因此最终的传递方程为:
重要函数
tuner = pidTuner(sys, 'pid')
pidTuner
函数是MATLAB控制系统工具箱中用于创建PID控制器调参器(tuner)对象的函数。这个调参器对象可以用于自动调整PID控制器的参数,以满足给定的性能指标。
-
tuner
:创建的PID调参器(tuner)对象。这个对象将用于自动调整PID控制器参数。 -
sys
:被控对象的传递函数模型。这是一个用于描述系统动态特性的传递函数。可以使用tf
函数来创建传递函数,如sys = tf(numerator, denominator)
。 -
pid
:控制器类型的字符串参数。这里我们传递字符串 'pid
',表示创建一个PID控制器的调参器。您也可以使用 'pd
' 或 'pi
' 来创建其他类型的调参器。
其他函数上一篇已讲
基于Matlab的控制系统仿真(质量块弹簧阻尼器系统PID控制器设计)_痴人痴梦的博客-CSDN博客
使用PID Tuner工具调节PID
按理说可以通过其他函数来设置性能目标、参数范围和其他调参参数,然后某个函数来进行自动调参,但是我还有些函数没搞明白,没有做出来,手动调节也挺方便。
clear;
close all;
J = 0.0005273;
b = 0.0043;
K = 0.063;
R = 0.4;
L = 0.8;
n = 111;
s = tf('s');
sys = (K/n)/((J*s+b)*(L*s+R)+K^2); % 创建被控对象传递函数模型
% 创建PID调参器
tuner = pidTuner(sys, 'pid');
输出响应曲线及性能参数
clear;
close all;
J = 0.0005273;
b = 0.0043;
K = 0.063;
R = 0.4;
L = 0.8;
n = 111;
s = tf('s');
sys = (K/n)/((J*s+b)*(L*s+R)+K^2); % 创建被控对象传递函数模型
% 初始化阶跃响应数据
t = 0:0.01:5;
%设置pid参数
Kp = 204.3;
ki = 429.8;
Kd = 23.73;
% 设计控制器
controller = pid(Kp,ki,Kd);
% 创建闭环系统
sys_cl = feedback(controller * sys, 1);
% 获取阶跃响应数据
[y, ~] = step(sys_cl, t);
% 计算阶跃响应特性
step_info = stepinfo(sys_cl);
% 存储阶跃响应特性
rise_time = step_info.RiseTime;
settling_time = step_info.SettlingTime;
Overshoot = step_info.Overshoot;
% 计算稳态误差
steady_state_error = 1 - dcgain(sys_cl);
% 可视化阶跃响应曲线
figure;
plot(t, y);
xlabel('Time');
ylabel('Output');
title('Step Response for Different Kd Values');
grid on;
% 显示结果
disp(['稳定时间: ', num2str(settling_time)]);
disp(['超调: ', num2str(Overshoot)]);
disp(['稳态误差: ', num2str(steady_state_error)]);
响应曲线与PID Tuner所得曲线相同,且性能参数满足设计要求。