Велосипедный спидометр на микроконтроллере AVR

Просмотров: 24405Комментарии: 14
Электроника. СхемотехникаМикроконтроллеры AVR

Недавно нашел у себя в архивах программу спидометра на микроконтроллере. Года два назад ваял ее. И вот решил без особого разбора подробностей выставить ее. Если кто захочет думаю разберется без труда (тем более есть комментарии, а меню описал раньше), а если нет - отвечу на вопросыsmile. Программа написана на CodeVisionAVR. Пересматривая ее недавно, обнаружил некоторые вещи, которые хочу изменить, поэтому буду ее переделывать и писать теперь уже в WinAVR. Да, еще, в железе данное устройство пока не испытывалось, поэтому в случае чего могут обнаружиться какие-то глюки (см. обновление внизу). Если кто, испробует это устройство в железе, просьба написать о результатах. Экран спидометра у меня выглядит вот так
При желании внешний вид можно немного изменять. Схема довольно простая
Обвязка по питанию не показана.
Для отладки модели в качестве датчика сигналов использовал генератор, с которого и подавал импульсы на входы МК INT1 и ICP1. С частотой генератора можно поэкспериментировать, у меня было примерно 1-10Гц. Частота МК от внутреннего RC - 2МГц.

Как же все это работает:
  • Датчиком может служить геркон или любое другое устройство, которое выдает импульс при наступлении нужного события. Например, магнит на колесе проходит рядом с датчиком.
  • Спидометр нужно откалибровать. Для этого заходим в меню и выбираем дистанцию на которой мы хотим провести калибровку - 1000 или 100м (сразу говорю - ручной не работает). В данном случае будет работать вход INT1. Подсчитав количество импульсов на 100м или 1000м мы определим длину колеса (калибровочный коэффициент), который и будем дальше использовать для подсчета скорости и расстояния. Этот коэффициент сохраняется в EEPROM, поэтому при следующем включении калибровать заново не придется.
  • Чтобы измерить скорость сигнал подается на вход микроконтроллера ICP1, с помощью которого мы измеряем время между двумя импульсами, т.е. время за которое мы проедим наш калибровочный коэффициентsmile. Теперь мы можем посчитать скорость и вывести ее на экран.
  • Настройки. В этом спидометре есть различные настройки по отображению информации:
  1. Скорость может отображаться в м/с или в км/ч. Точность в м/с - 0.1м/с. Точность в км/ч - 0.1км/ч. Минимальная скорость не знаю какая. Единственное, что могу сказать, если колесо делает один оборот больше двух секунд, тогда прибор покажет нулевую скорость.
  2. Дистанция есть общая, есть от точки. Отображается в км. Можем отображать на экране только одну из этих дистанций или и ту, и другую вместе. Точность - 10м.
  3. Общая дистанция сохраняется в EEPROM. Сбрасывается, если наездите 40000км.
  4. Сброс общей дистанции и от заданной точки. При сбросе общей дистанции прибор требует подтверждения, чтобы не удалить по ошибке.
  5. Секундомер. В приборе есть секундомер, который также мы можем отображать или нет. Запускается секундомер кнопкой Right, останавливается кнопкой Left, продолжение счета - Right, сброс - повторное нажатие Left.
  6. Все настройки сохраняются и после выключения.
Вот наверное и все, что нужно чтобы испытать устройство. В конце статьи приведена схема в Proteus'e, файл с программой и hex файл. Посмотрите, поклацайте менюшку, установите нужные настройки. В примере прибор откалиброван чисто условно.
Хочу еще сделать часы, а для этого подключу какие-нибудь часы реального времени. В дальнейшем буду периодически к этой программе возвращаться, подробно ее разбирать и писать программу теперь уже на WinAVR.


Комментариев: 14 RSS

1 Андрей 14-06-2011 04:21

Здравствуйте уважаемый Dmitry Вот на днях собрал этот спидометр, спаял схему, прошил МК. все сразу заработало. Пощелкал по менюшке, установил нужные настройки. И вот что заметил что секундомер работает не по секундам, а медленнее, как это можно исправить? А еще конечно хотелось бы чтобы были еще часы. Сам большого опыта с програмированием не имею. Буду ждать обновления прошивки. Еще хотелось бы знать как подключить датчик холла к нему и какой?

3 Dmitry 15-06-2011 21:34

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

4 Константин 28-05-2012 15:19

Подскажите новичку,как доработать под измерение оборотов в минуту?

5 Dmitry 28-05-2012 16:28

Берете количество оборотов, которые посчитал счетчик, например, за одну минуту и делите на 60 сек. В результате получите обороты в секунду))) В этой программе нужно сделать таймер на какое нибудь заданное время и в обработчике брать значение счетчика и этого времени и подсчитывать)

6 Константин 28-05-2012 19:52

Блин,что то ничего не выходит((((Помогите пожалуйста.

7 Леха 28-05-2012 23:58

Как я понял там все дело в коэфициенте 16000.Если нет ,то поправьте.Было бы замечательно отдельную статью про измеритель оборотов.Что скажешь,автор???)))

9 Dmitry 05-06-2012 22:45

я бы с удовольствием отдельную статью, но сейчас со временем большие проблемы((

10 rasel 30-06-2012 02:07

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

11 Artem 03-11-2012 18:47

Подскажите пож. Если в Proteus ставить ваш HEX то моделирование идет нормально! А вот если компилировать заново из исходника в Codevision 2.04.4, получается лабуда (

12 Петр 17-04-2013 18:40

А зачем делать очистку экрана в цикле?

13 Георгий 25-08-2015 11:56

Какой то здесь косяк - ножка (PD3/INT1) подсаживает входящие импульсы в "0". То ли её надо совсем отключить, то ли подключить через резистор 1-10к. Но как есть совсем не годится, только контролер от импульсов греется и питание поедается !!!

14 Юра 08-09-2016 07:08

как подать импульс на вход (PD3/INT1), схема

Оставьте комментарий!

grin LOL cheese smile wink smirk rolleyes confused surprised big surprise tongue laugh tongue rolleye tongue wink raspberry blank stare long face ohh grrr gulp oh oh downer red face sick shut eye hmmm mad angry zipper kiss shock cool smile cool smirk cool grin cool hmm cool mad cool cheese vampire snake excaim question

Используйте нормальные имена. Ваш комментарий будет опубликован после проверки.

Вы можете войти под своим логином или зарегистрироваться на сайте.

(обязательно)