Велокомпьютер на PIC16F628A и 4-разрядном LED индикаторе

По просьбе сына было решено сконструировать и установить  на подростковый велосипед спидометр, а лучше, наделив его дополнительными функциями, сделать многофункциональный велокомпьютер. Встал вопрос выбора основных деталей – микроконтроллера и индикатора. На счет микроконтроллера сомнений не возникло – это PIC16F628A, достаточно функциональный и недорогой, который можно купить практически в любом магазине. С выбором индикатора было чуть сложнее. Почти все аналогичные приборы из просторов Интернета имеют ЖК-индикаторы типа 8х2, 16х1 и т.д. Данные индикаторы наряду с несомненными преимуществами (возможность индикации не лишь цифр, но и текста; отсутствие необходимости постоянного опроса; малое энергопотребление; относительно небольшое количество требуемых портов ввода-вывода) имеют и существенные недостатки. К таковым можно отнести: невысокая ударопрочность, небольшой размер знаков, деградация при длительном воздействии прямых солнечных лучей, относительно высокая цена, небольшой угол обзора.

После недолгих раздумий, было решено остановиться на семисегментных 4-х разрядных супер-ярких LED-индикаторах. Решающее значение в выборе имели цена, а так же гораздо более простое считывание их показаний – внимательно приглядываясь к показаниям во время движения, можно слишком отвлечься от дороги и допустить ДТП. Кроме того, в данном случае, желательно не применять деталей, которые боятся ударов и тряски. Эти индикаторы, по моему мнению, незаслуженно считаются менее экономичными, чем LCD. Это справедливо лишь для индикаторов LCD без подсветки, стандартный же ток с подсветкой таких индикаторов  – 80-85 мА. Оперативная регулировка тока через LED-индикаторы в зависимости от освещения, даже при дневном свете позволяет довести среднее потребление 4-х разрядного индикатора (с высотой знака 14 мм) при удовлетворительной читаемости показаний до 30-40 мА, что ниже, чем ток потребления подсветки LCD.  При этом, светодиодные индикаторы имеют непревзойденные долговечность, ударопрочность и низкую цену (в 3-4 раза ниже, чем буквенно-цифровые LCD индикаторы). Если немного напрячь фантазию почти все необходимые служебные надписи можно воспроизвести (на английском языке) и с помощью 7-сегментных индикаторов.

В итоге, был сконструирован многофункциональный велосипедный компьютер на микроконтроллере PIC16F628A, индикаторе CPD-03641SR1/A с общим анодом и 4-х MOSFET транзисторах IRLML6402 с динамической индикацией, программной регулировкой яркости свечения индикатора и датчиком движения на герконе.

Основные возможности прибора:
  — измерение скорости движения в км/ч с разрешением 0.1 км/ч;
  — измерение пройденного за все время расстояния в километрах с разрешением в 1 км (сброс этого параметра в 0 не предусмотрен);
  — измерение пробега с момента его (пробега) сброса, в километрах с разрешением в 0.1 км;
  — измерение пробега с момента сброса временного интервала, в километрах с разрешением в 0.1 км;
  — измерение времени, прошедшего с момента включения (или сброса временного интервала), с дискретностью 10 сек. ;
  — измерение напряжения питания с индикацией его снижения и выключением при снижении сверх нормы с сохранением данных;
  — программная регулировка яркости свечения индикатора (6 градаций);
  — оперативная установка значения длины окружности колеса для конкретного велосипеда;
  — запоминание в EEPROM основных значений при выключении; выключение в спящий режим при отсутствии движения более 2 минут;
  — индикация статистики поездки (средняя и максимальная скорость, время и расстояние);
  — вывод на индикатор служебных сообщений в виде бегущей строки;
  — возможность поездки без индикации, но с регистрацией всех данных, для экономии энергии батареи питания.
  — возможность питания прибора от аккумуляторов (Li-ion от мобильных телефонов или Ni-MH – 3 шт) или 3-х щелочных элементов;

Основные технические характеристики:
  — точность измерения всех параметров    — 1% плюс ед. мл. разряда;
  — напряжение питания   — 3.25-5.0 В;
  — ток потребления при мин. яркости индикатора не более    — 6.0 мА;
  — ток потребления при макс. яркости индикатора не более — 90 мА;
  — ток потребления в спящем режиме не более   — 0.1 мА;
  — пределы измерения скорости    — 0 — 99.9  км/ч;
  — пределы измерения общего пробега    — 0 -10000  км;
  — пределы измерения сбрасываемых пробегов   — 0 — 999.9  км;
  — пределы измерения времени поездки    — 10 сек -10 час;
  — пределы измерения напряжения питания    — 2.9 — 4.3 В;
  — напряжение, при котором выводится предупреждение    — 3.25 — 3.375 В;
  — напряжение, ниже которого прибор выключается   — 3.25 В;
  — пределы установки длины окружности колеса    — 24 — 255  см.;
  — время до выключения в режиме без движения    — 2 мин.

Рассмотрим работу с прибором более подробно.

Все манипуляции с прибором производятся с помощью одной кнопки без фиксации. При этом, в основном, действует правило: короткое нажатие кнопки (до 2 сек.) используется для выбора значения, а длинное нажатие (более 2 сек) — для включения выбранного значения (кнопку надо держать нажатой до появления на индикаторе подтверждения ввода – слова «YES_»). При отсутствии  нажатия кнопки в течении 6 секунд , прибор переходит в исходный режим.

При включении питания на экране появляется приветствие, после чего  индицируется скорость движения, а при его (движения) отсутствии переходит в режим «STOP» — ожидания  2 мин.  до выключения  в спящий режим. Любое нажатие кнопки или срабатывание датчика движения сбрасывает время ожидания и, впоследствии, отсчет 2 мин. производится заново. В режиме «STOP» на индикатор, попеременно с интервалом в одну секунду, выводится собственно эта надпись, сбрасываемый километраж, общий километраж и время в пути. В случае возобновления движения, прибор автоматически начинает индицировать параметр, согласно текущему режиму.

Короткое нажатие кнопки в исходном состоянии (движение или «STOP») переводит нас в основное меню, а длинное в режим установки яркости индикатора (индицируется «br.X», где Х – моргающая цифра от 0 до 5), где короткими нажатиями можно изменять цифру по кругу (при этом, сразу меняется яркость индикатора). Если в режиме установки яркости в течении 6 сек. не нажата кнопка, прибор переходит в исходный режим при прежней яркости, а если длительно нажать кнопку (до появления надписи «YES_») – в исходный режим с новой яркостью. Режим установки яркости наглядно показан на рисунке.

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

Выполняемая функция в каждом пункте меню зависит от того, находится прибор в режиме движения или в режиме «STOP».

Рассмотрим включаемые режимы в движении:
— скорость (“SPEE”) – индикация скорости;
— сбрасываемый километраж (“dist”) – индикация сбрасываемого километража;
— полный километраж (“d.ALL”) – индикация полного пробега в течении 16 сек., потом – режим “dist”;
— авто (“AUTO”) – попеременная индикация скорости, сбрасываемого километража и времени с интервалом 4с.;
— выключения индикации (“OFF_”) – на индикаторе попеременно загораются лишь нижние сегменты средних 2-х индикаторов (средний ток потребления не более 5 мА при максимальной яркости и не более 0.5 мА – при минимальной);
— время в пути (“time”) – на индикаторе временной интервал с момента очистки времени (формат вывода — “X.XX.X”, где 1-я цифра — часы, 2-я и 3-я – минуты, 4-я – десятки секунд);
-напряжение (“U.bAT”) —  индикация напряжения батареи (при напряжении более 4.3 В, индицируется 4.3);
— установки (“Set_”) – подменю установок (сброс километража (“d_CL”) и времени (“t_CL”), установка начальной яркости при включении (“br.St”), установка окружности колеса (“Set.L”)).

Пояснения требует пункт “Set.L” – включение этого пункта выводит на экран выражение вида “L.XXX”, где ХХХ – вписываемое значение окружности колеса в сантиметрах. При этом, изменяемая цифра моргает и меняется по кругу при коротких нажатиях на кнопку (цифры меняются таким образом, что ввести можно лишь числа от 024 до 255). Запоминание 1-й и 2-й цифры при длительном нажатии индицируется полным погасанием индикатора, а 3-й цифры – как обычно, словом “YES_” (означает запись всего числа в ОЗУ и EEPROM). Если кнопку не нажимать в течении 6 сек., происходит выход в подменю установок с сохранением последнего числа перед зажиганием слова “YES_” (если  надписи “YES_” ещё не было – выход без изменения значения).

В режиме «STOP» следующие особенности.

Длительное нажатие кнопки в пункте меню «скорость» в этом режиме переводит прибор в режим отображения статистики поездки. Высвечиваются с интервалом в 2 сек. : максимальная скорость (вида “верхняя черта 1-го знака + ХХ.Х”, где ХХ.Х – максимальная скорость с момента сброса времени); средняя скорость (вида “-XX.X”, где ХХ.Х – средняя скорость с момента сброса времени считая время остановок – при остановке более 2 мин. учитывается лишь 2 мин. в режиме “STOP”); пройденное с момента сброса времени (не путать с прямо сбрасываемым километражем) расстояние (“XXX.X”); временной интервал (“X.XX.X”).

 В этом режиме прибор находится до нажатия кнопки или начала движения. Если ни того, ни другого события не происходит в течении 2 мин., устройство переходит в спящий режим аналогично режиму «STOP».   

В пунктах километража и времени прибор, при включении соответствующего пункта, остается в режиме «STOP», хотя внутренний индикатор режима меняется (при последующем начале движения устройство работает в новом режиме).

Режим измерения напряжения питания и подменю установок работают аналогично случаю наличия движения.

Если в режиме ожидания (“STOP”) включить режим “OFF_”, устройство немедленно переходит в спящий режим с записью значений в энергонезависимую память (EEPROM). Выход из этого состояния происходит как при начале движения, так и при нажатии кнопки автоматически.  Внимание! Запись данных в энергонезависимую память происходит лишь при выключении в спящий режим! Во избежание потери данных о последней поездке, перед выключением питания прибора следует сначала перевести его в спящий режим. Впрочем, полное выключение питания прибора имеет смысл лишь при длительных перерывах в использовании.

В приборе приняты меры для исключения возможной порчи данных EEPROM из-за попытки записи в него информации при слишком низком напряжении питания, а также возможного выхода из строя аккумулятора от чрезмерного снижения его напряжения. Для этого  предусмотрены следующие действия программы. Во-первых, это предупреждение о приемлемом, но уже заниженном напряжении питания (3.25-3.375 Вольт) — в этом случае, прибор, работая в обычном режиме, каждые 16 сек. выводит на экран на одну секунду надпись “bAt.L”  (battery – low), сигнализируя пользователю, что пора подзарядить или заменить батарею питания. В случае снижения напряжения питания ниже 3.25 Вольт, на индикатор выводится на 4 сек. надпись “bAt.L”, моргающая для заметности с частотой 1 Гц. Далее в виде бегущей строки выводится сообщение “REPLACE THE BATTERY”, после чего прибор переходит в ждущий режим с сохранением данных в EEPROM. Причем, кнопкой и движением прибор из этого состояния уже не выводится.

При первичном включении питания прибора, напряжение может оказаться даже ниже 3 Вольт, что уже опасно для данных при записи в EEPROM. Потому, при включении питания, в первую очередь проверяется напряжение питания (предварительно нагрузив источник выводом числа “0000” для учета реального внутреннего сопротивления батареи) и если оно менее 3.25 Вольт, вышеописанная процедура выключения производится без записи данных в EEPROM.

Кроме того, на время любой записи в EEPROM выключается индикатор, тем самым исключая «проседание» напряжения питания прибора от тока индикации, а значит, обеспечивая во время  записи максимальное напряжение батареи.

Теперь можно перейти к описанию работы схемы.

Индикатор своими выводами сегментов подключается к порту B (RB1-RB7), а вывод запятых — к выводу RA4 микроконтроллера (МК) через токоограничительные резисторы R11-R18. Благодаря использованию индикатора с общим анодом (ОА), оказалось возможным непосредственное подключение выхода RA4 с открытым коллектором к выводу «запятых» индикатора. При номиналах резисторов, указанных на схеме, максимальный импульсный ток каждого вывода порта составляет 13-15 мА. Он меньше «ожидаемого», потому что выход порта тоже имеет некоторое ненулевое сопротивление. Для увеличения яркости индикатора, если она недостаточна, можно уменьшить их номинал до 36 Ом, однако это увеличит потребляемые токи примерно на 15-17%. Выводы разрядов индикатора подключены к портам RA0-RA3 через усилители-инверторы на MOSFET транзисторах с каналом P-типа с малым напряжением включения затвора и малым сопротивлением СИ во включенном состоянии. Подобная схема включения позволяет предотвратить перегрузку портов МК (ток через выводы разрядов доходит до 15*8=120 мА), а так же снизить их (портов) выходные токи до нескольких микроампер максимум (почему это важно будет понятно ниже). Резисторы R7-R10 защищают выходы МК от скачков тока в моменты переключения, а так же в случае пробоя какого-либо транзистора.

Динамическая индикация с регулировкой яркости индикатора осуществляется с помощью прерываний от таймеров TMR0 и TMR2. В прерывании от TMR0 индикатор зажигается, а от TMR2 – гасится. Изменением соотношений интервалов этих прерываний и регулируется яркость. Подробнее об этом можно прочесть в моей статье /me/mc/mc244.php.

Импульсы оборота колеса поступают на вход МК RB0/INT с геркона SW1. Элементы R4, C4 устраняют дребезг контактов геркона, а R3 – уменьшает импульсы разрядного тока C4. 

С помощью таймера TMR1 измеряется время между импульсами. Собственно скорость вычисляется по формуле: скорость — V=(L(cm)*2813)/X , где V — скорость в 1/10 км/ч, Х — число 16 микросекундных интервалов между импульсами датчика, L – окружность колеса в сантиметрах.

Кнопка подключена ко входу RA5/MCLR, который запрограммирован как обычный вход. Резистор R1 «подтягивает» вход к +3В, а R2 – устраняет броски тока при переключении кнопки. Конденсатор C3 устраняет на входе MCLR «игольчатые» высокочастотные помехи. Без него прибор периодически может сбрасываться даже при такой конфигурации МК. Цепь R6, R5, D1 предназначена для возможности вывода  МК из режима SLEEP нажатием кнопки. При нажатии кнопки меняется с высокого на низкий уровень на входе RB7 (в режиме SLEEP он запрограммирован как вход и разрешено прерывание по изменению уровня) и МК выходит из спящего режима. На остальных выходах управления сегментами RB1-RB6 и RA4 в режиме SLEEP установлен высокий уровень, что гасит индикатор и минимизирует ток потребления независимо от состояния «разрядных» MOSFET транзисторов.

Элементы X1, C1, C2 образуют со входами RA6, RA7 кварцевый генератор частотой 4 МГц по обычной схеме. Применение кварцевого генератора позволяет максимально увеличить точность вычислений. В случае, если достаточна точность измерений 3-5 % и требуется максимальное увеличение вибрационной и ударной стойкости прибора, можно эти элементы исключить и установить в конфигурации в пункте «осциллятор» внутренний генератор (значение «IntOsc»). Тогда МК будет тактироваться от внутреннего генератора с такой же частотой 4 МГц, но его точность составит порядка 3% (при стабильном питании 3 В). Внимание! Если у Вас самодельный программатор, при установке в конфигурации одновременно пунктов “INT.OSC” и “MCLR OFF” (отсутствует птичка в пункте MCLR) могут быть проблемы, особенно с последующим перепрограммированием МК, поэтому, тем, кто не уверен, лучше собирать прибор по исходной схеме.

На элементах U2, R20, R21 реализована схема измерения напряжения батареи питания. Программируемый регулятор напряжения U2 включен по схеме с напряжением 2.5 Вольт. На его выходе напряжение питания 3-5 В преобразуется в 0.5-2.5 В. На выходе RA1 МК на время измерения напряжения устанавливается низкий уровень, соединяя верхний по схеме вывод R21 с корпусом, и он становится нагрузкой U2. Номинал R21  выбран для обеспечения минимального по datasheet тока через U2. Через резистор R20 на вход внутреннего компаратора МК (RA0, в данном случае, установлен как вход компаратора AN0) поступает измеряемое напряжение 0.5-2.5 Вольт. На другой вход компаратора поступает ступенчато возрастающее напряжение с внутреннего источника образцового напряжения (ИОН). По моменту превышения ИОН над входным напряжением вычисляется величина напряжения. При измерении напряжения, на входы 2-х транзисторов (Q1,Q2) поступает открывающее напряжение и лишь вышеупомянутое свойство транзисторов MOSFET, а именно очень низкий входной ток позволяет сохранять высокое входное сопротивление компаратора и минимизировать погрешность. На время измерения напряжения индикатор гасится посредством «сегментных» выводов МК, однако, из-за малого времени измерения, напряжение на конденсаторе C5 остается почти такое же, что и под нагрузкой, поэтому, измерение дает реальную картину.

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

В SLEEP режиме выходы RA0-RA3  устанавливаются в высокий уровень для закрытия транзисторов, при этом, нет тока через U2 и, соответственно, обеспечивается низкий ток потребления всего устройства.  

Вся схема питается напряжением 3В с выхода интегрального стабилизатора NCP551SN30, характеризующегося очень малым собственным током потребления (единицы микроампер) и падением напряжения (менее 0.1 В). На микроконтроллер напряжение питания поступает через дополнительный фильтр R22, C7, C8 уменьшающий помехи от динамической индикации. Относительно большая емкость конденсатора C5 обусловлена необходимостью шунтирования внутреннего сопротивления несколько разряженной батареи питания. Для его быстрой разрядки при выключении питания применяется резистор R19 и переключатель SW3 с дополнительным контактом. Диод D2 принудительно разряжает конденсаторы C6  и C8 при выключении питания, что облегчает последующий запуск микроконтроллера.

Программа микроконтроллера написана на Ассемблере в среде MPASM и в ней же откомпилирована. При загрузке прилагаемого HEX файла в программу для прошивки типа WINPIC или  IceProg, слово конфигурации загружается автоматически (все «галочки» кроме пункта “PWRT” сброшены, осциллятор установлен “XT”).

Почти все детали устройства установлены на односторонней печатной плате размерами 39х49 мм, изображенной на рисунке.

Для уменьшения размеров платы, большинство деталей использованы типа SMD.  При сборке сначала впаиваются все SMD компоненты, потом впаиваются перемычки, которые изготовлены из луженого медного провода диаметром 0.4 – 0.6 мм, в последнюю очередь впаиваются колодка для МК и индикатор.

Вне платы установлены лишь кнопка, выключатель питания, геркон и разъем для его подключения, а так же резистор R19, который припаян навесным способом на выключателе SW3. При отсутствии малогабаритного конденсатора 1000 мкФ на 6.3 В, C5 так же можно вынести за пределы платы и распаять на SW3.

Индикатор HL1 – кроме указанного типа, можно заменить на любой типа FYQ3641B, их лучше применить с индексами SR, HR, UHR (у них больше яркость) красного цвета или аналогичные оранжевого цвета. Транзисторы так же можно применить типа IRLML6401.  Все SMD резисторы и конденсаторы – типоразмера 0805, резистор R3 – МЛТ-0.125, C1, C2 – малогабаритные керамические, C5,C6,C8 – импортные алюминиевые. Стабилизатор NCP551SN30, в крайнем случае, можно заменить на LP2950CZ-3.0 в корпусе ТО-92 (в плате для этого предусмотрены отверстия), но у него похуже параметры. Диоды D1, D2 – заменимы на любые из серий КД521, КД522. Геркон – типа КЭМ-2 или другой, с как можно меньшим МДС срабатывания, а в качестве разъема для его подключения – любой малогабаритный для выносных БП, удобный для крепления в корпусе. Переключатель и кнопку – так же любые малогабаритные, предназначенные для крепления на корпусе.

Прибор изначально «заточен» на применение литий-ионной батареи от сотового телефона (пределы измерения напряжения, напряжение выключения), однако впоследствии было решено питать его от 3-х «алкалиновых» элементов типа АА, благо заряда их хватает на 3-4 месяца эксплуатации умеренной интенсивности. Впрочем, аккумулятор от «сотового» с зарядкой от штатного БП  так же можно использовать без проблем. Подойдут так же три металлогидридных аккумулятора, включенные последовательно.

Вид собранной платы с 2-х сторон и другие детали компоновки можно рассмотреть на фотографиях.

Детали для изготовления корпуса прибора вырезаны из корпуса старого аккумулятора от компьютерного ИБП. У него аккуратно срезана верхняя крышка, извлечены и сданы на утилизацию все внутренности. После промывки и сушки получаем пластмассовую коробку с 6-ю отсеками, из которой и вырезаем две части корпуса – верхний кожух и Т-образный каркас, на котором крепятся плата и снизу отсек для элементов питания. Он же выполняет роль нижней стенки корпуса с органами управления. Напротив индикатора в кожухе вырезано отверстие, заклеенное прозрачным оргстеклом красного цвета. Каркас вместе со всеми элементами вставляется в кожух так, чтобы нижняя стенка немного «утапливалась» в кожух, и фиксируется двумя миниатюрными саморезами. Благодаря такой конструкции, устройство не боится дождя, при условии вертикального положения велосипеда. К корпусу с задней стороны дихлорэтаном приклеивается пластинка из того же материала, к которой винтами привинчен хомут для крепления на велосипеде.

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

Для измерения длины окружности колеса на боковую поверхность шины наносят метку мелом и, покатив велосипед, отмечают на асфальте две точки «от метки до метки» и измеряют рулеткой это расстояние как можно точнее. В вышеуказанный интервал длин окружности колеса (24-255 см), думаю, попадают все существующие велосипеды, но если все же окружность колеса больше 255 см, есть простой выход – на колесе закрепляют строго друг против друга два магнита, а в качестве длины окружности вводят половину длины окружности колеса.

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

В прикрепленном файле: плата LAY, модель Proteus, исходный ASM-код и прошивка.

Список радиоэлементовОбозначение
Тип
Номинал
Количество
ПримечаниеМагазинМой блокнот

U1
МК PIC 8-битPIC16F628A1
U2
ИС источника опорного напряженияTL4311
U3
СтабилизаторNCP551SN301
LP2950ASZ3.0Q1-Q4
ТранзисторIRLML64024
IRLML6401D1, D2
Выпрямительный диод1N41482
КД521HL1
ИндикаторCPD-03641SR1/A1
FYQ-3641BX1
Кварцевый резонатор4 МГц1
C1, C2
Конденсатор22 пФ2
C3
Конденсатор4700 пФ1
SMD 0805C4
Конденсатор22 нФ1
SMD 0805C5
Электролитический конденсатор1000мкФ 10В1
C6
Электролитический конденсатор47мкФ 6.3В1
C7
Конденсатор47 нФ1
SMD 0805C8
Электролитический конденсатор220мкФ 6.3В1
R1
Резистор39 кОм1
SMD 0805R2, R21
Резистор1 кОм2
SMD 0805R3
Резистор47 Ом1
0.125 ВтR11-R19
Резистор47 Ом9
SMD 0805R4, R6
Резистор100 кОм2
SMD 0805R5
Резистор10 кОм1
SMD 0805R7-R10
Резистор470 Ом4
SMD 0805R20
Резистор8.2 кОм1
SMD 0805R22
Резистор27 Ом1
SMD 0805SW1
ГерконКЭМ-21
SW2
КопкаRBS-1051
Без фиксацииSW3
ПререключательMXL-1021
Добавить все

Скачать список элементов (PDF)

Прикрепленные файлы:

Добавить комментарий

Ваш адрес email не будет опубликован.