exponenta event banner

Цифровой сервоконтроль жесткого диска

В этом примере показано, как использовать Toolbox™ системы управления для проектирования цифрового сервоконтроллера для головки чтения/записи на диске.

Подробные сведения о системе и модели см. в главе 14 «Цифрового управления динамическими системами» Франклина, Пауэлла и Уоркмана.

Модель диска

Ниже представлена картина системы, подлежащей моделированию.

Узел головка-диск (HDA) и исполнительные механизмы моделируются передаточной функцией 10-го порядка, включающей два режима жесткого тела и первые четыре резонанса.

Входным сигналом модели является ток ic, приводящий в действие двигатель звуковой катушки, а выходным сигналом является сигнал ошибки положения (PES, в% от ширины дорожки). Модель также включает небольшую задержку.

Модель диска:

$$ G(s) = G_r(s)G_f(s) $$

$$ G_r(s) = e^{-1e-5s}\frac{1e6}{s(s+12.5)} $$

$$ G_f(s) = \sum_{i=1}^{4} \frac{\omega_i(a_is+b_i\omega_i)}{s^2+2\zeta_i\omega_is+\omega_i^2} $$

Коэффициенты связи, демпфирование и собственные частоты (в Гц) для доминирующих гибких режимов перечислены ниже.

Данные модели:

$$ (a_1,b_1,\zeta_1,\omega_1) = (.0000115,-.00575,.05,70) $$

$$ (a_2,b_2,\zeta_2,\omega_2) = (0,.0230,.005,2200) $$

$$ (a_3,b_3,\zeta_3,\omega_3) = (0,.8185,.05,4000) $$

$$ (a_4,b_4,\zeta_4,\omega_4) = (.0273,.1642,.005,9000) $$

С учетом этих данных создайте номинальную модель сборки головки:

load diskdemo
Gr = tf(1e6,[1 12.5 0],'outputdelay',1e-5);
Gf1 = tf(w1*[a1 b1*w1],[1 2*z1*w1 w1^2]); % first  resonance
Gf2 = tf(w2*[a2 b2*w2],[1 2*z2*w2 w2^2]); % second resonance
Gf3 = tf(w3*[a3 b3*w3],[1 2*z3*w3 w3^2]); % third  resonance
Gf4 = tf(w4*[a4 b4*w4],[1 2*z4*w4 w4^2]); % fourth resonance
G = Gr * (ss(Gf1) + Gf2 + Gf3 + Gf4);     % convert to state space for accuracy

Постройте график реакции Bode модели сборки головки:

cla reset
G.InputName = 'ic';
G.OutputName = 'PES';
h = bodeplot(G);
title('Bode diagram of the head assembly model');
setoptions(h,'Frequnits','Hz','XLimMode','manual','XLim', {[1 1e5]});

Сервоконтроллер

Сервоконтроль используется для поддержания «на дорожке» головки чтения/записи. Сервоконтроллер C (z) является цифровым и предназначен для поддержания PES (смещение от центра дорожки) близко к нулю.

Рассматриваемое здесь возмущение представляет собой ступенчатое изменение d входного тока ic. Ваша задача состоит в том, чтобы сконструировать цифровой компенсатор C (z) с адекватными характеристиками отбраковки возмущений.

Время выборки для цифрового сервопривода составляет Ts = 7e-5 с (14,2 кГц).

Ниже приведены реалистичные характеристики конструкции.

Технические требования к проектированию:

  • Коэффициент усиления с разомкнутым контуром > 20dB при частоте 100 Гц

  • Полоса пропускания > 800 Гц

  • Запас усиления > 10 дБ

  • Запас по фазе > 45 град.

  • Пиковый коэффициент усиления по замкнутому контуру < 4 дБ

Дискретизация модели

Поскольку сервоконтроллер является цифровым, можно выполнять конструирование в дискретной области. Для этого дискретизируйте модель HDA с использованием метода C2D и удержания нулевого порядка (ZOH):

cla reset
Ts = 7e-5;
Gd = c2d(G,Ts);
h = bodeplot(G,'b',Gd,'r'); % compare with the continuous-time model
title('Continuous (blue) and discretized (red) HDA models');
setoptions(h,'Frequnits','Hz','XLimMode','manual','XLim', {[1 1e5]});

Проектирование контроллера

Теперь к конструкции компенсатора. Начните с чистого интегратора 1/( z-1), чтобы гарантировать нулевую ошибку установившегося состояния, постройте график корневого местоположения модели с разомкнутым контуром Gd * C и увеличьте масштаб вокруг z = 1 с помощью опции Увеличить (Zoom In) в меню Сервис (Tools).

C = tf(1,[1 -1],Ts);
h = rlocusplot(Gd*C);
setoptions(h,'Grid','on','XLimMode','Manual','XLim',{[-1.5,1.5]},...
    'YLimMode','Manual','YLim',{[-1,1]});

Из-за двух полюсов при z = 1 цикл сервопривода нестабильен для всех положительных коэффициентов усиления. Чтобы стабилизировать контур обратной связи, сначала добавьте пару нулей около z = 1.

C = C * zpk([.963,.963],-0.706,1,Ts);
h = rlocusplot(Gd*C);
setoptions(h,'Grid','on','XLimMode','Manual','XLim',{[-1.25,1.25]},...
    'YLimMode','Manual','YLim',{[-1.2,1.2]});

Затем отрегулируйте коэффициент усиления контура, щелкнув по локусу и перетащив черный квадрат внутрь единичной окружности. Коэффициент усиления контура отображается в маркере данных. Коэффициент усиления приблизительно 50 стабилизирует контур (установка C1 = 50 * C).

C1 = 50 * C;

Теперь смоделируйте реакцию замкнутого контура на ступенчатое возмущение тока. Возмущение плавно отклоняется, но PES слишком велика (голова отклоняется от центра пути на 45% ширины пути).

cl_step = feedback(Gd,C1);
h = stepplot(cl_step);
title('Rejection of a step disturbance (PES = position error)')
setoptions(h,'Xlimmode','auto','Ylimmode','auto','Grid','off');

Далее рассмотрим отклик Боде с разомкнутым контуром и пределы стабильности. Коэффициент усиления при частоте 100 Гц составляет только 15 дБ (по сравнению со спецификацией 20 дБ), а коэффициент усиления является только 7dB, поэтому увеличение коэффициента усиления контура не является опцией.

margin(Gd*C1)

diskdemo_aux1(1);

Чтобы освободить место для более высокого низкочастотного усиления, добавьте фильтр-пробку вблизи резонанса 4000 Гц.

w0 = 4e3 * 2*pi;                                 % notch frequency in rad/sec
notch = tf([1 2*0.06*w0 w0^2],[1 2*w0 w0^2]);    % continuous-time notch
notchd = c2d(notch,Ts,'matched');                % discrete-time notch
C2 = C1 * notchd;

h = bodeplot(notchd);
title('Discrete-time notch filter');
setoptions(h,'FreqUnits','Hz','Grid','on');

Теперь можно безопасно удвоить коэффициент усиления петли. Результирующие пределы стабильности и коэффициент усиления при 100 Гц находятся в пределах спецификаций.

C2 = 2 * C2;
margin(Gd * C2)

diskdemo_aux1(2);

Отторжение ступенчатого нарушения также значительно улучшилось. PES теперь остается ниже 20% ширины дорожки.

cl_step1 = feedback(Gd,C1);
cl_step2 = feedback(Gd,C2);
stepplot(cl_step1,'r--',cl_step2,'b')
title('2nd-order compensator C1 (red) vs. 4th-order compensator C2 (blue)')

Проверьте, соблюдена ли 3dB пиковая характеристика усиления при T = Gd * C/( 1 + Gd * C) (чувствительность по замкнутому контуру):

Gd = c2d(G,Ts);
Ts = 7e-5;

T = feedback(Gd*C2,1);
h = bodeplot(T);
title('Peak response of closed-loop sensitivity T(s)')

setoptions(h,'PhaseVisible','off','FreqUnits','Hz','Grid','on', ...
            'XLimMode','Manual','XLim',{[1e2 1e4]});

Чтобы увидеть пиковое значение, щелкните правой кнопкой мыши по оси и выберите опцию Пиковая реакция (Peak Response) в меню Характеристики (Characteristics), затем наведите указатель мыши на синий маркер или просто щелкните по нему.

Анализ надежности

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

Вариации параметров:

$$ \omega_2 = 2200 \pm 10\% $$

$$ \omega_3 = 4000 \pm 20\% $$

$$ \zeta_2 = 0.005 \pm 50\% $$

$$ \zeta_3 = 0.05 \pm 50\% $$

Создайте массив 16 моделей, соответствующих всем комбинациям экстремальных значений z2, w2, z3, w3:

[z2,w2,z3,w3] = ndgrid([.5*z2,1.5*z2],[.9*w2,1.1*w2],[.5*z3,1.5*z3],[.8*w3,1.2*w3]);
for j = 1:16,
    Gf21(:,:,j) = tf(w2(j)*[a2 b2*w2(j)] , [1 2*z2(j)*w2(j) w2(j)^2]);
    Gf31(:,:,j) = tf(w3(j)*[a3 b3*w3(j)] , [1 2*z3(j)*w3(j) w3(j)^2]);
end
G1 = Gr * (ss(Gf1) + Gf21 + Gf31 + Gf4);

Дискретизируйте эти 16 моделей одновременно и посмотрите, как изменения параметров влияют на отклик с разомкнутым контуром. Примечание: Можно щелкнуть любую кривую, чтобы определить базовую модель.

Gd = c2d(G1,Ts);
h = bodeplot(Gd*C2);

title('Open-loop response - Monte Carlo analysis')
setoptions(h,'XLimMode','manual','XLim',{[8e2 8e3]},'YLimMode','auto',...
    'FreqUnits','Hz','MagUnits','dB','PhaseUnits','deg','Grid','on');

Постройте график производительности по отклонению ступенчатого возмущения для следующих 16 моделей:

stepplot(feedback(Gd,C2))
title('Step disturbance rejection - Monte Carlo analysis')

Все 16 ответов почти идентичны: наша конструкция сервопривода надежна!