Снова о тахометре для мото.
- Войдите на сайт для отправки комментариев
Пересмотрел кучу всякого найденного в Инете.
Опробовал вариант из тынц. Все вроде ни чего для 6000об/мин...
Но, при понижении скорости начались "нежданчики". Значения началя гулять туда-сюда. И чем ниже скорость (частота), тем чаще значения прыгают.
Думал генератор на NE555 так гуляет. Проверил его скетчем dimax (тынц) и выставил частоту стабильной (по кол-ву строк в "Мониторе порта"). Для тестирования такая стабильность достаточна.
Вернулся к скетчу "тахометра". Продолжилась "гулянка" показаний. Что, впрочем, и логично для принципа подсчета импульсов за интервал времени. Априоре дает + или - 1 ед. счета, а это уже 60 об/мин! Очень большая погрешность при 1000об/мин и ниже.
Для мото тахометра нужен диапазон измерений от 500 об/мин (8,3333Гц) до 15000 об/мин (250Гц). Нижний предел это ХХ двигателя и стартерный запуск, вержний предел - конец "красной зоны" для мото-двигателя.
dimax, ваш скетч "частотомера" (или аналогичный, вы же несколько вариантов выдавали "на-гора" на форуме ;-) ) давал хотя бы 2 знака после зяпятой - вопрос о авто-мото тахометрах был бы окончательно решён. :-)
1. Пните куда рыть и копать...
2. Библиотеку FreqMeasure скачал, но примеры не компилируются. :-(
3. Замучала и не знаю как ее победить на многих примерах:
"Ошибка Arduino: 1.6.10 (Windows XP), Плата:"Arduino Nano, ATmega328"
collect2.exe: error: ld returned 5 exit status
exit status 1
Ошибка компиляции для платы Arduino Nano."
3. Замените файл ld.exe аналогичным из сборки IDE версии 1.0.х.
3. Замените файл ld.exe аналогичным из сборки IDE версии 1.0.х.
- Пасип! :-)
Уже. Благодяря bodriy2014, котрый выложил архив с 1.6.5.
И так... (Что бы не плодить топики.)
Двое суток мордобоя, чтения доки до позеленения. Даже вспомнил то, что и во-обще ни когда не знал. :-)
Легкая модификация кода "от dimax" (см. ссылку выше) и получает тахометр с нужными хар-ками!
Тахометр от 100 до 30000 об/мин.
// Only для atmega328! volatile unsigned int int_tic=0; volatile long tic; void setup() { Serial.begin(9600); pinMode (5,INPUT); // вход от датчика оборотов, D5 Nano. digitalWrite(5, HIGH); cli(); // disable global interrupts // Timer 2 TCCR2A=0; TIMSK2 = 1<<TOIE2; //прерывание по переполнению TCCR2B=(1<<CS22)|(1<<CS21); //делитель 256 // Timer 1 TCCR1A=1<<WGM12; //CTC mode OCR1A=9 ;//прерывание каждые 10 TCCR1B=(1<<CS12)|(1<<CS11)|(1<<CS10); TIMSK1=1<<OCIE1A; ///------ END Timers ----------- tic=0; int_tic=0; sei(); // enable global interrupt } ISR (TIMER2_OVF_vect){ int_tic++; } ISR (TIMER1_COMPA_vect){ tic= ((int_tic*255)+ TCNT2)*1.6; // время 1 оборота в микросекундах. int_tic=0; TCNT2=0; TCNT1=0; } void loop() { int RPM=floor(60000000/tic); // обороты в минуту: Serial.println(RPM); delay(1000); }Конечно понимаю, что стрельба по воробьям из Д30. ;-)
Но к сожалению Timer2 не имеет внешнего входа.
По хорошему бы таймеры поменять местами. :-)