Сигма-дельта АЦП

Сигма-дельта АЦП
структурная схема
Сигма-дельта АЦП состоит из двух частей: модулятор и цифровой ФНЧ.
Модулятор преобразует входное напряжение Uвх в последовательность импульсов, а ФНЧ формирует выходной код.

Uвх подается на вычитатель, где из него вычитается опорное напряжение +Uоп или -Uоп, в зависимости от того, был ли превышен порог компаратора на предыдущем шаге.
Интегратор формирует пилообразное напряжение, наклон пилы зависит от напряжения на выходе вычитателя. Как только пила пересекает уровень нуля, срабатывает компаратор и на следующем такте пила развернется в направлении нуля. Вообще говоря, уровень компаратора может быть любым, главное чтобы пила не подходила близко к уровням Uоп.
С выхода компаратора сигнал поступает на тактируемый триггер. Частота тактирования определяет время шага работы модулятора и минимальное время «1» или «0» на выходе модулятора. В конечном итоге частота определяет время преобразования.
Далее сигнал поступает на аналоговый ключ, который коммутируя +Uоп и –Uоп замыкает обратную связь.
На вход ФНЧ поступает последовательность нулей и единиц, при этом количество «1» в единицу времени пропорционально Uвх. Так при Uвх=-Uоп будут одни нули, при Uвх = +Uоп – одни единицы. Нулевому уровню Uвх будет соответствовать равное количество нулей и единиц. Остается только их сосчитать и вычесть уровень нуля равный (+Uоп – -Uоп)/2.

Для примера Uоп = 2В; Uвх = 1В.

Напряжение на выходе интегратора принимает значения:

 0+(1-2) =-1; => 0
-1+(1+2) = 2; => 1
 2+(1-2) = 1; => 1
 1+(1-2) = 0; => 1
 0+(1-2) =-1; => 0
-1+(1+2) = 2; => 1
 2+(1-2) = 1; => 1


Здесь постоянная времени интегратора такая, что за 1 такт напряжение на его выходе становится равным напряжению на его входе. При другой постоянной времени изменится крутизна пилы, но соотношение нулей и единиц останется то же.
Интерактивный сигма-дельта модулятор от Analog Devices
Возьмем 8 импульсов 0,1,1,1,0,1,1,1. Сумма равна 6. Это и будет выходной код АЦП. 6/8=0.75. А весь диапазон -2...+2 равен 4В.
4*0.75=3; И минус уровень нуля 3-2 = +1В. Максимальный код для 8 импульсов равен 8, а это уже 4 разряда, но он будет достигнут только если Uвх>=Uоп. Поэтому проще всего ограничить счет по максимальному значению счетчика и сделать его равным 7, тогда для 8 тактов хватит 3разрядов. И маскимальный код будет соответствовать 7/8 = 1.5В

Теперь как это можно сделать. На рисунке ниже схема нарисованная в Proteus.
U1:A — вычитатель;
U1:B — интегратор. Так, как интегратор инвертирующий, у вычитателя входы поменяны местами — входное напряжение вычитается из опорного.
U1:C — компаратор
U1:D — повторитель, чтобы входное сопротивление вычитателя не подсаживало Uоп. Можно и без него.
U5 — ключ. Переключает +Uоп и -Uоп.

Сверху U10 — счетчик задает 2048 тактов для счета (2^11). Код с выхода триггера подсчитывается на счетчике-таймере-индикаторе(прибор Proteus).



Графики работы для Uвх=+1В


Код формируемый счетчиком 1537

1537/2048*4-2 = 1.002В. Ошибка составила 2мВ

Можно сделать так чтобы выходной код был сразу в милливольтах. Так как счетный интервал 2048 импульсов, то соответсвующий диапазон напряжений должен быть от 0 до 2.048В. Меняем -Uоп на GND и +U на 2.048.



Частота отсчетов с выхода АЦП будет равна Fclk / 2^11 в случае использования накапливающего регистра и счетчика на 11бит, а при использовании фильтров (скользящее среднее, экспоненциальное сглаживание, КИХ, БИХ) останется равной Fclk.
В современных АЦП используют частоты тактирования десятки МГц, такая частота выдачи отсчетов избыточна (код то меняется максимум на +-1), поэтому код прореживается и на выход подается лишь каждый 2048 или 65536 или еще какой с порядком кратным двойке. Прореживание кода называют децимацией (в римской империи так называли наказание, когда отбирали каждого десятого из подразделения для казни). В результате частота отчетов на выходе будет уже Fclk/N, где N- это коэффициент децимации.

Схему можно упростить, вместо подключения GND и +Uоп запитать триггер от +Uоп. Убрать буферный каскад U1:D. Можно даже выкинуть компаратор U1:C. Уровень порога будет определяться порогом «1» триггера. Это немного снизит точность, но уже потребуется только 2ОУ. А можно ли совсем без операционников?
МОЖНО! на интегрирующей RC-цепи и компараторе.

графики (для Uвх=1.5В):

и результаты работы схемы:
Uвх=500мВ

Uвх=1000мВ

Uвх=2000мВ


Как же это работает? RC цепочка заряжается и разряжается в зависимости от предыдущего такта работы (был превышен порог или нет). Крутизна заряда-разряда меняется в зависимости от напряжения. Так вблизи нуля скорость заряда больше скорости разряда, в середине равны, вблизи +Uоп заряд медленнее разряда.



Если в МК есть компаратор, то потребуется лишь внешняя RC цепочка.
Постоянная времени должна быть выбрана в соответствии с временем такта.
Пример программы для контроллера MSP430

    mov     #04096,R15      ; 12- бит
; предварительный заряд конденсатора;
Pre_ADC
    bis.b   #DAC_Out,&P2OUT ; Заряд конденсатора
C1  bit.b   #CAOUT,&CACTL2  ; На выходе компаратора высокий или низкий сигнал?
    jz      C1              ;
; Настройка и накопление импульсов ЦАП ;
Test_DAC
    bit.b   #CAOUT,&CACTL2  ; На выходе компаратора высокий или низкий сигнал?
    jnc     Low1 ; 
High
    bic.b   #DAC_Out,&P2OUT ; Разряд конденсатора
    jmp     Meas_           ;
Low1
    bis.b   #DAC_Out,&P2OUT ; Заряд конденсатора
    nop                     ;
    inc     ADCData         ; Увеличение ADCData
Meas_
    dec     R15             ; Уменьшение счетчика цикла слежения
    jnz     Test_DAC        ; Цикл слежения закончен?
    bic.b   #DAC_Out,&P2OUT ; Разряд конденсатора
    xor.b   #CAEX,&CACTL1   ; Инвертирование выводов компаратора
    ret                     ; Выход из подпрограммы

Пример взят отсюда:
Милливольтметр сигма-дельта типа на MSP430F11x1

  • +15
  • 14 октября 2012, 00:15
  • AlexX1810
  • 1
Файлы в топике: сигма-дельта_Proteus.zip

Комментарии (27)

RSS свернуть / развернуть
Офигенный туториал, огромное спасибо! Реализация АЦП на одной RC-цепочке (с учетом того, что компаратор встроен) потрясла. Поставил бы +100, но можно только +1…
0
  • avatar
  • _YS_
  • 14 октября 2012, 00:26
Да не такая уж это и новость. В принципе, можно и от компаратора отказаться, используя порог переключения самой ножки. Правда, точность такого АЦП не очень.
0
Ну, я никак не мог въехать до сей поры. Сейчас, думаю, еще пару публикаций прочту и освоюсь.
0
на одной RC-цепочке без компаратора никак. На операционниках, там да- можно выкинуть
0
Ну, возможно. Но какие-то варианты АЦП без компаратора есть.
0
Любопытно. Хотя у MSP430 и свои ΣΔ-АЦП есть.
Алсо, зачем плашку конкурса сюда засунул? Ее на стороннем сайте публиковать надо. А здесь только баннер спонсора.
0
  • avatar
  • Vga
  • 14 октября 2012, 00:26
Чтоб больше в конкурсе участвовало. А то про конкурс все уж и позабыли. Я так же наткнулся недавно, решил тоже написать чего-нибудь
0
Выглядит некрасиво. И она все равно теряется рядом с баннером. Лучше убери или хотя бы перемести в другое место. Начало, быть может.
0
МОЖНО! на интегрирующей RC-цепи и компараторе.
А как влияет на точность и линейность тот факт, что RC-цепочка выдает не пилу не линейную, а экспоненциальную?
0
  • avatar
  • Vga
  • 14 октября 2012, 00:32
Точность хуже. Особенно ближе к нулю.
0
Поднял частоту тактирования до 100кГц. (была 20кГц)
10мВ — 16
500мВ -504
1000мВ — 1003
2000мВ — 2001
0
А в железе не экспериментировал?
0
Нет. Пока в протеусе только. У первой схемы смещение откуда-то +2мВ во всем диапазоне. Меняю резистор в интеграторе на 33к — смещение исчезает. То ли это смещение нуля у операционников такое
0
А что за операционник? В принципе, у LM358, например, как раз примерно такое смещение нуля, так что если оно симулируется — вполне возможно его влияние.
Еще мне из курса РЦиС помнится, что интеграторам сильно это напряжение смещения вредит. Но как обычно — забыл чем и прочие подробности :(
0
Да первый попавшийся под руку))
0
Все же в железе надо попробовать, симуляция во многом идеализированная. Я, например, на днях придумал схему лабораторного блока питания, в симуляции просто супер все работает, а в реале стабилизация тока меньше пол-ампера не сделать, видимо, не хватает усиления ОУ. Так что ждем тестов на железе.
Кстати, резистор в RC-цепи заменить на источник тока можно.
0
Тогда сигма-дельта модуляция не получится. При большом напряжении конденсатор долго заряжается и быстро разряжается — это дает больше единиц в счетчик, при малом напряжении быстрый заряд и медленный разряд — больше нулей.
0
Ну да, если линейность удовлетворительная, надо оставить как есть.
0
Идея и статья — отличные!
Когда сам разбирался в принципе работы сигма-дельта АЦП очень понравилась статья на экспоненте. Там попугая в удавах измеряли. Сравнение кншн детское, однако результат совсем не детский ибо наглядно видно зачем это всё нужно.
0
Не могу не похвастаться — примерно то же, но для AVR: radiokot.ru/articles/32/
Опробовано в железе (на макетке).
0
Хорошо написано. Есть ли смещение нуля? Было ли какое-нибудь продолжение?
0
Эээ… Смещение нуля? В смысле?

Нет, продолжения не было. Разве что подали идею ускорить процесс, задействовав таймер для подсчёта количества тактов.
0
У меня на модели было смещение нуля +2мВ (вместо 1000 — 1002мв, вместо 0-2мВ, на 2000 -2002мВ) в интеграторе замена 47к на 33к решило проблему. Но видимо, это погрешность с которой нужно бороться. Даже в интегральных сигма-дельта АЦП пишут что есть коррекция смещения нуля.
0
немного отвлеченный вопрос: а насколько реально измерять временные интервалы измерением заряда конденсатора на частоте 40-50 мгц (то есть измерять период 0,02 мкс с разрешением хотя бы в 64 отсчета)

ктото делал чтото подобное?
0
Подобное делают по-другому.
Разрешение — десятки пикосекунд.
0
да, это видел,
но такое разрешение в общем-то не нужно…
нужен замер каждые 12,5 нс,
замер 1 нс внутри 12.5 нс, каждый 12.5 нс, с выдачей параллельного кода
0
В принципе думки делать замер уровня заряда конденсатора с последующей оцифровкой при помощи АЦП…
следовательно каждые 12.5 нс считываем значение с конденсатора, и между этими считываниями — еще нужно обнулить конденсатор по внешнему событию
0
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.