PID控制器设计实现减速直流电机速度控制(MATLAB)

目录

任务要求

建立传递方程

重要函数

 tuner = pidTuner(sys, 'pid')

 其他函数上一篇已讲

使用PID Tuner工具调节PID

 输出响应曲线及性能参数


任务要求

建立传递方程

1. 电机的基本方程:

在直流电机中,电压 V 通过电流 I 控制电机的转矩输出T_{m}​。同时,电机的转速 {\theta }' 会影响电机的反电动势 E。基本方程可以表示为:

T_{m} = K_{t}I                              (1)

E = K_{e}{\theta }'                               (2)

 其中,K_{t}​ 是电机的转矩常数,K_{e}​ 是电机的反电动势常数。

2. 电机的机械方程:

电机的机械方程描述了角动量的变化与施加在电机上的转矩之间的关系:

J{\theta }'' = T_{m} - b{\theta }'                     (3)

其中,J 是电机的转动惯量,b 是摩擦系数。

3. 电流-电压方程

我们可以使用电压-电流方程(基尔霍夫电压定律)来消除电流 I

V - E= RI + LI'              (4)

其中 R 是电机的电阻,L 是电机的电感,E 电机的反电动势(公式2已给出)是。这里假设电机是由一个电阻R 和电感L 构成的。

4. 将方程组合并:

令 K_{t} = K_{e} = K

将上述方程(1)与方程(3)合并:

J\theta '' = KI - b\theta '                     (5)

将上述方程(2)与方程(4)合并:

V - K\theta ' = RI + LI'          (6)

5. 进行拉普拉斯变换:

将上述方程(5)、(6)联立,消除I,并进行拉普拉斯变换得到传递函数:

G_{0}(s) = \frac{\theta '(s)}{V(s)} = \frac{K}{(Js+b)(Ls+R)+K^{2}}\left [\frac{rad/sec}{V} \right ]

又因为电机轴角度\theta是减数器输出角度\theta _{L}的n倍,因此最终的传递方程为:

G(s) = \frac{\theta_{L} '(s)}{V(s)} = \frac{K/n}{(Js+b)(Ls+R)+K^{2}}\left [\frac{rad/sec}{V} \right ]

重要函数

 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所得曲线相同,且性能参数满足设计要求。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值