#matlab
#matlab
Вопрос:
У меня есть простой PD-компенсатор в контуре управления. Я хочу увидеть ответ шага вывода компенсатора. Мой код выглядит так:
plant = tf(820,[0.08 1 0])
% PD Compensator
Kp = 2.25;
Ki = 0;
Kd = 0.025;
comp_pd = pid(Kp, Ki, Kd)
% plant with pd compensator
plant_pd = feedback(comp_pd*plant,1);
% pd compensator output
pd_output=feedback(comp_pd,plant);
figure();
step(plant_pd)
step(pd_output)
grid on;
ylim([-12 12]);
xlim([0 0.1]);
Когда я запускаю код, я получаю эту ошибку:
Error using DynamicSystem/step (line 95)
Cannot simulate the time response of models with more zeros than poles.
Как я могу отобразить выходные данные компенсатора?
Ответ №1:
Это потому, что, как следует из сообщения об ошибке, передаточная функция идеального PD-компенсатора не является «правильной» и не может быть представлена или смоделирована.
Для решения этой проблемы обычно используется термин «приблизительная производная», так что вместо того, чтобы:
comp_pd = Kp Kd*s
У вас есть что-то вроде
comp_pd = Kp Kd*s/(1 Tf*s)
Это соответствующий раздел документации по теме:
Итак, в вашем коде просто замените:
comp_pd = pid(Kp, Ki, Kd)
Автор:
comp_pd = pid(Kp, Ki, Kd, Tf)
где Tf
это мало, скажем 1e-3
, хотя вам, возможно, придется поэкспериментировать, пока вы не найдете правильное значение в зависимости от постоянной времени вашей системы.
Комментарии:
1. Спасибо. Это полезно и указывает мне правильное направление. Мне удалось определить подходящее значение для Tf в моей системе, но, на мой взгляд, в этом процессе слишком много магии. фактическая задача состоит в том, чтобы найти PDF-компенсатор, эквивалентный компенсатору фазового вывода. Они эквивалентны, но у меня много проблем с определением эквивалентности. Я буду искать еще. Еще раз спасибо.