Импульсный тахометр
Я попытался создать тахометр для своего мотоцикла, используя Arduino Uno.
Я пытаюсь измерить напряжение катушки зажигания (шагнул вниз, чтобы не разрушить Arduino).
Я пытаюсь определить время между двумя взрывами (одна катушка зажигания высокого напряжения).
Я попытался использовать команду pulseIn следующим образом:
unsigned pin=8;
float t;
unsigned long rpm;
void setup() {
Serial.begin(9600);
pinMode(pin,INPUT);
}
void loop() {
rpm=pulseIn(pin,LOW);
Serial.println(rpm/60);
}
Проблема в том, что он не будет отображать стабильные значения. Все сойдет с ума. При разомкнутой цепи он по-прежнему отображает случайные значения.
@Andrei Grigore, 👍1
Обсуждение2 ответа
Я не могу сказать вам, почему это не работает, но я могу дать вам рабочую альтернативу.
unsigned int pin=8;
void setup() {
Serial.begin(9600);
pinMode(pin,INPUT);
}
void loop() {
unsigned float rpm = 0;
while (digitalRead(pin) == FALSE) {
rpm++;
delayMicroseconds(1);
}
Serial.println(rpm/60);
}
Возможно, я что-то забыл, но это должно сработать.
Edit: комментарии могут быть правильными, вы понижаете входное напряжение?
Никто не упоминал, что при разомкнутом переключателе (или точках) возникает обратная ЭДС от первичной катушки. Это означает, что к вашему делителю напряжения в обратном направлении подается 200-300 В, в то время как вы думаете, что есть только 0-12 В.
- Какова работа pulseIn?
- Как использовать две функции pulseIn() одновременно в Arduino?
- Как измерить ультразвуковой датчик без импульсного метода?
- Можно ли использовать Arduino Uno для измерения частоты прямоугольной волны до 600 кГц?
- Непрерывное чтение двух последовательных периодов импульса
- Функция Pulsein() блокирует одновременное выполнение других задач
- Считывание ШИМ-сигнала с радиоуправляемого приемника
- Работа с PulseIn() и Millis().
Вы уверены, что этот импульс не короче 10 мс?, @Divisadero
я протестировал как pulseIn (pin, НИЗКИЙ УРОВЕНЬ), так и pulseIn (pin, высокий уровень), но ни один из них не сработал. Самое большее, мой велосипед делает 14.000 оборотов в минуту, что означает 14.000 / 60 (233) оборотов в секунду. 233 rps ..... 1000 мс x rps............1 мс х=233/1000. Я предполагаю, что это меньше 10 мс. В этом ли проблема?, @Andrei Grigore
https://www.arduino.cc/en/Reference/pulseIn -менее 10 мс это не будет работать правильно, @Divisadero
но если вы протестировали его с меньшей скоростью, проблема будет где-то в другом месте, @Divisadero
Мне любопытно, как вы можете включить катушку зажигания в свою цепь?, @Divisadero
Я подозреваю, что для этого Arduino уже слишком поздно. Как вы безопасно снижаете напряжение таким образом, чтобы оно не а) не убивало Arduino и б) не убивало вас?, @Majenko
кстати: http://arduinoprosto.ru/q/318/how-precise-is-the-timing-of-pulsein?rq=1, @Divisadero
pulseIn работает для значений менее 10 мс, он возвращает время в "микросекундах". Попробуйте Serial.println(pulseIn(pin,НИЗКИЙ));, @Sniper
Я не пользовался высоковольтной клеммой. Я снял минус с первичного минуса катушки (клемма 12 В) и плюс с аккумулятора, поскольку земля - это та, которая постоянно меняется в катушке зажигания. Я использовал делитель напряжения, чтобы понизить напряжение до приемлемого уровня., @Andrei Grigore