8

Часы на АЛ304 с BLUETOOTH. Пост №2

Всем привет! Продолжаю цикл о часах на ал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!

0
Автор поста оценил этот комментарий

R14 и 15 с логичесскими уровнями не помогут, точно, тут они какраз защитные, нужно смотреть строение портов МК и НС04 и играть с подтягивающий и резисторами

раскрыть ветку (1)
0
Автор поста оценил этот комментарий

Я имел ввиду ограничение тока)

0
Автор поста оценил этот комментарий

Резисторы не защищают порт, а задают ток сегмента и защищают от параллельного включения диодов при включении нескольких сегментов (цифра 1 это уже 2 сегмента). Также общий резистор будет задавать общий ток индикатора и 8 будет светится намного слабее 1, хотя у вас 10 ом (11 мА/сегмент и максимальный ток порта процессора уже превышены). Хотя меня больше напрягает логика подключения сегментов и индикаторов к портам, но я не программист, может такой код проще.

раскрыть ветку (1)
0
Автор поста оценил этот комментарий

Можете и так. Я ведь только учусь. К тому же использование доп. микросхем ( а-ля контролер 7 сегментников , или регистр 595) увеличивает как размер платы и её высоту так и Количество дорожек.  К тому же кратковременное воздействие повышенного тока на портах МК допускается, а индикация идёт не более 5 секунд и активируется нажатием сенсорной кнопки. 

0
Автор поста оценил этот комментарий
не кондеристый кондер. либо косяк в монтаже или трассировке. я не первый год применяю микроконтроллеры и конденсаторы на входе ацп проверены десятками разработок нашего отдела.
бывает, что измеряется какой-то мусор, если не "обнулять" вход ацп семплированием заземленной ноги, но в ардуине я с таким не сталкивался
раскрыть ветку (1)
0
Автор поста оценил этот комментарий

тое странно. Но я делал навесом. номиналы с допуском 0,1%, кондёр рабочий. Возьму из другой партии. Если что, добавлю в схему)

0
Автор поста оценил этот комментарий
не надо так остро реагировать на "бестолкового погромиста". это ирония. все погромисты бестолковые. а для них - электроники тупые.
теперь по конденсатору. как работает ацп атмеги? аналоговый вход подключается на короткое время к конденсатору выборки, после чего заряженный конденсатор отключается от ноги и попадает в лапы преобразователя.
таким образом, конденсатор выборки заряжается тем током, который течет через делитель, и может не успеть за короткое время сэмплирования зарядиться до реального уровня. в даташитах на многие микроконтроллеры прямо указывают, что если сопротивление источника сигнала большое, то нужно либо усилить его, либо заблокировать конденсатором на пару-тройку порядков больше, чем конденсатор выборки - в этом случае он успевает зарядиться и показывает адекватную картину.
можно и плюнуть на это, подобрав коэффициенты по факту, но это плохой вариант. так что курим даташит на выбранный контроллер, уделяя внимание деталям.
по делителю. ну не нравится десять - бери пять. тогда lsb ацп будет не один милливольт батареи, а полмилливольта. я стараюсь привязывать физические величины круглыми, где это возможно - проще пересчитывать.
в любом случае, это явно не то место, где будет значимый разброс. а разброс мы получим на отклонении резисторов и на всяких оффсетах. а уж заявленный ИОН с разбросом +-10% - как бы намекает, что про точность можно вообще забыть. в схеме я не заметил подстройки, так что можно верхний предел и до сотни вольт задрать - точность измерения не сильно пострадает.
ну и резистор вы снова посчитали неправильно. 38 килоом - это сопротивление делителя. верхнее плечо на 10 к меньше. не надо колдовать с формулами. надо использовать те, которые даются в школьном курсе физики - обычно их хватает
раскрыть ветку (1)
0
Автор поста оценил этот комментарий
Да я понял что ирония. Не обижаюсь). Кстате, только что перепроверил и ваше предложение и то что я пересчитал. Про конденсатор знаю. И вот что имеем. Когда ставил кондёр - значения сильно скачут. А вот то, что я пересчитал, дает на выходе делителя при 4.2в - 0.7 вольта, а при 3.1в - 0. 56 вольт. Это показания как самой дуинки, так и вольтметра. ))))) Но это палка с двумя концами))))
показать ответы
1
Автор поста оценил этот комментарий
ловко делитель посчитал. но неправильно.
по твоей логике получается, что на нижнем плече будет полное напряжение, если резисторы одинаковые.
попробуй другую формулу.
примем для облегчения труда бестолкового погромиста предел измерения 10,24 В. и выберем нижнее плечо делителя равным 10 кОм.
значит, через делитель при максимуме потечет 1,1 В / 10 кОм = 110 мкА.
отсюда находим полное сопротивление делителя:
10,24 В / 110 мкА = 93,091 кОм.
а теперь вычтем из полного сопротивления нижнее плечо и получим сопротивление верхнего:
93,091 кОм - 10 кОм = 83,091 кОм
лезем в таблицу однопроцентных резисторов и видим, что наиболее близкий номинал - 82,5 кОм
и таки не забываем, что при таких сопротивлениях на входе АЦП легко получить бабушкин день рождения вместо адекватных данных, поэтому подвешиваем поближе к микроконтроллеру тыщу пикофарад на этот вход
раскрыть ветку (1)
0
Автор поста оценил этот комментарий

А толку тогда с конденсатора? Чем меньше ёмкость, тем больше нужна частота иследуемого сигнала. я не думаю, что АКБ будет заряжатся и разряжатся несколько тысяч раз в секунду. Это первое.


Зачем мне верхний придел в 10+ вольт , когда максимальное напряжение АКБ 4,2в. По вашей формуле получим 4,2В / 110мкА = 38,2 кОм. Собственно то, что и я получил. На входе АЦП мне нужен большой разброс сигнала для получения более-менее
точных значений. Это второе.

По поводу бестолкового- могу поспорить. У меня образование учителя, а не инженера-программиста. Всё, что я делаю - меня никто не учил. Разбираюсь сам. Так что для меня это как ни как уровень. Тем более в первом посте я упомянул что только учусь. Это в третьих.))))

показать ответы
1
Автор поста оценил этот комментарий

Я бы избегал float чисто из соображения экономии вычислительного ресурса

Рациональнее хранить и считать в int*10

раскрыть ветку (1)
0
Автор поста оценил этот комментарий

Возможно и так, но ресурс мне сейчас не важен)

Темы

Политика

Теги

Популярные авторы

Сообщества

18+

Теги

Популярные авторы

Сообщества

Игры

Теги

Популярные авторы

Сообщества

Юмор

Теги

Популярные авторы

Сообщества

Отношения

Теги

Популярные авторы

Сообщества

Здоровье

Теги

Популярные авторы

Сообщества

Путешествия

Теги

Популярные авторы

Сообщества

Спорт

Теги

Популярные авторы

Сообщества

Хобби

Теги

Популярные авторы

Сообщества

Сервис

Теги

Популярные авторы

Сообщества

Природа

Теги

Популярные авторы

Сообщества

Бизнес

Теги

Популярные авторы

Сообщества

Транспорт

Теги

Популярные авторы

Сообщества

Общение

Теги

Популярные авторы

Сообщества

Юриспруденция

Теги

Популярные авторы

Сообщества

Наука

Теги

Популярные авторы

Сообщества

IT

Теги

Популярные авторы

Сообщества

Животные

Теги

Популярные авторы

Сообщества

Кино и сериалы

Теги

Популярные авторы

Сообщества

Экономика

Теги

Популярные авторы

Сообщества

Кулинария

Теги

Популярные авторы

Сообщества

История

Теги

Популярные авторы

Сообщества