A program.

A motor fordulatszám mérés (rpm) egy egyszerű kis programot igényel. Meg kell számolni a HALL szenzortól egy időegység alatt érkező jeleket. Azért, hogy a jelek a főprogram elfoglaltságától függetlenül mindenképpen feldolgozásra kerüljenek, a D3-as lábra érkező lefutó él egy megszakítást generál. A megszakítási szubrutinban egy változó eggyel  növekszik. A főprogramban egy időzítő 1 másodpercenként kiolvassa a változó értékét, kiírja az eredményt a soros portra és lenullázza a változót.



volatile int rpm = 0;                //A megszakítási szubrutinban és a főprogramban is használt változó elé a "volatile" kell.
unsigned long rpmtime = 0; //Az időzítő órája void setup() { Serial.begin(115200);              // A soros port inicializálása
Serial.println(F("rpm started"));  //Jelzés, hogy egyáltalán elindult a program
pinMode(3,INPUT);                  //A HALL szenzor kimenete a 3-as lábra kötve, itt érzékeli az 1-es megszakítást az Arduino
attachInterrupt(1, blink, FALLING);//A megszakítás inicializálása: 1-es megszakítás, "blink" a megszakítási szubrutin neve, "FALLING" azaz lefutó élre legyen megszakítás
rpmtime = millis();                //Az időzitő változó szinkronizálása } void loop() { if(millis() > rpmtime + 1000){     //amennyiben eltelt 1000 millisecundum azaz 1 másodperc Serial.print("RPM: "); Serial.println(rpm*60);          //Az rpm kiírása a soros portra, *60 mert egy percben 60 másodperc van :) rpm = 0;                         //Az rpm változó kinullázása rpmtime=millis();                //Az óra nullázása } } void blink()                         //A megszakítás kezelő szubrutin { rpm++;                             //Minden fordulat generál egy megszakítást, és növeli eggyel a változót }

A program és az egész rendszer hátránya, hogy elég érzéketlen, csak hozzávetőleges mérésre alkalmas. Ha egy 600-as fordulatszámú motort akarunk mérni, akkor másodpercenként csak 10 jel érkezik. A mérési idő növelésével pontosabb eredményt kaphatunk, persze a *60-at is csökkenteni kell.

Hall szenzoros motor fordulatszám mérés Arduinoval 2
Cimke:

Vélemény, hozzászólás?

Az email címet nem tesszük közzé. A kötelező mezőket * karakterrel jelöljük.