То В этом примере показано, как задать линеаризацию для компонента модели, который не линеаризует хорошо использование линейной модели, идентифицировало использование System Identification Toolbox™. Этот пример требует программного обеспечения Simscape™ Electrical™.
Откройте simulink модель для жесткого диска.
model = 'scdpwmharddrive';
open_system(model)
В этой модели объект жесткого диска управляется текущим источником. Текущий источник реализован схемой, которая управляется сигналом Модуляции ширины импульса (PWM) так, чтобы его выход мог быть настроен рабочим циклом. Для получения дополнительной информации модели жесткого диска, смотрите Цифровое Сервоуправление Жесткого диска (Control System Toolbox).
PWM-управляемые схемы обычно имеют компоненты переключения высокой частоты, такие как транзистор MOSFET в этой модели, среднее поведение которой не четко определено. Таким образом точная линеаризация этого типа схемы проблематична. Когда вы линеаризуете модель от входа рабочего цикла до ошибки положения, результатом является нуль.
Решатель Simscape в этой модели сконфигурирован, чтобы запуститься в локальном режиме решателя. При линеаризации модели сначала выключите локальный решатель.
SimscapeSolver = [model '/PWM driven converter/Solver Configuration']; set_param(SimscapeSolver,'UseLocalSolver','off');
Линеаризуйте модель.
io(1) = linio('scdpwmharddrive/Duty cycle',1,'input'); io(2) = linio('scdpwmharddrive/Hard Disk Model',1,'output'); sys = linearize(model,io)
sys = D = Duty cycle position err 0 Static gain.
Как ожидалось компоненты PWM заставляют систему линеаризовать, чтобы обнулить.
Снова включите локальный решатель для симуляции.
set_param(SimscapeSolver,'UseLocalSolver','on')
Можно оценить частотную характеристику PWM-управляемого текущего источника и использовать результат идентифицировать линейную модель для него. Текущий сигнал имеет дискретный шаг расчета 1e-7
. Поэтому необходимо использовать сигнал sinestream с фиксированным шагом расчета как входной сигнал оценки. Создайте сигнал, который имеет частоты между 2,000 и 200 000 рад/с.
idinput = frest.createFixedTsSinestream(Ts,{2000,200000}); idinput.Amplitude = 0.1;
Задайте точки ввода и вывода для PWM-управляемой схемы и запустите оценку частотной характеристики с помощью sinestream входного сигнала.
pwm_io(1) = linio('scdpwmharddrive/Duty cycle',1,'input'); pwm_io(2) = linio('scdpwmharddrive/PWM driven converter',1,'openoutput'); sysfrd = frestimate(model,pwm_io,idinput);
Чтобы идентифицировать модель второго порядка с помощью данных о частотной характеристике, используйте tfest
от System Identification Toolbox. Затем сравните идентифицированную модель с исходными данными о частотной характеристике.
sysid = ss(tfest(idfrd(sysfrd),2));
bode(sysid,sysfrd,'r*')
Мы использовали данные о частотной характеристике с частотами между 2,000 и 200 000 рад/с. Идентифицированная модель имеет плоский ответ величины для частот, меньших, чем 2 000. Однако наша оценка не включала те частоты. Чтобы проверить, является ли частотная характеристика плоской для более низких частот, оцените ответ с помощью sinestream входного сигнала с частотами 20 и 200 рад/с.
lowfreq = [20 200]; inputlow = frest.createFixedTsSinestream(Ts,lowfreq)
The sinestream input signal: Frequency : [20 200] (rad/s) Amplitude : 1e-05 SamplesPerPeriod : [3141593 314159] NumPeriods : 4 RampPeriods : 0 FreqUnits (rad/s,Hz): rad/s SettlingPeriods : 1 ApplyFilteringInFRESTIMATE (on/off) : on SimulationOrder (Sequential/OneAtATime): Sequential
Комбинация быстрого шага расчета 1e-7
секунды (частота дискретизации на 10 МГц) и ниже создают высокий SamplesPerPeriod
значения. В этом случае, полагая, что каждая частота имеет четыре периода, оценка частотной характеристики регистрировала бы выходные данные приблизительно с 14 миллионами выборок.
Поскольку такой высокий уровень выборки не необходим для анализа частот на 20 и 200 рад/с, можно избежать проблем памяти путем увеличения шага расчета до 1e-4
.
Tslow = 1e-4; wslow = 2*pi/Tslow; inputlow = frest.createFixedTsSinestream(Tslow,wslow./round(wslow./lowfreq)); inputlow.Amplitude = 0.1;
Чтобы сделать модель совместимой с меньшим уровнем выборки, передискретизируйте точку выходных данных с помощью блока перехода уровня в качестве в модифицированной модели:
modellow = 'scdpwmharddrive_lowfreq';
open_system(modellow)
Запустите анализ для низких частот путем выполнения следующей команды:
sysfrdlow = frestimate(modellow,getlinio(modellow),inputlow);
Оценка частотной характеристики может занять несколько минут. В данном примере загрузите результаты оценки.
load scdpwmharddrive_lowfreqresults.mat
Чтобы подтвердить низкочастотный ответ идентифицированной модели, сравните предполагаемый результат с идентифицированной моделью.
bode(sysid,sysfrdlow,'r*')
Закройте низкочастотную модель.
bdclose(modellow)
Чтобы задать линеаризацию PWM-управляемого компонента с помощью подтвержденной идентифицированной модели, задайте линеаризацию PWM управляемая подсистема конвертера.
pwmblock = 'scdpwmharddrive/PWM driven converter'; set_param(pwmblock,'SCDEnableBlockLinearizationSpecification','on'); rep = struct('Specification','sysid',... 'Type','Expression',... 'ParameterNames','',... 'ParameterValues',''); set_param(pwmblock,'SCDBlockLinearizationSpecification',rep); set_param('scdpwmharddrive/Duty cycle','SampleTime','Ts_plant');
Линеаризуйте модель.
set_param(SimscapeSolver,'UseLocalSolver','off') sys = linearize(model,io); set_param(SimscapeSolver,'UseLocalSolver','on')
Можно подтвердить полный результат линеаризации с помощью оценки частотной характеристики, с помощью следующих команд:
valinput = frest.Sinestream(sys); valinput = fselect(valinput,3e3,1e5); valinput.Amplitude = 0.1; sysval = frestimate(model,io,valinput);
Оценка частотной характеристики может занять несколько минут. В данном примере загрузите результаты оценки.
load scdpwmharddrive_valfreqresults.mat bodemag(sys,sysval,'r*')
Результат линеаризации точен, и все резонансы существуют в фактической динамике модели.
Закройте модель.
bdclose('scdpwmharddrive')