То В этом примере показано, как задать линеаризацию для компонента модели, который не линеаризует хорошо использование линейной модели, идентифицировало использование System Identification Toolbox™. Этот пример требует программного обеспечения Simscape™ Electrical™.
Откройте модель Simulink® для жесткого диска.
model = 'scdpwmharddrive';
open_system(model)
В этой модели объект жесткого диска управляется текущим источником. Текущий источник реализован схемой, которая управляется сигналом модуляции ширины импульса (PWM) так, чтобы его выход мог быть настроен рабочим циклом. Для получения дополнительной информации модели жесткого диска, смотрите Цифровое Сервоуправление Жесткого диска.
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);
Чтобы идентифицировать модель второго порядка с помощью данных о частотной характеристике, используйте функцию System Identification Toolbox tfest
.
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
Чтобы подтвердить низкочастотный ответ идентифицированной модели, сравните предполагаемый результат с идентифицированной моделью.
bode(sysid,sysfrdlow,'r*')
Закройте низкочастотную модель.
bdclose(modellow)
Чтобы задать линеаризацию PWM-управляемого компонента с помощью подтвержденной идентифицированной модели, задайте линеаризацию PWM-управляемой подсистемы конвертера.
Для этого сначала включите спецификацию линеаризации блока для блока конвертера.
pwmblock = 'scdpwmharddrive/PWM driven converter'; set_param(pwmblock,'SCDEnableBlockLinearizationSpecification','on');
Задайте sysid
как линеаризация блока с помощью выражения MATLAB®.
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 bodemag(sys,sysval,'r*')
Результат линеаризации точен, и все резонансы существуют в фактической динамике модели.
Закройте модель.
bdclose('scdpwmharddrive')
frestimate
| tfest
(System Identification Toolbox)