exponenta event banner

Надежная настройка контроллера двигателя постоянного тока

В этом примере показано, как надежно настроить PID-контроллер для двигателя постоянного тока с несовершенно известными параметрами.

Моделирование двигателя постоянного тока

Неопределенная модель двигателя постоянного тока получена в примере «Надежность сервоконтроллера для двигателя постоянного тока». Передаточная функция от приложенного напряжения к угловой скорости задается

$$P(s) = {K_m \over J L s^2 + (J R + L K_f) s + K_m K_b + R K_f}$$

где сопротивление, $R$индуктивность, $L$постоянная ЭДС, $K_b$постоянная якоря, $K_m$вязкое трение и $K_f$инерционная нагрузка являются$J$ физическими параметрами двигателя. Эти параметры неизвестны и подвержены изменению, поэтому мы моделируем их как неопределенные значения с заданным диапазоном или процентом неопределенности.

R = ureal('R',2,'Percentage',40);
L = ureal('L',0.5,'Percentage',40);
K = ureal('K',0.015,'Range',[0.012 0.019]);
Km = K; Kb = K;
Kf = ureal('Kf',0.2,'Percentage',50);
J = ureal('J',0.02,'Percentage',20);

P = tf(Km,[J*L J*R+Kf*L Km*Kb+Kf*R]);
P.InputName = 'Voltage';
P.OutputName = 'Speed';

Функции временной и частотной характеристики, такие как step или bode автоматическая выборка неопределенных параметров в пределах их диапазона. Это полезно для оценки воздействия неопределенности. Например, постройте график ответа на шаг неопределенной установки P и отмечают большое изменение коэффициента усиления постоянного тока установки.

step(P,getNominal(P),3)
legend('Sampled uncertainty','Nominal')

Надежная настройка PID

Для надежной настройки PID-контроллера для этого двигателя постоянного тока создайте настраиваемый блок PID C и построить модель с замкнутым контуром CL0 контура обратной связи на рис. 1. Добавление точки анализа dLoad на выходе установки для измерения чувствительности к возмущению нагрузки.

C = tunablePID('C','pid');
AP = AnalysisPoint('dLoad');
CL0 = feedback(AP*P*C,1);
CL0.InputName = 'SpeedRef';
CL0.OutputName = 'Speed';

Рисунок 1: Схема управления двигателем постоянного тока

Существует множество способов определения требуемой производительности. Здесь мы фокусируемся на чувствительности к возмущению нагрузки, скатыванию и динамике замкнутого цикла.

R1 = TuningGoal.Sensitivity('dLoad',tf([1.25 0],[1 2]));
R2 = TuningGoal.MaxLoopGain('dLoad',10,1);
R3 = TuningGoal.Poles('dLoad',0.1,0.7,25);

Первый гол R1 задает требуемый профиль для функции чувствительности. Чувствительность должна быть низкой при низкой частоте для хорошего отклонения возмущения. Второй гол R2 накладывает свертывание -20 дБ/декада за последние 10 рад/с. Третий гол R3 задание минимального затухания, минимального затухания и максимальной собственной частоты для полюсов с замкнутым контуром.

viewGoal(R1)

viewGoal(R2)

viewGoal(R3)

Теперь вы можете использовать systune для надежной настройки коэффициентов усиления PID, то есть для достижения целей проектирования для всех возможных значений неопределенных параметров двигателя постоянного тока. Поскольку могут существовать локальные минимумы, выполните три отдельные настройки из трех различных наборов начальных значений усиления.

opt = systuneOptions('RandomStart',2);
rng(0), [CL,fSoft] = systune(CL0,[R1 R2 R3],opt);
Nominal tuning:
Design 1: Soft = 0.838, Hard = -Inf
Design 2: Soft = 0.838, Hard = -Inf
Design 3: Soft = 0.914, Hard = -Inf

Robust tuning of Design 2:
Soft: [0.838,2.01], Hard: [-Inf,-Inf], Iterations = 40
Soft: [0.875,1.76], Hard: [-Inf,-Inf], Iterations = 29
Soft: [0.935,2.77], Hard: [-Inf,-Inf], Iterations = 27
Soft: [1.35,1.35], Hard: [-Inf,-Inf], Iterations = 35
Final: Soft = 1.35, Hard = -Inf, Iterations = 131

Robust tuning of Design 1:
Soft: [0.838,1.96], Hard: [-Inf,-Inf], Iterations = 65
Soft: [0.875,1.75], Hard: [-Inf,-Inf], Iterations = 30
Soft: [1.02,2.98], Hard: [-Inf,-Inf], Iterations = 34
Soft: [1.34,1.36], Hard: [-Inf,-Inf], Iterations = 32
Soft: [1.35,1.35], Hard: [-Inf,-Inf], Iterations = 20
Final: Soft = 1.35, Hard = -Inf, Iterations = 181

Robust tuning of Design 3:
Soft: [0.914,2.35], Hard: [-Inf,-Inf], Iterations = 58
Soft: [0.998,2.83], Hard: [-Inf,-Inf], Iterations = 60
Soft: [0.948,2.32], Hard: [-Inf,-Inf], Iterations = 55
Soft: [1.32,1.41], Hard: [-Inf,-Inf], Iterations = 30
Soft: [1.35,1.35], Hard: [-Inf,-Inf], Iterations = 22
Final: Soft = 1.35, Hard = -Inf, Iterations = 225

Конечное значение близко к 1, так что цели настройки почти достигаются во всем диапазоне неопределенности. Настроенный контроллер PID:

showTunable(CL)
C =
 
             1            s    
  Kp + Ki * --- + Kd * --------
             s          Tf*s+1 

  with Kp = 33.8, Ki = 83.2, Kd = 2.34, Tf = 0.028
 
Name: C
Continuous-time PIDF controller in parallel form.

Затем проверьте, как этот PID отклоняет нарушение ступенчатой нагрузки для 30 случайно выбранных значений неопределенных параметров.

S = getSensitivity(CL,'dLoad');
clf, step(usample(S,30),getNominal(S),3)
title('Load disturbance rejection')
legend('Sampled uncertainty','Nominal')

Характеристики отбраковки остаются однородными, несмотря на большие вариации растений. Можно также проверить, что функция чувствительности надежно остается в пределах предписанной границы.

viewGoal(R1,CL)

Надежная настройка с помощью systune легко. Просто включите неопределенность установки в настраиваемую модель с замкнутым контуром, используя ureal объекты, и программное обеспечение автоматически пытается достичь целей настройки для всего диапазона неопределенности.

Связанные примеры

Подробнее