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

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

См. также

| | |

Похожие темы