Электронный Спидометр

Автомобильная тематика

Serjik
Рядовой
Сообщения: 43
Зарегистрирован: 18.02.2019{, 20:48}
Репутация: 0
Откуда: Россия
Имя: Сергей

Электронный Спидометр

#1

Сообщение Serjik » 20.09.2019{, 20:21}

В поиске не нашел подсказки на свои вопросы. Нужен электронный спидометр на авто, в авто нет чего либо похожего на ЭБУ. Датчик считает 14 импульсов на метр (был установлен электронный). По идее я использую скоростной счетчик.
СпойлерПоказать
Безымянный.jpg

В счетчике назначаю пин (2), использую функцию подсчета импульсов, ставлю разрешение на сброс, ставлю компаратор. При достижении одного километра (14000имп) на компараторе появляется высокий уровень и происходит сброс счетчика. Километр в час мы скорость обозначили! А дальше затык. Не могу сообразить как считать эти километры в час (Km/h) с выводом на дисплей. :smile37: По идее нужен еще один скоростной счетчик который будет считать эти километры в час, но это же чепуха выходит! Может у кого есть мысли?
1.flp
(32.17 КБ) 34 скачивания
Но если сделать как напрашивается, второй счетчик то я боюсь предположить какие тормоза будут в купе с дисплеем. :( Не пробовал скетч гонять в реале, но предположу что это решение будет ошибкой. Скорее всего есть более сложное, но менее затратное по ресурсам.
3.flp
(51.14 КБ) 36 скачиваний
Нельзя мешать оборудованию работать, но иногда скучно жить! :smile390:

pan
Полковник
Сообщения: 2860
Зарегистрирован: 13.04.2017{, 11:57}
Репутация: 204
Имя: noname

Электронный Спидометр

#2

Сообщение pan » 20.09.2019{, 21:34}

Serjik писал(а):
20.09.2019{, 20:21}
При достижении одного километра (14000имп)
так вам спидометр нужен или одометр?

если спидометр то так:
14000 имп - это километр.
1 час - 3600 сек.
14000 / 3600 = 3.88888888 количество импульсов каждую секунду при скорости 1 км/ч (не очень удачное количество импульсов, ну да ладно)
каждую секунду смотрим сколько импульсов насчитали и делим на 3.88888888....
т.е если за секунду пришло 388.8888 импульсов, значит мчим 100 км/ч
не забываем каждую секунду сбрасывать счетчик.
Serjik писал(а):
20.09.2019{, 20:21}
При достижении одного километра (14000имп) на компараторе появляется высокий уровень и происходит сброс счетчика.
это будет оооочень медленный спидометр :D

Serjik
Рядовой
Сообщения: 43
Зарегистрирован: 18.02.2019{, 20:48}
Репутация: 0
Откуда: Россия
Имя: Сергей

Электронный Спидометр

#3

Сообщение Serjik » 20.09.2019{, 21:56}

pan, Далее, скорость движения (при датчике на 14000 импульсов на км) вычисляется по формуле:
F = 0,14/Т
где Т - период в секундах, a F - скорость в км/час. Поскольку период измерен в микросекундах фактически формула:
F= 1400000/Т
Правильно?
Нашел статью где предлагается такой вариант:
где:-
int Htime1; // длительность положительного полупериода датчика скорости
int Ltime1; // длительность отрицательного полупериуда датчика скорости
float Ttime1; // период датчика скорости
float Frequency1; //скорость движения
Сам замер:-
Htime1=pulseIn(8, HIGH); // измерение положительного полупериода датчика скорости
Ltime1=pulseIn(8, LOW; // измерение отрицательного полупериода датчика скорости
Ttime1=Htime1+Ltime1; //вычисление периода датчика скорости
Frequency1=600000/Ttime1; // вычисление скорости движения

Набросал блок, проверте где ошибки? Чувствую где то начудил в блоке.
SPEED1.ubi
(11.22 КБ) 57 скачиваний
Нельзя мешать оборудованию работать, но иногда скучно жить! :smile390:

pan
Полковник
Сообщения: 2860
Зарегистрирован: 13.04.2017{, 11:57}
Репутация: 204
Имя: noname

Электронный Спидометр

#4

Сообщение pan » 20.09.2019{, 22:00}

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

Serjik
Рядовой
Сообщения: 43
Зарегистрирован: 18.02.2019{, 20:48}
Репутация: 0
Откуда: Россия
Имя: Сергей

Электронный Спидометр

#5

Сообщение Serjik » 20.09.2019{, 22:05}

pan, вот со входом отдельно, но что то не могу вспомнить как выход прописывать. Посмотрите правильность.
SPEED2.ubi
(19.19 КБ) 45 скачиваний
Отправлено спустя 2 минуты 43 секунды:
pan писал(а):
20.09.2019{, 22:00}
только зачем в авто измерять сотые доли км/ч ?
Так там же выход float! Если пропишу как int будет ошибка в выводе данных. Или я что то не понял?
Ну как выход можно потом конвертировать данные на выходе с блока в int. Монструозно, но на первый раз для криворучки сойдет. :D
Последний раз редактировалось Serjik 20.09.2019{, 22:11}, всего редактировалось 1 раз.
Нельзя мешать оборудованию работать, но иногда скучно жить! :smile390:

pan
Полковник
Сообщения: 2860
Зарегистрирован: 13.04.2017{, 11:57}
Репутация: 204
Имя: noname

Электронный Спидометр

#6

Сообщение pan » 20.09.2019{, 22:09}

Serjik писал(а):
20.09.2019{, 22:08}
Так там же выход float
а это при чём.
я про метод подсчета скорости, а не про тип "входов"

Serjik
Рядовой
Сообщения: 43
Зарегистрирован: 18.02.2019{, 20:48}
Репутация: 0
Откуда: Россия
Имя: Сергей

Электронный Спидометр

#7

Сообщение Serjik » 20.09.2019{, 22:15}

pan писал(а):
20.09.2019{, 22:09}
я про метод подсчета скорости, а не про тип "входов"

Тоесть я могу параметр Frequency1 объявить как int?

Отправлено спустя 1 минуту 54 секунды:
pan, А что не так с методом?
Htime1=pulseIn(8, HIGH); // измерение положительного полупериода датчика скорости
Ltime1=pulseIn(8, LOW; // измерение отрицательного полупериода датчика скорости
Ttime1=Htime1+Ltime1; //вычисление периода датчика скорости
Frequency1=600000/Ttime1; // вычисление скорости движения
Нельзя мешать оборудованию работать, но иногда скучно жить! :smile390:

pan
Полковник
Сообщения: 2860
Зарегистрирован: 13.04.2017{, 11:57}
Репутация: 204
Имя: noname

Электронный Спидометр

#8

Сообщение pan » 20.09.2019{, 22:26}

Serjik писал(а):
20.09.2019{, 22:17}
А что не так с методом?
я не говорил, что с ним что-то не так.
просто не люблю усложнять там где не надо.
Изображение

всё...

ну или я чего-то не понимаю
Вложения
спидометр.flp
(26.71 КБ) 52 скачивания

Аватара пользователя
dizzyy
Капитан
Сообщения: 752
Зарегистрирован: 24.11.2017{, 16:25}
Репутация: 37
Откуда: Червоноград
Имя: Марьян

Электронный Спидометр

#9

Сообщение dizzyy » 20.09.2019{, 22:36}

pan писал(а):
20.09.2019{, 22:00}
но если Вам нужна очень высокая точность измерения скорости, то тогда да, измерять длительность импульсов.
я думаю тут меряется длительность импульса форсунки ..
как бы 2 в 1 .. и одометр и расход

pan
Полковник
Сообщения: 2860
Зарегистрирован: 13.04.2017{, 11:57}
Репутация: 204
Имя: noname

Электронный Спидометр

#10

Сообщение pan » 20.09.2019{, 22:38}

dizzyy, я не гадалка. так написано
Serjik писал(а):
20.09.2019{, 20:21}
Нужен электронный спидометр на авто
Serjik писал(а):
20.09.2019{, 20:21}
Датчик считает 14 импульсов на метр
на форсунку не похоже вроде, не?

Отправлено спустя 1 минуту 34 секунды:
dizzyy писал(а):
20.09.2019{, 22:36}
как бы 2 в 1 .. и одометр и расход
который будет зависеть от того, на какой передаче едешь?

или точнее НЕ зависеть

Аватара пользователя
dizzyy
Капитан
Сообщения: 752
Зарегистрирован: 24.11.2017{, 16:25}
Репутация: 37
Откуда: Червоноград
Имя: Марьян

Электронный Спидометр

#11

Сообщение dizzyy » 20.09.2019{, 22:40}

pan писал(а):
20.09.2019{, 22:38}
на форсунку не похоже вроде, не?
я про

Код: Выделить всё

Htime1=pulseIn(8, HIGH); // измерение положительного полупериода датчика скорости
Ltime1=pulseIn(8, LOW; // измерение отрицательного полупериода датчика скорости
Ttime1=Htime1+Ltime1; //вычисление периода датчика скорости
Frequency1=600000/Ttime1; // вычисление скорости движения

Serjik
Рядовой
Сообщения: 43
Зарегистрирован: 18.02.2019{, 20:48}
Репутация: 0
Откуда: Россия
Имя: Сергей

Электронный Спидометр

#12

Сообщение Serjik » 20.09.2019{, 22:40}

pan, Я попробовал так, но в вашем случае идет измерение за интервал в одну секунду. Если нагрузить еще кодом под завязку, то таймер почему то сбивается и идет измерение за любое время, но не секунду. Я хотел просто считать импульсы, дробить из расчета 14000имп/км и выводить их в виде цифер км/ч.

Отправлено спустя 1 минуту 5 секунд:
dizzyy, Нет там форсунок. Карбюратор.


Ну я догадывался что тут решение не детское нужно. Нужно думать.
Последний раз редактировалось Serjik 20.09.2019{, 22:44}, всего редактировалось 1 раз.
Нельзя мешать оборудованию работать, но иногда скучно жить! :smile390:

pan
Полковник
Сообщения: 2860
Зарегистрирован: 13.04.2017{, 11:57}
Репутация: 204
Имя: noname

Электронный Спидометр

#13

Сообщение pan » 20.09.2019{, 22:42}

dizzyy писал(а):
20.09.2019{, 22:40}
я про
понятия не имею откуда этот код и что он делает.
даже вникать не буду

Отправлено спустя 58 секунд:
Serjik писал(а):
20.09.2019{, 22:41}
Если нагрузить еще кодом под завязку, то таймер почему то сбивается
в настройках счетчика поставьте галку "аппаратный таймер"

Serjik
Рядовой
Сообщения: 43
Зарегистрирован: 18.02.2019{, 20:48}
Репутация: 0
Откуда: Россия
Имя: Сергей

Электронный Спидометр

#14

Сообщение Serjik » 20.09.2019{, 22:47}

pan писал(а):
20.09.2019{, 22:43}
в настройках счетчика поставьте галку "аппаратный таймер"
Аппаратный таймер обеспечивает более высокую точность счета, но накладывает некоторые ограничения. Во первых применение аппаратного таймера исключает возможность использования 3 и 11 цифровых выходов в режиме ШИМ. Во вторых все скоростные счетчики в проекте использующие аппаратный таймер будут иметь одинаковое время счета.
Вот этого мне ну ни как нельзя.
Нельзя мешать оборудованию работать, но иногда скучно жить! :smile390:

pan
Полковник
Сообщения: 2860
Зарегистрирован: 13.04.2017{, 11:57}
Репутация: 204
Имя: noname

Электронный Спидометр

#15

Сообщение pan » 20.09.2019{, 22:50}

Serjik писал(а):
20.09.2019{, 22:47}
Вот этого мне ну ни как нельзя.
так мы об этом только узнали

Serjik
Рядовой
Сообщения: 43
Зарегистрирован: 18.02.2019{, 20:48}
Репутация: 0
Откуда: Россия
Имя: Сергей

Электронный Спидометр

#16

Сообщение Serjik » 20.09.2019{, 22:53}

pan, Прошу прощения. У меня еще там два скоростных счетчика которые работают по разному. Один на 2секунды, второй на 5 секунд.

Отправлено спустя 5 минут 52 секунды:
if (1) {_dispTempLength1 = (((String((1400000UL)/((_SCT_1_PDON)+(_SCT_1_NDON)), DEC)))).length();
if (_disp1oldLength > _dispTempLength1) {_isNeedClearDisp1 = 1;}
_disp1oldLength = _dispTempLength1;
_lcd1.setCursor(int((16 - _dispTempLength1)/2), 0);
_lcd1.print(((String((1400000UL)/((_SCT_1_PDON)+(_SCT_1_NDON)), DEC))));
} else {
if (_disp1oldLength > 0) {_isNeedClearDisp1 = 1; _disp1oldLength = 0;}
}
По сути то же самое действие что и у этого скетча? :
int Htime1; // длительность положительного полупериода датчика скорости
int Ltime1; // длительность отрицательного полупериуда датчика скорости
float Ttime1; // период датчика скорости
float Frequency1; //скорость движения
Сам замер:-
Htime1=pulseIn(8, HIGH); // измерение положительного полупериода датчика скорости
Ltime1=pulseIn(8, LOW; // измерение отрицательного полупериода датчика скорости
Ttime1=Htime1+Ltime1; //вычисление периода датчика скорости
Frequency1=1400000/Ttime1; // вычисление скорости движения
Нельзя мешать оборудованию работать, но иногда скучно жить! :smile390:

Аватара пользователя
Sancho
Полковник
Сообщения: 4066
Зарегистрирован: 25.12.2015{, 17:32}
Репутация: 590
Откуда: Ярославль.
Имя: Александр
Контактная информация:

Электронный Спидометр

#17

Сообщение Sancho » 21.09.2019{, 08:14}

Народ, а вот это не оно?
мой ник в нете и почте omelchuk890, если что. запомните на всякий. многие знают номер тлф.

Serjik
Рядовой
Сообщения: 43
Зарегистрирован: 18.02.2019{, 20:48}
Репутация: 0
Откуда: Россия
Имя: Сергей

Электронный Спидометр

#18

Сообщение Serjik » 21.09.2019{, 15:33}

Sancho, почти, но не то.
Измерение скорости вращения путём измерения интервала между импульсами ( один импульс на оборот).
счет идет не правильный.
Не пойму, почему такие тормоза в работе? Первые 30км/ч вроде нормально, а дальше идет разброс почти в 20-40км/ч по сравнению с реальной. :smile37: Частота вроде не превышает и 10кгц. Может идет переполнение? Может стоит сделать принудительное обнуление счетчика через скажем 1 секунду?
Что типа так?:
СпойлерПоказать
Безымянный1.jpg
Нельзя мешать оборудованию работать, но иногда скучно жить! :smile390:

Аватара пользователя
Sancho
Полковник
Сообщения: 4066
Зарегистрирован: 25.12.2015{, 17:32}
Репутация: 590
Откуда: Ярославль.
Имя: Александр
Контактная информация:

Электронный Спидометр

#19

Сообщение Sancho » 21.09.2019{, 18:52}

Serjik, А так?
скорость в 100м/ч, т.е. 657=65,7км/ч

Отправлено спустя 50 секунд:
Мож где ошибся - суббоТНИЦА...
Вложения
14зубов скорость 01.flp
(36.51 КБ) 45 скачиваний
мой ник в нете и почте omelchuk890, если что. запомните на всякий. многие знают номер тлф.

DmitriyL
Рядовой
Сообщения: 32
Зарегистрирован: 07.01.2017{, 11:24}
Репутация: 1
Откуда: Находка

Электронный Спидометр

#20

Сообщение DmitriyL » 22.09.2019{, 05:13}

спидометр.JPG
Вот рабочая схема спидометра. Скоростной счетчик рассчитан на подсчет количества импульсов за 1 секунду. Через меню вводится коэффициент спидометра, представляющий собой количество импульсов с датчика скорости на один километр. Если желаете точнее спидометр, то сделайте подсчет импульсов не за секунду, а за больший интервал, уменьшив константу 3600 во столько же. Скорость будет точнее, но определение ее будет с заметным запаздыванием.
PS Неправильное применение форматов чисел действительно приводят к некорректной работе схемы, потому последовательность умножений и делений исключительно такая, как приведена на рисунке.

Ответить

Вернуться в «Помогите, а то я "нимагу"»