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

Serjik
Рядовой
Сообщения: 43
Зарегистрирован: 18 фев 2019, 20:48
Откуда: Россия
Имя: Сергей

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

Сообщение Serjik »

DmitriyL писал(а): 22 сен 2019, 05:13 Скоростной счетчик рассчитан на подсчет количества импульсов за 1 секунду
именно что за время. Способ хорош, но еще раз повторю, забить скетчем память и все это будет безбожно врать. Я же хочу подсчет по импульсам. Нам же известно колличество импульсов за отрезок пройденного расстояния! 14 импульсов на метр!
DmitriyL писал(а): 22 сен 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 секунды:
[ref=#ff8000]Sancho[/ref],
out_count_speed = int16_t(uint16_t(36000) / _SC_Sancho& 0x0FFF);
вот тут
attachInterrupt(0, calc_imp, RISING);
и тут не понял вообще. Можно пояснения?

Отправлено спустя 5 минут 11 секунд:
Блок "конвертация строк" успешно стыкуется с блоком на выходе с Float. Я правильно думаю? Если их так поставить, то блок будет читать только целые числа до запятой и будет конвертировать в String только то что увидел, то есть только целые числа? :smile37:
[spoiler]
Безымянный2.jpg
[/spoiler]
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Нельзя мешать оборудованию работать, но иногда скучно жить! :smile390:
Аватара пользователя
Sancho
Полковник
Сообщения: 4066
Зарегистрирован: 25 дек 2015, 17:32
Откуда: Ярославль.
Имя: Александр
Поблагодарили: 5 раз
Контактная информация:

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

Сообщение Sancho »

Serjik писал(а): 22 сен 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 янв 2017, 11:24
Откуда: Находка

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

Сообщение DmitriyL »

Serjik писал(а): 22 сен 2019, 08:41 именно что за время. Способ хорош, но еще раз повторю, забить скетчем память и все это будет безбожно врать. Я же хочу подсчет по импульсам. Нам же известно колличество импульсов за отрезок пройденного расстояния! 14 импульсов на метр!
Я так понимаю, Вы предпочитаете непонятные споры тому, чтобы просто попробовать? Чем там забъется память? Что врать будет? Вы насчитали 14 импульсом на метр и желаете точности с запятыми? Чтобы уменьшить бесполезные посты в теме, ниже небольшой ликбез по работе датчиков скорости и спидометров.
Помимо общепринятых норм и правил среди автопроизводителей есть еще тахография. Тахограф устаналивается на транспортные средства, программируется и далее обслуживается аккредитованными масетсркими. Калибровка тахографа включает в себя вычисление коэффициента (количество импульсов на один км). Для этого замеряется рулеткой участок длиной от 30 до 50 метров или используется специальный стенд, на котором крутятся колеса транспортного средства. На этой дистанции вычисляется количество импульсов с датчика скорости и рассчитывается их количество на 1 км. Этот коэффициент есть в паспортных данных спидометров. Есть спидометры с программируемым коэффициентом.
Если посмотрите паспортные данные спидометров, то увидите там допустимую погрешность скорости от 1 до 8% в зависимости от производителя и исполнения. Странно было бы увидеть спидометр, показывающий десятые или сотые доли км/ч.
Теперь по поводу подсчета. Я не знаю, как Вы понимаете то, что Вам пишут, но и мой вариант, и то, что Вам советовали ранее - это подсчет количества импульсов за единицу времени. По сути, то, что выдает датчик скорости за одну секунду - это частота в герцах, значение которой равно количеству тех самых импульсов за секунду. Это физика средней школы. Зная коэффициент, который представляет собой количество импульсов на километр, не сложно вычислить как скорость, так и пройденный путь. Это алгебра средней школы.
Попробуйте сделать то, что на схеме, и будет Вам счастье.
Serjik писал(а): 22 сен 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 апр 2017, 11:57
Имя: noname

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

Сообщение pan »

DmitriyL писал(а): 22 сен 2019, 15:03 Чем там забъется память? Что врать будет?
Serjik писал(а): 20 сен 2019, 22:59 Прошу прощения. У меня еще там два скоростных счетчика ....
edyapd
Капитан
Сообщения: 768
Зарегистрирован: 20 сен 2019, 11:38
Имя: Эдуард

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

Сообщение edyapd »

Честно говоря, в 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 янв 2017, 11:24
Откуда: Находка

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

Сообщение DmitriyL »

:shok:
Serjik
Рядовой
Сообщения: 43
Зарегистрирован: 18 фев 2019, 20:48
Откуда: Россия
Имя: Сергей

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

Сообщение Serjik »

[ref]edyapd[/ref], Мы считаем не на метр, а 14 импульсов на пройденый метр (таково условие датчика скорости). Думал над сохранением, но ардуинка накроется скорее от таких перезаписей.
Нельзя мешать оборудованию работать, но иногда скучно жить! :smile390:
edyapd
Капитан
Сообщения: 768
Зарегистрирован: 20 сен 2019, 11:38
Имя: Эдуард

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

Сообщение edyapd »

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

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

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 2 гостя