Этот пример показывает, как Simulink® Real-Time™ может управлять целевым приложением не только с прерываниями на основе его внутреннего таймера, но также и с прерываниями на основе внешнего сигнала.
В самом простом варианте использования мы хотели бы запуститься, приложение реального времени синхронизировалось 1-1 с внешним сигналом; например, каждый раз, когда мы получаем возрастающее ребро от внешнего сигнала, прерывание сгенерировано, который затем запускает один шаг приложения. Используя замкнутый цикл фазы (PLL), мы можем управлять приложением реального времени на частоте, которая отличается от входной частоты, но в то же время синхронизировалась с внешним сигналом. Например, у нас может быть внешний сигнал на уровне 600 Гц, но мы хотели бы запустить приложение на уровне 2 кГц.
Этот пример использует основанный на FPGA модуль ввода-вывода Speedgoat (Speedgoat IO331) и цифровой PLL, смоделированный в Simulink®. Из модели HDL Coder™ генерирует и синтезирует HDL-код. Можно использовать любой модуль ввода-вывода FPGA, поддержанный Simulink Real-Time и HDL Coder, который встречает скорости, размеру и требованиям схемы контактов модели.
HDL Coder™
DSP System Toolbox™
Для платы IO331 HDL Workflow Advisor требует комплекта инструментальных средств Xilinx® ISE. Чтобы установить этот комплект инструментальных средств, в Командном окне, введите:
hdlsetuptoolpath('ToolName', 'Xilinx ISE', 'ToolPath', toolpath)
где toolpath
является полным путем к исполняемому файлу инструмента синтеза.
Для требований комплекта инструментальных средств других плат смотрите Поддерживаемые Сторонние программы и Оборудование (HDL Coder).
PLL требуется, чтобы блокировать сгенерированную частоту, поскольку желаемая частота является любым произвольным отношением (synN/synM в некоторой области значений) входной частоты. Мы сначала создадим модель с PLL в 'Подсистеме' синтеза частоты. Модель содержит блоки верхнего уровня, которые помогают симуляции модели на рабочем столе, а также предоставляют входные параметры FPGA по порядку к настройкам параметров при выполнении в режиме реального времени на цели.
Внешний сигнал франка частоты вводится в одну из строк ввода-вывода TTL, сконфигурированных, как введено. Мы хотим управлять моделью на частоте. synN и synM являются целыми числами, которые могут отличаться, чтобы получить частоты, отличающиеся от франка. Модель dslrtExtDIOInt
использует замкнутый цикл фазы (PLL), чтобы заблокировать частоту, сгенерированную блоком NCO HDL Optimized к желаемой частоте Fd.
Для получения дополнительной информации о синтезе частоты с помощью PLLs видят, Система связи пример Toolbox™ Основанный на PLL Синтез Частоты (требует Communications System Toolbox).
open_system(fullfile(matlabroot,'toolbox','rtw','targets','xpc','xpcdemos','dslrtExtDIOInt'))
Подсистема синтеза Частоты состоит из подсистемы детектора Фазы, осциллятора с программным управлением (NCO) и делителей частоты. HDL-код будет сгенерирован для этой подсистемы.
Подсистема детектора фазы сравнивает фазу двух сигналов при помощи блока XOR. 'countDutyCycle' функциональный блок реализует контурный фильтр в форме подсчета количества высоких выборок между двумя возрастающими ребрами XOR вывод. Это также сравнивает вхождение возрастающих ребер этих двух входных сигналов к подсистеме в порядке предоставить знак разности фаз.
x = [-5/4 -1 -(1/2+eps) -1/2 0 1/2 (1/2+eps) 1 5/4]; y = [ -.5 0 1 -1 0 1 -1 0 .5]; h = plot(x,y); a=get(h, 'parent'); a.XTickLabel = { '' '-\pi' '-\pi/2' '0' '\pi/2' '\pi' ''}; a.YTick = [-1 0 1]; a.YTickLabel = {'-N' '0' 'N'}; a.XGrid ='on'; a.YGrid ='on'; xlabel('Phase difference (rad)'); ylabel('Output (Duty cycle in number of samples)'); title('Phase Detector output'); snapnow;
Детектор фазы вывод повторяется за пределами области значений, указывающей на рабочий диапазон детектора XOR. Из-за этого входная частота должна быть в определенном рабочем диапазоне PLL. Значение N на оси Y зависит от мгновенной частоты входного сигнала и центральной частоты ФК. Область значений выведена в разделе 'PLL working frequency range'.
Оптимизированный HDL NCO: осциллятор с программным управлением генерирует статическую частоту, как определено входом 'Center freq'. Когда входной сигнал 'Касательно В' отличается от центральной частоты, 'Phase Detector', вывод генерирует сигнал восполнить различие в частоте. Сгенерированный сигнал исправления добавляется к значению для центральной частоты, чтобы произвести соответствующую частоту. Эта подсистема используется только для отладки и контроля и может быть безопасно упущена из приложения.
Делители частоты: Они делят частоту входа прямоугольной волны в 'Касательно В' и сгенерированный сигнал произвести необходимое преобразование частоты.
Эта подсистема содержит блоки, которые решают, что временной интервал между последовательной выборкой поражает и распечатывает мгновенную частоту выполнения модели в килогерце. Для точного измерения блок 'CPU Clk Freq' должен быть установлен в частоту тактовой частоты ЦП цели, разделенной на 1e3 (для преобразования в kHz).
Следующее является списком переменных и значений по умолчанию, используемых моделью (заданный в коллбэке модели PreLoadFcn):
synN = 3; % frequency division ratio synM = 2; % frequency division ratio Fs = 33e6; % Sampling Frequency Fr = 16.5e3; % Input frequency = 16.5 kHz df = .5; % Frequency resolution = .5 Hz minSFDR = 96; % Spurious free dynamic range >= 96 dB
Ts = 1/Fs; % Sample period = 3.0303e-08 seconds Fc = Fr * synN / synM; % Oscillator Center frequency = 24.75 kHz
% For simulation only: inputPeriod = round(Fs/Fr); % Ensure period is even for the pulse generator to produce 50% duty cycle inputPeriod = inputPeriod + mod(inputPeriod, 2); % 'Period' parameter of Pulse Generator block = 1334
% Calculate number of accumulator bits required for the frequency resolution. Nacc = ceil(log2(1/(df*Ts))); % NCO Accumulator word length = 26 actdf = 1/(Ts*2^Nacc); % Actual frequency resolution achieved = 0.4917 Hz
% Calculate number of quantizer accumulator bits required from the SFDR requirement. Nqacc = ceil((minSFDR-12)/6); % number of quantizer accumulator bits = 14
% Calculate the phase increment. inc = round(Fc*Ts*2^Nacc); % inc = 75497
Рабочий диапазон этого PLL может быть выведен можно следующим образом:
Пределы в-/2 и/2 достигнуты, когда задержка сгенерированного сигнала соответствует половине количества выборок в один период сигналов. Это может произойти на частоте и выше и ниже центральной частоты, соответственно. Рассмотрите более низкую частоту. Чтобы моделировать эту частоту с помощью импульсного генератора блокируются, переменная 'inputPeriod' должна быть увеличена значением 'x'. В результате:
Детектор Фазы производит вывод, равный рабочему циклу в области значений или одном периоде сравниваемой прямоугольной волны. Поправочный коэффициент =. Это объединено со значением шага фазы, соответствующим центральной частоте, чтобы произвести частоту, равную входу. Приравнивание двух предыдущих результатов дает:
Решение этого квадратного уравнения и пущение меньшего корня дают, от которого вычисляется:
x_l = min(roots([1 -(inc - (2*inputPeriod)) - (inputPeriod*(inc - inputPeriod)) + (2^Nacc*(synN/synM))])); % The lower bound for the frequency range is: Fl = Fs / (inputPeriod + x_l);
Так же верхняя связанная частота может быть вычислена:
x_h = min(roots([1 -(inc + (2*inputPeriod)) +(inputPeriod*(inc + inputPeriod))-(2^Nacc*(synN/synM))])); % The upper bound for the frequency range is: Fh = Fs / (inputPeriod - x_h);
Щелкните здесь, чтобы открыть модель: dslrtExtDIOInt
.
Для этого примера используемое устройство является платой FPGA Speedgoat IO331. Процедура генерации HDL-кода как описана в примере Цифровой ввод-вывод с Советом FPGA Speedgoat. Различия включают используемую плату и отображения контакта ввода и вывода, которые описаны в этом разделе.
Целевое устройство
Установите целевую платформу на FPGA Speedgoat IO331 и проверяйте, что HDL Workflow Advisor устанавливает инструмент синтеза на Xilinx® ISE Design Suite. Эта установка конфигурирует характеристики платы и инструмент синтеза, используемый в последующих задачах.
Целевой интерфейс
Ссылочный сигнал вводится в первом контакте (контакт 0). NCO вывод сопоставлен как 'Прерывание от FPGA'. Этот сигнал становится прерыванием для управления образцовым выполнением на центральном процессоре.
Целевая частота
Модель разработана с помощью фиксированного размера шага, соответствующего частоте дискретизации 33 МГц. Установите 'Целевую Частоту' на это значение. Это - частота, на которой 'Подсистема' синтеза частоты будет работать на FPGA.
Сгенерируйте модель FPGA
Модель, сгенерированная HDL Workflow Advisor, теперь готова быть созданной и загруженной на цель. Однако, поскольку намерение состоит в том, чтобы запустить приложение реального времени вокруг центральной частоты ФК, который уместно изменить шаг расчета сгенерированной модели к 1/ФК прежде, чем создать и загрузить. Это может быть сделано путем выполнения:
Ts = 1/Fc;
После того, как вы установили Ts:
Установите Генерацию кода параметра конфигурации> Конечный файл к grt.tlc
.
Щелкните правой кнопкой по Download to Target> Generate Simulink Real-Time Interface, и затем нажмите Run к выбранной задаче.
Это действие производит сгенерированную модель, gm_dslrtExtDIOInt_slrt
.
В диалоговом окне Configuration Parameters сгенерированной модели сконфигурируйте целевой компьютер, который будет управляться прерыванием платы FPGA:
Установите Генерацию кода на Конечный файл к slrt.tlc
.
Установите Опции Simulink Real-Time> источник Прерывания В реальном времени к Auto (PCI only)
.
Установите плату ввода-вывода, генерирующую прерывание к Speedgoat IO331
.
Можно теперь создать и загрузить сгенерированную модель на целевой компьютер как приложение реального времени.
Значения, используемые в этом примере, заставляют входную частоту быть сосредоточенной на уровне 16,5 кГц. Целевые осциллографы показывают сигнал исправления и мгновенную частоту, когда частота входного сигнала увеличена с 16 кГц до 17 кГц. Приложение реального времени выполняется на частоте, которая является близко к.
Эта модель может обработать только квадратные импульсы, которые имеют аппроксимированный рабочий цикл 50%.
Операция PLL допустима только в частотном диапазоне, как выведено в более ранних разделах.
bdclose all;