Снова о тахометре для мото.

di_mot
Offline
Зарегистрирован: 12.08.2016

Пересмотрел кучу всякого найденного в Инете.

Опробовал вариант из тынц. Все вроде ни чего для 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."

 

andriano
andriano аватар
Онлайн
Зарегистрирован: 20.06.2015

3. Замените файл ld.exe аналогичным из сборки IDE версии 1.0.х.

di_mot
Offline
Зарегистрирован: 12.08.2016

andriano пишет:

3. Замените файл ld.exe аналогичным из сборки IDE версии 1.0.х.

- Пасип! :-)

Уже. Благодяря bodriy2014, котрый выложил архив с 1.6.5.

di_mot
Offline
Зарегистрирован: 12.08.2016

И так... (Что бы не плодить топики.)

Двое суток мордобоя, чтения доки до позеленения. Даже вспомнил то, что и во-обще ни когда не знал. :-)

Легкая модификация кода "от 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 не имеет внешнего входа.

По хорошему бы таймеры поменять местами. :-)