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

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

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

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

#21

Сообщение Serjik » 22.09.2019{, 08:32}

DmitriyL писал(а):
22.09.2019{, 05:13}
Скоростной счетчик рассчитан на подсчет количества импульсов за 1 секунду
именно что за время. Способ хорош, но еще раз повторю, забить скетчем память и все это будет безбожно врать. Я же хочу подсчет по импульсам. Нам же известно колличество импульсов за отрезок пройденного расстояния! 14 импульсов на метр!
DmitriyL писал(а):
22.09.2019{, 05:13}
Неправильное применение форматов чисел действительно приводят к некорректной работе схемы
вот тут ведро дегтя. При делении получаем данные с запятой, а это уже Float. Далее мы на выходе деления уже должны получать данные во Float, далее мы опять же берем Int и множим на Float.
А может так и оставить Float? Как гласит FAQ : float 4байта -2 147 483 648.0 / 2 147 483 647.0, а это мне кажется более чем достаточно! Единственное что смущает кучу блоков конвертации. Сначало Float-Intejer, затем Intejer-String. Не будет ли тут задержек?

Отправлено спустя 3 минуты 52 секунды:
Sancho,
out_count_speed = int16_t(uint16_t(36000) / _SC_Sancho& 0x0FFF);
вот тут
attachInterrupt(0, calc_imp, RISING);
и тут не понял вообще. Можно пояснения?

Отправлено спустя 5 минут 11 секунд:
Блок "конвертация строк" успешно стыкуется с блоком на выходе с Float. Я правильно думаю? Если их так поставить, то блок будет читать только целые числа до запятой и будет конвертировать в String только то что увидел, то есть только целые числа? :smile37:
СпойлерПоказать
Безымянный2.jpg
Например
Нельзя мешать оборудованию работать, но иногда скучно жить! :smile390:

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

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

#22

Сообщение Sancho » 22.09.2019{, 08:50}

Serjik писал(а):
22.09.2019{, 08:41}
Sancho,
out_count_speed = int16_t(uint16_t(36000) / _SC_Sancho& 0x0FFF);
вот тут
attachInterrupt(0, calc_imp, RISING);
и тут не понял вообще. Можно пояснения?
1. то, чем насчитали, разделим 36000(именно 36 000), получим сотни метров в час. Приведём к инт.
2. это объявление обработчика прерывания.
Посмотри секцию функций.

Отправлено спустя 15 секунд:
Попробуй.
мой ник в нете и почте omelchuk890, если что. запомните на всякий. многие знают номер тлф.

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

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

#23

Сообщение DmitriyL » 22.09.2019{, 15:03}

Serjik писал(а):
22.09.2019{, 08:41}
именно что за время. Способ хорош, но еще раз повторю, забить скетчем память и все это будет безбожно врать. Я же хочу подсчет по импульсам. Нам же известно колличество импульсов за отрезок пройденного расстояния! 14 импульсов на метр!
Я так понимаю, Вы предпочитаете непонятные споры тому, чтобы просто попробовать? Чем там забъется память? Что врать будет? Вы насчитали 14 импульсом на метр и желаете точности с запятыми? Чтобы уменьшить бесполезные посты в теме, ниже небольшой ликбез по работе датчиков скорости и спидометров.
Помимо общепринятых норм и правил среди автопроизводителей есть еще тахография. Тахограф устаналивается на транспортные средства, программируется и далее обслуживается аккредитованными масетсркими. Калибровка тахографа включает в себя вычисление коэффициента (количество импульсов на один км). Для этого замеряется рулеткой участок длиной от 30 до 50 метров или используется специальный стенд, на котором крутятся колеса транспортного средства. На этой дистанции вычисляется количество импульсов с датчика скорости и рассчитывается их количество на 1 км. Этот коэффициент есть в паспортных данных спидометров. Есть спидометры с программируемым коэффициентом.
Если посмотрите паспортные данные спидометров, то увидите там допустимую погрешность скорости от 1 до 8% в зависимости от производителя и исполнения. Странно было бы увидеть спидометр, показывающий десятые или сотые доли км/ч.
Теперь по поводу подсчета. Я не знаю, как Вы понимаете то, что Вам пишут, но и мой вариант, и то, что Вам советовали ранее - это подсчет количества импульсов за единицу времени. По сути, то, что выдает датчик скорости за одну секунду - это частота в герцах, значение которой равно количеству тех самых импульсов за секунду. Это физика средней школы. Зная коэффициент, который представляет собой количество импульсов на километр, не сложно вычислить как скорость, так и пройденный путь. Это алгебра средней школы.
Попробуйте сделать то, что на схеме, и будет Вам счастье.
Serjik писал(а):
22.09.2019{, 08:41}
вот тут ведро дегтя. При делении получаем данные с запятой, а это уже Float. Далее мы на выходе деления уже должны получать данные во Float, далее мы опять же берем Int и множим на Float.
А может так и оставить Float? Как гласит FAQ : float 4байта -2 147 483 648.0 / 2 147 483 647.0, а это мне кажется более чем достаточно! Единственное что смущает кучу блоков конвертации. Сначало Float-Intejer, затем Intejer-String. Не будет ли тут задержек?
Еще раз: если дружите с математикой, то никакого дегтя не будет. Рассчитайте минимально и максимально допустимую скорость и получающиеся значения при Вашем коэффициенте (примерно 14000 имп/км), и увидите все возможные интервалы ОТ и ДО. Если у Вас при делении получается дробное число, то оно далее просто округлится до целого, на значении получившейся скорости оно особо не скажется.
Если с математикой не дружите, то тем более стоит просто повторить схему и убедиться в ее работоспособности.

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

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

#24

Сообщение pan » 22.09.2019{, 17:15}

DmitriyL писал(а):
22.09.2019{, 15:03}
Чем там забъется память? Что врать будет?
Serjik писал(а):
20.09.2019{, 22:59}
Прошу прощения. У меня еще там два скоростных счетчика ....

edyapd
Капитан
Сообщения: 768
Зарегистрирован: 20.09.2019{, 11:38}
Репутация: 65
Имя: Эдуард

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

#25

Сообщение edyapd » 23.09.2019{, 17:18}

Честно говоря, в FLProg я пока полный ноль и не могу реализовать это в коде.
Но, как я представляю решение это задачи:
1. Подключение устройства, которое выдаёт импульсы в зависимости от пройденного пути к входу с прерыванием.
2. Создаём счётчик который тактируется с частотой 77777 Гц. (частота зависит от количества импульсов на метр и желаемой погрешности)
3. По прерыванию:
3.1. Сохраняем данные счётчика
3.2. Перезапускаем счётчик.
3.3. Если счётчик досчитал до 20001 и не пришло новое прерывание, то считаем что скорость равна 0. Сбрасывает счётчик и переходим к п.5 выводя "0"
4. Делим 20000 на сохранённые данные.
5. Выводим на дисплей целую часть результата деления.
Как видно в самом алгоритме можно использовать только Integer.
При желании можно использовать усреднение.

К примеру, счётчик насчитал 20000 импульсов между прерываниями. Так как имеем 14 импульсов на метр значит проехали 0,071429 метра, за 20000/77777=0,257сек. Значит за час проедем (3600/0,257)*0,071429=999.996 метра или 1км/ч.
Если счётчик насчитал 200 импульсов, то будет 100км/ч.

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

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

#26

Сообщение DmitriyL » 23.09.2019{, 18:02}

:shok:

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

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

#27

Сообщение Serjik » 12.10.2019{, 18:43}

edyapd, Мы считаем не на метр, а 14 импульсов на пройденый метр (таково условие датчика скорости). Думал над сохранением, но ардуинка накроется скорее от таких перезаписей.
Нельзя мешать оборудованию работать, но иногда скучно жить! :smile390:

edyapd
Капитан
Сообщения: 768
Зарегистрирован: 20.09.2019{, 11:38}
Репутация: 65
Имя: Эдуард

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

#28

Сообщение edyapd » 12.10.2019{, 19:17}

Serjik писал(а):
12.10.2019{, 18:43}
Мы считаем не на метр, а 14 импульсов на пройденый метр
Поясните пожалуйста разницу. Если у вас за пройденный метр возникает 14 импульсов на каком-то устройстве, значит между двумя импульсами будет 0,071429 метра
Serjik писал(а):
12.10.2019{, 18:43}
Думал над сохранением, но ардуинка накроется скорее от таких перезаписей.
Сохранять не в ЕЕПРОМ, а в переменной.

Ответить

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