В этом примере показано, как моделировать 6-разрядный АЦП с конвейерированием и исправлением ошибок на втором этапе.
Поддиапазонные АЦП обычно быстрее, чем сигма-дельта и последовательные аппроксимационные АЦП, но обеспечивают меньшее разрешение. Типичные частоты дискретизации находятся в диапазоне 10M выборки/сек, а типичное разрешение составляет от 8 до 16 бит. Дополнительные ступени и/или биты на ступень дают более высокие разрешения.
АЦП подуровня является двухступенчатым преобразователем данных. Преобразователь первой ступени представляет собой 3-битный АЦП Flash. Он управляет 3-разрядным идеальным DAC, который в свою очередь управляет второй ступенью. Второй каскадный преобразователь - 4-битный АЦП вспышки. Дополнительный бит исправляет ошибки в первом АЦП и повышает точность преобразования. Частота дискретизации АЦП равна 100 МГц и определяется в обратном вызове инициализации модели переменной MATLAB ® Fs.
Модель основана на следующем руководстве по аналоговым устройствам: ADC Architectures V: Pipelined Subranging ADC.
Первый АЦП служит в качестве грубого 3-битового преобразователя. Ошибка квантования, обусловленная первым АЦП, сама по себе квантуется вторым АЦП. Для квантования этой ошибки 3-разрядный ЦАП преобразует грубый выход АЦП в аналоговый сигнал, который вычитается из исходного аналогового входа. Разница - это остаточный сигнал. Остаточный сигнал усиливается и преобразуется обратно в цифровой сигнал вторым АЦП. 3-разрядный выход АЦП (MSB) и 4-разрядный выход АЦП (LSB) объединяются для формирования общего 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);

В этой модели используется один из двух тестовых источников. Используйте синусоидальную волну для динамического тестирования, например, ENoB, SNR и SFDR. Используйте линейный сигнал для статического тестирования, например, отсутствующие коды и количественные показатели нелинейности.
Для определения SNR, ENOB и других динамических характеристик ADC поддиапазона используется блок измерения переменного тока ADC из Blockset™ смешанного сигнала. Выберите правильное положение переключателя для использования синусоидальной волны в качестве источника ввода.
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);


В этом примере блок гистограммы используется для построения графика частоты появления каждого выходного кода АЦП. Раскомментируйте гистограмму, щелкнув ее правой кнопкой мыши и выбрав в меню пункт «Отменить комментарий». В качестве источника ввода используйте блок Ramp, установив переключатель ввода в правильное положение.
Поскольку нет необходимости собирать несколько периодограмм для измерений постоянного тока, измените время моделирования на 1.28e-5 s, затем прокомментируйте блок измерения переменного тока АЦП и анализатор спектра. Чтобы собрать количественные данные для перехода к гистограмме, раскомментируйте блок измерения постоянного тока АЦП.
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, введенная как форма ошибки усиления или смещения, приводит к дисбалансу или отсутствию кода в выходной гистограмме АЦП. Что-либо, кроме плоской гистограммы с пилообразным входом, обозначает некоторое количество неидеального поведения АЦП в виде интегральной нелинейности, дифференциальной нелинейности или отсутствующих кодов.
Ошибки до 1 LSB в АЦП MSB исправляются дополнительным битом АЦП LSB. Большие ошибки влияют на выходные данные.
set_param([model '/MSB ADC'],'OffsetError','0.5'); set_param([model '/MSB ADC'],'GainError','0.3'); sim(model);


Просмотрите результаты блока измерения ADC DC, нажав кнопку Plot measurement results в маске блока.

Убедитесь, что результаты тестов обусловлены только свойствами АЦП, а не входными сигналами или обработкой выходных сигналов с помощью АЦП Testbench. Подключите входы и выходы преобразователя к входам и выходам ADC Testbench и выполните моделирование. Результаты теста появятся на маске блока после запуска моделирования.
model = 'subranging_adc_testbench'; open_system(model); warning(w.state, 'msblks:msblksMessages:ADCDataTruncated');

Авторское право 2019 The MathWorks, Inc. Все права защищены.
Измерение переменного тока АЦП | Измерение постоянного тока АЦП | ADC Testbench | АЦП флэш-памяти