Наш магазин на eBay Наш магазин на AliExpress Наш канал в telegram

Формирователь импульсов повышенного напряжения для расширения функционала шлюза RH-0004

  1. Введение
  2. Схема
  3. Программа для микроконтроллера
  4. Готовое устройство

Введение

Существуют микросхемы памяти с интерфейсом 1-Wire (DS1982, DS2502, AN1990 и другие), которым для выполнения некоторых процедур (запись данных, финализация) нужны импульсы повышенного напряжения (до +12 Вольт) различной длительности. Шлюз UART-to-I2C/SPI/1W (RH-0004) не имеет возможности сформировать такой импульс, поэтому в обычных условиях работать с такими микросхемами с помощью шлюза RH-0004 можно только частично. Приведённая в этой статье схема позволяет расширить функционал шлюза и обеспечивает возможность полнофункциональной работы с подобными микросхемами (при наличии внешнего источника питания).

Идея заключается в том, чтобы взять стандартный контур переключения уровней и добавить к нему формирователь импульса нужной ширины на одном из самых дешёвых микроконтроллеров ATtiny13A, а управление этим формирователем реализовать через цифровые входы/выходы шлюза (у него есть 3 I/O, управление которыми доступно в любой конфигурации).

Реализация включает в себя две части: 1) схема с печатной платой, 2) программа для микроконтроллера.

Схема

Схема дополнения для RH-0004

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

Когда контроллер ATtiny13A обесточен или его выход PB0 сконфигурирован на вход (по-умолчанию после старта) — затвор транзистора T2 подтянут к линии Supply и транзистор T2 открыт. Соответственно, затвор транзистора Т3 притянут к шине GND и этот транзистор закрыт. В результате этого затворы транзитсоров T1 и T4 оказываются через резистор 10 КОм притянуты к линии +12 Вольт, в результате чего транзистор T1 открывается, а транзистор T4 закрывается (T1 — N-канальный, а T4 — p-канальный). Таким образом, в этом случае напряжение +12 Вольт оказывается отключенным от шины 1-Wire, а открытый транзистор T1 свободно пропускает на эту шину сигналы от шлюза.

По сигналу от шлюза вывод PB0 на необходимое для подачи программирующего импульса время переключается на выход и притягивается к шине GND, в результате чего транзистор T2 закрывается, затвор транзистора T3 притягивается к линии Supply, что приводит к открытию этого транзистора. В результате затворы транзисторов T1 и T4 оказываются притянуты к GND, что приводит к закрытию транзистора T1 и к открытию транзистора T4. Таким образом, на нужное время линия 1W шлюза оказывается отключена от шины 1-Wire, а через открытый транзистор T4 на эту шину подаётся напряжение +12 Вольт.

Управляющий сигнал от шлюза формируется следующим образом: уровни на линиях I/O-1, I/O-2 кодируют выбор нужного выходного импульса, а изменение с высокого на низкий уровня на линии I/O-0 служит сигналом для начала формирования этого импульса. Всего таким образом можно закодировать до 4-х различных выходных импульсов. Приведённая в статье программа умеет формировать два различных выходных импульса: длительностью 508 мкс (при I/O-1=0, I/O-2=1) для записи микросхем типа DS2502, и длительностью 104 мс (при I/O-1=1, I/O-2=1) для финализации микросхем типа AN1990.

Что касается внешнего напряжения, то на эту схему можно подавать напряжение в пределах от Vpull-up+3 до +20 Вольт (опять же, на случай, если для других микросхем понадобится напряжение программирования, отличное от +12 Вольт). Плата разведена для подключения в качестве источника внешнего напряжения компьютерного БП (точнее говоря — разъёма питания дисковода 3,5″, при этом используются только контакты GND и +12В).

Архив с печатной платой (DipTrace)

Программа для микроконтроллера

Выводы PB2, PB3, PB4 запрограммированы на вход и на них заведены сигналы I/O-0, I/O-1, I/O-2 соответственно. Входы PB3, PB4 используются для выбора нужного выходного импульса, а вход PB2 — для запуска алгоритма формирования этого импульса. Выходной сигнал формируется на выводе PB0. Изначально PB0 запрограммирован на вход, но в защёлку записан ноль, и на нём внешней подтяжкой к шине питания формируется высокий уровень. При необходимости сформировать низкий уровень, PB0 просто переключается на выход.

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

Первые два байта EEPROM определяют количество циклов для первого таймера и его длительность, соответственно. Следующие два байта — то же самое для второго таймера. Длительность таймера в мкс можно рассчитать по следующей формуле: (256-T)*26,673, где T — соответствующее значение из EEPROM. Заданное количество циклов находится как (256-C), где C — соответствующее значение из EEPROM. Например, для второй длительности импульса в EEPROM записаны значения 0xE7(231) и 0x64(100). В этом случае длительность таймера будет равна (256-100)*26,673 = 4161 мкс, а количество циклов для этого таймера (256-231) = 25. Таким образом общая длительность импульса составит 25*4161 = 104025 мкс, то есть примерно 104 мс.

Устройство расчитано на использование внутреннего RC-генератора на 9,6 МГц, поэтому при программировании контроллера должны быть установлены фьюзы: SPIEN, SUT0 и CKSEL0 (они равны нулю, то есть в PonyProg напротив них стоят галочки).

Архив программы с исходниками и готовой прошивкой (asm / hex)

Готовое устройство

Фото готового устройства

Поскольку в доке на DS2502 довольно жесткие пределы для напряжения программирования (11,5-12 Вольт), то я решил подстраховаться на случай завышения различных напряжений и дополнительно развёл на экспериментальной плате две пары включенных встречно параллельно диодов по линиям напряжения питания и напряжения программирования (на фото обведены жёлтым), а также джамперы, позволяющие эти диоды зашунтировать (синие джамперы на фото). Диодами можно в случае необходимости уронить нужные напряжения на величину до 0,6 Вольт (в зависимости от того, какие впаять диоды). Впрочем, дальнейшие эксперименты показали, что в случае с БП моего компьютера это лишнее (хотя у него напряжение по линии +12 Вольт составляет 12,24 Вольта).

Вот так выглядит устройство, подключенное к шлюзу:

Устройство в сборе со шлюзом

По задумке разъём для подключения к шлюзу должен был быть угловой, тогда девайс и шлюз после соединения находились бы в одной плоскости, однако нужного разъёма в наличии не оказалось, поэтому соединяется всё вот так, — углом. Впрочем, поскольку это не коммерческое устройство, а экспериментальный образец, то я считаю, что такое вполне приемлемо.

На этом на сегодня всё. Удачи!

Update 20.01.2022

Не так давно пришлось собрать ещё два подобных устройства, в связи с чем появились некоторые уточнения (не смотря на то, что оригинальная схема была честно скопипастена из документации на max31826):

  • Для более надёжного запирания и быстрого переключения T1 и T4 (в основном конечно для более надежного запирания T4) резистор 10К между ногами GS транзистора T4 нужно заменить на 1K..2К, не более (в противном случае высок риск выгорания T4 или, что более вероятно, T1).
  • Первую ногу контроллера нужно притянуть через резистор 10K к шине питания, поскольку низкий уровень на этой ноге используется для аппаратного сброса контроллера (сигнал RESET).

Кроме того, поскольку контроллеры ATtiny13 стали довольно дефицитными, пришлось портировать программу под ATtiny45, а также слегка переделать печатку (корпус ATtiny45 чуть шире, чем у ATtiny13).

Архив с печатной платой под ATtiny45 (DipTrace)

Архив программы для ATtiny45 с исходниками и готовой прошивкой (asm / hex)

Ну и в этот раз я всё-таки нашёл угловые разъёмы, теперь всё вместе это выглядит вот так:

Устройство на контроллере ATtiny45 в сборе со шлюзом

Комментарии 2

  • Доброго времени суток! Попробовал собрать данную схему, но не знаю как проверить правильно ли все прошил. Есть способ проверки работоспособности в связке с RH-0004, но без микросхем памяти?

    • Ну, если есть осциллограф, то вполне. Можно даже и без RH-0004. Просто подать питание + нужные комбинации на входы формирователя и убедиться, что на выходе формируются импульсы +12В нужной ширины.

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