#arduino
Добрый день. На первичном валу катера приклеил 2 магнита, установил датчик холла. Данные с датчика холла поступают на Arduino due. Код выглядит следующим образом: #includeconst int RPM_PIN=3; volatile int rpm = 0; // Тахометр volatile int rpm_tik = 0; // Импуслы тахометра void rpm_count(){ rpm_tik++; } void SensorData(){ rpm = rpm_tik; rpm_tik = 0; } void setup(){ Serial.begin(9600); pinMode(RPM_PIN,INPUT); attachInterrupt(RPM_PIN, rpm_count, RISING); Timer3.attachInterrupt(SensorData); Timer3.start(1000000); } void loop(){ Serial.println(rpm/2*60); delay(500); } на малых оборотах двигателя все соответствует истине. Но при увеличении оборотов показания начинают завышаться. Так при оборотах 5000-5500 (примерное значение, ибо прибор аналоговый) - получаю значение 6600 и выше. В чем может быть проблема?
Ответы
Ответ 1
Заменил вызов прерывания на: attachInterrupt(digitalPinToInterrupt(RPM_PIN), rpm_count, RISING); вместо attachInterrupt(RPM_PIN, rpm_count, RISING); Все заработало правильно.Ответ 2
Слишком много вариантов, начиная от программных глюков (хотя на это не похоже) и заканчивая наводками от системы зажигания. Берите осциллограф, изучайте форму входного сигнала. Тут хватит и осциллографа из звуковой карты. Берите также генератор и давайте вашему тахометру тестовые сигналы.
Комментариев нет:
Отправить комментарий