exponenta event banner

Управление перевернутым маятником на тележке

В этом примере используется systune для управления перевернутым маятником на тележке.

Сборка маятника/тележки

Сборка тележки/маятника изображена на рис. 1 и смоделирована в Simulink ® с использованием Simscape™ Multibody™.

Рис. 1: Перевернутый маятник на тележке

Рис. 2: модель Simscape Multibody

Управление системой осуществляется путем приложения переменной силы$F$ к тележке. Контроллер должен держать маятник в вертикальном положении при перемещении тележки в новое положение или при подталкивании маятника вперед (импульсное возмущение).$dF$

Структура управления

Вертикальное положение является неустойчивым равновесием для перевернутого маятника. Нестабильный характер установки усложняет задачу контроля. В этом примере используется следующая двухконтурная структура управления:

open_system('rct_pendulum.slx')
set_param('rct_pendulum','SimMechanicsOpenEditorOnUpdate','off');

Внутренняя петля использует контроллер состояния-пространства второго порядка для стабилизации маятника в его вертикальном положении ($\theta$управление), в то время как внешняя петля использует контроллер пропорциональной производной (PD) для управления положением тележки. Вы используете ПД, а не ПИД-контроллер, потому что завод уже обеспечивает некоторые интегральные действия.

Требования к конструкции

Использовать TuningGoal требования к заданию требуемого режима замкнутого цикла. Укажите время отклика 3 секунды для отслеживания изменения уставки в положении корзины.$x$

% Tracking of x command
req1 = TuningGoal.Tracking('xref','x',3);

Для адекватного отклонения импульсных возмущений$dF$ на кончике маятника используйте штраф LQR вида

$$ \int_0^\infty (16 \theta^2(t) + x^2(t) + 0.01 F^2(t)) dt $$

это подчеркивает небольшое угловое отклонение$\theta$ и ограничивает усилия управления.$F$

% Rejection of impulse disturbance dF
Qxu = diag([16 1 0.01]);
req2 = TuningGoal.LQG('dF',{'Theta','x','F'},1,Qxu);

Для надежности на входе установки требуется не менее 6 дБ запаса усиления и 40 градусов запаса фазы.

% Stability margins
req3 = TuningGoal.Margins('F',6,40);

Наконец, ограничить демпфирование и собственную частоту полюсов с замкнутым контуром, чтобы предотвратить затухающие или недостаточно затухающие переходные процессы.

% Pole locations
MinDamping = 0.5;
MaxFrequency = 45;
req4 = TuningGoal.Poles(0,MinDamping,MaxFrequency);

Настройка системы управления

Система с замкнутым контуром нестабильна для начальных значений контроллеров PD и state-space (1 и соответственно$2/s$). Вы можете использовать systune для совместной настройки этих двух контроллеров. Используйте slTuner для определения настраиваемых блоков и регистрации входного сигнала установки F в качестве точки анализа для измерения пределов устойчивости.

ST0 = slTuner('rct_pendulum',{'Position Controller','Angle Controller'});
addPoint(ST0,'F');

Далее используйте systune для настройки ПД и государственных контроллеров пространства в соответствии с указанными выше требованиями к производительности. Оптимизируйте характеристики отслеживания и отклонения возмущений (мягкие требования) с учетом пределов устойчивости и ограничений положения полюсов (жесткие требования).

rng(0)
Options = systuneOptions('RandomStart',5);
[ST, fSoft] = systune(ST0,[req1,req2],[req3,req4],Options);
Final: Soft = 1.36, Hard = 0.99983, Iterations = 244
Final: Soft = 1.44, Hard = 0.99921, Iterations = 138
Final: Soft = 1.44, Hard = 0.99955, Iterations = 311
Final: Soft = 1.26, Hard = 0.99808, Iterations = 270
Final: Soft = 1.44, Hard = 0.99998, Iterations = 266
Final: Soft = 1.27, Hard = 0.99673, Iterations = 236

Наилучшая конструкция достигает значения, близкого к 1 для мягких требований, при удовлетворении жестких требований (Hard<1). Это означает, что настроенная система управления почти достигает целевой производительности для отслеживания и отклонения возмущений при удовлетворении пределов устойчивости и ограничений расположения полюсов.

Проверка

Использовать viewGoal для дальнейшего анализа того, как оптимальные проектные тарифы соотносятся с каждым требованием.

figure('Position',[100   100   575   660])
viewGoal([req1,req3,req4],ST)

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

T = getIOTransfer(ST,{'xref','dF'},{'x','Theta'});
figure('Position',[100   100   650   420]);
subplot(121), step(T(:,1),10)
title('Tracking of set point change in position')
subplot(122), impulse(T(:,2),10)
title('Rejection of impulse disturbance')

Реакции являются гладкими с желаемым временем отстаивания. Проверьте настроенные значения контроллеров.

C1 = getBlockValue(ST,'Position Controller')
C1 =
 
               s    
  Kp + Kd * --------
             Tf*s+1 

  with Kp = 5.92, Kd = 1.95, Tf = 0.0513
 
Name: Position_Controller
Continuous-time PDF controller in parallel form.

C2 = zpk(getBlockValue(ST,'Angle Controller'))
C2 =
 
  -1611.4 (s+12.86) (s+4.368)
  ---------------------------
      (s+135.1) (s-14.26)
 
Name: Angle_Controller
Continuous-time zero/pole/gain model.

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

L = getLoopTransfer(ST,'F',-1);
figure
rlocus(L)
set(gca,'XLim',[-25 20],'YLim',[-20 20])

Чтобы завершить проверку, загрузите настроенные значения в Simulink и смоделируйте нелинейный отклик сборки тележки/маятника. Ниже приводится видеозапись полученного моделирования.

writeBlockValue(ST)

Рис. 3: Имитация тележки/маятника с настроенными контроллерами.

Закройте модель после моделирования.

set_param('rct_pendulum','SimMechanicsOpenEditorOnUpdate','on');
close_system('rct_pendulum',0);

См. также

(Simulink Control Design) | (Проект управления Simulink)

Связанные темы