Ошибка считает правильный ответ реализации Simulink.step
дает вам правильный ответ.
A Чистая производная не существует в Simulink, и в случае неудачи попробуйте выполнить функциональный блок передачи с [kd, kp]
в качестве числителя и [1]
в качествезнаменатель вы получите ошибку.
Производная представляет собой фильтр с полюсом, когда вы используете интегратор с фиксированным шагом , поведение с переменным шагом весьма неопределенно, и его следует избегать .Система с замкнутым контуром, которую вы получаете с вашим контроллером, имеет относительную степень один (1 ноль, 2 полюса).
Если вы посмотрите на ответ, реализация Simulink начинается с dy/dt = 0
для t = 0
, и это невозможно в такого рода замкнутой системе.Правильный ответ: tf
(dy/dt > 0
для t = 0
).
Ваша передаточная функция с замкнутым контуром правильная, и вы должны считать ее ответ правильным.Попробуйте смоделировать передаточную функцию на изображении с помощью Simulink.Вы увидите тот же ответ команды step
.
Давайте проверим это с помощью некоторого кода:
На изображенииу нас есть три теста:
- аналитическая передаточная функция
- аппроксимация производной
- моделирование с вашим производным блоком
Попробуйте реализовать его и протестируйте значение 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_);
, поскольку вы можете видеть, что обратный Лаплас показывает превышение более чем на 25%.
РЕДАКТИРОВАТЬ: Оценка обратного Лапласа, который вы оценили по этой ссылке
Снова превышение составляет 25,9%