Цифровая Синхронизация с помощью Решений Обыкновенных дифференциальных уравнений

Этот пример показывает, как смоделировать три кольцевых использования осциллятора этапа модели, заданные обыкновенными дифференциальными уравнениями (ODE).

Этот пример является третьим из трех примеров, которые используют три кольцевых модели осциллятора этапа, чтобы исследовать область значений опций для симуляции аналоговых применений цифровых схем. Задержки каждого этапа определяют вывод кольцевого осциллятора frquency, делая точное моделирование этих задержек важным для симуляция схемы.

Первые и вторые примеры в последовательности содержат фон, который поможет вам получить все возможное от этого примера. Необходимо считать их сначала в последовательности, если вы уже не сделали так.

Эта модель использует блоки, заданные ОДУ, и зависит от сервисов решателя ОДУ. Для каждого этапа нуль, пересекающий возможности обнаружения блока Compare To Constant, используется, чтобы произвести влажный вход для инвертора. Инвертор вывод преобразован от булевской переменной, чтобы удвоиться, чтобы управлять блоком Transfer Function. Блок Transfer Function задает форму инвертора выходные переходы.

% Load the ODE-based model and update the model to display
% sample times.
open_system('OdeWaveform');
set_param(gcs,'SimulationCommand','update');

Непрерывная модель времени Используя экспоненциальное затухание

В этом разделе используйте однополюсный ответ, чтобы оценить кольцевой осциллятор вывод, когда инвертор вывод будет смоделирован как ответ схемы RC.

Для этого раздела блоки Передаточной функции сконфигурированы для однополюсного ответа. Полюс для одного из логических этапов установлен в немного отличающееся значение, чем для других двух этапов так, чтобы модель перешла к правильному режиму колебания.

Выбор решателя установлен в автоматический с Относительным Допуском 1e-9.

% Run the ODE-based model with single pole rise/fall response.
sim('OdeWaveform');

Непрерывная модель времени почти с постоянной скоростью просмотра

В этом разделе смоделируйте ответ кольцевых этапов осциллятора с помощью непрерывного блока Transfer Function времени с четвертым порядком ответ Томпсона функции Бесселя, чтобы аппроксимировать постоянный ответ скорости просмотра.

Отметьте небольшое округление начала переключающихся ребер, подобных формам волны, произведенным в Цифровой Синхронизации с помощью Фиксированного примера Выборки Шага.

% Set the configuration for the fourth order Bessel-Thompson rise/fall
% response.
den = getBesselDenominator(3e9);
set_param('OdeWaveform/Transfer Fcn','Denominator',mat2str(den));
set_param('OdeWaveform/Transfer Fcn1','Denominator',mat2str(den));
den = getBesselDenominator(3.1e9);
set_param('OdeWaveform/Transfer Fcn2','Denominator',mat2str(den));
% Run the modified ODE-based model.
sim('OdeWaveform');
Warning: Undefined variable "autosar" or class
"autosar.api.Utils.initMessageStreamHandler". 

Непрерывное Время с Решателем в автоматическом режиме

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

Поддержите настройку модели предыдущего раздела, но измените Относительный Допуск решателя от 1e-9 до автоматического.

Наблюдайте и изменение в период колебания и в форму волны.

Для схем, которые соответственно описаны линейными, независимыми от времени моделями, комбинацией фиксированного шага и переменного шага, дискретные шаги расчета, как описано в разделе Combined Fixed Step и Digital Timing могут быть самым простым способом получить надежные результаты. Однако для схем, которые должны быть смоделированы нелинейной или изменяющейся во времени моделью, основанное на ОДУ решение является единственным жизнеспособным вариантом. В таких случаях необходимо отличаться допуск максимальной погрешности, максимальный размер шага или выбор решателя в диалоговом окне настройки решателя и сравнить результаты с поведением, которое вы ожидаете.

% Change the solver's relative tolerance to 'auto'.
set_param('OdeWaveform','RelTol','auto');
% Run the model with the auto solver setting.
sim('OdeWaveform');
Warning: Undefined variable "autosar" or class
"autosar.api.Utils.initMessageStreamHandler".