К сожалению штатного датчика у меня нет, сделал сам, но суть не в этом. Длину импульсов измерять - не вариант по нескольким причинам, одна из которых - лишняя нагрузка, а другая - разные датчики по разному работают... некоторые выдают голый меандр, т.к. мозг авто занимается всей обработкой и фильтрующие компоненты именно в нем, а некоторые - готовые "столбики".
Ну вот в один из моментов разница станет отрицательной (или максимальным значением в случае с UNSIGNED переменной). Я понимаю что в большинстве случаев - не критично, но если, например, делать круиз-контроль, то такой скачок может сбить систему... короче - маленький баг, которые в одной системе не заметен, а в другой - камень преткновения...
ЗЫ: делать код, в котором присутствует пусть и маленький, но косяк - не есть хорошо, тем более на него забивать... в результате получаются бешеные Лехусы-Тойоты...
Оцените величину этой лишней нагрузки.
Измеряется не длина импульса, а период. Разницу осознаете? Поэтому скважность и форма импульса значения не имеет, хоть синусоида. Что такое "столбики" я не понял, но если имеются в виду аналоговые датчики, то их значения можно измерять на аналоговом входе, а мой код для импульсных датчиков, каких подавляющее большинство.
Что мешает использовать абсолютное значение этой разницы без учета знака? Если если система сделана с косяком и ее может сбить скачек, то нафиг такая система нужна. Такие системы делают с обязательной защитой от случайных недостоверных значений датчиков.
Только длина импульса.
Это я отвечал как раз по поводу замера длины имульса (PulseIn и др. способы). "Столбики" - это форма сигнала на осциллограмме. Вот чуть выше пост опять про длину импульса...
В какой-то момент "micros_sp" будет 4 миллиарда, а micros() - небольшой и тут как ни крути, а всё равно будут неверные данные и их придется исключить.
И потом, что стоит добавить мелочь в виде "if (micros_sp < micros())" ?
И еще момент - вычисления происходят в функции прерывания, т.е. пока она выполняется другие прерывания ждут. Насколько целесообразно так часто делать лишние вычисления и отбирать микросекунды у других прерываний?
А для системы, где глюк чувствителен, я использую millis(), которая обнуляется за очень большой, как для авто, промежуток времени и вычисляю скорость по сумме импульсов за период, причем в цикле.
Сразу скажу по поводу точности и усреднения - для периода обработки в 100мс и авто "7с от 0 до 100км/ч" отставание составляет менее чем на 2км/ч (в период этого самого разгона), а после 60км/ч - меньше 1км/ч, а после 90км/ч - 0,3км/ч.
Всем привет. Очень интересна данная затея. Прошу помочь со схемой. Если будет хоть какой-то рисунок ,что куда подключать и какие номиналы радиодеталей нужны буду очень признателен. Имею датчик на мосту с 2мя проводами. Удалось считать импульсы подключив по такой схеме Вложение 17691 но параллельно со штатным спидометром данные не получались. Подключил 3м провода многожильного МГТФ с сечением 0,7мм и скорость дуня уже не показывала. Помогите, ткните носом.
Понимаю уже 10 лет прошло) Но этот код который у меня заработал более менее. Экспериментально выставил 14 имп./метр скорость совпадает. Но скорость скачет в пределах 3х км и вместо нуля часто показывает 2 Км. И все же как правильно подключать датчик спидометр к мк. Подключил через оптопару. Получил не работающий штатный спидометр.
С функцией pulseIn точности особой не получится
Последний раз редактировалось Chip; 03.08.2022 в 00:11.
Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)