Страница 2 из 2

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

Добавлено: 22 сен 2019, 08:41
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]

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

Добавлено: 22 сен 2019, 08:50
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 секунд:
Попробуй.

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

Добавлено: 22 сен 2019, 15:03
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 имп/км), и увидите все возможные интервалы ОТ и ДО. Если у Вас при делении получается дробное число, то оно далее просто округлится до целого, на значении получившейся скорости оно особо не скажется.
Если с математикой не дружите, то тем более стоит просто повторить схему и убедиться в ее работоспособности.

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

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

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

Добавлено: 23 сен 2019, 17:18
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км/ч.

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

Добавлено: 23 сен 2019, 18:02
DmitriyL
:shok:

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

Добавлено: 12 окт 2019, 18:43
Serjik
[ref]edyapd[/ref], Мы считаем не на метр, а 14 импульсов на пройденый метр (таково условие датчика скорости). Думал над сохранением, но ардуинка накроется скорее от таких перезаписей.

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

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