exponenta event banner

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

В этом примере показано, как смоделировать три кольцевых использования генератора этапа модели, заданные обыкновенными дифференциальными уравнениями (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".