Приемы и трюки использования встроенного компаратора в контроллерах Microchip
Микроконтроллеры Microchip используются во многих устройствах, начиная от пожарных датчиков и заканчивая промышленной и автомобильной электроникой. Контроллеры PIC12F и PIC16F, имеющие встроенный аналоговый компаратор, сочетают в себе производительное RISC-ядро, Flash память программ и возможность обработки аналоговых сигналов. Перезаписываемая память программ и широкий выбор инструментальных средств (внутрисхемный отладчик ICD2, внутрисхемное программирование, эмулятор ICE2000) делают эти контроллеры незаменимыми для любых типов встраиваемых систем.
Приемы и трюки, рассмотренные ниже, помогут полностью использовать потенциал компараторов, как дискретных, так и встроенных в микроконтроллеры Microchip PIC.
#1. Контроль батарейного питания
При работе системы от батареи важно знать, когда напряжение батареи снижается ниже допустимого уровня. Обычно для этого используется модуль PLVD (Programmable Low Voltage Detect). Однако, если его нет составе периферии контроллера, то можно построить простейшую схему на основе встроенного компаратора и нескольких внешних элементов. При питании микроконтроллера стабилизированным напряжением используется схема, указанная на рисунке 1, при нестабилизированном питании используется схема на рисунке 2.
Пример (стабилизированное питание):
Минимально допустимое напряжение VBATT = 5,7 В
VDD = 5 В, R1 = 33 кОм, R2 = 10 кОм, R3 = 39 кОм, R4 = 10 кОм
Резисторы R1 и R2 выбираются такими, чтобы напряжение на неинвертирующем входе компаратора было порядка 0,25 VDD; R3 и R4 – такими, чтобы напряжение на инвертирующем входе было таким же, как и на неинвертирующем при минимальном допустимом напряжении батареи.
Пример (нестабилизированное питание):
Минимально допустимое напряжение VBATT = 3 В
R1 = 33 кОм, R2 = 10 кОм и R3 = 470 Ом
Резистор R3 выбирается таким, чтобы диод был открыт при минимально допустимом напряжении батареи, а резисторы R1 и R2 задают напряжение на инвертирующем входе равное падению напряжения на диоде.
#2. Процедура контроля изменения состояния компаратора
При использовании компаратора для контроля датчика важно знать как момент изменения состояния компаратора, так и сам факт изменения. Стандартный метод контроля основывается на сравнении текущего значения компаратора с его предыдущим значением, сохраненным в памяти контроллера (пример 2-1).
Test
MOVF hold,w ; предыдущее значение компаратора
XORWF CMCON,w ; сравниваем с текущим компаратором
ANDLW COUTMASK
BTFSC STATUS,Z
RETLW 0 ; если значения равны, то возвращаем 0
MOVF CMCON,w ; если не равны, то считываем текущее значение,
ANDLW COUTMASK ; маскируем ненужные биты и
MOVWF hold ; сохраняем в ячейке ОЗУ
IORLW CHNGBIT ; выставляем флаг изменения состояния компаратора
RETURN
Каждая проверка осуществляется за 5 команд, если изменение не происходило, 9 команд – если произошло. Помимо этого, требуется 1 ячейка ОЗУ для хранения предыдущего значения.
Усовершенствованная процедура контроля пригодна, если используется один компаратор: она использует флаг прерывания для контроля состояния (пример 2-2).
Test
BTFSS PIR1,CMIF ; проверяем флаг прерывания по компаратору
RETLW 0 ; если флаг не установлен, то возвращаем 0
BTFSS CMCON,COUT ; проверяем бит компаратора
RETLW CHNGBIT ; если 0 – возвращаем 0
RETLW COUTMASK + CHNGBIT ; если 1 – возвращаем маскированное значение
В данном случае проверка занимает 2 команды, если изменение произошло, то 3 команды. При этом не используется память ОЗУ.
Если в программе невозможно использовать флаг прерывания, либо ведется обработка состояния двух компараторов, то удобным является использование бита полярности выходного сигнала компаратора (пример 2-3).
Test
BTFSS CMCON,COUT ; анализируем бит компаратора
RETLW 0 ; если 0 – возвращаем 0
MOVLW CINVBIT ; если 1 – инвертируем выход
XORWF CMCON,f ; обнуляем бит компаратора
BTFSS CMCON,CINV ; анализируем инверсию выхода компаратора
RETLW CHNGFLAG ; если нет - возвращаем CHNGFLAG
RETLW COUTMASK + CHNGFLAG ; если есть – возвращаем маскированное значение
Если изменения не произошло, то цикл занимает всего 2 команды, иначе – 5 команд. Память ОЗУ также не используется.
#3. Гистерезис
Когда на входах компаратора напряжения близки друг к другу, могут происходить нежелательные многократные переключения состояния компаратора под влиянием шумов и помех. Для исключения этого эффекта для компаратора вводится схема гистерезиса (рисунок 3). Эта схема смещает уровни срабатывания компаратора для исключения влияния шумов и помех.
Для определения значений резисторов необходимо знать уровни порогов петли гистерезиса VTH и VTL:
При расчетах важно учитывать, что через резисторы R1 и R2 течет постоянный ток, поэтому их суммарное значение должно быть не менее 1 кОм. Кроме того, это значение не должно быть выше 10 кОм: от этого зависит значение резистора R3, которое не должно быть выше 100 кОм. Большее значение этого резистора может вызвать смещение входного напряжения на неинвертирующем входе.
Пример расчета:
VDD = 5 В, VH = 3 В, VL = 2,5 В
VAVG = 2,77 В
R1 = 8,2 кОм и R2 = 10 кОм => VAVG = 2,75 В
REQ = 4,5 кОм
DR = 0,1
R3 = 39 кОм (получено 40.5 кОм, но такого номинала нет)
VHACT = 2,98 В
VLACT = 2,46 В
#4. Измерение ШИМ-модулированного сигнала
Для измерения длительностей сигнала низкого и высокого уровней во входном ШИМ-сигнале используется комбинация компаратора и таймера 1 с внешним входом разрешения (рисунок 4). Когда на входе контроллера T1G низкий уровень, то счет таймера 1 разрешен, когда высокий уровень – запрещен. Использование компаратора на входе позволяет организовать измерение длительности между спадом и фронтом входного сигнала. Для измерения длительности между фронтом и спадом просто необходимо задать инверсию выхода компаратора установкой бита CINV в регистре CMCON.
Для синхронизации входного сигнала и таймера необходимо включить схему синхронизации установкой бита C2SYNC.
Если встроенный компаратор не имеет схемы синхронизации, то необходимо использовать внешний D-триггер. Триггер должен иметь синхронизацию по спаду для исключения некорректных состояний (рисунок 5).
#5. Установка пределов полезного сигнала
При измерении аналогового сигнала важно знать, когда он выходит за рамки допустимых значений. Этот контроль можно осуществить на основе несложной схемы, состоящей из двух аналоговых компараторов и трех резисторов (рисунок 6). На соответствующих выходах схемы присутствует активный уровень тогда, когда входной сигнал выходит за пределы допустимых значений. Такая схема позволяет увеличить достоверность обработки сигнала и снизить риск перегрузки входных цепей системы.
Пределы допустимых значений входного сигнала устанавливаются с помощью делителя напряжения на резисторах R1, R2 и R3, рассчитать которые можно по формулам 6 и 7. Важно учесть, что через эти резисторы течет постоянный ток, поэтому для снижения потребления схемы необходимо выбирать их суммарное значение более 1 кОм, но не более 1 МОм, что может привести к появлению напряжения смещения на входах компаратора.
Для снижения количества ложных срабатываний схемы можно ввести гистерезис как для компаратора верхнего предела, так и нижнего. Для этого используются формулы для расчета резисторов из приема #3. При этом, для компаратора верхнего предела суммарное значение R2 и R3 является значением R2 для расчета гистерезиса.
В компаратор нижнего предела необходимо добавить Req (1..10 кОм) между входом схемы и неинвертирующим входом компаратора. Далее, необходимо рассчитать резистор обратной связи по формулам 4 и 5.
Пример расчета:
VDD = 5 В, VTH = 2,5 В, VTL = 2 В
R1 = 12 кОм, R2 = 2,7 кОм, R3 = 10 кОм
Полученные VTH = 2,57 В, VTL = 2,02 В
#6. Подавление постоянной составляющей
В системах передачи данных полезный сигнал может иметь постоянную составляющую, величина которой зависит от многих факторов, в том числе от температуры (температурный дрейф), токов в земляном проводнике и т.д. Наличие этой составляющей и ее нестабильность значительно усложняет дальнейшую обработку сигнала: простой детектор уровней не сможет адекватно восстановить полезный сигнал, т.к. значение постоянной составляющей может быть сопоставимо с уровнем самого сигнала. В таких ситуациях применяется схема подавления постоянной составляющей (рисунок 7). С помощью аналогового компаратора входной сигнал сравнивается со своим средним значением, полученным фильтрацией. ФНЧ на основе R1 и С1 должен иметь частоту среза выше, чем частота изменения постоянной составляющей и намного ниже частоты входного сигнала.
Резисторами R2 или R3 устанавливается требуемый уровень выходного сигнала при отсутствии входного: если установлен резистор R2, то на выходе будет низкий уровень при отсутствии входного сигнала, если установлен R3 – то высокий. Их значение должно быть на два порядка больше, чем R1.
Пример:
Скорость передачи данных – 10 Кбит/с, частота среза – 500 Гц
Получаем R1 = 10 кОм, С1 = 33 мкФ, R2 = R3 = 500..1000 кОм
#7. Одновибратор
Когда в системе необходимо фиксировать короткие импульсы, используется схема одновибратора. По входному короткому импульсу она формирует выходной импульс заданной длительности, который сможет быть обработан микроконтроллером. Схема на основе компаратора представлена на рисунке 8. Она имеет две обратных связи: первая задаёт гистерезис, вторая – время выходного импульса (на основе RC-цепи). При появлении на входе схемы фронта сигнала, на выходе генерируется положительный импульс заданной длительности.
Одновибратор работает следующим образом: когда на входе схемы низкий уровень, С1 заряжается до уровня порядка 0,7 В (напряжение ограничено диодом D1 и резистором R1). Значение резистора R1 значительно меньше R2 и не должно оказывать большого влияния на напряжение заряда. На выходе компаратора присутствует также низкий уровень, а на неинвертирующем входе – напряжение ниже 0,7 В (через схему гистерезиса, нижний предел в которой задан на уровне 0,7 В). Конденсатор С2 заряжен на напряжение между входом схемы и неинвертирующим входом компаратора.
Когда на входе схемы появляется высокий уровень, то на входе компаратора появляется напряжение выше 0,7 В и вызывает его переключение. В этот момент конденсатор С1 начинает заряжаться через резистор R2. Когда напряжение на нем возрастает выше верхней границы гистерезиса, компаратор снова переключается и конденсатор разряжается через диод D1 и резистор R1. Таким образом, схема переходит в свое первоначальное состояние.
Для начала необходимо рассчитать значение резисторов R3, R4 и R5, задающих гистерезис (см. прием #3). Далее, рассчитываются значения C1 и R2 по формуле 8. Диод D1 – любой низковольтный импульсный диод, R1 – 0,01 от R2, С2 – 100..220 пФ.
Пример:
VDD = 5 В, VTH = 3 В, VTL = 2,5 В
По приему #3: R4 = 1 кОм, R5 = 1,5 кОм и R3 = 12 кОм
TPULSE = 1 мс, C1 = 0,1 мкФ и R2 = 15 кОм
Диод D1 – 1N4148, R1 = 220 Ом, C2 = 150 пФ
#8. Мультивибратор (прямоугольный сигнал)
На основе компаратора или операционного усилителя можно построить генератор сигналов прямоугольной формы – мультивибратор. Как и в предыдущем приеме #7, в основе схемы лежат две обратные связи: цепочка гистерезиса на резисторах R1, R2 и R3 и времязадающая цепь RТCТ (рисунок 9).
Для начала необходимо рассчитать цепочку гистерезиса (см. прием #3), учитывая, что компаратор устойчиво работает при равномерно распределенных напряжениях переключения относительно рабочей точки VDD/2, т.е. VTH = 1,66 В и VTL = 3,33 В. Далее, по формуле 9 необходимо рассчитать значения RT и CT.
Пример:
VDD = 5 В, VTH = 3.33 В, VTL = 1.66 В
R1 = R2 = R3 = 10 кОм
FOSC = 480 Гц => RT = 15 кОм, CT = 0,1 мкФ
#9. Мультивибратор (пила)
Для получения на выходе мультивибратора сигналов пилообразного напряжения требуется небольшая доработка схемы из приема #8 (рисунок 10).
В начале цикла времязадающий конденсатор СТ разряжен через диод. На выходе компаратора появляется высокий уровень, благодаря которому начинается зарядка конденсатора СТ через резистор RT. Когда уровень напряжения поднимается выше напряжения гистерезиса, происходит переключение компаратора. В этот момент происходит быстрая разрядка конденсатора через диод и цикл повторяется.
Напряжение на конденсаторе нарастает по обратно экспоненциальному закону; в начальный момент времени отрезок экспоненты можно считать линейным, что и используется для генерирования пилообразного напряжения. Выходом схемы является напряжение на конденсаторе.
При расчете важно учитывать то, что напряжение на выходе будет задаваться пределами петли гистерезиса. Кроме того, напряжения гистерезиса должны быть равномерно разделены в рабочей области напряжений компаратора. Далее, по формуле 10 рассчитываются значения RT и CT.
Пример:
VDD = 5 В, VTL = 1,66 В и VTH = 3,33 В
R1 = R2 = R3 = 10 кОм
FOSC = 906 Гц => RT = 15 кОм, CT = 0,1 мкФ
Для повышения линейности пилообразного напряжения необходимо заменить времязадающий резистор RT на токоограничительный диод (рисунок 11). Тогда параметры схемы рассчитываются по формуле 11.
#10. Удвоитель напряжения
Используя мультивибратор из приема #8, можно построить удвоитель напряжения на конденсаторах (рисунок 12).
В начале цикла, когда на выходе компаратора низкий уровень, происходит заряд конденсатора С1 через диод D1. Когда мультивибратор переключается, на выходе появляется высокий уровень, диод D1 закрывается и заряд конденсатора останавливается. Напряжение на конденсаторе С1 складывается с напряжением на выходе компаратора и оказывается равным примерно двум напряжениям питания. Этим удвоенным напряжением заряжается конденсатор С2 через диод D2, который в данный момент открывается. Далее напряжение на выходе мультивибратора становиться низкого уровня, диод D2 закрывается и на С2 остается накопленный заряд удвоенного напряжения. В этот момент открывается D1 и цикл зарядка/разрядка повторяется.
Напряжение на выходе схемы нестабильно относительно нагрузки, поэтому такие схемы чаще всего используют как источники напряжения с конечным внутренним сопротивлением. Эквивалентная схема представлена на рисунке 13.
Для правильного расчета схемы необходимо знать максимальный выходной ток, который не может быть больше половины максимального выходного тока компаратора. На основе выходного тока нужно определить выходное сопротивление. Далее, по формуле 12 рассчитываются значение конденсатора и частота мультивибратора. Сам мультивибратор рассчитывается по формулам из приема #8.
Пример:
По приему #8 рассчитываем мультивибратор на частоту FOSC = 4,8 кГц
C1 = C2 = 10 мкФ
ROUT = 21 Ом
#11. Генератор ШИМ
Для генерирования ШИМ сигнала, управляемого уровнем напряжения, можно использовать мультивибратор с пилообразным выходом (прием #9).
Далее, с помощью второго компаратора, входное задающее напряжение сравнивается с пилообразным напряжением мультивибратора. На выходе компаратора получается ШИМ сигнал, скважность которого пропорциональна входному напряжению (рисунок 14).
Для корректной работы ШИМ генератора необходимо рассчитать мультивибратор по формулам из приема #9. Важно учесть, что верхний и нижний пределы гистерезиса мультивибратора должны быть соответственно выше и ниже максимального и минимального значения задающего напряжения. Если входное напряжение будет ниже, чем нижний предел гистерезиса, то скважность выходных импульсов будет равна 0, т.е. выходные импульсы будут отсутствовать и на выходе схемы будет низкий уровень. Аналогично, если задающее напряжение будет выше верхнего предела гистерезиса, то на выходе будет высокий уровень.
#12. Операционный усилитель на основе компаратора
При обработке сигналов с датчика требуется усиление для полного использования всего диапазона преобразования АЦП. Обычно для этого используют операционные усилители, но в приложениях, где важна цена или размер платы добавление внешних элементов не всегда оправдано.
Как раз для такого типа приложений используется следующий прием: для медленных сигналов встроенный компаратор можно заставить работать в режиме усиления. Причем, есть возможность построения как неинвертирующего, так и инвертирующего усилителя (рисунок 15 и рисунок 16).
Резисторы R1 и R2 рассчитываются по формуле 13, исходя из нужного коэффициента усиления. Далее рассчитывается ФНЧ на R3 и С2 (формула 14).
Частота среза этого фильтра должна быть в 2-3 раза выше, нежели максимальная частота полезного сигнала. Резистор R3 должен иметь невысокое сопротивление, т.к. от него зависит выходное сопротивление. Частота среза входного фильтра на конденсаторе С1 должна быть такая же, как у выходного. Значение С1 рассчитывается по формуле 15.
Для расчета инвертирующего усилителя используется формула 16. ФНЧ для этого усилителя рассчитываются аналогично неинвертирующему.
Пример:
Gain = 6,156, R1 = R3 = 19,8 кОм
R2 = 3,84 кОм, C1 = 0,047 мкФ, FCORNER = 171 Гц
C2 = 0,22 мкФ
#13. ШИМ драйвер
Для управления силовыми ключами MOSFET требуются специальные драйвера, имеющие частотный или ШИМ сигнал на выходе. Такой драйвер можно построить на основе компаратора. На рисунке 17 показан драйвер для верхнего MOSFET ключа.
Схема работает следующим образом. В начале ключ закрыт и через нагрузку не течет ток. Через токовый датчик R1 ток не течет, соответственно на неинвертирующем входе компаратора присутствует нуль. На инвертирующем входе компаратора присутствует задающее напряжение больше нуля. На выходе компаратора присутствует низкий уровень, который открывает силовой ключ. Ток в цепи нагрузки начинает нарастать медленно, т.к. в цепи присутствует индуктивность.
Когда напряжение на токовом датчике достигает значения задающего напряжения, происходит переключение компаратора. Ключ закрывается и напряжение начинает падать через диод. Как только напряжение на токовом датчике R1 упадет ниже задающего, компаратор опять переключается и цикл повторяется. Для задания времени переключения служит цепочка R2C1. Она позволяет задать оптимальный режим работы для MOSFET ключа.
В итоге, ток в нагрузке колеблется около заданного (рисунок 18).
Расчет параметров драйвера начинается с определения рабочей частоты FSWX. Она определяется системными требованиями. Далее, выбирается подходящий ключ MOSFET и диод в соответствии с током через нагрузку. По этим параметрам рассчитывается времязадающая цепь (формула 17).
Зная напряжение и ток в нагрузке, по формуле 18 рассчитывается значение индуктивности. По току в нагрузке выбирается и токовый датчик R1, который обеспечивает падение напряжения порядка 0,1 В при максимальной нагрузке.
Пример:
FSWX = 10 кГц, R2 = 22 кОм, C1 = 0,01 мкФ
IRIPPLE = 100 мА, VDD = 12 В, VL = 3,5 В
L = 4,25 мГн
#14. Дельта-сигма АЦП
Этот прием описывает построение программно-аппаратного дельта-сигма АЦП. Такой преобразователь состоит из интегратора, компаратора, сэмплера и 1-битного ЦАП (рисунок 19). В данном случае, интегратором является RC-цепочка R1C1, компаратор – встроенный в микроконтроллер. Сэмплер реализован программно, а в качестве ЦАП выступает порт контроллера, выход которого заведен на интегратор через резистор R2. Опорное напряжение VDD/2 образуется с помощью делителя на резисторах R3 и R4.
Принцип работы преобразователя таков. На выходе ЦАП (вывод порта) присутствует привязанная к квантам времени копия состояния компаратора. Получается ШИМ сигнал, скважность которого обратно пропорциональна величине входного сигнала, т.е. при увеличении входного сигнала скважность падает, при уменьшении – растет. Само аналого-цифровое преобразование основывается на цифровом интегрировании скважности модулирующего сигнала ШИМ. Для этого используется два счетчика: первый считает полное количество импульсов в периоде, второй – количество импульсов, когда сигнал на выходе нулевой. Отношение значения второго счетчика к первому эквивалентно отношению входного сигнала к VDD. Важно, что значения эквивалентны лишь в том случае, есть R1=R2. Иначе, они пропорциональны отношению R2 к R1.
Более полная информация по построению дельта-сигма АЦП описана в документе AN700 «Make A Delta Sigma Converter Using a Microcontroller’s Analog Comparator Module».
Пример:
R3 = R4 = 10 кОм
R1 = R2 = 5,1 кОм
C1 = 1000 пФ
#15. Преобразователь логических уровней
Иногда, в системе требуется преобразовать уровень логического сигнала. Эта функция может быть реализована с помощью компаратора (рисунок 20).
На инвертирующем входе компаратора необходимо задать уровень, равный половине входного преобразуемого напряжения (VIN/2). Это можно сделать либо с помощью внешнего делителя на резисторах R1 и R2, либо с помощью внутреннего генератора опорного напряжения, если он присутствует в контроллере. Задержка преобразования на встроенном компараторе составляет порядка 300 нс.
Пример:
VIN = 0..2 В, VIN/2 = 1 В, VDD = 5 В
R2 = 10 кОм, R3 = 3,9 кОм
#16. Логические функции
Во встраиваемых системах часто возникает необходимость реализации той или иной логической функции. Для этого приходиться ставить дополнительную микросхему, что не всегда удобно. В этом примере показано, как можно реализовать основные логические функции на основе встроенного в микроконтроллер компаратора.
Необходимо учесть следующее:
Для корректной работы схемы на входах должны быть следующие уровни: «0» – GND, «1» – VDD;
Сопротивление R2 = 2*R1, при этом общее сопротивление должно быть достаточно большим, чтобы минимизировать потребление схемы. R3 = R4;
Входные резисторы и входная емкость компаратора образуют интегрирующую цепочку, что влияет на быстродействие схемы;
Сам компаратор имеет задержку порядка 300 нс, что также необходимо учитывать при проектировании.
Важно:
R1 = R2 = R3;
Ток через резистор R4 должен соответствовать прямому току через диоды.
#17. RS-триггер
На основе компаратора можно построить RS-триггер (рисунок 28). На входах компаратора с помощью резистивных делителей R1..R4 заданы уровни напряжения VDD/2. На неинвертирующий вход подается сигнал положительной обратной связи с выхода компаратора. Для переключения полученного триггера в нулевое состояние необходимо подать низкий уровень на вход R, для переключение в единичное состояние – на вход S. Диоды на входах не позволяют подать одновременно два высоких уровня.
Задержка переключения триггера составляет порядка 300 нс, что определяется внутренней задержкой компаратора.
Резисторы R1..R5 должны иметь одинаковый номинал, при этом суммарное сопротивление резисторов R1, R2 и R3, R4 должно быть достаточно большим для уменьшения потребления схемы.