В этом примере показов, как задать линеаризацию для компонента модели, который плохо линеаризируется, используя линейную модель, идентифицированную с помощью System Identification Toolbox™. Этот пример требует Simscape™ Electrical™ программного обеспечения.
Откройте модель simulink для жесткого диска.
model = 'scdpwmharddrive';
open_system(model)
В этой модели объекта жесткого диска управляется источником тока. Источник тока реализован схемой, которая управляется сигналом модуляции ширины импульса (PWM), так что его выход может быть отрегулирован коэффициентом заполнения. Для получения дополнительной информации о модели жесткого диска смотрите Digital Servo Control of a Hard-Disk Drive.
Управляемые ШИМ схемы обычно имеют высокую частоту коммутационных компонентов, таких как транзистор 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
. Поэтому вам нужно использовать сигнал синестрема с фиксированным шагом расчета в качестве входного сигнала оценки. Создайте сигнал, который имеет частоты от 2000 до 200 000 рад/с.
idinput = frest.createFixedTsSinestream(Ts,{2000,200000}); idinput.Amplitude = 0.1;
Определите входную и выходные точки для управляемой ШИМ схемы и запустите оценку частотной характеристики с помощью входного сигнала синестриама.
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*')
Мы использовали данные частотной характеристики с частотами от 2000 до 200 000 рад/с. Идентифицированная модель имеет плоскую амплитудную характеристику для частот меньше 2000. Однако наша оценка не включала эти частоты. Чтобы проверить, является ли частотная характеристика плоской для более низких частот, оцените характеристику с помощью входного сигнала синестрейма с частотами 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)
Чтобы задать линеаризацию управляемого ШИМ компонента с помощью проверенной идентифицированной модели, задайте линеаризацию управляемой ШИМ подсистемы преобразователя.
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')
frestimate
| tfest
(System Identification Toolbox)