РадиоКот >Схемы >Цифровые устройства >Измерительная техника >

Теги статьи:

Простой USB-тестер с OLED дисплеем

Автор: SSMix
Опубликовано 21.09.2015
Создано при помощи КотоРед.
Участник Конкурса "Поздравь Кота по-человечески 2015!"

     В статье описан простой USB-тестер для замера закачиваемой в аккумулятор ёмкости при зарядке. С помощью данного прибора можно проверить работоспособность цепи зарядки гаджета, а также оценить ёмкость встроенного в него аккумулятора.

     В настоящее время в китайских Интернет-магазинах можно встретить разнообразные USB-тестеры для замера напряжения и тока зарядки гаджета, а также закачанной в аккумулятор ёмкости.
     Наиболее продвинутые USB-тестеры выполнены на графическом OLED индикаторе разрешением 128x32 пиксел и стоят в районе 7-10$.

     Было довольно познавательно опробовать на практике такой OLED дисплей, а заодно и сделать на нём полезную в хозяйстве вещь.
     Разработанный USB-тестер по своему назначению аналогичен китайскому, собран на доступном дешевом микроконтроллере ATtiny44A (flash-память 4 кБ), который был выбран за малогабаритный и легкий для пайки корпус SOIC-14, а также наличие встроенного (в блок АЦП) дифференциального усилителя х20, позволившего отказаться от дополнительного внешнего ОУ в токовом канале.
     В качестве индикатора использован готовый модуль OLED дисплея для Arduino 0.96'' 128x64 с интерфейсом SPI, заказанный в Китае на AliExpress за 3,71$ с доставкой.

     Вот фото готового прибора в сборе:

     Поскольку USB-тестер в радиолюбительской практике предполагает не особо частое использование, он собран без корпуса.
     Интерфейс реализован минимально необходимый ввиду ограниченной памяти в ATtiny44A (4кБ).
     В верхней строке выводятся входное напряжение и потребляемая мощность, в средней – потребляемый нагрузкой ток и время работы. В нижней строке выводятся закачанная в аккумулятор ёмкость в мАч и текущая контрастность дисплея (0…255). Следует отметить, что даже при нулевой контрастности информация с дисплея вполне нормально считывается даже при ярком солнечном свете

     USB-тестер имеет следующие технические характеристики:

Входное напряжение, В………………………………...3,500÷7,000
Ток нагрузки, А………………………………………….....0,000÷3,000
Мощность нагрузки, Вт………………..………………..0,00÷21,00
Измеряемая ёмкость, мАч………………………………0÷99999
Счетчик времени работы………………………………..99ч 59мин 59сек
Потребляемый ток:
при минимальной контрастности, мА…………...8
при максимальной контрастности, мА………….12

     Схема электрическая принципиальная:

     Схема USB-тестера максимально упрощена и содержит входной X1 и выходной X2 USB-разъёмы, стабилизатор напряжения +3,3В на DA1 MCP1702T-3302, микроконтроллер DD1 ATtiny44A с керамическим резонатором ZQ1 на 4 МГц для точного отсчета времени, токовый шунт на резисторах R3…R8, делитель измеряемого входного напряжения на R11, R12, кнопки SB1…SB3 для управления и калибровки и модуль дисплея Arduino H1. Программатор к микроконтроллеру подключается 6-ю проводами пайкой.
     Резисторы шунта и делителя напряжения использованы с обычной точностью (хотя для лучшей температурной стабильности лучше поставить 1%), калибровка каналов напряжения и тока выполняется программно и сохраняется в энергонезависимой памяти микроконтроллера.
     Подключение модуля дисплея несколько упрощено – использован аппаратный сброс по выводу RST ввиду отсутствия свободных выводов микроконтроллера, хотя на всякий случай нестабильной работы, на схеме и плате предусмотрено использование для этой цели 4-го вывода PB3 (Reset) ATtiny44A. Но в случае реализации программного сброса после программирования фьюза RSTDISBL микроконтроллер станет недоступен для последующей перепрошивки памяти обычным последовательным программатором.
     Резистор R17 на 10кОм добавлен в схему уже на стадии отладки для ускорения разрядки конденсаторов по питанию, иначе если извлечь устройство из USB-разъёма и сразу же подключить вновь, то иногда происходил сбой в работе дисплея.
     USB-тестер выполнен на двухсторонней печатной плате из фольгированного стеклотекстолита размерами 47х30мм. На верхней стороне платы фольга не травится, только раззенковываются отверстия под кнопки, резонатор, перемычку и модуль дисплея.
     Вид спереди (показанные печатные проводники находятся с противоположной стороны платы):

     Вид со стороны печатных проводников и SMD-элементов:

     На плате предусмотрено использование керамического резонатора с тремя выводами (со встроенными конденсаторами). В этом случае конденсаторы С7, С8 не нужны. Сам резонатор можно припаивать с обеих сторон платы. В авторском варианте он припаян со стороны печатных проводников, чтобы максимально приблизить модуль дисплея к плате.
     Перечень элементов для сборки USB-тестера:

C1 = 10,0х10В (Танталовый, корпус A)
C2, C4 = 1,0 (0805)
C3 = 0,01 (1206)
C5, C6 = 0,47 (0805)
C7, C8 = 22* (0603)
C9 = 1,0 (1206)
C10 = 0,47 (0603)

DA1 = MCP1702T-3302E/CB (SOT23-3)
DD1 = ATtiny44A (SO-14)

H1 = Arduino дисплей OLED 0.96'' SPI 128X64

L1 = 22uH (1206)

R1 = 22 (1206)
R2 = 470 (0603)
R3…R8 = 0,1 (0603)
R9, R10, R14 = 1к (1206)
R11 = 240к (0805)
R12 = 39к (0805)
R13 = 470 (1206)
R15, R16 = 470 (0805)
R17 = 10к (0805)

SB1…SB3 = Кнопка тактовая 6х3,5мм

X1 = USBA-LP/SMD USB разъем тип A
X2 = USB-A (SMD)

ZQ1 = 4МГц (Керамический резонатор)

     Токовый шунт выполнен из 6-ти SMD-резисторов сопротивлением 0,1 Ом каждый типоразмером 0603. Суммарное сопротивление шунта 16,66(6) мОм. Можно использовать другие доступные номиналы и в другом количестве, но так, чтобы расчетное сопротивление составляло указанное значение. В противном случае необходимо корректировать программу.
     Модуль дисплея необходим именно с SPI-интерфейсом. Хотя контроллер дисплея SSD1306 можно сконфигурировать для работы с различными интерфейсами (4-SPI, 3- SPI, I²C, параллельный), режим 4-SPI, на мой взгляд, наиболее оптимальный по объему кода, скорости вывода информации и числу задействованных выводов управляющего микроконтроллера.
     После сборки USB-тестера необходимо подпаять 6 проводников от программатора к точкам Vcc, GND, MOSI, MISO, SCK, Reset на плате, запрограммировать фьюзы:
     CKSEL[3:0]=1100 (Ceramic Resonator 3...8 МГц),
     SUT[1:0]=10 (Ceramic resonator, BOD enabled)
     CKDIV8=1 (Divide clock by 8 disabled),
     BODLEVEL[2:0]=101 (Схема BOD Ures<2,7В),
     EESAVE=0 (запрет стирания EEPROM программатором)
     ("0"-галочки установлены, инверсные фьюзы как в PonyProg)
     Поскольку в самой программе PonyProg микроконтроллер ATtiny44A отсутствует, для программатора SiProg можно использовать оболочку AVRDUDEPROG 3.3 или более современный программатор.

 

     Затем прошивается HEX-файл USB_test.hex.
     При условии отсутствия ошибок в монтаже и исправных элементах после подачи питания на дисплей USB-тестера выведется текущая информация.

     После проверки на работоспособность проводники от программатора можно отпаять (иначе могут не работать кнопки управления, подключенные ему параллельно).
     Нажатием нижней кнопки “Меню” активируется пункт регулировки контрастности дисплея (инверсией). Установка комфортной контрастности производится кнопками “Вверх” и “Вниз”. При удержании кнопки “Вверх” или “Вниз” производится ускоренное изменение параметра в режиме автоповтора.

     Следующим нажатием кнопки “Меню” активируется пункт калибровки измеряемого напряжения. Подстройка осуществляется кнопками “Вверх” и “Вниз”.

     При следующем нажатии кнопки “Меню” активируется пункт калибровки измеряемого тока нагрузки. Подстройка нуля встроенного в микроконтроллер дифференциального усилителя в токовом канале производится автоматически программным путем.

     Следующее нажатие кнопки “Меню” вызывает инверсию измеренной ёмкости. При долгом нажатии кнопки “Вниз” производится обнуление показаний мАч. Также обнуление счетчика мАч происходит при подаче питания на USB-тестер.

 

     Следующее нажатие кнопки “Меню” вызывает инверсию счетчика времени. При коротком нажатии кнопки “Вниз” производится обнуление времени.

     Для того, чтобы счетчик не отсчитывал время вхолостую, он начинает работать лишь при превышении тока нагрузки свыше 2 мА. Т.о. производится учет чистого времени работы под нагрузкой.
     Следующее нажатие кнопки “Меню” приводит к выходу из режима настройки.

     Программа для микроконтроллера ATtiny44A написана на языке Си в среде WinAVR. Объём используемой Flash-памяти составил 3950 байт из 4096 (96.4%), т.е. удалось уложиться практически впритык (осталось лишь небольшое “свободное пространство для маневров” при отладке и возможной модернизации тестера).
     Такого относительно небольшого объёма кода удалось достичь благодаря отказу от стандартной библиотеки шрифтов (использованы лишь 10 цифр и несколько букв), а также применению модуля дисплея с интерфейсом SPI, а не I²C (в последнем случае при экономии одного вывода микроконтроллера значительно замедляется вывод информации из-за дополнительных операций чтения и подтверждения ответа от контроллера дисплея и возрастает объем программного кода).

     Что касается самого дисплея, впечатления о нём остались неоднозначные. С одной стороны - впечатляющее разрешение 128х64 пикселя при миниатюрных габаритах, великолепные углы обзора, хорошая контрастность и читаемость при ярком солнечном свете. С другой - явно заметное глазу неприятное мерцание с частотой около 100 Гц, т.к. в дисплее использована динамическая индикация светодиодов. Но если не смотреть на экран постоянно, а лишь поглядывать периодически, то с таким недостатком в принципе можно смириться.
Что касается явно избыточной яркости свечения, то судя по datasheet на контроллер SSD1206, эту яркость (там она называется контрастностью) можно аппаратно регулировать, меняя номинал токозадающего резистора в модуле индикатора с 390кОм до 1Мом:

     Вот фрагмент из datasheet на контроллер SSD1206:

     Вот этот резистор на плате:

     Для интереса было решено поварьировать номиналом этого резистора в сторону увеличения и посмотреть, как будет меняться контрастность и ток потребления. При увеличении сопротивления контрастность действительно уменьшалась, но только если была установлена не на ноль. При нуле и ток потребления и контрастность оставались неизменными даже при полном отсутствии токозадающего резистора, так что попытка уменьшить яркость, а заодно и потребляемый ток оказалась безуспешной. При номинале 10МОм контрастность из меню не уже не регулировалась и оставалась минимальной при изменении от 0 до 255.
     Также изучив datasheet на контроллер SSD1206 одной из команд начальной инициализации дисплея (Set the Oscillator Frequency Fosc) удалось поднять до максимума частоту обновления экрана, составившую примерно 125Гц.
     Исходный код на Си, прошивка микроконтроллера, схема и печатная плата прилагаются. Надеюсь, простота конструкции позволит легко собрать этот прибор.

 


Файлы:
Исходник
Плата
Схема


Все вопросы в Форум.