Велокомпьютер на микроконтроллере PIC16F628A » Программирование устройств на PIC микроконтроллерах


Логин:
Пароль:
О сайте:

Pic.Rkniga.ru - Сайт как для начинающих, так и для опытных радиолюбителей, разрабатывающих свои устройства на популярных PIC микроконтроллерах.
Здесь можно обмениваться сообщениями на форуме, а также добавлять на сайт статьи и схемы своих устройств.

Меню сайта
Главная Форум по PIC микроконтроллерам Форум Статьи по PIC микроконтроллерам Статьи Справочная информаци по PIC микроконтроллерам Справочник Литература по PIC микроконтроллерам Литература Схемотехника Схемотехника устройств на PIC микроконтроллерах Микроконтроллеры Программаторы Все по программированию PIC микроконтроллеров Программы, Софт Программы Ссылки
Опрос

Сколько лет вы занимаетесь программированием PIC микроконтроллеров?


от 0-1 года
1-3 года
3-5 лет
5-10 лет
более 10


Последние материалы
  • Тестовая плата для отладки программ на микроконтроллере PIC18F4550
  • Кнопка On/OFF на PIC12F629.
  • Часы с синхронизацией от китайского будильника
  • ШИМ регулятор на PIC16F628A.
  • Счетчики прямого и обратного счета на PIC16F628A.
  • Таймер отключения питания для мультиметра и не только.
  • Измеритель напряжения и тока
  • Маршрутный компьютер для электровелосипеда
  • Простой двухканальный термометр на PIC16F690 и датчиках DS18B20
  • Электронная "Незабудка" для забывчивых
  • Популярные материалы
    Случайная книга
    Велокомпьютер на микроконтроллере PIC16F628A
    Автор публикации: alex Просмотров: 8082 Добавлен: 28-07-2014, 08:41 Комментарии: 0

         По просьбе сына оборудовать его велосипед спидометром автор изготовил этот прибор и заодно наделил его дополнительными функциями, превратив в полноценный велокомпьютер. Базой для разработки послужил сравнительно недорогой и широко распространённый микроконтроллер PIC16F628A, индикатор был выбран семиэлементный светодиодный на четыре десятичных разряда. С его помощью удалось вывести и все нужные для пояснительных надписей буквы латинского алфавита. Велокомпьютер имеет небольшие размеры и автономное питание от батареи гальванических элементов или аккумуляторов, энергии которых при средней интенсивности поездок хватает на несколько месяцев работы.
         Почти все аналогичные приборы, описания которых встречаются в Интернете, имеют ЖК-индикаторы на одну-две строки по 8—16 символов в каждой. Такие индикаторы, наряду с несомненными достоинствами (возможность вывода не только цифр, но и букв, отсутствие необходимости постоянно обновлять информацию на экране, малое энергопотребление, относительно небольшое число линий управления), имеют и существенные недостатки. К ним можно отнести невысокую ударопрочность, небольшой размер символов, деградацию при длительном воздействии прямых солнечных лучей, недостаточно широкий угол обзора, относительно высокую стоимость.
         После недолгих раздумий было решено остановиться на семиэлементных четырёхразрядных светодиодных индикаторах повышенной яркости. Решающее значение имел большой размер знаков — приглядываясь к мелким знакам на ЖКИ во время движения, можно отвлечься от дороги и попасть в ДТП. Кроме того, в велоспидометре желательно не применять детали, боящиеся ударов и вибрации.
         Светодиодные индикаторы незаслуженно, по моему мнению, считаются менее экономичными, чем ЖКИ. Но это справедливо только для ЖКИ без подсветки, стандартный же ток потребления таких индикаторов с подсветкой — 80...85 мА. Регулировка тока через светодиодные индикаторы в зависимости от внешней освещённости позволяет даже при дневном свете довести среднее потребление четырёхразрядного индикатора с высотой знака 14 мм до 30...40 мА при удовлетворительной читаемости показаний. При этом светодиодные индикаторы обладают лучшими долговечностью, ударопрочностью и в три-четыре раза меньшей, чем буквенно-цифровые ЖКИ, стоимостью.
         Разработанный прибор измеряет скорость движения велосипеда с дискретностью 0,1 км/ч, пройденное им за всё время эксплуатации расстояние — с дискретностью 1 км (обнуление этого параметра не предусмотрено); расстояние, пройденное с момента обнуления его счётчика, — с дискретностью 0,1 км; расстояние, пройденное с момента обнуления счётчика времени поездки, — с дискретностью 0,1 км; время, прошедшее с момента включения прибора или обнуления счётчика времени, — с дискретностью 10 с; напряжение питания — с индикацией его снижения и выключением при снижении сверх нормы с сохранением состояния прибора в энергонезависимой памяти. Погрешность измерения всех параметров — ±1 % плюс один дискрет отсчёта измеряемого параметра.
         В приборе предусмотрены программная регулировка яркости свечения индикатора (шесть градаций) и оперативный ввод значения длины окружности колеса конкретного велосипеда, переход в экономичный "спящий" режим при продолжительной остановке, вывод на индикатор статистики поездки (средняя и максимальная скорости движения, время и пройденное расстояние), вывод на индикатор служебных сообщений бегущей строкой, возможность поездки с выключенной для экономии питания индикацией, но с регистрацией всей информации.
         Прибор можно питать от Li-ion аккумулятора от мобильного телефона, трёх Ni-MH аккумуляторов либо трёх щелочных гальванических элементов.

    Основные технические характеристики
    Напряжение питания, В 3,25...5
    Ток потребления, мА, не более при минимальной яркости индикатора 6
    при максимальной яркости индикатора 90
    в спящем режиме 0,15
    Пределы измерения скорости, км/ч 0...99,9
    Предел измерения общего пробега, км 9999
    Предел измерения пробега после обнуления счётчиков, км 999,9
    Пределы измерения длительности поездки 10с...10ч
    Пределы измерения напряжения питания, В 2,9...4,3
    Порог предупреждения о разрядке, В 3,25...3,375
    Напряжение автоматического выключения, В 3,25
    Пределы установки длины окружности колеса, см 24—255
    Время до выключения при остановке, мин 2

         Все манипуляции с прибором производят с помощью единственной кнопки. При этом в большинстве случаев действует правило: короткое нажатие на кнопку (до 2 с) изменяет значение параметра, длинное нажатие (более 2 с) вводит установленное значение в память микроконтроллера, причём кнопку следует держать нажатой до появления на индикаторе подтверждения ввода — надписи YES_). Если в течение 6 с на кнопку не нажимать, прибор переходит в исходный режим.
         При включении питания на экране появляется приветствие, после чего выводится скорость движения. Если движения нет, прибор переходит в режим StOP, а через две минуты — в "спящий" режим. Любое нажатие на кнопку или срабатывание датчика движения начинает отсчёт двухминутного интервала заново.
         В режиме StOP на индикатор поочерёдно с интервалом в 1 с выводятся название режима, пробег с момента обнуления счётчика, общий необнуляе-мый пробег и время в пути. При возобновлении движения прибор автоматически начинает показывать значение параметра, соответствующего установленному ранее режиму.
         При движении или во время остановки короткое нажатие на кнопку переводит прибор в основное меню, а длинное — в режим регулировки яркости индикатора. В последнем случае на индикатор выводится надпись, подобная br. 3, где цифру можно короткими нажатиями на кнопку изменять по кругу от 0 (минимальная яркость) до 5 (максимальная яркость). Если в течение 6 с на кнопку не нажимать, прибор переходит в исходный режим без изменения яркости, а если удерживать кнопку нажатой до появления надписи YES_, то с новой яркостью.
         Как говорилось выше, короткое нажатие в исходном режиме выводит на индикатор основное меню, в котором пункты переключаются по кругу короткими нажатиями, а длинным нажатием пункт выбирается. Выполняемая в каждом пункте функция зависит от того, находится прибор в режиме движения или в режиме остановки.

    В движении действуют следующие режимы:
    SРЕЕ — индикация скорости;
    d1St — индикация расстояния, пройденного после обнуления счётчиков расстояния или времени;
    dAll — индикация общего пробега (это значение выводится без десятичной запятой) с переходом в режим d1St через 16 с;
    Auto — попеременная с интервалом 4 с индикация скорости, пройденного после обнуления счётчиков расстояния и времени поездки;
    OFF — измерение скорости, пройденного пути и времени продолжается, но на индикаторе попеременно включаются только нижние элементы двух средних разрядов, при этом ток потребления прибора снижается до 5 мА при максимальной яркости и 0,5 мА при минимальной;
    tCAL — индикация времени, прошедшего с момента обнуления его счётчика, в формате "часы, минуты, десятки секунд";
    UbAt — индикация напряжения батареи питания (при напряжении более 4,3 В выводится 4,3);
    SET — переход в подменю установок:
    d_CL — обнуление счётчика пройденного расстояния;
    t_CL — обнуление счётчика времени поездки;
    brSt — установка начальной яркости при включении;
    SEtL — установка окружности колеса.

         Пояснения требует пункт SETL. При его выборе на индикатор будут выведены буква L и три цифры, означающие длину окружности колеса в сантиметрах. Ввести можно числа от 024 до 255. Изменяемая цифра мигает и при коротких нажатиях на кнопку изменяется по кругу. При длительном нажатии запоминание первой и второй цифр подтверждается кратковременным полным гашением индикатора, а третьей цифры — как обычно, надписью YES_, что означает запись в память микроконтроллера всего числа. Если на кнопку не нажимать в течение 6 с, происходит выход в подменю установок с сохранением последнего установленного перед выводом надписи YES_ значения. Если такой надписи ещё не было, то хранящееся в памяти значение не изменяется.
         В режиме остановки длительное нажатие на кнопку в пункте меню SPEE выводит на индикатор статистику поездки. С интервалом 2 с отображаются максимальная скорость, средняя скорость, суммарная продолжительность остановок, причём учитываются не более двух минут каждой остановки. Подсчёт всех этих параметров ведётся с момента обнуления счётчика времени. В этом режиме прибор находится до нажатия на кнопку или начала движения. Если в течение двух минут ни того, ни другого события не происходит, велокомпьютер переходит в "спящий".
         При выборе во время остановки пунктов меню, соответствующих отображению пройденного расстояния или времени поездки, изменяется только внутренний признак установленного режима, а фактически он начинает действовать только с началом движения. Измерение напряжения питания и работа с подменю установок происходят точно так же, как при движении.
         Если во время остановки выбрать пункт OFF , велокомпьютер немедленно переходит в "спящий" режим с записью значений в энергонезависимую память (EEPROM). Выход из этого состояния происходит при начале движения или при нажатии на кнопку.
         Учтите, что информация фактически записывается в энергонезависимую память только при переходе в "спящий" режим. Поэтому во избежание её потери следует обязательно перевести прибор в спящий режим, прежде чем выключать его питание. Впрочем, выключение питания имеет смысл только при длительных перерывах в использовании велокомпьютера.
         В приборе приняты меры для исключения возможной порчи содержимого EEPROM вследствие попытки записи в него при слишком низком напряжении питания, а также возможного выхода из строя аккумулятора в результате его чрезмерной разрядки. При ещё приемлемом, но уже заниженном напряжении питания (3,25...3,375 В) на индикатор каждые 16с выводится на секунду надпись bAtL. Это сигнализирует, что пора подзарядить или заменить батарею питания. В случае снижения напряжения питания ниже 3,25 В на индикатор выводится на 4 с та же надпись, мигающая с частотой 1 Гц. Далее в виде бегущей строки выводится сообщение "REPLACE THE BATTERY’, после чего прибор переходит в "спящий" режим, сохранив информацию в EEPROM. Причём кнопкой или началом движения велокомпьютер из этого состояния уже не выводится.
         При включении питания напряжение может оказаться даже ниже 3 В, что уже опасно при записи в EEPROM. Поэтому в первую очередь программа проверяет напряжение батареи (предварительно увеличив ток её нагрузки выводом на индикатор четырёх нулей). Если оно менее 3,25 В, немедленно выполняется процедура выключения прибора, однако без записи информации в EEPROM. Кроме того, на время любой записи в EEPROM индикатор выключается, что обеспечивает некоторое повышение питающего напряжения за счёт снижения потребляемого тока.
         Схема велокомпьютера изображена на рис. 1. Выводы катодов элементов индикатора HG1 подключены к выходам RB1—RB7 микроконтроллера DD1 через резисторы R16—R22, а вывод катода десятичных запятых — к выходу RA4 через резистор R11. При номиналах резисторов, указанных на схеме, и с учётом внутреннего сопротивления выходов импульсный ток нагрузки каждого из них не превышает 13... 15 мА. Для увеличения яркости индикатора можно уменьшить номиналы резисторов до 36 Ом, однако это на 15... 17 % увеличит потребляемый ток.

    Велокомпьютер на микроконтроллере PIC16F628A

         Выводы общих анодов разрядов индикатора подключены к выходам RA0—RA3 микроконтроллера через инвертирующие усилители на полевых транзисторах VT1—VT4 с каналом р-типа, малым пороговым напряжением и малым сопротивлением канала в открытом состоянии. Резисторы R12— R15 защищают выходы микроконтроллера от бросков зарядного тока входной ёмкости полевых транзисторов, а также в случае пробоя изоляции затвор—канал.
         Динамическая индикация с регулировкой яркости индикатора организована с помощью прерываний программы микроконтроллера по запросам от его таймеров TMR0 и TMR2. При обработке запроса от TMR0 индикатор включается, а от TMR2 — выключается. Изменением временных соотношений между запросами этих прерываний регулируется яркость. Подробнее об этом можно прочитать в статье "Динамическая индикация на светодиодных 7-сегментных индикаторах с программной регулировкой яркости" (URL: http: //cxem.net/mc/mc244. php (24.03.14)).
         При каждом обороте колеса велосипеда на вход INT микроконтроллера с геркона SF1 поступает импульс. Конденсатор С1 и резистор R3 устраняют последствия дребезга контактов геркона, а резистор R1 уменьшает амплитуду импульсов разрядного тока конденсатора С1. С помощью таймера TMR1 измеряются интервалы времени между началами импульсов. Скорость V в десятых долях километра в час вычисляется по формуле
    Велокомпьютер на микроконтроллере PIC16F628A
    где L — длина окружности колеса в сантиметрах; N — число 16-м икросекундных отрезков времени в интервале между началами соседних импульсов.
         Кнопка SB1 через резистор R5 соединена с выводом 4 микроконтроллера, сконфигурированным в данном случае как вход общего назначения. Резистор R4 поддерживает на нём высокий логический уровень при отпущенной кнопке, а резистор R5 уменьшает броски разрядного тока конденсатора С2 при её нажатии. Этот конденсатор нужен для устранения высокочастотных помех. Без него прибор может периодически сбрасывать показания даже при используемой конфигурации вывода 4.
         Цепь R6R7VD1 обеспечивает возможность вывода микроконтроллера из "спящего" режима нажатием на кнопку SB1. Перед переходом в этот режим вывод 13 микроконтроллера перепрограммируется как вход и разрешаются прерывания программы по изменению уровня на нём. На выходах RB1—RB6 и RA4 в "спящем" режиме установлен высокий уровень, что гасит индикатор и минимизирует ток потребления. Нажатие на кнопку SB1 изменяет уровень на входе RB7 (выводе 13), что приводит к генерации запроса прерывания. Процедура его обработки возвращает микроконтроллер в активный режим.
         Кварцевый резонатор ZQ1 задаёт тактовую частоту микроконтроллера 4 МГц. Её кварцевая стабилизация обеспечивает максимальную точность измерения скорости. Если допустима погрешность 3...5 %, но требуется максимальная стойкость прибора к вибрации и ударам, можно элементы ZQ1, С4 и С6 исключить из схемы и установить в слове конфигурации микроконтроллера тип тактового генератора IntOsc. Микроконтроллер станет тактироваться от внутреннего RC-генератора той же частоты 4 МГц, стабильность которого значительно хуже, чем кварцевого.
         Обратите внимание, что одновременная установка в слове конфигурации режимов IntOsc и MCLR off (перевод вывода 4 в режим входа общего назначения) может привести к проблемам при следующем перепрограммировании микроконтроллера. Поэтому тем, кто не уверен, что сможет их решить, лучше собирать прибор по исходной схеме.
         На элементах DA1, R8 и R9 реализован узел измерения напряжения батареи питания. Параллельный стабилизатор напряжения DA1 включён так, что поддерживает между своими выводами 3 и 2 напряжение 2,5 В. Таким образом, при напряжении питания 3...5 В напряжение на его выводе 2 изменяется от 0,5 до 2,5 В. На выходе RA1 микроконтроллера на время измерения напряжения устанавливается низкий уровень, что эквивалентно соединению правого по схеме вывода резистора R9 с общим проводом. Он становится нагрузкой стабилизатора DA1, обеспечивая протекание между выводами 2 и 3 стабилизатора минимально необходимого, согласно его техническим данным, тока. Через резистор R8 на вход внутреннего компаратора микроконтроллера (линия RA0 на время измерения перепрограммируется на работу в качестве этого входа) поступает измеряемое напряжение 0,5...2,5 В. Второй вход компаратора соединён в микроконтроллере с внутренним источником образцового напряжения, которое, согласно программе, ступенчато нарастает. По моменту превышения образцовым напряжением измеряемого определяется значение последнего. Полевые транзисторы VT4 и VT3, затворы которых подключены к линиям RA0 и RA1, имеют очень большое входное сопротивление и на процесс измерения напряжения не влияют.
         Хотя на время измерения индикатор HG1 гасится посредством установки высоких уровней на выводах его катодов и потребляемый прибором ток уменьшается, за это время напряжение на конденсаторе СЗ не успевает заметно измениться и остаётся почти таким же, как под полной нагрузкой. Такой способ измерения напряжения, конечно же, несовершенен, но в данном случае его точности достаточно.
         В "спящем" режиме на выходах RA0—RA3 микроконтроллера программа устанавливает высокие уровни для закрывания транзисторов. При этом нет тока и через стабилизатор DA1, чем обеспечено низкое энергопотребление.
         Микроконтроллер и индикатор питаются напряжением 3 В с выхода интегрального стабилизатора DA2 NCP551SN30 с собственным током потребления в единицы микроампер и минимальным напряжением между входом и выходом 0,1 В. На микроконтроллер напряжение питания поступает через дополнительный фильтр R10C7C8, уменьшающий помехи от динамической индикации. Относительно большая ёмкость конденсатора С3 обусловлена необходимостью уменьшить пульсации напряжения при повышенном внутреннем сопротивлении частично разряженной батареи GB1. Для быстрой разрядки конденсатора при выключении питания служит резистор R2. В это же время через диод VD2 разряжаются конденсаторы 05, 07, 08, что облегчает последующий запуск микроконтроллера.
         Программа велокомпьютера написана на языке ассемблера MPASM. Слово конфигурации микроконтроллера содержится в файле spidometer.hex наряду с исполняемыми кодами.
         Почти все детали устройства установлены на односторонней печатной плате размерами 39x49 мм, изображённой на рис. 2. Для уменьшения её размеров большинство деталей — для поверхностного монтажа. Перемычки изготовлены из лужёного медного провода диаметром 0,4...0,6 мм. Поскольку некоторые из них находятся под индикатором и панелью для микроконтроллера, эти элементы устанавливают на плату в последнюю очередь.

    Велокомпьютер на микроконтроллере PIC16F628A

         Вне платы установлены кнопка SB1, выключатель SA1 с припаянным к его выводу резистором R2 и разъём для подключения геркона SF1. При отсутствии малогабаритного конденсатора ёмкостью 1000 мкФ (С3) его также можно вынести за пределы платы, припаяв к выводам переключателя SA1.
         Резистор R1 — МЛТ-0,125, конденсаторы С4 и 06 — малогабаритные керамические, оксидные конденсаторы СЗ, С5, С8 — импортные алюминиевые. Остальные резисторы и конденсаторы типоразмера 0805.
         Индикатор CPD-03641SR1/A можно заменить на FYQ-3641B красного цвета свечения (с индексами SR, HR, UHR) или FYQ-3641BUE оранжевого цвета свечения. Вместо транзисторов IRLML6402 подойдут IRLML6401. Стабилизатор NCP551SN30 можно заменить на LP2950CZ-3.0 в корпусе ТО-92 (в плате для его выводов предусмотрены отверстия), но у него хуже параметры. Диоды 1N4148 заменяются любыми из серий КД521, КД522.

    Велокомпьютер на микроконтроллере PIC16F628A

         Геркон — КЭМ-2 или другой с возможно меньшей магнитодвижущей силой срабатывания. В качестве разъёма для его подключения подойдёт любой малогабаритный разъём питания с удобным креплением на корпусе прибора. Переключатель SA1 и кнопка SB1 также любые малогабаритные с креплением на корпусе.
         Разработка велокомпьютера велась в расчёте на его питание от Li-Ion аккумулятора от сотового телефона. Исходя из этого, выбраны пределы измерения напряжения, напряжение выключения. Однако впоследствии было решено питать велокомпьютер от трёх щелочных (алкалиновых) гальванических элементов типоразмера АА, которых хватает на три-четыре месяца эксплуатации умеренной интенсивности. Подойдёт и батарея из трёх Ni-MH аккумуляторов.
         Детали для изготовления корпуса прибора вырезаны из корпуса старой аккумуляторной батареи от компьютерного источника бесперебойного питания. У него аккуратно срезана верхняя крышка, извлечены все внутренности. После промывки и сушки получилась пластмассовая коробка с шестью отсеками, из которой и вырезаны две части корпуса — кожух и Т-образный каркас, с одной стороны которого, как показано на рис. 3, закреплена плата, а с другой — отсек для элементов питания. Этот же каркас образует нижнюю стенку корпуса с органами управления.
         Напротив индикатора в кожухе вырезано отверстие, заклеенное прозрачным красным оргстеклом. Каркас вместе со всеми элементами вставляется в кожух и фиксируется двумя саморезами так, чтобы нижняя стенка была немного утоплена в кожух (рис. 4). С задней стороны к корпусу дихлорэтаном приклеена пластина из того же материала с металлическим хомутом для крепления к раме велосипеда. Благодаря такой конструкции устройство не боится дождя при условии вертикального положения велосипеда.

    Велокомпьютер на микроконтроллере PIC16F628A

         Геркон помещён в отрезок корпуса шариковой авторучки, залитый герметиком для гидроизоляции и с помощью хомута прикреплённый к вилке переднего колеса (рис. 5). На установленном на колесе светоотражателе закреплён магнит, который один раз за оборот проходит рядом с герконом, замыкая его контакты.
         Чтобы измерить длину окружности колеса, на его шину наносят поперечную черту мелом и, покатив велосипед, делают меловые отметки на асфальте. Рулеткой как можно точнее измеряют расстояние между двумя последовательными отметками. В допустимый для рассматриваемого компьютера интервал 24—255 см попадают, по-моему, окружности колёс всех существующих велосипедов. Но если попался такой, у которого длина окружности больше 255 см, есть простой выход — на колесе закрепляют строго напротив два магнита, а в компьютер вводят половину фактической длины окружности колеса.
         Изготовленный велокомпьютер испытывался в реальных поездках в течение полугода и не вызвал никаких серьёзных нареканий. Он оказался очень удобным и полезным.

    Автор: Б. БАЛАЕВ, г. Нальчик, Кабардино-Балкария
    Материал взят из: Журнала Радио 2014 №7

    В архиве исходный код программы на ассемблере и прошивка микроконтроллера PIC16F628A

    velokomputer.rar [23,77 Kb] (cкачиваний: 538)

    Комментарии