exponenta event banner

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

В этом примере показано, как использовать Toolbox™ надежного управления для проектирования надежного контроллера для активной системы подвески. В примере описана модель подвески на четверть вагона. Затем он вычисляет контроллер H∞ для номинальной системы, используя hinfsyn команда. И, наконец, в примере показано, как использовать λ-синтез для создания надежного контроллера для полной неопределенной системы.

Четвертьвагонная модель подвески

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

В этом примере используется четвертьвагонная модель активной системы подвески (см. рис. 1). Масса mb (в килограммах) представляет шасси (кузов) автомобиля, а масса mw (в килограммах) представляет колесную сборку. Пружина ks и демпфер bs представляют собой пассивную пружину и амортизатор, размещенные между кузовом автомобиля и колесным узлом. Пружина kt моделирует сжимаемость пневматической шины. Переменными xb, xw и r (все в метрах) являются соответственно движение кузова, движение колеса и нарушение дорожного движения. Усилие fs (в килоНьютонах), приложенное между кузовом и колесным узлом, регулируется обратной связью и представляет собой активный компонент системы подвески.

Рисунок 1: Четвертьвагонная модель активной подвески.

При обозначении (x1, x2, x3, x4): = (xb,xb˙,xw,x˙w) линеаризованные уравнения состояния-пространства для четвертьвагонной модели:

x1˙=x2x2˙= - (1/mb) [ks (x1-x3) + bs (x2-x4) - 103fs]x3˙=x4x4˙= (1/mw) [ks (x1-x3) + bs (x2-x4) -kt (x3-r) -103fs].

Построение модели пространства состояний qcar представление этих уравнений.

% Physical parameters
mb = 300;    % kg
mw = 60;     % kg
bs = 1000;   % N/m/s
ks = 16000 ; % N/m
kt = 190000; % N/m

% State matrices
A = [ 0 1 0 0; [-ks -bs ks bs]/mb ; ...
      0 0 0 1; [ks bs -ks-kt -bs]/mw];
B = [ 0 0; 0 1e3/mb ; 0 0 ; [kt -1e3]/mw];
C = [1 0 0 0; 1 0 -1 0; A(2,:)];
D = [0 0; 0 0; B(2,:)];

qcar = ss(A,B,C,D);
qcar.StateName = {'body travel (m)';'body vel (m/s)';...
          'wheel travel (m)';'wheel vel (m/s)'};
qcar.InputName = {'r';'fs'};
qcar.OutputName = {'xb';'sd';'ab'};

Передаточная функция от исполнительного механизма к перемещению и ускорению корпуса имеет мнимую ось ноль с собственной частотой 56,27 рад/с. Это называется частотой шинного хмеля.

tzero(qcar({'xb','ab'},'fs'))
ans = 2×1 complex

  -0.0000 +56.2731i
  -0.0000 -56.2731i

Аналогично, передаточная функция от исполнительного механизма к отклонению подвески имеет мнимую ось ноль с собственной частотой 22,97 рад/с. Это называется частотой гремящего пространства.

zero(qcar('sd','fs'))
ans = 2×1 complex

   0.0000 +22.9734i
   0.0000 -22.9734i

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

bodemag(qcar({'ab','sd'},'r'),'b',qcar({'ab','sd'},'fs'),'r',{1 100});
legend('Road disturbance (r)','Actuator force (fs)','location','SouthWest')
title({'Gain from road dist (r) and actuator force (fs) ';
       'to body accel (ab) and suspension travel (sd)'})

Figure contains 2 axes. Axes 1 contains 2 objects of type line. These objects represent Road disturbance (r), Actuator force (fs). Axes 2 contains 2 objects of type line. These objects represent Road disturbance (r), Actuator force (fs).

Из-за нулей мнимой оси управление с обратной связью не может улучшить реакцию от дорожного возмущения r на ускорение тела ab на частоте перескока шины и от r на отклонение подвески sd на частоте перегрева. Более того, из-за соотношения xw = xb-sd и того факта, что положение колеса xw примерно следует r на низкой частоте (менее 5 рад/с), существует присущий компромисс между комфортом пассажира и отклонением подвески: любое уменьшение хода кузова на низкой частоте приведет к увеличению отклонения подвески.

Неопределенная модель привода

Гидропривод, используемый для управления активной подвеской, соединен между массой mb корпуса и массой mw колесного узла. Номинальная динамика исполнительного механизма представлена передаточной функцией первого порядка 1/( 1 + s/60) с максимальным смещением 0,05 м.

ActNom = tf(1,[1/60 1]);

Эта номинальная модель аппроксимирует только физическую динамику привода. Мы можем использовать семейство моделей привода для учета ошибок моделирования и изменчивости моделей привода и четвертьвагона. Это семейство состоит из номинальной модели с частотно-зависимой величиной неопределенности. При низкой частоте, ниже 3 рад/с, модель может изменяться до 40% от своего номинального значения. Около 3 рад/с процентное изменение начинает увеличиваться. Неопределенность пересекает 100% при 15 рад/с и достигает 2000% при приблизительно 1000 рад/с. Взвешивающая функция Wunc используется для модуляции величины неопределенности с частотой.

Wunc = makeweight(0.40,15,3);
unc = ultidyn('unc',[1 1],'SampleStateDim',5);
Act = ActNom*(1 + Wunc*unc);
Act.InputName = 'u';
Act.OutputName = 'fs';

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

rng('default')
bode(Act,'b',Act.NominalValue,'r+',logspace(-1,3,120))

Figure contains 2 axes. Axes 1 with title From: u To: fs contains 22 objects of type line. These objects represent Act, untitled1. Axes 2 contains 22 objects of type line. These objects represent Act, untitled1.

Настройка конструкции

Основные задачи управления сформулированы с точки зрения комфорта пассажиров и управления дорогой, которые относятся к ускорению кузова ab и движению подвески sd. К другим факторам, влияющим на конструкцию системы управления, относятся характеристики дорожных помех, качество измерений датчиков для обратной связи и предельные значения имеющейся силы управления. Чтобы использовать алгоритмы синтеза H∞, мы должны выразить эти цели как единую функцию затрат, которая должна быть минимизирована. Это можно сделать, как показано на фиг.2.

Рис. 2: Состав для отбраковки нарушений.

Контроллер обратной связи использует измерения y1, y2 хода подвески sd и ускорения тела ab для вычисления управляющего сигнала u, приводящего в действие гидравлический привод. Существует три внешних источника возмущения:

  • Дорожное возмущение r, смоделированное как нормализованный сигнал d1, сформированный весовой функцией Вролада. Для моделирования широкополосных прогибов дорог магнитудой семь сантиметров мы используем постоянный вес Вролада = 0,07

  • Шум датчика в обоих измерениях, моделируемый как нормализованные сигналы d2 и d3, формируемые весовыми функциями Wd2 и Wd3. Мы используем Wd2 = 0,01 и Wd3 = 0,5 для моделирования шума широкополосного датчика интенсивности 0,01 и 0,5 соответственно. В более реалистичной конструкции эти веса будут зависеть от частоты при моделировании шумового спектра датчиков смещения и ускорения.

Цели контроля могут быть переосмыслены как цель отказа от нарушения: Минимизируйте влияние возмущений d1, d2, d3 на взвешенную комбинацию управляющих усилий u, хода подвески sd и ускорения тела ab. При использовании H∞ нормы (пикового усиления) для измерения «удара» это означает разработку контроллера, который минимизирует H∞ норму от входов возмущений d1, d2, d3 до сигналов ошибок e1, e2, e3.

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

Wroad = ss(0.07);  Wroad.u = 'd1';   Wroad.y = 'r';
Wact = 0.8*tf([1 50],[1 500]);  Wact.u = 'u';  Wact.y = 'e1';
Wd2 = ss(0.01);  Wd2.u = 'd2';   Wd2.y = 'Wd2';
Wd3 = ss(0.5);   Wd3.u = 'd3';   Wd3.y = 'Wd3';

Указать замкнутые цели для усиления от дорожных возмущений r до отклонения подвески sd (управление) и ускорения кузова ab (комфорт). Из-за неопределенности исполнительного механизма и нулей мнимой оси стремятся ослабить только помехи ниже 10 рад/с.

HandlingTarget = 0.04 * tf([1/8 1],[1/80 1]);
ComfortTarget = 0.4 * tf([1/0.45 1],[1/150 1]);

Targets = [HandlingTarget ; ComfortTarget];
bodemag(qcar({'sd','ab'},'r')*Wroad,'b',Targets,'r--',{1,1000}), grid
title('Response to road disturbance')
legend('Open-loop','Closed-loop target')

Figure contains 2 axes. Axes 1 with title From: d1 contains 2 objects of type line. These objects represent Open-loop, Closed-loop target. Axes 2 contains 2 objects of type line. These objects represent Open-loop, Closed-loop target.

Соответствующие рабочие веса Wsd, Wab являются взаимностью этих целей комфорта и управляемости. Для изучения компромисса между комфортом пассажиров и погрузочно-разгрузочными работами построить три комплекта грузов (βWsd, (1-β) Wab), соответствующих трем различным компромиссам: комфорт (β = 0,01), сбалансированный (β = 0,5) и погрузочно-разгрузочные работы (β = 0,99).

% Three design points
beta = reshape([0.01 0.5 0.99],[1 1 3]);
Wsd = beta / HandlingTarget;
Wsd.u = 'sd';  Wsd.y = 'e3';
Wab = (1-beta) / ComfortTarget;
Wab.u = 'ab';  Wab.y = 'e2';

Наконец, используйте connect для построения модели qcaric блок-схемы, показанной на рис. 2. Обратите внимание, что qcaric представляет собой массив из трех моделей, по одной для каждой точки конструкции β. Также, qcaric является неопределенной моделью, поскольку она содержит неопределенную модель привода Act.

sdmeas  = sumblk('y1 = sd+Wd2');
abmeas = sumblk('y2 = ab+Wd3');
ICinputs = {'d1';'d2';'d3';'u'};
ICoutputs = {'e1';'e2';'e3';'y1';'y2'};
qcaric = connect(qcar(2:3,:),Act,Wroad,Wact,Wab,Wsd,Wd2,Wd3,...
                 sdmeas,abmeas,ICinputs,ICoutputs)
qcaric =

  3x1 array of uncertain continuous-time state-space models.
  Each model has 5 outputs, 4 inputs, 9 states, and the following uncertain blocks:
    unc: Uncertain 1x1 LTI, peak gain = 1, 1 occurrences

Type "qcaric.NominalValue" to see the nominal value, "get(qcaric)" to see all properties, and "qcaric.Uncertainty" to interact with the uncertain elements.

Номинальная H-бесконечность

Использовать hinfsyn для вычисления контроллера H∞ для каждого значения коэффициента смешения β.

ncont = 1; % one control signal, u
nmeas = 2; % two measurement signals, sd and ab
K = ss(zeros(ncont,nmeas,3));
gamma = zeros(3,1);
for i=1:3
   [K(:,:,i),~,gamma(i)] = hinfsyn(qcaric(:,:,i),nmeas,ncont);
end

gamma
gamma = 3×1

    0.9405
    0.6727
    0.8892

Три контроллера достигают норм H∞ по замкнутому контуру 0,94, 0,67 и 0,89 соответственно. Создайте соответствующие модели с замкнутым контуром и сравните выигрыш от дорожных возмущений с xb, sd, ab для пассивных и активных подвесок. Обратите внимание, что все три контроллера уменьшают отклонение подвески и ускорение корпуса ниже частоты вращения (23 рад/с).

% Closed-loop models
K.u = {'sd','ab'};  K.y = 'u';
CL = connect(qcar,Act.Nominal,K,'r',{'xb';'sd';'ab'});

bodemag(qcar(:,'r'),'b', CL(:,:,1),'r-.', ...
   CL(:,:,2),'m-.', CL(:,:,3),'k-.',{1,140}), grid
legend('Open-loop','Comfort','Balanced','Handling','location','SouthEast')
title('Body travel, suspension deflection, and body acceleration due to road')

Figure contains 3 axes. Axes 1 with title From: r contains 4 objects of type line. These objects represent Open-loop, Comfort, Balanced, Handling. Axes 2 contains 4 objects of type line. These objects represent Open-loop, Comfort, Balanced, Handling. Axes 3 contains 4 objects of type line. These objects represent Open-loop, Comfort, Balanced, Handling.

Оценка временной области

Для дальнейшей оценки трех конструкций выполните моделирование во временной области с использованием сигнала r (t) возмущения дороги, представляющего собой удар дороги высотой 5 см.

% Road disturbance
t = 0:0.0025:1;
roaddist = zeros(size(t));
roaddist(1:101) = 0.025*(1-cos(8*pi*t(1:101)));

% Closed-loop model
SIMK = connect(qcar,Act.Nominal,K,'r',{'xb';'sd';'ab';'fs'});

% Simulate
p1 = lsim(qcar(:,1),roaddist,t);
y1 = lsim(SIMK(1:4,1,1),roaddist,t);
y2 = lsim(SIMK(1:4,1,2),roaddist,t);
y3 = lsim(SIMK(1:4,1,3),roaddist,t);

% Plot results
subplot(211)
plot(t,p1(:,1),'b',t,y1(:,1),'r.',t,y2(:,1),'m.',t,y3(:,1),'k.',t,roaddist,'g')
title('Body travel'), ylabel('x_b (m)')
subplot(212)
plot(t,p1(:,3),'b',t,y1(:,3),'r.',t,y2(:,3),'m.',t,y3(:,3),'k.',t,roaddist,'g')
title('Body acceleration'), ylabel('a_b (m/s^2)')

Figure contains 2 axes. Axes 1 with title Body travel contains 5 objects of type line. Axes 2 with title Body acceleration contains 5 objects of type line.

subplot(211)
plot(t,p1(:,2),'b',t,y1(:,2),'r.',t,y2(:,2),'m.',t,y3(:,2),'k.',t,roaddist,'g')
title('Suspension deflection'), xlabel('Time (s)'), ylabel('s_d (m)')
subplot(212)
plot(t,zeros(size(t)),'b',t,y1(:,4),'r.',t,y2(:,4),'m.',t,y3(:,4),'k.',t,roaddist,'g')
title('Control force'), xlabel('Time (s)'), ylabel('f_s (kN)')
legend('Open-loop','Comfort','Balanced','Handling','Road Disturbance','location','SouthEast')

Figure contains 2 axes. Axes 1 with title Suspension deflection contains 5 objects of type line. Axes 2 with title Control force contains 5 objects of type line. These objects represent Open-loop, Comfort, Balanced, Handling, Road Disturbance.

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

Надежный дизайн Mu

На данный момент разработаны контроллеры H∞, которые соответствуют требованиям к производительности модели номинального привода. Как обсуждалось ранее, эта модель является только аппроксимацией истинного привода, и необходимо убедиться, что производительность контроллера поддерживается в условиях ошибок модели и неопределенности. Это называется надежной производительностью.

Далее используйте start-synthesis для разработки контроллера, который обеспечивает надежную производительность для всего семейства моделей приводов. Надежный контроллер синтезируется с помощью функции musyn с использованием неопределенной модели qcaric(:,:,2) соответствует «сбалансированным» характеристикам (β = 0,5).

[Krob,rpMU] = musyn(qcaric(:,:,2),nmeas,ncont);
D-K ITERATION SUMMARY:
-----------------------------------------------------------------
                       Robust performance               Fit order
-----------------------------------------------------------------
  Iter         K Step       Peak MU       D Fit             D
    1           1.193        1.125        1.139             4
    2           1.091        1.025        1.033             4
    3          0.9991        0.946       0.9559             4
    4          0.9358        0.932       0.9348             4
    5          0.9096       0.9057       0.9114             8
    6          0.9103        0.907       0.9096             8
    7          0.9091       0.9066       0.9094             6

Best achieved robust performance: 0.906

Моделирование номинальной реакции на удар дороги с помощью надежного контроллера Krob. Ответы аналогичны полученным с «сбалансированным» контроллером H∞.

% Closed-loop model (nominal)
Krob.u = {'sd','ab'};
Krob.y = 'u';
SIMKrob = connect(qcar,Act.Nominal,Krob,'r',{'xb';'sd';'ab';'fs'});

% Simulate
p1 = lsim(qcar(:,1),roaddist,t);
y1 = lsim(SIMKrob(1:4,1),roaddist,t);

% Plot results
clf, subplot(221)
plot(t,p1(:,1),'b',t,y1(:,1),'r',t,roaddist,'g')
title('Body travel'), ylabel('x_b (m)')
subplot(222)
plot(t,p1(:,3),'b',t,y1(:,3),'r')
title('Body acceleration'), ylabel('a_b (m/s^2)')
subplot(223)
plot(t,p1(:,2),'b',t,y1(:,2),'r')
title('Suspension deflection'), xlabel('Time (s)'), ylabel('s_d (m)')
subplot(224)
plot(t,zeros(size(t)),'b',t,y1(:,4),'r')
title('Control force'), xlabel('Time (s)'), ylabel('f_s (kN)')
legend('Open-loop','Robust design','location','SouthEast')

Figure contains 4 axes. Axes 1 with title Body travel contains 3 objects of type line. Axes 2 with title Body acceleration contains 2 objects of type line. Axes 3 with title Suspension deflection contains 2 objects of type line. Axes 4 with title Control force contains 2 objects of type line. These objects represent Open-loop, Robust design.

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

rng('default'), nsamp = 100;  clf

% Uncertain closed-loop model with balanced H-infinity controller
CLU = connect(qcar,Act,K(:,:,2),'r',{'xb','sd','ab'});
lsim(usample(CLU,nsamp),'b',CLU.Nominal,'r',roaddist,t)
title('Nominal "balanced" design')
legend('Perturbed','Nominal','location','SouthEast')

Figure contains 3 axes. Axes 1 contains 102 objects of type line. These objects represent Driving inputs, Perturbed, Nominal. Axes 2 contains 102 objects of type line. These objects represent Driving inputs, Perturbed, Nominal. Axes 3 contains 102 objects of type line. These objects represent Driving inputs, Perturbed, Nominal.

% Uncertain closed-loop model with balanced robust controller
CLU = connect(qcar,Act,Krob,'r',{'xb','sd','ab'});
lsim(usample(CLU,nsamp),'b',CLU.Nominal,'r',roaddist,t)
title('Robust "balanced" design')
legend('Perturbed','Nominal','location','SouthEast')

Figure contains 3 axes. Axes 1 contains 102 objects of type line. These objects represent Driving inputs, Perturbed, Nominal. Axes 2 contains 102 objects of type line. These objects represent Driving inputs, Perturbed, Nominal. Axes 3 contains 102 objects of type line. These objects represent Driving inputs, Perturbed, Nominal.

Надежный контроллер Krob снижает изменчивость из-за неопределенности модели и обеспечивает более последовательную производительность.

Упрощение контроллера: Сокращение заказа

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

% Create array of reduced-order controllers
NS = order(Krob);
StateOrders = 1:NS;
Kred = reduce(Krob,StateOrders);

Следующее использование robgain вычислять запас надежности для каждого приближения с уменьшенным порядком. Рабочие показатели достигаются, когда коэффициент усиления по замкнутому контуру меньше γ = 1. Надежный запас производительности измеряет, насколько неопределенность может быть сохранена без ухудшения производительности (превышение γ = 1). Разница в 1 или более указывает на то, что мы можем выдержать 100% указанной неопределенности.

% Compute robust performance margin for each reduced controller
gamma = 1;
CLP = lft(qcaric(:,:,2),Kred);
for k=1:NS
   PM(k) = robgain(CLP(:,:,k),gamma);
end

% Compare robust performance of reduced- and full-order controllers
PMfull = PM(end).LowerBound;
plot(StateOrders,[PM.LowerBound],'b-o',...
   StateOrders,repmat(PMfull,[1 NS]),'r');
grid
title('Robust performance margin as a function of controller order')
legend('Reduced order','Full order','location','SouthEast')

Figure contains an axes. The axes with title Robust performance margin as a function of controller order contains 2 objects of type line. These objects represent Reduced order, Full order.

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

Упрощение контроллера: настройка фиксированного порядка

Кроме того, можно использовать musyn для непосредственной настройки контроллеров низкого порядка. Это часто более эффективно, чем сокращение a-posteriori контроллера полного порядка Krob. Например, настройте контроллер третьего порядка для оптимизации его надежной производительности.

% Create tunable 3rd-order controller 
K = tunableSS('K',3,ncont,nmeas);

% Tune robust performance of closed-loop system CL
CL0 = lft(qcaric(:,:,2),K);
[CL,RP] = musyn(CL0);
D-K ITERATION SUMMARY:
-----------------------------------------------------------------
                       Robust performance               Fit order
-----------------------------------------------------------------
  Iter         K Step       Peak MU       D Fit             D
    1           1.189        1.104         1.12            10
    2           1.076        1.062        1.073            10
    3          0.9899       0.9762       0.9913            10
    4          0.9229       0.9228       0.9341            10
    5          0.9197       0.9156        0.925            10
    6            0.92       0.9157       0.9226            10

Best achieved robust performance: 0.916

Настроенный контроллер имеет производительность RP=0.92, очень близко к таковому Krob. Вы можете увидеть его ответ Боде с помощью

K3 = getBlockValue(CL,'K');
bode(K3)

Figure contains 4 axes. Axes 1 with title From: In(1) contains an object of type line. This object represents K. Axes 2 contains an object of type line. This object represents K. Axes 3 with title From: In(2) contains an object of type line. This object represents K. Axes 4 contains an object of type line. This object represents K.

См. также

|

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