Другой результат для одной и той же системы с Simulink и tf () - PullRequest
0 голосов
/ 28 октября 2018

Взгляните на следующую простую систему

enter image description here

, где Kp = 7130 и Kd = 59,3880.Эти значения составлены таким образом, что система должна демонстрировать превышение 20% и ошибку стационарного режима менее 0,01.Модель Simulink дает правильные результаты, тогда как tf() - нет.Это модель

enter image description here

и ее результат равен

enter image description here

Теперь реализуем ту же систему с tf следующим образом:

clear all
clc
kp=7130;
kd=59.3880;
num=[kd kp];
den=[1 18+kd 72+kp];
F=tf(num,den);
step(F)
stepinfo(F)

приводит к другому превышению.

enter image description here

Есть какие-либо предложения, почему есть противоречивый ответ?Нужно ли указывать систему в определенной форме, чтобы использовать tf()?

1 Ответ

0 голосов
/ 29 октября 2018

Ошибка считает правильный ответ реализации Simulink.step дает вам правильный ответ.

A Чистая производная не существует в Simulink, и в случае неудачи попробуйте выполнить функциональный блок передачи с [kd, kp] в качестве числителя и [1] в качествезнаменатель вы получите ошибку.

Производная представляет собой фильтр с полюсом, когда вы используете интегратор с фиксированным шагом , поведение с переменным шагом весьма неопределенно, и его следует избегать .Система с замкнутым контуром, которую вы получаете с вашим контроллером, имеет относительную степень один (1 ноль, 2 полюса).

Если вы посмотрите на ответ, реализация Simulink начинается с dy/dt = 0 для t = 0, и это невозможно в такого рода замкнутой системе.Правильный ответ: tf (dy/dt > 0 для t = 0).

Ваша передаточная функция с замкнутым контуром правильная, и вы должны считать ее ответ правильным.Попробуйте смоделировать передаточную функцию на изображении с помощью Simulink.Вы увидите тот же ответ команды step.

Давайте проверим это с помощью некоторого кода:

enter image description here

На изображенииу нас есть три теста:

  • аналитическая передаточная функция
  • аппроксимация производной
  • моделирование с вашим производным блоком

Попробуйте реализовать его и протестируйте значение 0.001 в tf s / (0.001 s + 1), вы увидите, что если вы уменьшите коэффициент до 0, то ответ Transfer Fnc2 будет приближен к таковому из аналитического закрытияloop tf (до определенного момента Simulink не будет оценивать производную и остановит моделирование).И, наконец, аналитическая передаточная функция в Simulink дает тот же отклик на команду step.

В комментарии вы сказали, что оценили обратный лаплас, поэтому давайте проверим и обратный лаплас.Символический набор инструментов сделает это для нас:

syms s kp kd t

Plant = 1/(s^2 + 18 * s + 72)
Reg = kp + kd * s

L = Plant * Reg
ClosedLoop = simplify(L / (1 + L))
Step = 1/s

ResponseStep = simplify(ilaplace(ClosedLoop * Step))

ResponseStep_f = matlabFunction(simplify( ...
  subs( ...
    subs(ResponseStep, kp, 7130), kd, 59.3880)));

t_ = linspace(0, 0.15, 200);
y_ = arrayfun(t_closedLoop_d, t_);
plot(t_, y_);

enter image description here

, поскольку вы можете видеть, что обратный Лаплас показывает превышение более чем на 25%.

РЕДАКТИРОВАТЬ: Оценка обратного Лапласа, который вы оценили по этой ссылке

enter image description here

Снова превышение составляет 25,9%

...