Ничего сложного.
Всё прекрасно работает.
И погрешностей никаких нет и не будет, до тех пор пока сцепление не станет пробуксовывать, потому как передаточное отношение ничем не изменить, оно жёстко фиксировано.
В мотоцикле работает. Я про подсчет оборотов ардуиной условный пример К 1,1 и К 1,26 значит что за оборот одного вала второй делает 1и 1десятую оборота или 26 сотых, а датчики мереют только целые обороты(на юпитере пол оборота) значит и на 2пр. и на 3пр. ина 4пр. будет1:1 (десятых дачик показать не может)
Для точности надо отсчитать 100 оборотов (и несколько раз для проверки) тогда 126÷100= 1,26
Двигатель 1000 об/МИНУТУ звезда грубо 1:5 это 200 в МИНУТУ 100об 30сек
За 40 секунд с 1 до 4 можно разогнаться даже на иже. А там будет выжем сцепления который сбросит подсчеты.
По этому надо на датчик оборотов диск с 100 импульсами чтоб были сотые оборота .
Давайте подойдем к задаче с другой стороны. Фиксированное передаточное число будет при условии не нейтральной передачи и не выжатом сцеплении. Для этого достаточно не считать 100 оборотов, а знать время только одного оборота (остальные уточняют). Обороты двигателя знаем точно и быстро. Есть мнение, что даже замер 1-2 оборотов ведомой шестерни даст значение попадающее в диапазон для определения передачи. Тем более, что на это не завязана никакая автоматика. Ничего страшного не случится, если на долю секунды будет засветка двух соседних передач, или показ соседней.
По времени оборота тоже будет погрешность из-за ускорения-замедления. Пусть к=3(моторная передача+ кпп) тогда 1/3 вторичног вала замеряеться пропорциально коленвалу, а 2/3 с каойто другой скоростью, ускорением или замедлением. Можно собрать 3 импульса коленвала за один импульс вторички, вычислить средне но погрешность тоже значительная из-за того что в реальности не целые импульсы, а десятые,сотые теряються6 плюс начало импульсов не синхронно
Тут не доли сикунд, а минуты))) на первой передаче звезда еденицы оборотов в минуту делает
Почему пары оборотов недостаточно, чтобы определить скорость вращения?
Скорость можно, для одног вала и для другого. Но при ускорении-замедлении это будет чо-то среднее и пока мереются обороты одного- обороты второго мугут поменятся в несколько раз( на тахометре с900 до 4000 за сикунды) и среднее одного не будет пропорциональо второму(начало и конец отсчета будет для каждого при разных оборотах) . Передаточное число с точностью 0,16 и даже 1 не получиться посчитать.
А если замерять по 100 оборотов - станет лучше? ![]()
Валы жестко связаны в КПП. Разгон одного вала ведет к пропорциональному разгону второго. За оборот ведомого ведущий сделает ровно столько оборотов, сколько обозначает передаточное число. Точность будет обусловлена в основном точностью замера времени оборота ведомой шестерни. Обороты двигателя (а замеряются именно они) считаются в штуках за один оборот ведомой.
Количество оборотов не привязаны к скорости и времени это другой способ, считаеш обороты одного вала и другого. Делишь и получаеш К. Проблема в том что К2= 1.85, К3=1,26, К4=1.1 А датчик мереет целые обороты 1(.85теряем)÷1=1 для всех передач. За 100 оборотов первичка сделает ПОЛНЫХ 185об 185÷100=1.85 К=1.85
Думаю лучше
Можно 10 но отчет начнёться и закончиться не синхронно +2или-2об это ±0.2
Датчик ничего не меряет. Он просто выдает импульсы на каждый оборот. А скорость вращения при этом просто вычисляется по времени между импульсами
Из начала темы я понял, что у нас есть счетчик оборотов коленвала. И если там 1000rpm, то там действительно 1000 импульсов в минуту. И та ведомая звезда, где стоит датчик, совершает один оборот за очень большое количество оборотов коленвала.
Необходимо уточнение, импульсы откуда поступают под каналу “ведущая”.
Если же “ведущая” - это все-таки медленно крутящийся вал, то, действительно, практическая реализация чуть изменится. Но и тут надо считать не обороты, а время одного оборота. Да, эти времена будут меняться со временем (начало и конец замеров будут не совпадать), и эту погрешность придется учитывать.
UPD: в вашем примере не учтено еще передаточное число 2.57 коленвала к первичному. Не шибко быстро, но на ХХ 100rpm мы получаем честные 100rpm на первом датчике (быстрее - точнее). Итого, менее чем за секунду определяются ведущие обороты, а за каждый следующий проворот ведомой получается и уточняется честная пара для вычисления. И факт того, что обороты растут (разгон) или падают за один оборот ведомой звезды, на точность не влияют.
Там не оборотами а делением время одного оборота на время вторго.
Если стабильная скорость то при К=3
вал А за 1сек, вал Б за 3сек 3÷1=3 всё ок
А если не линейное ускорение:
1об 15сек; 2 10сек; 3 8сек; среднее 11сек
вал Б 15+10+8=33сек
33÷15=2.2 33÷10=3.3 33÷8=4,125
33÷11=3 тоже ок
Но реально К не целое число,а датчик ловит целый оборот и отсчет не синхронно начинаеться и заканчиваеться, теряються десятые оборота или сдвигаеться по ускорению
Я не понимаю ваших проблем. Вам нужно постоянно считать обороты коленвала и ведомой шестерни (что бы вы не подразумевали под этим). Подсчет оборотов сам по себе, вычисление передаточного числа - само по себе. Просто делите одно на другое. Что вы там синхронизировать собираетесь, мне не понятно
Вот примерный код получения оборотов коленвала
#include <util/atomic.h>
unsigned long micros_sp;
volatile int sz; //счетчик обнуления
volatile int sp; //обороты
void setup() {
// put your setup code here, to run once:
attachInterrupt(0, speedometr, RISING); //прерывание тахометра по фронту импульса на пине D2
}
void loop() {
ATOMIC_BLOCK(ATOMIC_RESTORESTATE) {
(sz > 0) ? sz-- : sp = 0;
}
delay(50);
}
//измеряем частоту на входе тахометра по прерыванию
void speedometr() {
sp = (60000000.0 / (micros() - micros_sp)); // об/мин
micros_sp = micros();
sz = 30;
}
/*
Переменная "sz" служит для обнуления значения скорости,
если с момента прихода последнего импульса блок "void loop()"
выполнился 30 раз, то есть если скорость равна нулю и новые
импульсы не приходят. Для некоторых датчиков прерывание по
фронту (RISING) может не корректно обрабатываться. В этом случае
следует использовать прерывание по спаду(FALLING).
*/
Обороты выходной шестерни примерно так же. Только нужно иметь в виду, что правильный датчик скорости должен выдавать больше одного импульса на оборот - именно потому, что скорость вращения может быть низкой. Например, 8 импульсов, в этом случае скорость вращения, полученную в строке 21 нужно будет дополнительно умножить на 8.
И тогда вы будете иметь две переменные, которые всегда содержат значения текущих скоростей вращения, и для определения передаточного числа достаточно просто поделить одно на другое. В любой момент времени, тем более, что нужно это фактически только в момент вывода номера передачи на экран, а выводить ее в любом случае часто не стоит
При К=3,26 за время обновления переменной вторичного вала переменная оборотов первичного вала обновиться 3 раз. Первичный вал меняет обороты с 600 до 3600 (вторичный пропорционално К=3.26) значит каждая переменная будет больше предыдущей. Период вторичного вала равен сумме 3.26 периодов первичного измериных синхронно(среднее 3.26 оборотов тех что были синхронно)
Этот код будет делить устаревшее значение на обновлённое увеличенное три раза и получит три передаточных числа которые будут больше предыдущего и истинного. Из этих значений надо определить равно ли оно К 3.85; или К 3.26; или К 3 при том что ускорения может не быть или оно будет отрицательным.
И что?
Кто заставляет делить три раза?
Выводите данные 10-20 раз в секунду, зачем чаще? Этот процесс не должен быть связан с замерами, нужные актуальные данные у вас будут всегда под рукой.
Впрочем, если есть желание делать себе мозг - не возражаю
Разговор о том что за 5000р. были готовы написать код по методу определения передаточног числа кпп мотоцикла по оборотам двигателя(ипульс от прерывателя свечи) и датчика на вторичке(1?импульс) типа всё просто и будет работать.
Почему часто проводить измерения? Потому что это мотоцикл и сначала нетралка потом 1пр с пробуксовкой сцепления, потом 2-3сек и выжим сцепления для 2пр и т.д за это время вторичный вал не делает тысячи оборотов, а еденицы, десятки и надо поймать тот который покажет передаточное число. Когда начинать ардуина не узнает.
Я говорю не о частом измерении - оно в приведенном коде идет непрерывно, в результате вы в любой момент времени имеете актуальные значения скоростей вращения. Речь о том, что выводить на экран данные чаще 20 раз в секунду бессмысленно - глаз все равно уследить не сможет. По большому счету и 10 раз в секунду для этого достаточно.
В минуту наверно? В секунду не будет столько импульсов с вторички.