• Witaj na Forum Arduino Polska! Zapraszamy do rejestracji!
  • Znajdziesz tutaj wiele informacji na temat hardware / software.
Witaj! Logowanie Rejestracja


Ocena wątku:
  • 0 głosów - średnia: 0
  • 1
  • 2
  • 3
  • 4
  • 5
Pomiar częstotliwości wejściem DC
#1
BRY Smile

Napisałem sobie prosty kod - pomiar częstotliwości PWM na wejściu cyfrowym
Mierzę czas stanu LOW, HIGH, dodaje i obliczam częstotliwość.

Działa, ale co jakiś czas otrzymuję wynik z d..y Wink
Jako źródła zastosowałem sygnał 1kHz z oscyloskopu.

Wykres w kreślarce wygląda tak: https://photos.app.goo.gl/WgpsWkbwcpmHir3J9

Finalnie będę mierzył częstotliwości gdzieś do 100Hz max.
Możecie zerknąć na kod (brudnopis jakby co)? Mam gdzieś błąd?
Czy też to kwestia zbyt wysokiej już częstotliwości???

Z góry dzięki...

Kod:
int RPM_pin = 44; boolean RPM_state=false;  boolean RPM_state_=false; float RPM_low_time=0; float RPM_high_time=0;
float time=0; float RPM; float msLICZNIK; float licznik; float msBT; float FRQ;

void setup()
  {
    Serial.begin(115200);
    Serial3.begin(38400);
    pinMode(RPM_pin, INPUT);
  }

void loop() {

  RPM_state = digitalRead(RPM_pin);
 
  if (RPM_state != RPM_state_) // jeśli zmienił się stan pinu RPM_pin
    {
      if (RPM_state) // jeśli RPM_pin HIGH
        {
          RPM_low_time=micros()-time; // jak długo [us] trwał stan LOW
        }
      else
        {
          RPM_high_time= micros()-time; // jak długo [us] trwał stan HIGH
        }
        time=micros(); // reset licznika czasu
        RPM_state_=RPM_state; // zapis stanu pinu RPM
        FRQ=1000000/(RPM_high_time+RPM_low_time);
    }

  if (millis() > msBT + 10)
    {
      // Serial.print(RPM_low_time); Serial.print(" "); Serial.println(RPM_high_time);
      //Serial.println(1000000/(RPM_high_time+RPM_low_time));
      Serial.println(FRQ);
      msBT = millis();
    }

  //delay(10);

}
 
Odpowiedź
  


Wiadomości w tym wątku
Pomiar częstotliwości wejściem DC - przez PierwszyWolnyLogin - 31-08-2020, 20:35

Skocz do:


Przeglądający: 1 gości