В этом примере показано, как изменить модель объекта управления Simscape™, которая является непрерывным временем и содержит нелинейные элементы, чтобы сгенерировать совместимую с HDL модель Simulink®. Можно затем сгенерировать HDL-код для этой модели Simulink.
HDL Workflow Advisor Simscape преобразует модель объекта управления Simscape в совместимую с HDL модель реализации, из которой вы генерируете HDL-код. В некоторых случаях модель объекта управления Simscape не может быть совместимой для генерации модели реализации. В таких случаях вы сначала изменяете модель объекта управления Simscape и затем запускаете Советника.
Этот пример иллюстрирует, как изменить постоянный магнит синхронная модель электродвигателя для совместимости с HDL Workflow Advisor Simscape. Модель является непрерывным временем и содержит много нелинейных компонентов. Вы изменяете эту модель к переключенной линейной модели дискретного времени и затем запустите HDL Workflow Advisor Simscape.
Постоянный магнит синхронная модель электродвигателя является физической системой в Simscape. Чтобы открыть модель, запустите эту команду:
open_system('ee_pmsm_drive')
Сохраните эту модель как ee_pmsm_drive_original.slx.
open_system('ee_pmsm_drive_original') set_param('ee_pmsm_drive_original','SimulationCommand','Update')
Модель содержит Постоянный магнит синхронную машину (PMSM), и инвертор измерил это, можно использовать в типичном гибридном автомобиле. Инвертор соединяется с батареей транспортного средства. Чтобы видеть, как модель работает, симулируйте модель.
sim('ee_pmsm_drive_original') open_system('ee_pmsm_drive_original/Scope')
Эта модель является непрерывной системой времени. Чтобы использовать эту модель с HDL Workflow Advisor Simscape, преобразуйте модель в дискретную систему. Вы затем изменяете модель, чтобы использовать блоки, которые совместимы для Simscape с рабочим процессом HDL.
1. Сконфигурируйте опции решателя для генерации HDL-кода при помощи блока Solver Configuration. В параметрах блоков:
Выберите Use локальный решатель.
Используйте Backward Euler
как тип Решателя.
Задайте дискретный Шаг расчета, Ts
.
2. Измените настройки Solver модели. На вкладке Modeling нажмите Model Settings. На панели Решателя:
Установите тип выбора Решателя на Fixed-Step
.
Установите решатель на discrete (no continuous states)
.
Установите размер Фиксированного шага (основной шаг расчета) к Ts
.
В разделе Tasking и опциях шага расчета, очистите Обработку каждый дискретный уровень как отдельная задача.
3. Измените настройки отображения своей модели. На вкладке Debug выберите Information Overlays> Sample Time> Colors. Рассмотрите Легенду Шага расчета для блоков, которые имеют шаг расчета кроме Ts
, или запуститесь в непрерывном масштабе времени. Дважды кликните блок Step и установите Шаг расчета на Ts
.
4. Для более быстрой симуляции проигнорируйте параметры нулевой последовательности PMSM. Дважды кликните блок Permanent Magnet Synchronous Motor и установите Нулевую Последовательность на Exclude
.
Модель является теперь фиксированным шагом дискретная система. Симулируйте модель и сравните Спрос на Крутящий момент и Моторные сигналы Крутящего момента в Инспекторе Данных моделирования. Сигналы отличаются больше, чем уровни терпимости к концу симуляции, но в приемлемых пределах.
Вы используете двухступенчатый процесс, чтобы преобразовать модель объекта управления Simscape в совместимую с HDL модель реализации:
Реализуйте модель Simulink, которая заменяет нелинейную часть алгоритма Simscape при помощи эквивалентных блоков Simulink.
Измените эту модель, чтобы использовать блоки, которые совместимы для Simscape с рабочим процессом HDL.
1. Чтобы сделать модель объекта управления Simscape Совместимой с HDL, идентифицируйте присутствие любых нелинейных компонентов или блоков в модели:
simscape.findNonlinearBlocks('ee_pmsm_drive_original')
Found network that contains nonlinear equations in the following blocks: {'ee_pmsm_drive_original/Permanent Magnet Synchronous Motor'} The number of linear or switched linear networks in the model is 0. The number of nonlinear networks in the model is 1. ans = 1x1 cell array {'ee_pmsm_drive_original/Permanent Magnet Synchronous Motor'}
Модель объекта управления Simscape имеет нелинейный блок, который является блоком PMSM.
2. Блок PMSM, блок Encoder, резистор Gmin и блок Motor & Load Inertia заменяются блоками Simulink, которые выполняют эквивалентный алгоритм.
Чтобы реализовать блок Electrical Interface, вы используете Управляемые Текущие Источники.
Интерфейс к PMSM изолируется от реализации. Чтобы реализовать PMSM при помощи блоков Simulink, вы используете Электрические уравнения и Механические уравнения. В блоках Преобразования парка Transform и парка Inverse устраните блоки Синуса и Косинуса.
ee_pmsm_drive_singleSL модель иллюстрирует, как вы изменяете исходную модель ee_pmsm_drive_original и готовите модель к готовности с HDL Workflow Advisor Simscape.
1. Чтобы изменить модель Simscape для совместимости с генерацией модели реализации HDL, идентифицируйте часть алгоритма Simscape, что вы хотите работать на FPGA. В этом примере можно запустить трехфазный инвертор, электрический интерфейс, PWM и Постоянный магнит Синхронный Двигатель (Simulink) на FPGA.
2. После того, как блоки, чтобы работать на FPGA были идентифицированы, блоки помещаются в подсистеме верхнего уровня. Эта подсистема является DUT (Проект Под Тестом) и содержит блоки, вы работаете на FPGA после генерации модели реализации HDL. Afer, запускающий HDL Workflow Advisor Simscape, эта подсистема заменяется алгоритмом HDL. Эта часть модели Simscape должна запуститься на уровне самой быстрой частоты дискретизации. Блоки Перехода уровня добавляются, чтобы сверхдискретизировать проект.
3. Чтобы сохранить использование ресурсов на целевом компьютере, блоки Преобразования типа данных добавляются, чтобы преобразовать модель, чтобы использовать single
типы данных.
ee_pmsm_drive_singleSL модель показывает, как эти блоки помещаются в подсистеме верхнего уровня Subsystem1, который является DUT. Блоки в подсистеме запускаются на более быстром уровне.
load_system('ee_pmsm_drive_singleSL') set_param('ee_pmsm_drive_singleSL','SimulationCommand','update') open_system('ee_pmsm_drive_singleSL/Subsystem1')
В ee_pmsm_drive_singleSL модели трехфазный инвертор и электрический интерфейс помещаются в Инверторе Simscape и Интерфейсной подсистеме.
open_system('ee_pmsm_drive_singleSL/Subsystem1/Simscape Inverter and Interface')
Предыдущий раздел описывает изменения, которые были применены к подсистеме маскированной, Постоянный магнит Синхронный Двигатель (Simulink).
1. Интегратор с Перенесенным состоянием (Дискретный или Непрерывный) блок не совместим для генерации HDL-кода. Этот блок был заменен Перенесенной подсистемой DTI состояния.
PMSMSubsystem = 'ee_pmsm_drive_singleSL/Subsystem1/Permanent Magnet Synchronous Motor (Simulink)'; open_system(PMSMSubsystem, 'force')
open_system([PMSMSubsystem, '/Wrapped State DTI'])
2. Уменьшать место области FPGA для:
Блок парк Transform, Кларк Трэнсформ и Кларк с блоками парка Angle Transform добавляются.
Обратный блок Park Transform, парк Inverse Кларку Энглу Трэнсформу и Инверсии блоки Кларка Трэнсформа добавляются.
open_system([PMSMSubsystem, '/Park Transform'])
open_system([PMSMSubsystem, '/Inverse Park Transform'])
3. Для блоков Интегратора Дискретного времени в этой подсистеме Шаг расчета установлен в -1
, Получите значение к Ts
, и метод Интегратора к Accumulation:Forward Euler
. Можно просмотреть эти параметры блоков программно путем выполнения этих команд.
blockDTI = find_system(PMSMSubsystem, 'LookUnderMasks', 'on', ... 'blocktype', 'DiscreteIntegrator'); for n = 1:numel(blockDTI) Integpath = blockDTI(n); Integname = get_param(Integpath, 'Name'); stime = num2str(get_param(blockDTI{n}, 'SampleTime')); gval = num2str(get_param(blockDTI{n}, 'gainval')); integmethod = num2str(get_param(blockDTI{n}, 'IntegratorMethod')); disp('----------------------------------------------------') disp(Integpath) disp(['Sample time: ', stime, ' Gain: ', gval, ... ' Integration method: ', integmethod]) end disp('----------------------------------------------------')
---------------------------------------------------- {'ee_pmsm_drive_singleSL/Subsystem1/Permanent Magnet...'} Sample time: -1 Gain: Ts Integration method: Accumulation: Forward Euler ---------------------------------------------------- {'ee_pmsm_drive_singleSL/Subsystem1/Permanent Magnet...'} Sample time: -1 Gain: Ts Integration method: Accumulation: Forward Euler ----------------------------------------------------
Дальнейшие изменения применяются к верхнему уровню модели.
Электронные часы, которые имеют Шаг расчета Ts
был добавлен и соединен с блоком Display.
Блок Three-Phase Current Sensor Simscape заменяется путем питания контроллера с трехфазными токами, прибывающими из модели PMSM.
Этот рисунок иллюстрирует верхний уровень модели с вышеупомянутыми изменениями.
open_system('ee_pmsm_drive_singleSL')
Чтобы открыть HDL Workflow Advisor Simscape, запустите sschdladvisor
функционируйте для своей модели:
sschdladvisor('ee_pmsm_drive_singleSL')
Чтобы сгенерировать модель реализации, в HDL Workflow Advisor Simscape, оставляют настройки по умолчанию и затем запускают задачи. Чтобы открыть модель реализации, в Сгенерировать задаче модели реализации, щелкают по ссылке.
В этом примере модель реализации была изменена для развертывания на платформах ввода-вывода FPGA Speedgoat. Модель является resaved как gmStateSpaceHDL_ee_pmsm_drive_GenerateHDL.
Реконфигурировать модель реализации с одинарной точностью для генерации HDL-кода:
1. Запустите hdlsetup
функция на модели.
hdlsetup('gmStateSpaceHDL_ee_pmsm_drive_GenerateHDL')
2. Установка решателя модели, размер Фиксированного шага, изменяется к Ts/5
потому что Количеством по умолчанию итераций решателя является 5
.
3. Блок Subsystem1 содержит блоки, что вы работаете на FPGA. Инвертор Simscape и Интерфейсная подсистема заменяются блоком Subsystem HDL. Блок Subsystem HDL содержит Алгоритм HDL, который содержит реализацию HDL алгоритма Simscape. Чтобы видеть реализацию алгоритма HDL, откройте этот блок.
model_name = 'gmStateSpaceHDL_ee_pmsm_drive_GenerateHDL'; dut_name = 'gmStateSpaceHDL_ee_pmsm_drive_GenerateHDL/Subsystem1'; load_system(model_name) set_param(model_name,'SimulationCommand','Update') open_system([dut_name, '/HDL Subsystem'])
open_system([dut_name, '/HDL Subsystem/HDL Algorithm'])
4. Подсистема Алгоритма HDL имеет Допустимое, сигнализируют. Постоянный магнит Синхронный Двигатель (Simulink), подсистема помещается в Enabled Подсистеме и vs_LL входном порту, соединяется с Допустимым, сигнализирует.
open_system(dut_name)
5. Переместите блок в подсистеме, которая первоначально содержала алгоритм Simscape к верхнему уровню модели.
Этот рисунок иллюстрирует верхний уровень модели с вышеупомянутыми изменениями.
open_system(model_name)
Прежде чем вы сгенерируете HDL-код, чтобы сравнить выход сгенерированной модели после генерации кода с модифицированной моделью объекта управления Simscape, задайте генерацию модели валидации.
hdlset_param(model_name, 'GenerateValidationModel', 'on');
Чтобы узнать больше, см. Сгенерированную Модель Модели и Валидации.
Чтобы сгенерировать HDL-код, запустите эту команду:
makehdl('gmStateSpaceHDL_ee_pmsm_drive_GenerateHDL/HDL Subsystem')
По умолчанию HDL Coder генерирует код VHDL. Чтобы сгенерировать код Verilog, запустите эту команду:
makehdl('gmStateSpaceHDL_ee_pmsm_drive_GenerateHDL/HDL Subsystem', 'TargetLanguage', 'Verilog')
Генератор кода сохраняет сгенерированный HDL-код и модель валидации в hdlsrc
папка. Сгенерированный код сохранен как HDL_Subsystem_tc.vhd
. Чтобы видеть информацию об использовании ресурсов вашего проекта, просмотрите Отчет Генерации кода.
Чтобы открыть модель валидации, после того, как вы сгенерируете HDL-код, открывают gm_gmStateSpaceHDL_ee_pmsm_drive_GenerateHDL_vnl.slx модель.
В модели реализации HDL Subsystem1 содержит блоки, вы работаете на FPGA. Можно запустить HDL Workflow Advisor на этой Подсистеме, чтобы развернуть алгоритм HDL на платы FPGA в целевых платформах Speedgoat. Для примера смотрите Оборудование в цикле (HIL) Реализация Модели Simscape™ на Модулях ввода-вывода FPGA Speedgoat.