Почему управление мощностью с помощью транзистора мешает последовательной связи MHZ19B?
Я пытался отключить MHZ19B (datasheet и teardown фото: revspace.nl/MH-Z19B). Я использовал Arduino, NPN, PNP транзисторы и МОП-транзисторы, а также схему ниже для подключения датчика к ESP32. Во всех случаях ШИМ - связь работает отлично! Я могу выключить датчик, снова включить его, и значения, полученные из ШИМ-связи, будут такими, как и ожидалось. Однако когда я подключаю линии Rx и Tx (к программным последовательным выводам Tx и Rx соответственно на выводах Uno A0 A1 или ESP32 pins 32 33), они выплевывают тарабарщину, и ШИМ-сигнал также страдает от икоты.
В противном случае, без какого-либо логического управления питанием, MHZ19B отлично работает и может общаться с чем угодно через UART, даже с USB-портом моего ПК через FTDI.
Я добавил резисторы к линиям Rx и Tx, чтобы напряжение на них не превышало Vcc. Я попробовал диоды 1n4007 (они единственные, которые у меня есть; диодов Шоттки тоже нет). Я попробовал NPN-эквивалентную оптопару. Я также попытался включить датчик от моего макета. У меня нет осциллографа :(
Мой школьный учитель сказал просто использовать ШИМ, но когда я искал решение этой ошибки, то заметил, что сотни других людей имеют точно такую же проблему со всевозможными различными датчиками и нагрузками с микросхемами; никто не придумал общего решения.
Я одержим этим уже несколько недель, и если кто-нибудь может помочь или порекомендовать книгу о схемах датчиков, я буду очень признателен. Спасибо!
@Constantin, 👍2
Обсуждение2 ответа
Просто догадываюсь, но я предлагаю вам использовать переводчик уровня. Кроме того, когда вы выключаете датчик, последовательный выход должен заземляться, отключая этот канал. Проверьте напряжение и установите на транзистор байпасный колпачок для датчика. Вы можете использовать простой логический уровень P-канала fet,только резистор 50 Ом в шлюзе для предотвращения колебаний. Теперь ваш вывод будет активным низким, а не активным высоким. Если вы останетесь с транзисторами, сделайте R2 и R3 510 Ом, чтобы у вас было достаточно привода для транзистора, и убедитесь, что это НЕ устройство Дарлингтона, если это так, у вас не будет достаточного напряжения для датчика.
Я думаю, что датчик имеет встроенный переводчик уровня, так как в спецификации указано, что он может использовать логику 3,3 В или 5 В. Я попытался добавить конденсатор емкостью 100 мкФ между +5 В и VIN, но я не знаю, помогло ли это что-нибудь. Сам датчик имеет 12 внутренних конденсаторов (или, может быть, 16, потому что есть шелкография с надписью C16), подключенных к земле. Есть ли альтернатива использованию транзисторов? Как некоторые датчики просто засыпают и практически не потребляют энергию?, @Constantin
Этот конденсатор только снизит вашу помехозащищенность и сделает его более восприимчивым к линейному шуму. Этой информации недостаточно, это рабочие напряжения, а не входные напряжения. Логика 3,3 В и 5 В несовместимы друг с другом, хотя оба могут работать при обоих напряжениях. Если вы посмотрите на входную структуру, вы увидите, что пороговое значение изменяется в зависимости от напряжения питания. Пороговые значения составляют примерно 40% и 60% от VCC. Это действительно справедливо только в том случае, если солнце встанет на восточной стороне Луны 33 февраля. Что касается того, что можно почитать, я бы посоветовал вам начать с чего-нибудь в области базовой электроники., @Gil
При устранении подобной проблемы попробуйте "разрезать мир пополам", прежде чем делать что-либо еще. В этом случае замените всю цепь ручным выключателем (или проводом) и вручную включите и отключите питание датчика. Если у вас все еще есть проблема, то схема не имеет отношения к решению. Если проблема исчезнет, то проблема в схеме.
Как только этот эксперимент будет выполнен, снова "разрежьте мир пополам", работая над "половиной", в которой заключается проблема. Повторяйте, пока не останется только один компонент.
Спасибо! Да, я делал это с самого начала. Я даже не использовал микроконтроллер для включения и выключения датчика. Я просто подключил порты Rx и Tx к компьютеру для мониторинга значений и запитал датчик от источника питания, подключенного к настенной розетке. Мне удалось получить 4,6 В @50 миллиампер, используя схемы на основе NPN или PNP, что соответствует спецификациям. Но датчик никогда не хотел работать. Я подозреваю, что внутренние конденсаторы что-то делают. Я бы попытался добавить конденсатор, встроенный в схему, но я не знаю, как это сделать. Я думаю, что датчику нужно сначала набрать 150 мА, чтобы включить свою логику., @Constantin
Рад, что вы сначала попробовали простой маршрут, но, похоже, у вашей настройки все еще были проблемы. Вы можете получить источники питания 5 В от источников питания MeanWell, которые являются дешевыми и надежными., @user3765883
Датчик работает. Я запускал его 24/7 в течение 3 месяцев с чтением каждые 60 секунд. Если бы это не сработало, я бы никогда не написал статью о транзисторах. Кроме того, зачем мне нужен источник питания мощностью 100 Вт для проекта, предназначенного для использования обычного зарядного устройства сотового телефона 5 В 1A?, @Constantin
Нет, нет - не 100 Вт или даже близко. Например,https://www.meanwell.com/webapp/product/search.aspx?prod=GS05U-USB представляет собой настенный штекер мощностью 5 Вт (1,0 А при 5 В) с разъемом USB - идеально подходит для надежного питания целого ряда проектов. Отрежьте конец USB - кабеля и подсоедините провода + / - к штекеру, который подходит для Arduino, и "Боб твой дядя" (фраза из фильма "Самый быстрый индеец в мире")., @user3765883
- Arduino framework: сколько экземпляров SoftwareSerial можно использовать одновременно с esp32
- Проблема с использованием модуля Bluetooth с платой ESP32s2
- Когда следует использовать транзистор, МОП-транзистор, а когда следует использовать реле?
- I2C связь между Arduino Uno и Nodemcu32-s (ESP32)
- Лучшая практика буферизации для непрерывной записи на SD-карту
- Uno - ESP32 SoftwareSerial связь не работает
- Аппаратное управление последовательным потоком ESP32 и полная поддержка espressif/arduino-esp32
- Нужен ESP32 для использования 3 последовательных портов
Вам нужно отсоединить последовательный порт, прежде чем включать питание модуля. Я думаю, что происходит то, что вывод TX на MCU (RX на MHZ19b) высок, когда он ничего ему не посылает. Таким образом, вы получаете 3,3-5В, входящее в MHZ19b, который выключен (что плохо). У многих чипов есть зажимные диоды на входных контактах. Таким образом, вы, по сути, питаете чип через вывод TX. Вывод TX может подавать достаточно энергии на чип, что приводит к возникновению странных вещей. Например, тарабарщина UART-данных., @Gerben
PS R2 выглядит странно для меня. Я думаю, что вам нужно переместить его в горизонтальную секцию. В противном случае вы получаете только 2,5 В у основания Q1, когда Q2 включен., @Gerben
Похоже, что software serial не имеет функции "отключения". Обходной путь состоит в том, чтобы установить контакт TX на ВХОД и на LOW (
pinmode(txPin, INPUT); digitalWrite(txPin, LOW);
). Затем убедитесь, что вы не вызываете никаких команд mySerial.print при выключенном питании. Затем при включении питания на чипе сделайте обратное (pinmode(txPin, OUTPUT); digitalWrite(txPin, HIGH);
, @Gerben@Gerben R2 в порядке. База Q1 не будет идти более чем на одно падение диода ниже 5 В независимо от значения R2., @Wirewrap