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.
Друкована плата виконана на двосторонньому фольгованому матеріалі (гетинакс/текстолит). Найскладніший момент при розводці плати - це посадкове місце під мікроконтролер.
На друкованій платі, як і на схемі, відсутній один елемент - стабілізатор на 3.3 В, 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 сегментів |
Прикріплені файли:
- USBTest.rar (200 Кб)