Всем привет! Продолжаю цикл о часах на ал304. Начало тут. Сегодня поговорим о схемотехнике и разберём отдельные узлы прибора.
Итак, так как я обычно сначала делаю плату, а потом уже рисую схему, то сегодня речь пойдет о ней.
Собственно сама схема (возможны ошибки):
Как видно, сердце моих часов - камень Атмега 328p (Далее МК). Индикаторы (с общим катодом) анодами подцеплены к МК напрямую, так как цеплять резисторы по линиям сегментом как на меня не целесообразно, резисторы в цепи катодов + сопротивление открытого транзистора достаточно, чтобы не выжечь порты МК. Коммутируется каждый сегмент классическим образом - через транзисторный ключ. Блютуз (далее БТ) включен к МК через резисторы, так как есть небольшая разница в логических уровняв между МК и БТ. В первой ревизии часов был установлен стабилизатор ASM1117-3.3, но он жрал батарею на глазах, а здесь каждый миллиампер на счету. Поэтому излишки напряжение убрал с помощью диода Шотки D1.
Зарядку для АКБ хотел сделать на ТР4056 но он по размерах мне не очень да и греется сильно. Гугление привело меня в сторону BRCL3160. Принцип работы прост - стоит компаратор , опорный источник напряжения и "ключ". При достижение на выходе VDD напряжения заряда, которое задается падением напряжения на резисторе R9, ключ размыкается и заряд не идет. Диод D2 препятствует возможному разряду АКБ из за утечки (какой - вопрос, но так спокойнее). Схема цепи заряда состоит из трех элементов и подключается паралельно АКБ, за искобчением "входного" контакта GND:
Питание БТ по даташиту 3,3 вольта. Но по сути он работает в пределах 2,9-4 вольт и в теории работает от литий полимерного АКБ. Но макс. напряжение заряда 4,2 вольта. Убрать излишек можно тем же диодом SS14 (D1). При этом при использовании ASM1117-3.3 разница в напряжении на входе и выходе должна быть в пределах 1,2 вольт. При этом, если АКБ "сядет" до 3,6в то БТ "получит" около 2,4 вольт и выйдет в дверь отключится. По этому организовал питание через диод (с падением около 100 мВ). Таким Образом получил разброс не 3,6-2,4 вольт, а 4,1- 3,1 вольт ( отсечка контроллера на батарее). Для обеспечения пикового токового питания БТ применено "тантал" на 100 мкФ х 6В:
Подключение вибро - такое же как и разрядов на индикаторе. ТТP223 подключена по даташиту, добавлен конденсатор между ножкой тача и землёй на 30р , иначе срабатывал сам по себе.
В модуле сенсорной кнопки роль конденсатора выполняет площадка касания и слой текстолит.
Далее интереснее. Микроконтроллеру надо "знать" сколько батарея ещё "протянет". Соответственно надо снимать напряжение на батареи и передавать его на аналоговый вход МК. Сказано - сделано. НО! По умолчанию источником опорного напряжения (далее ИОН) является напряжение питания МК. Можно конечно установить TL431 и напряжение с него подать на вход AREF. Но как видно из схемы :
стабилитрон чудом превратился в конденсатор. Почему? В МК уже есть несколько ИОН с разными номиналами. Включается он командой analogReference(type), где type команда, которая выставляет нужное напряжение ИОН:
- DEFAULT - источник питания МК.
- INTERNAL - 1.1 Вольт.
- EXTERNAL - напряжение на AREF.
Нас интересует второй вариант. По этому в void setup запишем команду analogReference(INTERNAL).
Далее получается, что МК не увидит напряжение на аналоговых входах выше 1.1 вольта. На помощь приходит резисторный делитель:
Коротко о номиналах. Напряжение на выходе резисторного делителя считаем по формуле Uвх/Uвых = (R2/R1). Для нас справедливо уравнение VCC/Uвых.=R10/R11). При 1,1 вольте сигнал на пине будет равен 1023. Значит нам не разрешено выходить за 1,1 вольт. Базовым резистором R10 возьмём номинал в 10К (если сильно большой взять - будет влияние помех сильное).
И так, что нам известно:
Входное напряжение (мах.) -4,2в.
Опорный резистор - 10кОм.
Выходное напряжение - 1,1 в.
Формула расчета верхнего плеча будет R11=R10*(VCC/Uвых)
Подставим значения и получим :
R11=10кОм*(4,2в/1,1в)=38.2 кОм. Нам нужен резистор на 39 кОм (стандартный номинал).
Но я возьму с запасом на 50 к.
Далее. Максимальное напряжение у нас будет меняться в зависимости от разряда АКБ. Следовательно меняться будет и напряжение на делителе, что нам и надо. Теперь нужно заставить МК "Видеть" напряжение, а не значения. Для этого нужно преобразовать значение на пине А2 (25 нога МК) в напряжение и записать в переменную типа float.
Делается это так:
float volt=0.00; //создаем переменную в начале программы и ставим значение с 2-я разрядами после запятой (для точности)
volt = (analogRead(2)*1,1)/1024; // в переменную записываем значение, считаное с пина А2 умноженное на максимальное напряжение ИОН и разделено на разрядность АЦП МК (1024 для АтмегаХХХ (от 0 до 1023)).
А далее определяем максимальное и минимальное значение батареи (для меня это 4,2 в - 3,4 в) и вычисляем напряжение на выходе резисторного делителя. Для меня это 0,7в - 0,56в.
А далее отображаете инфу как и время.
По дальнейшему развитию проекта (програма, схема и т д.) - следующий пост)
С уважением ваш ChuzhoiChelovek!