Как я могу отобразить выходные данные PD-компенсатора в matlab?

#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-компенсатор, эквивалентный компенсатору фазового вывода. Они эквивалентны, но у меня много проблем с определением эквивалентности. Я буду искать еще. Еще раз спасибо.