Поиск и устранение проблем преобразования синхронного двигателя с постоянными магнитами Simscape в HDL-совместимую модель Simulink

Этот пример показывает, как изменить Simscape™ модель объекта управления, которая является непрерывным временем и содержит нелинейные элементы, чтобы сгенерировать HDL-совместимую модель Simulink ®. Затем можно сгенерировать HDL-код для этой модели Simulink.

Введение

Simscape HDL Workflow Advisor преобразует модель объекта управления Simscape в HDL-совместимую модель реализации, из которой вы генерируете HDL-код. В некоторых случаях модель объекта управления Simscape может быть несовместима с генерацией модели реализации. В таких случаях сначала вы изменяете модель объекта управления Simscape, а затем запускаете Advisor.

Этот пример иллюстрирует, как изменить синхронную модель электродвигателя с постоянными магнитами для совместимости с Simscape HDL Workflow Advisor. Модель является непрерывным временем и содержит много нелинейных компонентов. Вы изменяете эту модель в линейную модель с переключением в дискретном времени, а затем запускаете Simscape HDL Workflow Advisor.

Модель электродвигателя с постоянными магнитами

Модель электродвигателя с постоянными магнитами является физической системой в 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')

Эта модель является системой непрерывного времени. Чтобы использовать эту модель с Simscape HDL Workflow Advisor, преобразуйте модель в дискретную систему. Затем вы измените модель, чтобы использовать блоки, совместимые с рабочим процессом Simscape to HDL.

Преобразуйте модель непрерывного времени в дискретную модель с фиксированным шагом

1. Сконфигурируйте опции решателя для генерации HDL-кода с помощью блока Solver Configuration (Simscape). В параметрах блоков:

  • Выберите Использовать локальный решатель.

  • Использование Backward Euler как тип Решателя.

  • Задайте дискретный Шаг расчета, Ts.

2. Измените настройки решателя модели. На вкладке Моделирование (Modeling) щелкните Настройки модели (Model Settings). На панели Решатель (Solver):

  • Установите тип выбора Решателя на Fixed-Step.

  • Установите решатель на discrete (no continuous states).

  • Установите размер Фиксированного шага (основной шаг расчета) равным Ts.

  • В разделе Задача и шаг расчета опций, очистить Обработать каждую дискретную скорость как отдельную задачу.

3. Измените настройки отображения модели. На вкладке Debug выберите Information Overlays > Шаг расчета > Colors. Проверьте Шаг расчета Legend на блоки, которые имеют шаг расчета, отличное от Ts, или запускается в непрерывной временной шкале. Дважды кликните блок Step и установите для Шага расчета значение Ts.

4. Для более быстрой симуляции игнорируйте параметры нулевой последовательности PMSM. Дважды кликните блок Permanent Magnet Synchronous Motor и установите значение Zero Sequence на Exclude.

Теперь модель является дискретной системой с фиксированным шагом. Симулируйте модель и сравните сигналы Torque Demand и Крутящего момента двигателя в Данные моделирования Inspector. Сигналы отличаются больше, чем уровни допуска к концу симуляции, но находятся в допустимых пределах.

Вы используете двухэтапный процесс, чтобы преобразовать модель объекта управления Simscape в HDL-совместимую модель реализации:

  1. Реализуйте модель Simulink, которая заменяет нелинейную часть алгоритма Simscape с помощью эквивалентных блоков Simulink.

  2. Измените эту модель, чтобы использовать блоки, совместимые с рабочим процессом Simscape to HDL.

Замените нелинейные блоки Simscape на эквивалентную реализацию Simulink

1. Чтобы сделать модель объекта управления Simscape HDL-Compatible, идентифицируйте наличие любых нелинейных компонентов или блоков в модели:

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, вы используете Электрические Уравнения и Механические Уравнения. Внутри блоков Park Transform и Inverse Park Transform устраните блоки Sine и Cosine.

Идентифицируйте блоки Simscape, которые запускаются на FPGA и реструктурируют модель Simscape

Модель ee_pmsm_drive_singleSL иллюстрирует, как вы изменяете исходную модель ee_pmsm_drive_original и готовите модель к готовности с помощью Simscape HDL Workflow Advisor.

1. Чтобы изменить модель Simscape для совместимости с генерацией модели реализации HDL, идентифицируйте часть алгоритма Simscape, которую вы хотите запустить в FPGA. В этом примере можно запустить трехфазный инвертор, электрический интерфейс, PWM и синхронный двигатель с постоянными магнитами (Simulink) на FPGA.

2. После того, как блоки для запуска в FPGA были идентифицированы, блоки помещаются в подсистему верхнего уровня. Эта подсистема является DUT (Design Under Test) и содержит блоки, которые вы запускаете в FPGA после генерации модели реализации HDL. После запуска Simscape HDL Workflow Advisor эта подсистема заменяется алгоритмом HDL. Эта часть модели Simscape должна запускаться с самой быстрой частотой дискретизации. Блоки Rate Transition добавляются в upsample проекта.

3. Чтобы сохранить использование ресурсов на целевом компьютере, добавляются блоки Data Type Conversion, чтобы преобразовать модель в использование 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 Inverter и Interface.

open_system('ee_pmsm_drive_singleSL/Subsystem1/Simscape Inverter and Interface')

Изменение подсистемы синхронного двигателя с постоянными магнитами для совместимости с HDL

В предыдущем разделе описываются изменения, которые были применены к маскированной подсистеме, синхронному двигателю с постоянными магнитами (Simulink).

1. Блок Integrator Wrapped State (дискретный или непрерывный) несовместим с генерацией HDL-кода. Этот блок был заменен подсистемой DTI обернутого состояния.

PMSMSubsystem = 'ee_pmsm_drive_singleSL/Subsystem1/Permanent Magnet Synchronous Motor (Simulink)';
open_system(PMSMSubsystem, 'force')

open_system([PMSMSubsystem, '/Wrapped State DTI'])

2. Для уменьшения площади ПЛИС для:

  • Добавлены блоки Park Transform, Clarke Transform и Clarke to Park Angle Transform.

  • Добавлены блоки Обратного Преобразования Парка, Обратного Преобразования Угла Кларка и Обратного Преобразования Кларка.

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
----------------------------------------------------

Подготовьте модель и запустите Simscape HDL Workflow Advisor

На верхний уровень модели:

  1. Цифровой синхроимпульс, который имеет Шаг расчета Ts был добавлен и подключен к блоку Display.

  2. Блок Simscape трехфазного датчика тока заменяется подачей контроллера трехфазными токами, поступающими от модели PMSM.

Этот рисунок иллюстрирует верхний уровень модели с вышеуказанными изменениями.

open_system('ee_pmsm_drive_singleSL')

Чтобы открыть Simscape HDL Workflow Advisor, запустите sschdladvisor функция для вашей модели:

sschdladvisor('ee_pmsm_drive_singleSL')

Чтобы сгенерировать модель реализации, в Simscape HDL Workflow Advisor оставьте настройки по умолчанию и затем запустите задачи. Чтобы открыть модель реализации, в задаче Генерация модели реализации, щелкните ссылку.

Перенастройте модель реализации для генерации HDL-кода

В этом примере модель реализации была изменена для развертывания на платформах ввода-вывода Speedgoat FPGA. Модель сохранена следующим gmStateSpaceHDL_ee_pmsm_drive_GenerateHDL.

Чтобы перенастроить модель реализации с одной точностью для генерации HDL-кода:

1. Запуск hdlsetup функция на модели.

hdlsetup('gmStateSpaceHDL_ee_pmsm_drive_GenerateHDL')

2. Настройка решателя модели, Fixed-step size, изменена на Ts/5 потому что по умолчанию Количество итераций решателя 5.

3. Блок Subsystem1 содержит блоки, которые вы запускаете в FPGA. Подсистема Simscape Inverter и Interface заменяется блоком HDL Subsystem. HDL- Блока Subsystem содержит алгоритм 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 имеет сигнал Valid Out. Подсистема синхронного двигателя с постоянными магнитами (Simulink) помещается в активную подсистему, и vs_LL входной порт соединяется с сигналом Valid Out.

open_system(dut_name)

5. Переместите блок в подсистему, которая первоначально содержала алгоритм Simscape, на верхний уровень модели.

Этот рисунок иллюстрирует верхний уровень модели с вышеуказанными изменениями.

open_system(model_name)

Сгенерируйте HDL-код

Прежде чем вы сгенерируете 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.

Развертывание синхронного двигателя с постоянными магнитами на модулях ввода-вывода FPGA Speedgoat

В модели реализации HDL Subsystem1 содержит блоки, которые вы запускаете на FPGA. Можно запустить HDL Workflow Advisor на этой подсистеме, чтобы развернуть алгоритм HDL на платах FPGA на целевых платформах Speedgoat. Для получения примера смотрите Оборудование в цикле Реализация модели Simscape на ввод-вывод модулях Speedgoat FPGA.

См. также

Функции

Похожие темы