В этом примере показано, как смоделировать 6-битный Подрасполагающийся ADC с конвейеризацией и вторым этапом с коррекцией ошибок.
Подрасположение ADCs обычно быстрее, чем дельта сигмы и последовательное приближение ADCs, но обеспечивают меньше разрешения. Типичные частоты дискретизации находятся в 10M область значений выборки/секунда, и типичное разрешение составляет 8 - 16 битов. Дополнительные этапы и/или биты на этап дают к более высоким разрешениям.
Подрасполагающийся ADC является двумя преобразователями данных этапа. Конвертер первой стадии является 3-битным ADC Flash. Это управляет 3-битным идеальным DAC, который в свою очередь управляет вторым этапом. Второй конвертер этапа является 4-битным ADC флэш-памяти. Дополнительный бит корректирует ошибки в первом ADC и улучшает точность преобразования. Частотой дискретизации ADC является 100
МГц, и задан в коллбэке инициализации модели переменной Fs MATLAB®.
Модель основана на следующем примере по Аналоговым устройствам: Архитектуры ADC V: Конвейерное Подрасположение ADCs.
Первый ADC служит крупным конвертером на 3 бита. Ошибка квантования из-за первого ADC самостоятельно квантуется вторым ADC. Чтобы квантовать эту ошибку, 3-битный DAC преобразует крупный ADC выход в аналоговый сигнал, который вычтен против исходного аналогового входа. Различием является сигнал остатка. Сигнал остатка усилен и преобразовал назад в цифровой сигнал вторым ADC. ADC на 3 бита выход (MSBs) и 4-битный ADC выход (LSBs) конкатенирован, чтобы сформировать полный ADC без знака на 6 битов выход.
model = 'subranging_adc'; load_system(model); set_param(model, 'StopTime', '0.001'); set_param([model '/ADC AC Measurement'], 'Commented', 'off'); set_param([model '/ADC DC Measurement'], 'Commented', 'on'); set_param([model '/Subsystem/Buffer'], 'N', '0.001 * 2 * Fs') set_param([model '/Time Scope'], 'TimeSpan', '1e-6'); set_param([model '/Time Scope'], 'TimeSpanOverrunAction', 'Scroll'); open_system(model);
Эта модель использует один из двух тестовых источников. Используйте синусоиду для динамического тестирования, e.g. ENoB, ОСШ и SFDR. Используйте сигнал пандуса для статического тестирования, e.g. недостающие коды и кванторы нелинейности.
Чтобы определить ОСШ, ENOB и другие динамические характеристики подрасполагающегося ADC, используют блок ADC AC Measurement из Mixed-Signal Blockset™. Выберите он корректирует положение переключателя, чтобы использовать Sine wave в качестве входного источника.
set_param([model '/Source Select'],'sw','1'); set_param([model '/Sine Wave'], 'Frequency', '2 * pi * 10e6'); set_param([model '/Sine Wave'], 'Amplitude', '0.5'); set_param([model '/Sine Wave'], 'Bias', '0.5'); open_system([model '/Time Scope']); open_system([model '/Spectrum Analyzer']); sim(model);
Добавьте другую синусоиду во вход, чтобы протестировать искажение межмодуляции. Наблюдайте и измерьте результаты с помощью спектра анализатор.
set_param([model '/Sine Wave'], 'Frequency', '2 * pi * [10, 12] * 1e6'); set_param([model '/Sine Wave'], 'Amplitude', '0.25'); set_param([model '/Sine Wave'], 'Bias', '0.25'); sim(model);
Этот пример использует блок гистограммы, чтобы построить частоту вхождения каждого ADC код выхода. Не прокомментируйте гистограмму путем щелчка правой кнопкой по нему и выбора Uncomment из меню. Используйте блок Ramp в качестве входного источника путем установки входного переключателя на соответствующее положение.
Поскольку нет никакой потребности собрать несколько периодограмм для измерений DC, изменить время симуляции в 1.28e-5
s, затем закомментируйте блок ADC AC Measurement и Спектр Анализатор. Чтобы собрать количественные данные, чтобы пойти с гистограммой, не прокомментируйте блок ADC DC Measurement.
set_param([model '/Source Select'],'sw','0'); set_param(model, 'StopTime', '1.28e-5'); set_param([model '/Subsystem/Buffer'], 'N', '1.28e-5 * 2 * Fs') set_param([model '/ADC AC Measurement'], 'Commented', 'on'); set_param([model '/ADC DC Measurement'], 'Commented', 'off'); w = warning('off', 'msblks:msblksMessages:ADCDataTruncated'); set_param([model '/Time Scope'], 'TimeSpan', '1.28e-5'); set_param([model '/Time Scope'], 'TimeSpanOverrunAction', 'Wrap'); close_system([model '/Spectrum Analyzer']); open_system([model '/ADC Output Histogram']); sim(model);
Можно наблюдать, как второй этап корректирует ошибки сначала путем добавления Ошибки Ошибки и Усиления Смещения во вкладке нарушений ADC MSB. Любая часть LSB, введенного как форма усиления или ошибки смещения, приводит к неустойчивости или недостающему коду в ADC гистограмма выхода. Что-либо кроме плоской гистограммы с пилообразным входом показывает некоторую сумму неидеального поведения ADC в форме интегральной нелинейности, дифференциальной нелинейности или недостающих кодов.
Ошибки до 1 LSB в ADC MSB корректируются дополнительным битом ADC LSB. Большие ошибки влияют на выход.
set_param([model '/MSB ADC'],'OffsetError','0.5'); set_param([model '/MSB ADC'],'GainError','0.3'); sim(model);
Просмотрите результаты блока ADC DC Measurement путем нажатия кнопки результатов измерения Графика в маске блока.
Проверьте, что результаты ваших тестов должны только к свойствам ADC, а не входных сигналов или выходной обработки с Испытательным стендом ADC. Соедините вводы и выводы конвертера к вводам и выводам Испытательного стенда ADC и запустите симуляцию. Результаты теста обнаружатся на маске блока, если вы запускаете симуляцию.
model = 'subranging_adc_testbench'; open_system(model); warning(w.state, 'msblks:msblksMessages:ADCDataTruncated');
Copyright 2019 The MathWorks, Inc. Все права защищены.
ADC AC Measurement | ADC DC Measurement | ADC Testbench | Flash ADC