Перейти к содержимому

Защита входов микроконтроллера от помех и наводок

Разрабатывая устройства на микроконтроллерах (MCU), неизбежно сталкиваешься с необходимостью подключения к MCU различных внешних датчиков и устройств. В данной статье рассматривается подключение только цифровых входов (0 или 1), аналоговые входы нужно защищать по другому. Обычно цифровые входы MCU рассчитаны на совсем небольшое напряжение, не превышающее напряжение питания самого MCU – 5 или 3,3В. При подключении кнопок или датчиков, которые расположены рядом с микроконтроллером, обычно проблем не возникает, достаточно простого керамического конденсатора и резистора для подавления помех и дребезга контактов. Проблемы начинаются, когда требуется подключить 12-вольтовые датчики, да еще длинными шлейфами (проводами). На длинных проводах при включении мощной нагрузки могут наводиться достаточно сильные помехи, которые выведут микроконтроллер из строя. Я столкнулся с данной проблемой, когда стал работать над созданием wifi-телеметрии с функциями охранно-пожарной сигнализации. Почти все проводные сенсоры ОПС – PIR (детекторы движения), дымовые и т.д., рассчитаны на напряжение питания не ниже 9В. Да, обычно внутри них строит механическое или электронное реле, к которому можно подключить шлейф с напряжением 3,3В, но наведенные помехи никто не отменял.

В статье рассмотрен вариант подключения к MCU “стандартного” датчика движения PIR с питанием 9-24В, внутри которого стоит электронное реле с нормально замкнутыми контактами. При обнаружении движения контакты размыкаются. Чтобы обнаружить изменения состояние реле, необходимо “подтянуть” один из выводов реле / вход MCU / к питанию с помощью резистора.

Все тоже самое можно отнести и простейшим датчикам дверей и окон, датчикам дыма, газа и т.д.

При выборе схемы я особое внимание на ток потребления схемы, особенно при отключенном шлейфе, так как таких входов обычно не один, а от пяти и больше. И тратить лишние миллиамперы (особенно при питании от аккумулятора) на нагрев окружающего воздуха особого желания не вызывает.

 

Вариант 1. Используем супрессор на каждом входе

Самый простой вариант защиты – использовать так называемый “супрессор” или TVS-диод – специальный стабилитрон, способный пропускать через себя значительные помехи за короткое время.

Защита с помощью супрессора

Похожая схема сейчас применяется везде и всюду, несмотря на недостатки. Основной защитный элемент в этой схеме – D1 P6KE6.8А. Это минимальное напряжение для супрессоров. Здесь стоит применять “односторонний” супрессор (не P6KE6.8CА), это поможет подавить “отрицательную” помеху до уровня ~0.8-1.0В (в случае применения двухстороннего диода напряжение “минус” будет ограничено уже на уровне ~6,8В).

Резистор R2 осуществляет “подтяжку” логического уровня к 1, когда контакты разомкнуты. Изменяя номинал этого резистора, можно изменять ток, протекающий через шлейф и контакты в состоянии покоя.

Резистор R1 номиналом 10-47 Ом защищает D1 от выгорания при длительных помехах или замыкании шлейфа на +12В. Вместо резистора я часто использую полупроводниковый самовосстанавливающийся предохранитель на 50 мА.

С1 – просто защита от кратких помех.

Достоинства:

  • Простота схемы
  • Когда шлейф не подключен (например в настоящее время этот вход не используется), почти нет тока “покоя” через элементы. Но это не точно (большой ток утечки TVS диода)
  • Нет падения напряжения на элементах схемы пока сигнал “добирается” до входа MCU

Недостатки:

  • Нет гальванической развязки от шлейфа
  • Ввиду того, что шлейф соединен “напрямую” со входом MCU, многие помехи успешно передаются на вход, не смотря на конденсатор.
  • При замыкании в шлейфе +12 на сигнальный вывод выгорит либо R1, либо D1, либо и то и другое вместе. А может быть и блок питания. И MCU за собой легко может потянуть.
  • 6,8В – это минимальный номинал для TVS диодов. В случае применения ESP8266 / ESP32 (напряжение питания которых составляет 3,3В) это уже является опасным напряжением для микроконтроллера.
  • К сожалению, токи утечки для низковольтных TVS-диодов иногда настолько велики, что сам диод может просаживать линию до “0” даже при отключенном шлейфе. Для TVS-диодов на 10В и выше токи покоя существенно ниже, но при 10В MCU почти гарантированно будет выведен из строя. Соответственно и ток через R1 будет всегда, даже когда шлейф не замкнут.

Несмотря на недостатки, эту схему вполне можно применять в некоторых случаях.

 

Вариант 2. Защита на диодах и супрессоре по питанию

Классическая схема защиты MCU на диодах. Диоды защиты уже присутствуют в самом микроконтроллеры, однако внутренние диоды рассчитаны на очень небольшие токи, поэтому стоит применить внешние.

Защита на диодах

Резистор R2 осуществляет “подтяжку” логического уровня к 1, когда контакты разомкнуты. Изменяя номинал этого резистора, можно изменять ток, протекающий через шлейф и контакты в состоянии покоя.

Резистор R1 номиналом 10-47 Ом защищает D1 от выгорания при длительных помехах или замыкании шлейфа на +12В. Вместо резистора я часто использую полупроводниковый самовосстанавливающийся предохранитель на 50 мА.

С1 – просто защита от кратких помех.

D1 “перенаправляет” положительные помехи на шину питания, где она гасится супрессором D3 и конденсаторами блока питания. Однако следует иметь в виду, что для некоторых микроконтроллеров 7В уже слишком опасно.

D2 защищает ограничивает отрицательные помехи на уровне 0,8-1,0В. Здесь можно применить диоды Шоттки, у них немного ниже “прямое” падения напряжения, но у них существенно выше токи утечки.

R3 ограничивает ток через внутренние диоды микроконтроллера.

Достоинства:

  • Простота схемы
  • Когда шлейф не подключен (например в настоящее время этот вход не используется), почти нет тока “покоя” через элементы, кроме токов утечки через диоды

Недостатки:

  • Нет гальванической развязки от шлейфа
  • Ввиду того, что шлейф соединен “напрямую” со входом MCU, многие помехи успешно передаются на вход, не смотря на конденсатор.
  • TVS-диод нужен только один – по питанию. Но 2 диода на каждый вход. Дело даже не в стоимости, а в месте на плате.
  • При замыкании в шлейфе +12 на сигнальный вывод супрессор и MCU, скорее всего, выйдут из строя.
  • Большие токи утечки через низковольтные TVS-диоды

 

Вариант 3. С гальванической развязкой на оптроне

Другое название – токовая петля. Если Вы почитаете форумы на тему электроники и микроконтроллеров, то каждый второй будет упорно советовать использовать оптрон и токовую петлю. Якобы архиудачный и архинадежный способ. В китайских модулях очень часто применяются оптроны – где надо и где не надо. Но на мой взгляд, применение оптронов оправдано далеко не во всех случаях.

Токовую петлю удобно использовать для подключения нормально разомкнутой кнопки (или какого-либо датчика) на длинном проводе, в этом случае ток через “петлю” будет идти только при нажатии на эту самую кнопку. Получается очень экономичное решение в плане потребляемого тока. Напряжение питания “кнопки” при этом может быть любым (в разумных пределах конечно), стоит только правильно подобрать резистор R1.

Оптрон целесообразно использовать, когда требуется гальваническая развязка – то есть “земля” шлейфа не должна быть никак связана с “землей” MCU. На схеме я их обозначил отдельными символами. Но это также потребует применения разных блоков питания, не связанных между собой.

Токовая петля

Резистор R1 задает ток через светодиод и контактную группу. В связи с тем, что светодиод требует для своего пропитания довольно большой ток (десятки миллиампер), приходится с этим мириться. Значение резистора должно рассчитано исходя из среднего тока светодиода 20 мА – это номинальное паспортное значение для PC817. Этот ток можно снизить в несколько раз, оптопара нормально работает и при 5 мА, но это всё равно достаточно много, особенно при батарейном питании. Для других оптопар обратитесь к справочникам.

Диод D1 защищает оптопару от обратного напряжения.

Резистор R2 служит для ограничения тока через транзистор оптрона. Его можно поставить в эмиттер или коллектор, в зависимости от того, какой сигнал Вам нужен – инвертированный или нет. Если резистор включен как на схеме выше, то при замкнутых контактах на входе MCU будет +3,3В. Если резистор расположить в цепи коллектора и сигнал снимать с коллектора – то логический ноль.

Достоинства:

  • Гальваническая развязка MCU от входа
  • Защита от коротких помех – светодиод просто не успеет среагировать из-за инерционности

Недостатки:

  • Большой ток в первичной цепи (токовой петле). Это будет большой проблемой для охранно-пожарных сенсоров, так как для них нормой считается нормально-замкнутые контакты. То есть в режиме охраны каждый (повторяю – каждый) из входов будет кушать приличный ток 20мА. Если входов 8, то это уже 8*20=160мА, если 16 – то 320мА. И тратится все это по сути на нагрев окружающей среды, то есть впустую. Когда устройство переходит на питание от аккумулятора, то становится вообще грустно. Это основная причина, по которой я сознательно избегаю использования оптронов.
  • Довольно заметная инерционность. Для ОПС это вообще не критично, даже плюс (своеобразный фильтр). Но если попытаться применить оптроны, например для шины I2C, боюсь ничего хорошего из этого не выйдет.

 

Вариант 4. С использованием повторителя на транзисторе

В настоящее время для охранно-пожарных схем я пользуюсь схемой, приведенной на следующем рисунке:

Защита на транзисторе

Резистор “основной” подтяжки R1 задает ток через контактную группу. Для относительно коротких шлейфов можно установить резистор побольше, для длинных – поменьше, чтобы увеличить ток через шлейф и тем самым немного погасить помехи. Нужен для надежного “запирания” транзистора и диода при разомкнутых контактах.

Резистор R2 номиналом 10-47 Ом защищает D1 от выгорания при длительных помехах. Вместо резистора я часто использую полупроводниковый самовосстанавливающийся предохранитель на 50 мА.

D1 гасит на себе положительные помехи свыше 15В. Здесь стоит применять “односторонний” супрессор P6KE15A (не P6KE15CА), это поможет подавить “отрицательную” помеху до уровня ~0.8-1.0В.

Резистор R3 задает ток базы транзистора. Вместе с C1 этот резистор образует классический RC-фильтр, который работает гораздо лучше, чем в предыдущих случаях.

D2 блокирует транзистор от повышенного обратного напряжения база-эмиттер, так как напряжения эмиттера 3,3В – 5В, а напряжение подтяжки +12В. Кроме того, этот же диод защищает транзистор от любых “положительных” помех до 40-60В и выше, в зависимости от применяемого диода.

R4 – нагрузочный резистор для транзистора

Т1 – повторитель на биполярном транзисторе

Как работает эта схема:

  • Шлейф не подключен или ключ разомкнут. На катоде D2 примерно +12В, на аноде ~3.3В, диод закрыт; транзистор тоже, так как напряжение на базе такое-же как и на эмиттере. Напряжение на входе MCU при этом ~0В.
  • Шлейф замкнут. Напряжение на R3 падает до 0, диод открывается, напряжение на базе транзистора повышается до 3.3В, транзистор открывается, напряжение на входе MCU повышается до логической “1”.

Последовательно с R4 можно включить светодиод (придется существенно снизить номинал R4) – получим дополнительную визуальную индикацию состояния входа.

Достоинства:

  • Позволяет разделить уровни +12В на шлейфе и +5 (3,3В) на микроконтроллере
  • При отключенном шлейфе токи через схему на уровне токов утечки через закрытый диод и транзистор
  • Полноценная RC-цепочка отлично фильтрует короткие помехи
  • Не страшно замыкание +12В на сигнальный провод – просто ничего не произойдет
  • Здесь используется TVS-диод с током утечки, который существенно меньше низковольтных экземпляров

Недостатки:

  • Относительная сложность схемы
  • Нет гальванической развязки от шлейфа
  • При замкнутом шлейфе “тройной” ток:
    • через резистор R1 (основная “подтяжка”)
    • через резистор R3, диод и переход БЭ транзистора
    • и через открытый транзистор и R4

    так что если хотите уменьшить потребляемые токи, выбирайте соответствующие номиналы резисторов. При указанных на предложенной схеме номиналах ток через шлейф составляет ~ 0,2мА (200мкА).

7 комментариев для “Защита входов микроконтроллера от помех и наводок”

    1. Добрый день!
      Оптопары готовые есть. Предлагаемой в самом конце схемы, естественно, нет – это моя разработка.
      Хотя, может быть, я изобрел велосипед, такая вероятность тоже существует. Но я не встречал такого на али.
      Так схему не сложно рассыпухой сделать – хотите на макетке, хотите на плате. Плата под ESP32 если что тут: https://dzen.ru/media/kotyara12/termostat-na-esp32-s-udalennym-upravleniem-chast-2-shema-i-komponenty-6341cfc1909daf54d67c8ac9

      1. Алексей

        Ну 817 оптрон, это не совсем защита от помех, скорее больше развязка. И рабочая частота невысокая. К примеру, UART (19200) им не защитить. TLP281 в этом смысле получше.
        Но я все же надеялся на что-то вроде 1й схемы в виде модулей на 1-2-4-8 каналов

        1. Что-то я первой схеме вообще не доверяю… Хотя попробуйте поискать
          А для UART гораздо лучше готовые модуль согласования с RS485 использовать, но мой взгляд. Там уже все должно предусмотрено, предохранители по крайней мере, стоят

  1. Виктор Гох

    Тут рассмотрено несколько вариантов с акцентом на длинные провода шлейфа и экономию автономного питания. А если питание от сетевого БП и короткий “шлейф” -подойдет самый простой вариант на защитном диоде?
    Если так, тогда другой вопрос, связанный с особенностями GPIO ESP8266, о которых не имел понятия: https://espeasy.readthedocs.io/en/latest/Reference/GPIO.html
    Имея совсем небольшой опыт общения с ESP, я использовал GPIO 12,13,14 и 16 только как выходные, для цифровых датчиков GPIO 0, а для сухого контакта GPIO 3, так как он имеет встроенную подтяжку. Правильно ли это?
    И, собственно главный вопрос: критична ли для надежного рестарта прямая связь GND – GPIO 3. (контакт, ключ, оптрон)
    P.S. В практике ремонта лифтовой электроники, где весьма длинные линии связи,применяются оптроны 4N35.

    1. Добрый день!
      Да, думаю для небольших проводов защита на диоде вполне применима. Или лучше взять односторонний супрессор, но подобрать с минимальным током утечки. Кстати, защита на диоде сама по себе ничего не потребляет, если не считать токи утечки, а они довольно небольшие.
      Если нужно подключить нормально разомкнутый контакт (например обычную кнопку), то вполне можно использовать любой доступный оптрон, не оглядываясь на экономию питания, так как ток будет течь в первичной цепи только при замкнутых контактах, то есть большую часть времени тока не будет.

      По выводам ESP8266 ничего подсказать не могу – надобно изучать. Потому что в последнее время пользуюсь в основном ESP32. А про особенности ESP8266 уже успел подзабыть. Лучше использовать те выводы, которые никак не связаны с внутренними цепями и назначениями. Но на ESP8266 их слишком мало.

      Встроенную подтяжку я нечасто использую, слишком уж там велик резистор (~45 кОм), о многих случаях это слишком много. Проше внешний резистор подцепить, стоит буквально копейки.

      1. Спасибо! Буду использовать 4N35. Я с ними по работе часто сталкивался. Это отличный аналог “неправильных” АОТ127 з-да Протон.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *