Этот пример показывает, как смоделировать 6-битный АЦП поддиапазона с конвейеризацией и исправлением ошибок второго каскада.
АЦП поддиапазона обычно быстрее, чем дельта сигмы, и последовательные АЦП приближения, но обеспечивают меньшее разрешение. Типичные скорости дискретизации указаны в 10M sample/sec области значений, и типичное разрешение составляет от 8 до 16 бит. Дополнительные стадии и/или биты на стадию дают более высокие разрешения.
АЦП поддиапазона является двухкаскадным преобразователем данных. Первый преобразователь каскада является 3-битным ADC Flash. Он управляет 3-битным идеальным DAC, который, в свою очередь, управляет вторым этапом. Второй преобразователь каскада - 4-битный флэш-АЦП. Дополнительный бит исправляет ошибки в первом АЦП и повышает точность преобразования. Частота дискретизации АЦП 100
MHz, и определяется в модели инициализации коллбэка переменной MATLAB ® Fs.
Модель основана на следующих аналоговых устройствах руководства: ADC Архитектур V: Pipelined Subranging ADCs.
Первый АЦП служит грубым 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, ОСШ и SFDR. Используйте сигнал наклона для статической проверки, например, отсутствующие коды и количественные значения нелинейности.
Чтобы определить ОСШ, ENOB и другие динамические характеристики АЦП поддиапазона, используйте блок 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);
Этот пример использует блок гистограммы, чтобы построить график частоты вхождения каждого выходного кода АЦП. Раскомментируйте гистограмму, щелкнув на ней правой кнопкой мыши и выбрав в меню Uncomment. Используйте блок Ramp в качестве источника входа путем установки переключателя входа в соответствующее положение.
Поскольку нет необходимости собирать несколько периодограмм для измерений постоянного тока, измените время симуляции на 1.28e-5
s, затем закомментируйте блок 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);
Можно наблюдать, как второй этап исправляет ошибки с первого путем добавления Ошибки смещения и Ошибки усиления на вкладке ослаблений АЦП 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 Measurement, нажав кнопку Plot measurement results в маске блока.
Проверьте, что результаты ваших тестов обусловлены только свойствами АЦП, а не входными сигналами или выходной обработкой с помощью ADC Testbench. Соедините входы и выходные параметры конвертера с входами и выходами ADC Testbench и запустите симуляцию. Результаты теста появятся на маске блока после запуска симуляции.
model = 'subranging_adc_testbench'; open_system(model); warning(w.state, 'msblks:msblksMessages:ADCDataTruncated');
Копирайт 2019 The MathWorks, Inc. Все права защищены.
ADC AC Measurement | ADC DC Measurement | ADC Testbench | Flash ADC