Реализация кода ПИ-контроллера - PullRequest
0 голосов
/ 06 июля 2018

Я пытаюсь правильно понять составной термин ПИ-контроллера, поэтому я смоделировал свой фиктивный ПИ-контроллер с помощью этого кода

e =[10 7 8 5 6 3 4 1 2 1];
kp = 0.4;
ki = 1.35;
Ts = 0.5;
I =0;
for i =1:10
    P = kp*e(i);
    I = I +e(i)*Ts;
    output(i)= P+(ki*(I));
end

Теперь, о чем я думал, будет ли иметь какое-либо значение то, что если интегрировать ki с термином I или я умножу его в конце

e =[10 7 8 5 6 3 4 1 2 1];
kp = 0.4;
ki = 1.35;
Ts = 0.5;
I =0;
for i =1:10
    P = kp*e(i);
    I = I +e(i)*Ts*ki;
    output(i)= P+I;
end

и, к моему удивлению, у них обоих был один и тот же вывод, должен ли этот второй код отличаться, так как я сохраняю умножение ошибок с моим ki во втором коде, я не понимаю чего-то действительно базового здесь? Я знаю, что совершаю какую-то ошибку в своем пробежке, кто-то может указать на это?

Ответы [ 2 ]

0 голосов
/ 06 июля 2018

На самом деле вы делаете то же самое, что и они, и, следовательно, они одинаковы.

'5.0000 8.5000 12.5000 15.0000 18.0000 19.5000 21.5000 22.0000 23.0000 23.5000' Это вектор I из первого случая, и вы умножаете его на ki, а затем добавляете его с помощью P.

Теперь во втором случае вы уже умножили ki на каждый Ts, следовательно, каждое значение I включает умножение ki, как и раньше. Если вы посмотрите на новые значения I '6.7500 11.4750 16.8750 20.2500 24.3000 26.3250 29.0250 29.7000 31.0500 31.7250', вы поймете, что все они одинаковы.

Результат будет другим, если вы используете 'I = (I + e (i) * Ts) * ki;' потому что теперь вы теперь умножаете ки каждый раз на целое я.

0 голосов
/ 06 июля 2018

I-термины вывода в обеих версиях кода выглядят эквивалентно мне:

I_output k = ki * & Sigma; j = 1 k (e j * Ts) = & Sigma; j = 1 k (e j * Ts * ki)

Но, пожалуйста, поправьте меня, если я ошибаюсь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...