Обсуждаем цифровые устройства...
Ответить

Спидометр: алгоритм

Ср мар 07, 2007 17:26:38

Народ подскажите как лучше написать программу работы спидометра. Я думал подсчитывать количество пролетов магнита по геркону за 1 секунду, но это не будет точно измерять скорость, может есть какие то идеи или наброски программ?
Если есть полезные ссылки, дайте пожалуйста.

Ср мар 07, 2007 21:15:43

Для начала советую посмотреть тахометры и энкодеры. А принцип верный - подсчитывать число импульсов за определённый промежуток времени.

Вс мар 11, 2007 23:59:39

я вот к лету собрался на велик сделать такой, думаю пролеты магнита это верно, но вот один магнит на оборот и несбалансированно и неточно, думаю штук 6--8 повесить и опрос 100мс поставить, программы будут, для PICов скорее всего, через месяцок...
Хотя была идея сделать через моторчик, что-то вроде чем быстрее едешь тем больше напруга, но не компактно и неудобно... Решать вам, удачи!

Пн мар 12, 2007 14:41:21

А можно вместо моторчика оптическую мышу прикошачить :))

Пн мар 12, 2007 15:09:36

мышонок писал(а):А принцип верный - подсчитывать число импульсов за определённый промежуток времени.


Это НЕ верный метод.

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

Пн мар 12, 2007 15:30:54

Abaktych писал(а):
мышонок писал(а):А принцип верный - подсчитывать число импульсов за определённый промежуток времени.


Это НЕ верный метод.

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

Для програмных расчетов - что в лоб, что по лбу. Но если говорить об измерении скорости аппаратными средствами (без МК), то дважды прав мышонок: число импульсов прямо пропорционально пройденному колесом расстоянию. Определив сколько получается импульсов/метров за единицу времени - получаем скорость. Т.к. аппаратно временные интервалы легко реализуются таймером типа 555, то этот вариант прост. Если же мерить время предположим 1000 импульсов, то потом надо будет брать обратную величину (время-то в знаменателе), что аппаратно почти нереализуемо.

Пн мар 12, 2007 15:41:19

Если бы ты хоть чуть чуть подумал то наверняка понял что за ЗАДАНУЮ единицу времени может произойти 1.9 импульса например - естественно посчитается 1 и таким образом ошибка будет огромной !

Поэтому нужно мерить имеенно время некоторого ЦЕЛОГО числа импульсов. Тогда ошибка будет лишь в величину "тика" таймера.

Т.е. может быть равна периоду тактирования МК например.

Пн мар 12, 2007 15:53:49

Не стоит говорить об обдумывании, иначе тема попадет в МЯУУУ, а мы получим пинков.
Аппаратно определить величину, обратную времени N импульсов - очень сложная задача, без МК практически нереализуемая, о чем я и сказал. А ошибка (которая будет лишь при черепашьих скоростях, когда пользоваться спидометром никому в голову не придет) лечится очень просто: надо выбирать такой интервал времени, чтобы в нем укладывалось некоторое существенно число импульсов. Например: если импульсы следуют от пролета спиц мимо датчика, то за 15 секунд их будет явно болше, чем 1,9 :) а обновлять показания спидометра чаще - особого смысла нет.
Хотя, если говорить абстрактно, надо совмещать оба метода - один для низких частот следования импульсов (малых скоростей), другой - для повышенных. Но это непросто и при программной реализации на МК. Кстати, именно с совмещением способов работают хорошие частотомеры: для частот менее 1 Гц они на самом деле измеряют период сигнала, а частоту вычисляют, хотя на высоких частотах ведут прямой счет, как обычно.

Пн мар 12, 2007 15:55:55

и в чем ДВАЖДЫ прав мышонок ?

Пн мар 12, 2007 16:02:19

В том, что:
1. Чел мыслит в верном направлении, т.е. его метод верен.
2. Что измерение скорости делается именно таким способом (ну, с оговоркой - практически всегда таким).
:)

Зато я, как обычно, невнимателен: все-таки речь идет о программном счете... Сбило с толку название раздела "Цифровая техника"... Простят ли меня модераторы???

Пн мар 12, 2007 16:22:24

ARV писал(а):В том, что:
1. Чел мыслит в верном направлении, т.е. его метод верен.


нет не верен - так как дает большую ошибку при задействовании тех же ресурсов.

ARV писал(а):2. Что измерение скорости делается именно таким способом (ну, с оговоркой - практически всегда таким).
:)


Прктически... В автомобильных системах с которыми я занимался измеряют так как я описал. Потому что можно измерять от 1 периода импульсов с приемлимой точночтью.

Пн мар 12, 2007 16:33:37

Abaktych писал(а):
ARV писал(а):В том, что:
В автомобильных системах

Тут проскользнуло слово велик, а велик он на то и велик, что виляет и измерять будем не скорость велосипеда, всего лишь скорость вращения колеса. Для велосипеда, уж если точно, как хотите, нужно примязиваться к чему то внешнему. :cry:

Пн мар 12, 2007 17:52:43

Я вообще обхожусь бесконтактным методом- всё определяет GPS- навигатор, установленный на руле- расстояние, скорость, время движения и стоянки. Но это так, для поддержания флуда. Можете не обращать внимания на мой пост. :wink:

Пн мар 12, 2007 22:43:03

Abaktych писал(а):
мышонок писал(а):А принцип верный - подсчитывать число импульсов за определённый промежуток времени.
Это НЕ верный метод.

Верный метод это измерять время некоторого числа импульсов.
Зависит от скорости. Принцип тот же, что и у измерения частоты. Низкие частоты мы измеряем путем измерения времени между какими-то событиями (например, импульсами), высокие - тут легче посчитать число импульсов за фиксированный промежуток времени. Вопрос в целесообразности того или иного метода.

Пн мар 12, 2007 23:07:49

Коты, своими глазами видел на велосипеде- единственный магнит,дачик и на индикатор. Питается от часовой батарейки. Скорость велосипеда ниже 6 км\час- нонсенс, так что не мудрите.

Сб мар 17, 2007 18:20:36

А как лучше зделать, считать внешние прерывания или порт сканировать? Хотел по таймеру кнопки опрашивать, но проблема будет если магнит остановится на герконе. :cry:
И что можно зделать с дребезгом геркона, где можно почитать про дребезг?

Сб мар 17, 2007 18:30:30

Нужен формирователь импульсов. От простейшей RC диф. цепочки до специализированных микросхем. Выбор за вами. Геркон - не лучший вариант.

Вс мар 18, 2007 01:41:18

Рассказываю как я делал спидометр.
Датчик - геркон, для уменьшения потребляемого тока, удалось уложиться в 500мкА с индикатором. Впаралель геркону - кондюк 0.01 мкф. От геркона на питание через резистор 5 ком и на INT0 микрухи (прерывание по срезу), другая нога геркона на соответственно землю.
Таймер тикает с частотой 1 кгц, считает время. По прерыванию от геркона обновляем показания спидометра, дополнительно можно сделать такую фичу: по таймеру - если прошло времени больше, чем промежуток времени прошлого оборота - высчитываем скорость, как будто произошло прерывание, и показываем ее. В итоге получается, что при торможении и остановке спидометр не "подвисает", а пытается предсказать текущую скорость.

Могу показать примеры кода.

Вс мар 18, 2007 17:57:17

А кондюк от дребезга?

Вс мар 18, 2007 18:02:12

Может и от дребезга, а может и ещё для чего! :wink:
Ответить