Последние 9 месяцев мы разрабатывали Wiren Board — компактный индустриальный компьютер с множеством встроенных интерфейсов (Wi-Fi, GPRS, GPS, NFC, Ethernet и т.д.) Мы уже писали о нём, и получили кучу отзывов и пожеланий. В итоге в новую версию было внесено много изменений, и эта статья про самые значительные из них.
По сравнению с апрельским прототипом на плате появились 2 USB-host, интерфейс RS-485 и разъём с 8 GPIO. Кроме этого мы сделали новую схему питания, поддерживающую входные напряжения от 5 до 22 вольт, Passive PoE и подключение Li-Pol аккумулятора, добавили управление низковольтной нагрузкой и аналоговые входы на клеммниках.
![](https://habrastorage.org/r/w780q1/getpro/habr/post_images/241/f94/d36/241f94d36a5f1b0dc122dab2a90b1245.jpg)
Как мы это делали, с какими трудностями столкнулись и что получилось в итоге — читайте в нашей статье.
Wiren Board со снятым процессорным модулем:
![](https://habrastorage.org/r/w1560/getpro/habr/post_images/970/564/e43/970564e437fcfc5c59b9543d7cf3d70e.png)
Внутренняя сторона, обычно закрыта процессорным модулем:
![](https://habrastorage.org/r/w1560/getpro/habr/post_images/978/e0b/661/978e0b66186ab30cc224c353239622ff.png)
В новой версии Wiren Board мы добавили возможность подключения аналоговых сигналов и датчиков (цифровых, резистивных, датчики типа “сухой контакт”), а так же управление низковольтной нагрузкой.
Используемый нами SoC имеет два 12-битных канала АЦП общего пользования. Чтобы увеличить количество доступных каналов АЦП, мы используем мультиплексор SN74HC4851, который соединяет один из 8 каналов с входом АЦП процессора.
![](https://habrastorage.org/r/w780q1/getpro/habr/post_images/c3c/fee/aef/c3cfeeaef721b4c48d73fc13147c0a39.jpg)
Один канал АЦП используется для измерения напряжения питания, семь выведены через резисторы на клеммники. Для защиты выходов от повышенных напряжений достаточно резисторов, так как мультиплексор имеет встроенные защитные диоды. Канал АЦП у нашего SoC имеет программируемый источник тока. Значения резисторов были подобраны таким образом, чтобы при включенном источнике тока иметь возможность измерять сопротивление резистивных датчиков.
Для управления низковольтной нагрузкой (двигатели, светодиодные ленты, замки и т. д.) удобно использовать выходы типа «открытый коллектор» (см. рис.)
Для экономии места аналоговые входы были объединены с каналами управления низковольтной нагрузкой. Недостатком такого решения является небольшой ток, текущий через закрытый выход при напряжениях выше 3.3 В.
Стояла задача придумать схему питания для платы. Требования к схеме питания предъявляются такие:
Другие условия:
Решение:
Так как предполагается питать схему и от аккумулятора, то для линии 5В без повышающего DC-DС преобразователя не обойтись. Была выбрана недорогая микросхема NCP1450 (как выяснилось позже, не лучший выбор). Это step−up DC-DC преобразователь с внешним транзистором.
Напряжение на Li-Pol аккумуляторе 2.7..4.2В, но «плато» на кривой разряда находится в районе 3.7В. Поэтому для получения 3.3В вполне можно использовать LDO.
Мы выбрали линейный регулятор MCP1826, он обеспечивает ток до 1А. Учитывая требования GSM-модема по напряжению и току, его следует подключать непосредственно к аккумулятору. И лучше добавить побольше конденсаторов. Итак, пока складывается схема, в которой всё подключено к аккумулятору.
А дальше уже не так очевидно.
Для зарядки аккумулятора требуется специальная микросхема, которая будет правильно его заряжать. Заряжать обычным DС-DC нельзя, потому что необходимо с высокой точностью поддерживать постоянное напряжение (4.2В) и ограничивать ток зарядки (режим CC/CV). Но для возможности работы без аккумулятора не обойтись без понижающего DC-DC преобразователя!
Для разрешения этого противоречия используют системы управлением питания.
В нашем случае это бы выглядело примерно так:
![](https://habrastorage.org/r/w1560/getpro/habr/post_images/f26/1b4/f21/f261b4f21bbfe2f2aa2887d14259b638.png)
Но такой вариант не устроил нас по стоимости и занимаемой площади.
Мы решили сделать финт ушами и пошли другим путем.
![](https://habrastorage.org/r/w780q1/getpro/habr/post_images/833/db1/fda/833db1fdad6f3f389700c8215c37ae87.jpg)
LTC4002 — простой и недорогой зарядник Li-Ion аккумуляторов c ШИМ-контроллером, работающий как понижающий DC-DC преобразователь. Зарядник работает в режиме constant current/constant voltage: он поддерживает постоянный ток зарядки, пока напряжение на аккумуляторе не достигнет 4.2В. После этого он поддерживает на аккумуляторе постоянное напряжение 4.2В с большой точностью.
Ток зарядки микросхема определяет, измеряя с помощью входа SENSE падение напряжения на внешнем резисторе R_sense. После этого ток зарядки устанавливается равным I_c = 100мВ/Rsense.
Для небольших аккумуляторов на 1500-2000 мА*ч зарядный ток не должен превышать 500-700 мА, а схема питания должна обеспечивать до 2 А в импульсном режиме для GSM модуля. Чтобы одновременно выполнить эти два условия, надо “обмануть” LTC4002.
Используя два резистора Rsense добиваемся того, что зарядный ток аккумулятора составляет не более, чем 100мВ/(R1+R2), а ток в нагрузку до 100мВ/R1.
Проверяем: травим платку с схемой питания, собираем, все прекрасно работает. Напряжение выдает как надо, аккумулятор заряжается.
Заказываем плату в Резоните, собираем всю схему, включаем — не работает.
Смотрим осциллографом — выясняется, что NCP1450 (повышающий преобразователь 5В) выдает нужное напряжение, но не ток :) Без нагрузки на выходе 5 вольт, как и полагается. Но небольшая нагрузка в 10 мА — и напряжение падает до входного.
В линии питания необходим керамический конденсатор максимально близко к ножкам NCP1450, как и советовали в даташите :) 1 см от ножек — и уже не работает. Ещё нужно чтобы выходной конденсатор был не менее 330 мкФ. Капризная микросхема, в следующей версии поменяем.
Ладно, припаяли конденсаторов побольше — работает.
Надеваем Олинуксинку (наша процессорная плата — OLinuXino-MICRO), включаем — не работает. Выключаем, включаем обратно — работает.
Включается случайно с вероятностью ~ 50%. Магия.
Причина:
Зарядник LTC4002 имеет хитрый режим зарядки полумёртвых батарей, при котором он пытается заряжать аккумулятор током в 10% от номинального (режим trickle сharging).
Режим включается при напряжении на аккумуляторе меньше 2.9В, а повышающий преобразователь на 5В начинает работать от 2.2В.
И тут кто быстрее: если LTC4002 успевает зарядить выходные конденсаторы до 2.9В быстрее, чем преобразователь начнет работать, то питание включится и дальше будет работать нормально. Если не успеет, то NCP1450 начинает потреблять ток, напряжение не доходит до 2.9В, и LTC4002 считает нашу систему мёртвой батарейкой, не увеличивая ток.
![](https://habrastorage.org/r/w780q1/getpro/habr/post_images/b9e/50f/b80/b9e50fb806229f00cb77196f8dcb7bfb.jpg)
Придётся собирать схему, которая будет отключать нагрузку до тех пор, пока напряжение не вырастет до 3В, чтобы “проскочить” режим trickle-charging у LTC4002.
Что ж, ставим биполярный транзистор со сверхнизким падением напряжения и трехвыводной стабилитрон (он же программируемый источник опорного напряжения, он же shunt regulator) ему на базу.
Резистор R3 задает базовый ток, делитель R4-R5 устанавливает пороговое напряжение включения, а положительная обратная связь через R6 создает небольшой гистерезис включения-выключения — 3.1-2.9В. Резистор R7 обеспечивает минимальный ток катода.
Заодно такое решение защитит аккумулятор от переразряда и позволит сделать кнопку выключения. Одним костылем решаем три проблемы!
Продолжаем тестирование платы со схемой питания.
Входное напряжение 5В — все работает! 12 вольт — перестает работать NFC, не может считать карточку :((
Причина:
схема питания создает сильные помехи, мешающие работать NFC.
Может, дело в неэкранированных катушках?
Ок, перевернём катушки набок, чтобы их линии поля стали перепендикулярны антенне NFC.
Проверяем. 12 вольт — работает, 22В (подаем питание через PoE) — не работает. Значит придётся ставить экранированные катушки, хоть они и в два раза больше.
Ладно, ещё добавим фильтрующие конденсаторы в нужные места схемы питания.
И теперь NFC работает во всем диапазоне входных напряжений.
Проверяем работу под нагрузкой на линиях 3.3В и 5В по 0.5 А. ИК-термометром контролируем температуру элементов, плата немного греется, но всё в разумных пределах.
Но при 22В за десять секунд сгорает диод Шоттки.
Диод PMEG3010 — на 30В 1А. В схеме step down преобразователя чем больше напряжение, тем больший ток течет через диод при той же выходной мощности.
Ок, поставим диод помощнее.
Перерисовываем плату под экранированные катушки, добавляем фильтрующие конденсаторы, максимально укорачиваем дорожки с импульсными токами. Сгоревший диод Шоттки меняем на 2-ух амперный, переносим его на внешнюю сторону и рисуем ему полигоны для лучшего охлаждения.
Тестируем плату — диод сгорает за те же 10 секунд :(( Самое время внимательно прочитать даташиты на эти диоды.
Внимательно разглядывая графики, замечаем, что обратный ток через диод Шоттки экспоненциально зависит как от температуры, так и от приложенного напряжения. И при напряжении 22В у диода на 30В обратный ток не такой уж и маленький. Механизм пробоя примерно такой: пока диод холодный — обратный ток очень маленький, и диод нагревается только прямым током. Диод немного нагрелся — обратный ток возрастает и увеличивает нагрев. Температура растёт — ток ещё больше.
И вот — лавинообразный рост температуры и конец.
На практике это выглядит так — включаем, диод холодный, теплый, ещё теплее, сгорел.
В общем, надо очень внимательно читать даташиты и не верить тому, что пишут на первой странице.
В этом месте хочется передать пламенный привет инженерам-маркетологам NXP, которые собственно эти даташиты пишут. Вот например диод Шоттки PMEG4050. Заявленные характеристики: 40V обратное напряжение, 5А максимальный ток. Выглядит неплохо!
Однако если прочитать, что именно написано мелким шрифтом, то выяснится, что 5А измерены при температуре воздуха 0 градусов (sic!) для диода, напаянного на керамическую печатную плату. Вот спрашивается, почему было не написать честные 3 ампера в характеристиках? Загадка.
В итоге ставим диод с напряжением 40В, схема работает стабильно и без перегрева. Получили работоспособную схему питания, которая и используется в первой серии устройств.
Несмотря на то, что в итоге мы получили недорогую и стабильно работающую во всем диапазоне схему питания, у нас уже появилась пара идей, как её можно улучшить. Во-первых, можно заменить линейный стабилизатор для линии в 3.3В на компактный понижающий DC-DC преобразователь. Кроме того, можно поменять повышающий преобразователь для линии 5В на менее требовательную и более высокочастотную микросхему. Такое преобразование немного повысит эффективность и освободит место на плате для ещё какого-нибудь модуля.
Подробное описание Wiren Board и wiki с документацией здесь.
Первую небольшую партию из 55 Wiren Board мы собрали в России и распространяем их среди разработчиков и пользователей. С нетерпением ждём ваших отзывов!
UPD: устройства из первой партии ещё остались, их можно купить у нас на сайте
— Команда Wiren Board
По сравнению с апрельским прототипом на плате появились 2 USB-host, интерфейс RS-485 и разъём с 8 GPIO. Кроме этого мы сделали новую схему питания, поддерживающую входные напряжения от 5 до 22 вольт, Passive PoE и подключение Li-Pol аккумулятора, добавили управление низковольтной нагрузкой и аналоговые входы на клеммниках.
![](https://habrastorage.org/getpro/habr/post_images/241/f94/d36/241f94d36a5f1b0dc122dab2a90b1245.jpg)
Как мы это делали, с какими трудностями столкнулись и что получилось в итоге — читайте в нашей статье.
Что и где на плате?
Wiren Board со снятым процессорным модулем:
![](https://habrastorage.org/getpro/habr/post_images/970/564/e43/970564e437fcfc5c59b9543d7cf3d70e.png)
Внутренняя сторона, обычно закрыта процессорным модулем:
![](https://habrastorage.org/getpro/habr/post_images/978/e0b/661/978e0b66186ab30cc224c353239622ff.png)
Аналоговые входы и выходы
В новой версии Wiren Board мы добавили возможность подключения аналоговых сигналов и датчиков (цифровых, резистивных, датчики типа “сухой контакт”), а так же управление низковольтной нагрузкой.
Используемый нами SoC имеет два 12-битных канала АЦП общего пользования. Чтобы увеличить количество доступных каналов АЦП, мы используем мультиплексор SN74HC4851, который соединяет один из 8 каналов с входом АЦП процессора.
![](https://habrastorage.org/getpro/habr/post_images/c3c/fee/aef/c3cfeeaef721b4c48d73fc13147c0a39.jpg)
Один канал АЦП используется для измерения напряжения питания, семь выведены через резисторы на клеммники. Для защиты выходов от повышенных напряжений достаточно резисторов, так как мультиплексор имеет встроенные защитные диоды. Канал АЦП у нашего SoC имеет программируемый источник тока. Значения резисторов были подобраны таким образом, чтобы при включенном источнике тока иметь возможность измерять сопротивление резистивных датчиков.
Для управления низковольтной нагрузкой (двигатели, светодиодные ленты, замки и т. д.) удобно использовать выходы типа «открытый коллектор» (см. рис.)
Для экономии места аналоговые входы были объединены с каналами управления низковольтной нагрузкой. Недостатком такого решения является небольшой ток, текущий через закрытый выход при напряжениях выше 3.3 В.
Приключения с питанием
Стояла задача придумать схему питания для платы. Требования к схеме питания предъявляются такие:
- Выходной ток по шинам 3.3В и 5В не менее 500мА для подключения USB, UEXT-модулей и прочего.
- Для питания GSM модема нужно обеспечить напряжение от 3.5В до 4.6В, с импульсными токами до 2А и просадками по напряжению не более 300мВ.
- Возможность работы от Li-Ion аккумулятора, зарядка аккумулятора. Защита аккумулятора от переразряда.
- Расширенный диапазон входного напряжения, не менее 5-15В.
Другие условия:
- Не использовать чипы в корпусах без ножек — QFN, DFN и подобных — монтировать их в России ну очень дорого
- Невысокая стоимость
- Минимальные габариты
Решение:
Так как предполагается питать схему и от аккумулятора, то для линии 5В без повышающего DC-DС преобразователя не обойтись. Была выбрана недорогая микросхема NCP1450 (как выяснилось позже, не лучший выбор). Это step−up DC-DC преобразователь с внешним транзистором.
Напряжение на Li-Pol аккумуляторе 2.7..4.2В, но «плато» на кривой разряда находится в районе 3.7В. Поэтому для получения 3.3В вполне можно использовать LDO.
Мы выбрали линейный регулятор MCP1826, он обеспечивает ток до 1А. Учитывая требования GSM-модема по напряжению и току, его следует подключать непосредственно к аккумулятору. И лучше добавить побольше конденсаторов. Итак, пока складывается схема, в которой всё подключено к аккумулятору.
А дальше уже не так очевидно.
Для зарядки аккумулятора требуется специальная микросхема, которая будет правильно его заряжать. Заряжать обычным DС-DC нельзя, потому что необходимо с высокой точностью поддерживать постоянное напряжение (4.2В) и ограничивать ток зарядки (режим CC/CV). Но для возможности работы без аккумулятора не обойтись без понижающего DC-DC преобразователя!
Для разрешения этого противоречия используют системы управлением питания.
В нашем случае это бы выглядело примерно так:
![](https://habrastorage.org/getpro/habr/post_images/f26/1b4/f21/f261b4f21bbfe2f2aa2887d14259b638.png)
Но такой вариант не устроил нас по стоимости и занимаемой площади.
Мы решили сделать финт ушами и пошли другим путем.
![](https://habrastorage.org/getpro/habr/post_images/833/db1/fda/833db1fdad6f3f389700c8215c37ae87.jpg)
LTC4002 — простой и недорогой зарядник Li-Ion аккумуляторов c ШИМ-контроллером, работающий как понижающий DC-DC преобразователь. Зарядник работает в режиме constant current/constant voltage: он поддерживает постоянный ток зарядки, пока напряжение на аккумуляторе не достигнет 4.2В. После этого он поддерживает на аккумуляторе постоянное напряжение 4.2В с большой точностью.
Ток зарядки микросхема определяет, измеряя с помощью входа SENSE падение напряжения на внешнем резисторе R_sense. После этого ток зарядки устанавливается равным I_c = 100мВ/Rsense.
Для небольших аккумуляторов на 1500-2000 мА*ч зарядный ток не должен превышать 500-700 мА, а схема питания должна обеспечивать до 2 А в импульсном режиме для GSM модуля. Чтобы одновременно выполнить эти два условия, надо “обмануть” LTC4002.
Используя два резистора Rsense добиваемся того, что зарядный ток аккумулятора составляет не более, чем 100мВ/(R1+R2), а ток в нагрузку до 100мВ/R1.
Проверяем: травим платку с схемой питания, собираем, все прекрасно работает. Напряжение выдает как надо, аккумулятор заряжается.
Чудеса 1
Заказываем плату в Резоните, собираем всю схему, включаем — не работает.
Смотрим осциллографом — выясняется, что NCP1450 (повышающий преобразователь 5В) выдает нужное напряжение, но не ток :) Без нагрузки на выходе 5 вольт, как и полагается. Но небольшая нагрузка в 10 мА — и напряжение падает до входного.
В линии питания необходим керамический конденсатор максимально близко к ножкам NCP1450, как и советовали в даташите :) 1 см от ножек — и уже не работает. Ещё нужно чтобы выходной конденсатор был не менее 330 мкФ. Капризная микросхема, в следующей версии поменяем.
Ладно, припаяли конденсаторов побольше — работает.
Чудеса 2
Надеваем Олинуксинку (наша процессорная плата — OLinuXino-MICRO), включаем — не работает. Выключаем, включаем обратно — работает.
Включается случайно с вероятностью ~ 50%. Магия.
Причина:
Зарядник LTC4002 имеет хитрый режим зарядки полумёртвых батарей, при котором он пытается заряжать аккумулятор током в 10% от номинального (режим trickle сharging).
Режим включается при напряжении на аккумуляторе меньше 2.9В, а повышающий преобразователь на 5В начинает работать от 2.2В.
И тут кто быстрее: если LTC4002 успевает зарядить выходные конденсаторы до 2.9В быстрее, чем преобразователь начнет работать, то питание включится и дальше будет работать нормально. Если не успеет, то NCP1450 начинает потреблять ток, напряжение не доходит до 2.9В, и LTC4002 считает нашу систему мёртвой батарейкой, не увеличивая ток.
![](https://habrastorage.org/getpro/habr/post_images/b9e/50f/b80/b9e50fb806229f00cb77196f8dcb7bfb.jpg)
Доводим до ума
Придётся собирать схему, которая будет отключать нагрузку до тех пор, пока напряжение не вырастет до 3В, чтобы “проскочить” режим trickle-charging у LTC4002.
Что ж, ставим биполярный транзистор со сверхнизким падением напряжения и трехвыводной стабилитрон (он же программируемый источник опорного напряжения, он же shunt regulator) ему на базу.
Резистор R3 задает базовый ток, делитель R4-R5 устанавливает пороговое напряжение включения, а положительная обратная связь через R6 создает небольшой гистерезис включения-выключения — 3.1-2.9В. Резистор R7 обеспечивает минимальный ток катода.
Заодно такое решение защитит аккумулятор от переразряда и позволит сделать кнопку выключения. Одним костылем решаем три проблемы!
Чудеса 3
Продолжаем тестирование платы со схемой питания.
Входное напряжение 5В — все работает! 12 вольт — перестает работать NFC, не может считать карточку :((
Причина:
схема питания создает сильные помехи, мешающие работать NFC.
Может, дело в неэкранированных катушках?
Ок, перевернём катушки набок, чтобы их линии поля стали перепендикулярны антенне NFC.
Проверяем. 12 вольт — работает, 22В (подаем питание через PoE) — не работает. Значит придётся ставить экранированные катушки, хоть они и в два раза больше.
Ладно, ещё добавим фильтрующие конденсаторы в нужные места схемы питания.
И теперь NFC работает во всем диапазоне входных напряжений.
Чудеса 4
Проверяем работу под нагрузкой на линиях 3.3В и 5В по 0.5 А. ИК-термометром контролируем температуру элементов, плата немного греется, но всё в разумных пределах.
Но при 22В за десять секунд сгорает диод Шоттки.
Диод PMEG3010 — на 30В 1А. В схеме step down преобразователя чем больше напряжение, тем больший ток течет через диод при той же выходной мощности.
Ок, поставим диод помощнее.
О пользе чтения даташитов
Перерисовываем плату под экранированные катушки, добавляем фильтрующие конденсаторы, максимально укорачиваем дорожки с импульсными токами. Сгоревший диод Шоттки меняем на 2-ух амперный, переносим его на внешнюю сторону и рисуем ему полигоны для лучшего охлаждения.
Тестируем плату — диод сгорает за те же 10 секунд :(( Самое время внимательно прочитать даташиты на эти диоды.
Внимательно разглядывая графики, замечаем, что обратный ток через диод Шоттки экспоненциально зависит как от температуры, так и от приложенного напряжения. И при напряжении 22В у диода на 30В обратный ток не такой уж и маленький. Механизм пробоя примерно такой: пока диод холодный — обратный ток очень маленький, и диод нагревается только прямым током. Диод немного нагрелся — обратный ток возрастает и увеличивает нагрев. Температура растёт — ток ещё больше.
И вот — лавинообразный рост температуры и конец.
На практике это выглядит так — включаем, диод холодный, теплый, ещё теплее, сгорел.
В общем, надо очень внимательно читать даташиты и не верить тому, что пишут на первой странице.
Лирическое отступление
В этом месте хочется передать пламенный привет инженерам-
Однако если прочитать, что именно написано мелким шрифтом, то выяснится, что 5А измерены при температуре воздуха 0 градусов (sic!) для диода, напаянного на керамическую печатную плату. Вот спрашивается, почему было не написать честные 3 ампера в характеристиках? Загадка.
В итоге ставим диод с напряжением 40В, схема работает стабильно и без перегрева. Получили работоспособную схему питания, которая и используется в первой серии устройств.
Планы
Несмотря на то, что в итоге мы получили недорогую и стабильно работающую во всем диапазоне схему питания, у нас уже появилась пара идей, как её можно улучшить. Во-первых, можно заменить линейный стабилизатор для линии в 3.3В на компактный понижающий DC-DC преобразователь. Кроме того, можно поменять повышающий преобразователь для линии 5В на менее требовательную и более высокочастотную микросхему. Такое преобразование немного повысит эффективность и освободит место на плате для ещё какого-нибудь модуля.
Заключение
Подробное описание Wiren Board и wiki с документацией здесь.
Первую небольшую партию из 55 Wiren Board мы собрали в России и распространяем их среди разработчиков и пользователей. С нетерпением ждём ваших отзывов!
UPD: устройства из первой партии ещё остались, их можно купить у нас на сайте
— Команда Wiren Board