В этом примере показано, как моделировать трехступенчатый кольцевой осциллятор с использованием моделей, определенных обычными дифференциальными уравнениями (ОДУ).
Этот пример является третьим из трех примеров, в которых используется трехступенчатая модель кольцевого генератора для изучения диапазона вариантов моделирования аналоговых применений цифровых схем. Задержки на каждом этапе определяют выходную частоту кольцевого генератора, что делает точное моделирование этих задержек существенным для моделирования схемы.
Первые два примера в последовательности, Logic Timing Simulation и Digital Timing Using Fixed Step Sampling, содержат фоновую информацию об этом примере. Прочитайте их сначала, последовательно, если вы еще не сделали этого.
Эта модель использует блоки, определенные ODE, и зависит от услуг решателя ODE. Для каждого этапа возможности обнаружения пересечения нуля блока сравнения с константой используются для получения насыщенного входного сигнала инвертора. Выходной сигнал инвертора преобразуется из логического в двойной для управления блоком передаточной функции. Блок передаточной функции определяет форму выходных переходов инвертора.
Загрузите модель на основе ОДУ и обновите модель для отображения времени образца.
open_system('OdeWaveform'); set_param(gcs,'SimulationCommand','update');

В этом разделе используйте однополюсный отклик для оценки выходного сигнала кольцевого генератора, когда выходной сигнал инвертора моделируется как отклик RC-схемы.
В этом разделе блоки функций передачи сконфигурированы для однополюсного отклика. Полюс для одной из логических ступеней устанавливается в несколько иное значение, чем для двух других ступеней, так что модель переходит в правильный режим колебаний.
Для выбора решателя установлено значение auto, с относительным допуском 1e-9.
Запустите модель на основе ОДУ с откликом на подъем/падение одного полюса.
sim('OdeWaveform');

В этом разделе моделируют отклик каскадов кольцевого генератора с использованием непрерывного временного блока передаточной функции с откликом Бесселя-Томпсона четвертого порядка для аппроксимации отклика с постоянной скоростью нарастания.
Задайте конфигурацию для ответа Бесселя-Томпсона на подъем/падение четвертого порядка.
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));
Запустите измененную модель на основе ОДУ. Обратите внимание на небольшое округление начала фронтов переключения, аналогично сигналам, полученным в примере цифровой синхронизации с использованием выборки с фиксированным шагом.
sim('OdeWaveform');

В этом разделе измените конфигурацию решателя и просмотрите изменения в результатах.
Для схем, которые адекватно описаны линейными, инвариантными по времени моделями, комбинация фиксированного и переменного времени дискретной выборки шага, как описано в разделе Комбинированный фиксированный шаг и цифровая синхронизация, может быть самым простым способом получения надежных результатов. Однако для схем, которые должны быть смоделированы нелинейной или изменяющейся во времени моделью, решение на основе ОДУ является единственным жизнеспособным вариантом. В таких случаях следует изменить максимальный допуск ошибки, максимальный размер шага или выбор решателя в диалоговом окне конфигурации решателя и сравнить результаты с ожидаемым поведением.
Сохраните конфигурацию модели предыдущего раздела, но измените относительный допуск решателя с 1e-9 кому auto.
set_param('OdeWaveform','RelTol','auto');
Запустите модель с настройками автоматического решения. Наблюдайте как за изменением периода колебаний, так и за изменением формы волны.
sim('OdeWaveform');
