Компаратор напряжения
Компаратор сравнивает два напряжения и выдаёт логический уровень: единицу, если напряжение на неинвертирующем входе выше, чем на инвертирующем, и ноль, если ниже. Чтобы выход не дребезжал на медленном или шумном сигнале, компаратору добавляют гистерезис — два порога вместо одного.
Обновлено Редакция GAW
Компаратор напряжения — микросхема (или узел микроконтроллера), которая сравнивает два напряжения и выдаёт цифровой результат. Если напряжение на неинвертирующем входе (+) выше, чем на инвертирующем (−), на выходе логическая единица, если ниже — ноль. С помощью компаратора контролируют разряд аккумулятора, перегрев, превышение тока, ловят переход сигнала через ноль, превращают синусоиду в прямоугольные импульсы и будят микроконтроллер из спящего режима по аналоговому событию.
Коротко
Как работает компаратор
Внутри компаратор похож на операционный усилитель без обратной связи: огромный коэффициент усиления разности входных напряжений. У LM393 он не меньше 50 В/мВ при питании 15 В (DS0443, табл. 3), поэтому разности в доли милливольта хватает, чтобы выход ушёл в одно из двух крайних состояний. Опорное напряжение (порог) подают на один вход — от делителя, стабилитрона, источника опорного напряжения или ЦАП, — а измеряемое на другой.
Какой вход взять для сигнала, решает нужная логика. Сигнал на неинвертирующем входе даёт единицу, когда он выше порога; сигнал на инвертирующем — единицу, когда он ниже порога. Компаратор — сердце АЦП последовательного приближения: там он на каждом шаге сравнивает вход с напряжением внутреннего ЦАП.
Компаратор или операционный усилитель
Схематически они рисуются одинаково, но задачи у них разные. ОУ рассчитан на работу с отрицательной обратной связью, когда выход находится в линейной области; в роли компаратора он постоянно насыщен, может медленно выходить из насыщения, а его выходные уровни не обязательно совпадают с логическими. Компаратор сделан для работы без обратной связи: выход быстро переключается и согласован с логикой. У LM393 диапазон дифференциального входного напряжения равен напряжению питания (DS0443, «Features»), так что входы можно разводить на любую разность в пределах питания.
Выход: открытый коллектор
У LM393 и многих других компараторов выход — открытый коллектор: выходной NPN-транзистор либо тянет вывод к общему проводу, либо закрыт и «отпускает» его. Логическую единицу создаёт внешний подтягивающий резистор.
У такого выхода два полезных свойства. Подтягивающий резистор можно подключить к любому напряжению — например, к 3,3 В микроконтроллера, хотя компаратор питается от 12 В: так компаратор заодно согласует уровни. И выходы нескольких компараторов можно соединить вместе с одним резистором: линия будет в единице, только пока её отпустили все.
Цена — несимметричные фронты: вниз выход тянет транзистор, а вверх — только резистор, заряжая ёмкость линии. Чем больше сопротивление подтяжки, тем меньше ток в нуле и тем медленнее фронт; время отклика в даташите LM393 измерено с нагрузкой 5,1 кОм к плюсу питания (DS0443, табл. 3). Компараторы с двухтактным (push-pull) выходом сами выдают и ноль, и единицу, и подтяжка им не нужна. У встроенных компараторов микроконтроллеров выход и вовсе внутренний: бит в регистре и сигнал для таймеров и прерываний.
Параметры компаратора на примере LM393
LM393 — сдвоенный компаратор, один из самых распространённых. Параметры при питании 5 В и 25 °C (DS0443 Rev 17, табл. 2 и 3):
| Параметр | Что значит | LM393 |
|---|---|---|
| Напряжение питания | Допустимый диапазон | 2–36 В или ±1…±18 В |
| Ток потребления | Обоих компараторов, без нагрузки | 0,45 мА тип., 1 мА макс. |
| Напряжение смещения | Разность входов, при которой переключается выход | ±1 мВ тип., ±5 мВ макс. |
| Входной ток | Вытекает из входов (входной каскад на PNP) | 20 нА тип., 250 нА макс. |
| Синфазный диапазон | В каких пределах должны быть входы | от 0 до VCC − 1,5 В (во всём диапазоне температур — до VCC − 2 В) |
| Напряжение низкого уровня | Выход в нуле при токе 4 мА | 80 мВ тип., 400 мВ макс. |
| Выходной ток в нуле | При напряжении на выходе 1,5 В | 6 мА мин., 18 мА тип. |
| Время отклика | Ступенька 100 мВ, превышение порога на 5 мВ | 1,3 мкс тип. |
| Время отклика (большой сигнал) | Сигнал с уровнями ТТЛ, порог 1,4 В | 300 нс тип. |
Время отклика сильно зависит от того, насколько сигнал перешёл порог: при превышении всего на 5 мВ LM393 переключается за 1,3 мкс, а при большем — примерно за 300 нс (DS0443, примечание 4 к табл. 3). Синфазный диапазон важен при питании от 5 В: оба входа LM393 должны быть не выше 3,5 В. Если один вход остаётся в синфазном диапазоне, другой может подниматься и выше питания — выход всё равно будет правильным; ниже −0,3 В входы опускать нельзя (примечание 3).
Сам LM393 рассчитан на температуру 0…70 °C. Для промышленного диапазона в том же даташите есть LM293 (−40…105 °C) и LM193 (−55…125 °C) (DS0443, табл. 2).
Гистерезис
Если входное напряжение медленно проходит через порог, шум на входе — наводки, пульсации питания, помехи от переключений цифровой части — несколько раз переводит его через порог туда и обратно. Выход в этот момент «дребезжит» (chatter): вместо одного фронта получается пачка, и микроконтроллер считает лишние события. Лечится это гистерезисом: часть выходного напряжения через резистор возвращается на неинвертирующий вход, и порог сдвигается вслед за выходом (Microchip DS41215C, TIP #3).
Пока выход в единице, порог поднят до VTH; когда вход его превысит, выход переключится в ноль, и порог опустится до VTL. Обратно выход вернётся, только когда вход опустится ниже VTL. Если разница порогов больше размаха шума, на каждое пересечение приходится ровно одно переключение. Такую схему называют ещё триггером Шмитта.
Расчёт резисторов
Схема из DS41215C: сигнал подан на инвертирующий вход, делитель R1–R2 задаёт средний порог, а резистор R3 от выхода сдвигает его вверх или вниз. Расчёт предполагает, что выход переключается между 0 и VDD.
Расчёт по шагам (DS41215C, уравнения 3-1…3-5). Сначала выбирают пороги VTH и VTL так, чтобы разница между ними была больше шума, и находят средний порог:
Затем подбирают делитель, который его даёт, и считают его эквивалентное сопротивление:
Наконец, отношение делителя обратной связи DR и резистор R3:
Пример из DS41215C. VDD = 5 В, нужны пороги 3,0 и 2,5 В.
- VAVG = 5 · 2,5 / (5 − 3 + 2,5) = 2,78 В.
- Ближайший делитель из стандартных номиналов: R1 = 8,2 кОм, R2 = 10 кОм, он даёт 5 · 10 / 18,2 = 2,75 В. Подобрать пару номиналов помогает калькулятор делителя напряжения.
- REQ = 8,2 · 10 / 18,2 = 4,5 кОм.
- DR = (3,0 − 2,5) / 5 = 0,1.
- R3 = 4,5 · (1/0,1 − 1) = 40,5 кОм → ближайший номинал ряда E24 39 кОм.
С выбранными номиналами пороги получаются 2,98 и 2,46 В. Это легко проверить делителем: когда выход в единице, R3 подключён к VDD параллельно R1, а когда в нуле — к общему проводу параллельно R2:
R1 ∥ R3 = 6,78 кОм, VTH = 5 · 10 / 16,78 = 2,98 В; R2 ∥ R3 = 7,96 кОм, VTL = 5 · 7,96 / 16,16 = 2,46 В.
Рекомендации DS41215C по номиналам: через R1 и R2 постоянно течёт ток, поэтому их сумму берут не меньше 1 кОм; но и не больше 10 кОм, чтобы R3 не получился слишком большим. При R3 от 100 кОм до 10 МОм входной ток компаратора, протекая через резисторы, сдвигает пороги.
Выход с открытым коллектором. Если компаратор вроде LM393 и единицу даёт подтягивающий резистор, в состоянии «1» он оказывается последовательно с R3. Его берут намного меньше R3 или прибавляют к R3 при расчёте верхнего порога.
У встроенных компараторов гистерезис часто программируется: у STM32F0 его включают битами в регистре — об этом ниже.
Оконный компаратор
Чтобы узнать, находится ли напряжение внутри окна — например, напряжение аккумулятора в допустимых пределах, — нужны два компаратора и делитель из трёх резисторов (DS41215C, TIP #5). Делитель задаёт верхнюю границу VH и нижнюю VL; верхний компаратор выдаёт единицу, когда вход выше окна, нижний — когда ниже.
Пока вход внутри окна, оба выхода в нуле. Выходы подают на два входа микроконтроллера и различают «выше» и «ниже». Если же нужен один сигнал «в окне», у LM393 меняют местами входы обоих компараторов: тогда каждый отпускает свой выход, пока вход внутри окна, и соединённые вместе выходы с одним подтягивающим резистором дают единицу только внутри окна. В STM32F0 для окна есть оконный режим: бит WNDWEN соединяет неинвертирующие входы COMP1 и COMP2, так что сигнал подают на один вывод (RM0091, разд. 15.5.1).
Компаратор в микроконтроллере
Встроенный компаратор работает без процессора и без АЦП: он сравнивает напряжения непрерывно и может сразу вызвать прерывание, запустить захват таймера или выключить ШИМ.
ATmega328P (Arduino Uno)
Аналоговый компаратор ATmega328P сравнивает вывод AIN0 (неинвертирующий вход, PD6 — D6 на Arduino Uno) с выводом AIN1 (инвертирующий, PD7 — D7). Когда AIN0 выше AIN1, бит ACO в регистре ACSR равен единице (DS40002061B, разд. 23). Возможности:
- ACBG — вместо AIN0 на неинвертирующий вход подаётся внутреннее опорное напряжение 1,1 В (по табл. 29-11 — от 1,0 до 1,2 В, время установления до 70 мкс).
- ACME в регистре ADCSRB при выключенном АЦП (ADEN = 0) подключает к инвертирующему входу любой из выводов ADC0–ADC7 через мультиплексор АЦП.
- ACIS1:0 выбирают прерывание: по любому изменению выхода (00), по спаду (10) или по фронту (11).
- ACIC соединяет выход компаратора с захватом таймера 1 — так измеряют время между пересечениями порога.
- DIDR1 отключает цифровые входные буферы на AIN0 и AIN1, чтобы аналоговый сигнал не вызывал лишнего потребления.
Выход синхронизируется с тактовой частотой, что добавляет задержку в 1–2 такта. В таблице 30-1 (исполнение до 105 °C) смещение компаратора — до 40 мВ при питании 5 В и входах около VCC/2, задержка — 750 нс при 2,7 В и 500 нс при 4 В. Встроенного гистерезиса в разделе 23 нет: при медленном шумном сигнале его добавляют резистором, как в схеме выше.
Пример: прерывание, когда напряжение на D7 опускается ниже 1,1 В (например, напряжение аккумулятора через делитель):
volatile bool fell = false;
ISR(ANALOG_COMP_vect) {
fell = true;
}
void setup() {
Serial.begin(9600);
DIDR1 = (1 << AIN1D) | (1 << AIN0D); // no digital input buffers on D7, D6
ACSR = (1 << ACBG) | (1 << ACIS1) | (1 << ACIS0); // + input: 1.1 V bandgap; irq on rising ACO
delay(1); // bandgap start-up: up to 70 us
ACSR |= (1 << ACI); // clear a stale flag
ACSR |= (1 << ACIE); // enable the interrupt
}
void loop() {
if (fell) {
fell = false;
Serial.println(F("D7 < 1.1 V")); // ACO rose: 1.1 V > D7
}
}
Режим прерывания (ACIS1:0) меняют при выключенном ACIE, иначе смена битов сама может вызвать прерывание (DS40002061B, разд. 23.3.2) — поэтому ACIE включается последним.
STM32F0
Компараторы есть только у STM32F05x, F07x и F09x: два компаратора COMP1 и COMP2 класса rail-to-rail (RM0091, разд. 15). У STM32F030 и F031 их нет — это стоит проверить до выбора микросхемы, например в атласе распиновок STM32.
- Инвертирующий вход — 1/4, 1/2, 3/4 или всё внутреннее опорное напряжение VREFINT, выход ЦАП (PA4, PA5) или вывод (PA0 у COMP1, PA2 у COMP2). Неинвертирующие входы — PA1 и PA3.
- Гистерезис — выключен, малый, средний или большой (биты COMPxHYST).
- Режим питания — от «высокая скорость» до «сверхмалое потребление»: скорость против тока.
- Выход — на вывод и одновременно на входы таймеров TIM1, TIM2, TIM3: аварийное отключение ШИМ через вход break TIM1, поцикловое ограничение тока через OCREF_CLR, захват.
- Работа в Stop — выход через EXTI будит микроконтроллер; бит LOCK защищает настройки от случайной записи до сброса.
Характеристики STM32F072 (DS9826 Rev 6, табл. 61):
| Режим | Задержка (ступенька 200 мВ, превышение 100 мВ) | Ток |
|---|---|---|
| Высокая скорость, VDDA ≥ 2,7 В | 50 нс тип., 100 нс макс. | 75 мкА тип. |
| Средний | 0,3 мкс тип., 0,6 мкс макс. | 10 мкА тип. |
| Малое потребление | 0,7 мкс тип., 1,5 мкс макс. | 3 мкА тип. |
| Сверхмалое потребление | 2 мкс тип., 4,5 мкс макс. | 1,2 мкА тип. |
Гистерезис в режиме высокой скорости: малый — 8 мВ (3–13 мВ), средний — 15 мВ (7–26 мВ), большой — 31 мВ (18–49 мВ); смещение — ±4 мВ тип., ±10 мВ макс.
Пример для STM32F072 на регистрах CMSIS: COMP1 сравнивает PA1 с половиной VREFINT, со средним гистерезисом, и при превышении останавливает ШИМ таймера TIM1 через вход break:
#include "stm32f0xx.h"
void comp1_init(void) {
RCC->AHBENR |= RCC_AHBENR_GPIOAEN;
RCC->APB2ENR |= RCC_APB2ENR_SYSCFGCOMPEN; // COMP shares its clock enable with SYSCFG
GPIOA->MODER |= GPIO_MODER_MODER1; // PA1 in analog mode
COMP12_COMMON->CSR = COMP_CSR_COMP1INSEL_0 // 001: inverting input = 1/2 VREFINT
| COMP_CSR_COMP1OUTSEL_0 // 001: output to the TIM1 break input
| COMP_CSR_COMP1HYST_1 // 10: medium hysteresis
| COMP_CSR_COMP1EN; // COMP1MODE = 00: high speed
}
Чтобы вход break сработал, его включают в самом таймере (бит BKE в TIM1_BDTR).
Типичные ошибки
- Нет подтягивающего резистора. Выход с открытым коллектором без подтяжки никогда не показывает единицу — вход микроконтроллера «висит».
- Вход вне синфазного диапазона. У LM393 при питании 5 В оба входа выше 3,5 В — результат не гарантирован. Порог берут ниже или повышают питание компаратора.
- Нет гистерезиса на медленном сигнале. Датчик температуры, фоторезистор, напряжение аккумулятора меняются медленно — без гистерезиса прерывание сработает пачкой.
- Отрицательное напряжение на входе. Ниже −0,3 В входы LM393 опускать нельзя; от переменного сигнала вход защищают резистором и диодом или смещают сигнал вверх.
- LM393 на морозе. Его диапазон 0…70 °C; для улицы нужен LM293 или LM193.
- Порог в милливольтах без учёта смещения. Смещение ±5 мВ у LM393 и до 40 мВ у компаратора ATmega328P сопоставимо с маленьким порогом — для слабых сигналов нужен усилитель перед компаратором или компаратор с меньшим смещением.
Частые вопросы
Зачем компаратору гистерезис?
Когда входное напряжение медленно проходит через порог, шум на входе успевает несколько раз перевести его через порог туда и обратно, и выход «дребезжит». Гистерезис делает два порога: выход переключается вверх только на верхнем, а вниз — только на нижнем. Если разница порогов больше размаха шума, на каждое пересечение приходится ровно одно переключение.
Можно ли использовать операционный усилитель вместо компаратора?
Для медленных сигналов иногда можно, но ОУ рассчитан на работу с отрицательной обратной связью, а не в насыщении: выход может медленно выходить из насыщения и не совпадать с логическими уровнями. Компаратор сделан именно для сравнения: быстрый выход с логическими уровнями, у LM393 — открытый коллектор, который можно подтянуть к питанию микроконтроллера.
Почему на выходе LM393 нет единицы?
У LM393 выход с открытым коллектором: транзистор либо тянет вывод к общему проводу, либо отпускает его. Единица появляется только через подтягивающий резистор к плюсу питания. Его можно подключить к напряжению логики — 3,3 или 5 В — независимо от питания компаратора; время отклика в даташите измерено с нагрузкой 5,1 кОм к плюсу питания.
Как сравнить напряжение с 1,1 В на Arduino без АЦП?
У ATmega328P есть аналоговый компаратор. Если установить бит ACBG в регистре ACSR, на его неинвертирующий вход вместо вывода AIN0 подаётся внутреннее опорное напряжение 1,1 В (от 1,0 до 1,2 В по даташиту), а сравниваемое напряжение подают на AIN1 — вывод D7 у Arduino Uno. Бит ACO показывает результат, а прерывание срабатывает по выбранному фронту.
Источники
- STMicroelectronics. LM193, LM293, LM393, LM393W: Low-power dual voltage comparators (DS0443 Rev 17) — табл. 1 (предельные режимы), табл. 2 (питание, синфазный диапазон, температура), табл. 3 (смещение, входной ток, выходной каскад, время отклика)
- Microchip. Comparator Tips 'n Tricks (DS41215C) — TIP #3 (гистерезис: уравнения 3-1…3-5, пример расчёта, рекомендации по резисторам), TIP #5 (оконный компаратор)
- STMicroelectronics. RM0091: STM32F0x1/STM32F0x2/STM32F0x8 reference manual, Rev 10 — разд. 15 (COMP: входы, выходы на таймеры, гистерезис, режимы питания, оконный режим, регистр COMP_CSR)
- STMicroelectronics. STM32F072x8 STM32F072xB datasheet (DS9826 Rev 6) — табл. 61 (характеристики компаратора: гистерезис, смещение, задержка, ток потребления)
- Microchip. ATmega48A/PA/88A/PA/168A/PA/328/P Data Sheet (DS40002061B) — разд. 23 (аналоговый компаратор), табл. 29-11 (опорное напряжение 1,1 В), табл. 30-1 (смещение и задержка компаратора)
Нашли ошибку?
Смотрите также
- Операционный усилительПринцип работы, основные схемы и формулы, параметры реальных ОУ и их выбор
- АЦПКвантование, формула кода, SAR, время выборки, погрешности, передискретизация
- ЦАПФормула выхода, R-2R и резистивная цепочка, погрешности, буфер, STM32, MCP4725, ШИМ
- Делитель напряженияВыход, ток, нагрузка, подбор пары резисторов
- Ряды номиналов E3–E192Ближайший номинал E24, E96 и других рядов
- ATmega328PРаспиновка, фьюзы, Optiboot, периферия, питание, схема и код на C
- Пины ArduinoПин Arduino → порт ATmega, ШИМ, прерывания и регистры
- Биполярный транзисторNPN и PNP, режимы работы, параметры из даташита, ключ и усилитель с расчётом