Comments 37
Драйвер шины используется в одном из моих проектов, поэтому нумерация элементов начинается не с «1».
Без обид, но куда так спешить с выкладыванием статьи? Перенос куска схемы в отдельный проект (да хоть в копию из основного) и перенумерование элементов и входов заняло бы пять минут.
Из аппнота Using a UART to Implement a 1-Wire Bus Master реализация не устроила потому, что на внешней шине 1wire хотелось иметь сигнал 5V, а входы микроконтроллера (RxD, в частности) к нему не толерантны. Все-таки на длинных линиях те же DS18B20 с паразитным питанием себя чуствуют намного увереннее на 5 вольтах, чем на 3.3.
С одной стороны питание и сигнал 3.3V, с другой 5V.
Недостатки: возможно высокая цена (но это кому как), если нужен только 1 канал, то второй не задействован, нужны PullUp резисторы (я ставлю 4.7к)
Плюсы: Полная гальваническая развязка до 560 V, 2500 V rms for 1 minute per UL 1577, фильтрация шума в обе стороны — своего рода «фича» данного чипа. Если чип с маркировкой A, то предельная частота 1 мГц, все что выше — фильтруется. Четкое разделение «0» и «1», нет промежуточных значений.
Посмотрим на схему повнимательнее:
- Сдвиг уровня — без него (наверное) не обойтись — оставляем.
- Мощное питание — пусть будет, но убираем инвертор сигнала — включить "нулем" не такая уж сложная задача.
- Формирователь нуля сигнала — все известные мне МК поддерживают режим "открытый коллектор", так что необходимость внешней схемы под вопросом.
Итого из 4 транзисторов остаются 2.
Две схемы защиты — внутреннюю убираем — не спасет она, если не спасла внешняя, и во всех известных мне МК она есть на ножках.
При этом реализация внешней защиты на дискретах, причем общего назначения — мне представляется сомнительной, тут просится специализированный компонент, причем у него внутри и стабилитрон есть, про который Вы просто забыли.
Это придирки, вызванные привычкой делать минимально необходимые схемы, а так, конечно, все работать будет и в таком варианте, если стабилитрон поставить.
Формирователь нуля можно выбросить, согласен. Насколько велика вероятность спалить выход МК, включив из-за программной ошибки одновременно ACTIVE PULLUP и лог. 0 на выход?
Внутренняя защита исключительно для подключения второй внешней 1wire шины с сигналом 3V. Если используется только 1wire с сигналом 5V конечно она не нужна.
В любом случае спасибо за замечания. Я же говорю, эта макетка для демонстрации алгоритма работы из основной статьи, а не законченное целевое устройство. Которое пока еще в процессе разработки:)
Конечно, можем выключить, если возьмем выходной транзистор с соответствующим (например 4В) пороговым напряжением, а лучше вообще биполяр, при условии, что потерять 0.2В от питания нам не страшно. Опять таки, управляющий выход должен быть 5в толерантным.
Если мы допускаем возможность таких ошибок, то тут все весьма непросто. Мой опыт говорит, что спалить ножку МК не так легко, она начинает задирать выходное напряжение и ток ограничивается, но это все сугубо индивидуально для разных МК и разных ножек, а вот внешний транзистор уходит в отбой практически гарантировано, поскольку он мощнее на порядок.
Ваш подход (с определенной избыточностью) вполне оправдан, когда речь идет о макетах и прототипе, поскольку будет работать всегда и везде и это несомненное достоинство. Так что, наверное, зря я на него потащил свои представления о серии, когда каждый лишний транзистор — это минус 20 рублей из моего кармана).
В МК истинный «открытый коллектор» бывает крайне редко, и обычно это либо специализированный контроллер или вывод сброса. В остальных случаях на выходах контроллера напряжение не может выходить за рамки его же питания, даже если они находятся в высокоимпедансном состоянии. Для этого и задействован Q4, на его стоке напряжение ничем не ограничено.
Слишком сложно. Почему бы не сделать так, особенно когда изоляции не надо?
R1,R2,Q1,Q2 реализуют классическую схему от Maxim для USART. А Q3, R3 — это кусок от классической схемы I2C шифтера (AN97055). Ну и D1,D2 обеспечивают защиту. Можно заменить на TVS или соответствующую сборку. Имхо проще и дает 5В для 1wire.
Остается вопрос по поводу вероятности спалить выход МК, ошибочно включив active pullup и попробовав выставить «0» на шине 1wire.
А с active pullup я если честно ни разу не сталкивался. Поэтому и не использую
Без active pullup очень плохо работает команда convert при использовании parasite power. Можно уменьшить номинал резистора, подтягивающего выход к +5V, но до определенного уровня. Например, по datasheet на DS18B20 потребление в режиме convert 1.5mA/устройство. Если у нас на шине 20 датчиков и мы даем безадресный convert, то ожидаемое потребление 30mA. Какого номинала должен быть подтягивающий резистор для обеспечения такого тока? ;)
Поставить перед микроконтроллером оптоизолятор типа ISO7221 и закрыть на этом тему? Через него точно ничего не пройдет при любых внятных входных данных. Заодно и защита будет от всякой гадости на длинных линиях.
Только не ОПТО! Я уже писал про ADUM. Опто для цифровых цепей это еще та какаи тут же
Так уже писал… ADUM1250 + NUP2105L
Вы уже определитесь, надо или не надо.
Из всех использованных мною и с моим участием взорвался только один. Но там и полетели практически все источники питания. Веселая авария… Причем свою функцию ADUM выполнил и в этом случае: внутренние цепи не пострадали.
В любом даташите на любой МК прописан максимальный ток, который можно снять/подать с одной ножки и на процессор в целом.
А если серьезно, то не знаю как в других МК но в STM32F100 — 48 ног, смотрю по даташитам: Максимально допустимый выходной ток одного вывода составляет 25 мА; если нагружены несколько выводов, то нужно учитывать ограничение по току линий питания микроконтроллера и линий земли величиной 150 мА. В то же время общее сопротивление выходных транзисторов составляет что-то около 120 ом при 3.3V. Т.е. как раз и есть эти самые 25мА.
В то же время: Разумеется, не следует допускать работу выводов при максимальном токе. Во-первых должен быть запас для более надёжной работы, во-вторых с увеличением тока, смещаются уровни сигналов на выходе из-за падения напряжения на внутреннем сопротивлении ключей.
В общем дым не выйдет, но такой режим не рекомендуем. Про AVR не скажу, ибо не знаю.
Если вы надеетесь, что «выходные транзисторы с сопротивлением 120 ом» способны переварить такой ток, то у меня плохие новости.
Но тут дело в другом, при КЗ выходной транзистор войдёт в насыщение и станет стабилизатором тока, что при 3.3В питании не даст неограниченного роста тока, а только рост выделяемой мощности на ключе.
Если же туда попадёт сильные 5В то проблемы с портом отойдут на второй план, будет совершенно другая более масштабная проблема связанная с защитными диодами.
На STM, если нога латентна к 5V, то ничего не произойдет, что-то читал в даташите на эту тему. Там какой то хитрый механизм компарации 5V с самой же ноги. Если не латентна, то может склеить ласты.
Поведение выходного драйвера оно не зависит от типа контролера, там те же полевики применяют которые становятся источниками тока при увеличении нагрузки при постоянном напряжении на затворе. им страшен разве что тепловой пробой. Причем надо заметить, чем меньше напряжение питания тем меньше ограничение тока на выходе.
Драйвер шины 1-Wire для контроллеров питанием меньше 5V