exponenta event banner

Поддиапазон АЦП

В этом примере показано, как моделировать 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 в маске блока.

ADC Testbench

Убедитесь, что результаты тестов обусловлены только свойствами АЦП, а не входными сигналами или обработкой выходных сигналов с помощью АЦП Testbench. Подключите входы и выходы преобразователя к входам и выходам ADC Testbench и выполните моделирование. Результаты теста появятся на маске блока после запуска моделирования.

model = 'subranging_adc_testbench';
open_system(model);
warning(w.state, 'msblks:msblksMessages:ADCDataTruncated');

Авторское право 2019 The MathWorks, Inc. Все права защищены.

См. также

| | |

Связанные темы