USB тестер

Устройство самодельного USB-тестера базируется на микроконтроллере ATmega8. Этот выбор обусловлен тем, что у меня валялось несколько таких микросхем. Так же были мысли использовать ATmega48, но позже от этого варианта было решено отказаться, так как было жаль тратить контроллер с большим количеством ШИМ выходов на схему, не требующую их применения.

Микроконтроллер работает на частоте в 1МГц, используя либо внутренний RC-генератор, либо внешний кварцевый резонатор (тоже на 1МГц).

Для моих целей было достаточно той точности, которая была при использовании RC-генератора (+/- 5 секунд за 5 минут). Но на печатной плате есть место для кварцевого резонатора.

Отображение данных происходит за счет светодиодного семисегментного четырехразрядного индикатора. Такой тип индикаторов не блистает экономичностью, но устройству работающему от USB, как мне кажется, экономичность ни к чему. Органов управления прибор не имеет, и сброс осуществляется выключением питания.

Для мониторинга выводятся следующие данные:

  • Напряжение
  • Ток
  • Потр. энергия (А*ч)
  • Время работы

Характеристики устройства:

  • Максимальное измеряемое напряжение: 6,6В
  • Максимальный измеряемый ток: 1,5А (зависит от характеристик шунта)

Я не буду говорить что устройство обладает феноменальной точностью, это не так. АЦП микроконтроллера ATmega8 в принципе не обладает точностью, так как в младших разрядах находится «мусор». Конечно, для более достоверных результатов стоит заводить микроконтроллер в сон, делать измерение и выполнять программу дальше, но это повлечет за собой задержки в работе программы.

Итак, схема устройства:

Схема

В данном устройстве можно применять как индикаторы с общим катодом, так и индикаторы с общим анодом.

Для смены типа индикатора требуется строчку в файле display7seg_lib.h

 #define OK

в файле — заменить на

 #define OA

Если вам не требуется отображение прошедшего с момента запуска устройства времени, то можно закомментировать данную строчку в файле main.c:

 #define DISPTIME 

Для более точного измерения токов без использования ОУ было решено снизить напряжение питания до 3.3В. Так же был применен делитель напряжения для измерения напряжения на разъеме USB.

Немного о прошивке

Прошивка писалась под avr-gcc (WinAVR), редактор кода — встроенный в Proteus (проект в версии 8.6).

Каждую секунду срабатывает прерывание по переполнению таймера Т1, и устройство измеряет параметры (напряжение, ток) а так же вычисляет энергию в А*ч. Далее, с помощью таймера Т2 организована смена показаний а возможностями библиотеки для вывода информации — «бегущая строка».

ВНИМАНИЕ! При тактировании от внутреннего RC-генератора показания прибора могут иметь большую погрешность.

Если вы решили отказаться от использования кварцевого резонатора, то фуз-биты можно оставить по-умолчанию. В противном случае, требуется установить CKSEL = 1001, SUT = 00.

Печатная плата выполнена на двухстороннем фольгированном материале (гетинакс/текстолит). Самый сложный момент при разводке платы — это посадочное место под микроконтроллер.

плата-1плата-2плата-3

На печатной плате, как и на схеме отсутствует один элемент — стабилизатор на 3.3В, 78L33. Он устанавливается следующим образом:

78L33

Так же, к выводы 1 и 3 на время программирования закорачиваются перемычкой. Это сделано для того, что бы не подпалить контроллер питающийся от 3.3В подачей 5 вольт на порт.

О замене деталей

Резисторы R1 — R4 можно безболезненно взять с сопротивлением 1 — 4.7 кОм , R6 и R7 необходимо использовать прецизионные (в моем случае были использованы с допуском +/- 1%) и обязательно с одинаковым сопротивлением. R10 — R17 можно заменить на резисторы мощностью 0,125 — 0,25Вт и сопротивлением 180 — 360 Ом. R8 используется для предотвращения появления «магических чисел» при отключенной нагрузке, соответственно его сопротивление должно быть в диапазоне 10 — 100 кОм. Резистор R18 можно взять на 10 — 100 кОм, или не устанавливать вообще (но тогда возможны произвольные сбросы микроконтроллера).

Как уже упоминалось выше, индикатор можно заменить на четырехразрядный с общим анодом, но для этого придется немного переделать печатную плату и внести правки в программу.

Транзисторы можно заменить на отечественные аналоги КТ312, 315, 3102 и т.д. В общем, можно взять любые маломощные транзисторы структуры n-p-n.

Токовый шунт при желании можно взять с иным сопротивлением, но для этого потребуется изменить следующую строку в программе:

 #define R 2

Где поменять 2 на ваше сопротивление.

И наконец, немного фото а так же видео сборки и работы:

Список радиоэлементов

Обозначение Тип Номинал Количество Примечание Магазин Мой блокнот
U1 МК AVR 8-бит ATmega8A-AU 1 TQFP-32
Q1-Q4 Биполярный транзистор BC547 4
Стабилизатор 78L33 1 На схеме не обозначен
R1-R4 Резистор 1 кОм 4
R5 Резистор 2 Ом 1 Токовый шунт
R9-R17 Резистор 220 Ом 9
R6-R8, R18 Резистор 10 кОм 4 R6,7 — презиционные
C1, C2 Конденсатор 22 пФ 2
Конденсатор 0.1 мкФ 2 Опционально. На вход и выход стабилизатора 78L33
X1 Кварцевый резонатор 1МГц 1
Индикатор Светодиодный 1 ОК, ОА, 4 разряда, 7 сегментов