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

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.