Drehzahlerfassung - wie?

Gast #3098784
Lesenswert?

Hallo zusammen.

Ich habe vor, mit einem embedded-Board (Raspberry Pi) über dessen 
GPIO-Pins eine Drehzahl zu eines Verbrennungsmotors (Dieselmotor) zu 
erfassen und aufgrund des gemessenen Wertes die Einspritzung über einen 
Getriebemotor zu steuern.

Klingt eigentlich total simpel, ist es aber nicht.

Mit Regelungstechnik hatte ich noch nicht allzu viel am Hut, deshalb 
hier die Frage:

Zunächst habe ich vor, eine Drehzahl pro Minute zu erfassen, die durch 
einen Zeitcounter und dem Zählen der Spannungsimpulse des Hallsensors 
realisiert werden soll.
Allerdings ist dabei das Problem, dass nur jede vollständige Minute ein 
Drehzahlwert aktualisiert wird.
So dachte ich "kein Problem"...setze ich einfach den Zählcounter runter. 
Heißt, dass er nun z.B. die Impulse im 10-Sekunden-Rhythmus zählt und 
daraus die Drehzahl erfasst.
Problem: Ungenauigkeit! Die Solldrehzahl des Motors beläuft sich auf 
1500 Umdrehungen/min. . Bereits eine Schwankung auf 1600 Umdrehungen pro 
Minute wäre fatal!
Heißt, dass ich eigentlich schon die Genauigkeit von einer Minute 
brauche.
Problem dabei ist aber, dass ich erst nach einer abgelaufenen Minute auf 
das Signal reagieren kann.

Nun die Idee, den Zeitintervall von 1 Sekunde einzustellen:
Bei einer Drehzahl von 1500 U/min. wären das 25 Intervalle in der 
Sekunde.
Bereits bei einer gemessenen Intervallsumme von 24 wäre die Schwankung 
wieder viel zu groß und ungenau....

HILFE!

Gruß u. Danke!
joh.
(Firma: matzetronics) #3098789
Lesenswert?

Wenn das ein Hallsensor ist, gib ihm doch mehr Pulse/Umdrehung - z.B. 
mit mehreren Magneten auf der Welle.

jk schrieb:
> Das Problem ist, dass ich keine Interrupts auslösen kann sondern nur
> pollen kann.

Warum denn das? Das klingt nicht gut, so kannst du schnell mal einen 
Puls verpassen. Du solltest einen Treiber schreiben, der per Interrupt 
zählt.
Gast #3098791
Lesenswert?

jk schrieb:
> Das Problem ist, dass ich keine Interrupts auslösen kann sondern nur
> pollen kann.

Dann ist es vielleicht das falsche System für Echtzeitaufgaben.
Guck dir mal diesen (*) Frequenzzähler an, der hat bei niedrigen 
Frequenzen das gleiche Problem, wie du mit deiner Drehzahl
(*) Beitrag "Frequenzzähler 1Hz - 40MHz"
http://www.mikrocontroller.net/articles/Frequenzz%C3%A4hlermodul
Gast #3098795
Lesenswert?

Das mit der Zeitmessung zwischen den Impulsen klingt gut.
Nur diese "while(1)" macht mir irgendwie Bauchschmerzen.
1
while(1)
2
{
3
    if($impuls)
4
    {
5
         $impuls=0;
6
         $zeit1 = clock();
7
         while!($impuls);
8
         $zeit2 = clock();
9
    }
10
    $zeitdifferenz = $zeit2-$zeit1;
11
}

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren