Drehzahl anzeigen

L I V E Stammtisch ab 20:30 Uhr im Chat
  • Hallo liebes Forum,

    ich brauch da programmiertechnisch mal einen kleinen Startschubser :angel:

    Was ich habe:

    RPi Rev.B
    Motor bis max. Drehzahl von ca. 13000 U/min
    Eine fertige Schaltung, die auf 3V3 läuft und pro Zündimpuls einen RechteckImpuls mit der Höhe von 3V3 und einer Breite von wenigen us liefert.

    Was ich gerne hätte:

    Die aktuelle Drehzahl so genau wie möglich.


    Die Schaltung versorge ich mit dem PI. Nehm mir nen 3V3 Ausgang und GND. Zündimpuls kommt vom Zündkabel. Und dann hab ich noch den Ausgang der Schaltung, den ich ja quasi auf einen beliebigen Eingang des PI legen kann.

    So weit, so gut. Aber wie bekomm ich jetzt die Drehzahl auf dem Monitor angezeigt?
    Ich bin da mehr so der Praktiker und im Programmieren ne Niete :s

    Würde mich sehr freuen, wenn mir da jemand ein wenig behilflich sein kann.

    Vielen Dank!

  • Hmmm... Ist jetzt zwar schon fast 2 Monate her, aber irgendwie hat die Benachrichtigung nicht funktioniert und ich hab die Antwort gar nicht bzw. jetzt erst bemerkt :(

    Hatte leider zwei Monate keine Zeit, aber jetzt wieder und deshalb poppt das Projekt wieder auf.

    Der Monitor ist bei mir erstmal zweitrangig...
    Das Ganze soll erstmal in der Werkstatt funktionieren. Und da steht nen ganz normaler Computer Monitor.
    Mir reicht auch total, wenn auf dem Monitor irgendwie die aktuelle Drehzahl als reine Zahl in Textform auftaucht und sich im 0,5s Takt ändert.

    Ich hab halt eine Leitung von meiner Schaltung zu einem Input vom PI. Dort liegt passend zur Drehzahl ein Rechtecksignal an. Das soll im aller ersten Schritt einfach nur ausgegeben werden.

  • Hi Berti,

    anbei der Code und das unter Raspian ausführbare binary speedo.zip. Du kannst das C-File einfach in Geany öffnen und erzeugen lassen, um das Binary zu erhalten - wenn die wiringPI-Library installiert ist.

    Frag, wenn Du irgendetwas zum Code wissen möchtest, ich antworte gern. Der Code muss ggf. noch kalibriert werden (Radumfang, Anzahl Impulse je Umdrehung usw. - jedenfalls für mein Tachometer). Als Parameter erwartet das Programm den bisherigen Kilometerstand "sudo ./speedo 123456.5".

    Hinsichtlich der Hardware hatte ich noch ein paar Kleinigkeiten, z.B musste ich einen Spannungsteiler für das Signal von meiner LiMa (Motorrad) einbauen und für den Implusgeber meines Tachometer-Signals habe ich nun einen Hall-Schalter statt eines Reed-Schalters eingebaut [noch im Test], weil der Reedschalter sehr viel Prellung aufweist - das Meiste scheint aber gelöst - was ich noch nicht weiß: Ich habe ein paar Kondensatoren besorgt, um beim Ausschalten der Maschine (keine Batterie) den Pi gesittet runter zu fahren oder doch mindestens den aktuellen Kilometerstand in eine Datei zu schreiben - ob das klappt, kann ich noch nicht sagen.

    Herzliche Grüße, Thomas

  • Moin Thomas,

    danke für den Code.... Aber ich versteh -> nix! Naja, fast nix.
    Am Anfang definierst du die Eingänge. Soviel versteh ich noch :D
    Dann der erste Teil mit lastsum...kA
    Dann die Anzeige für ein LC Display.
    Was bei den nächsten 3 voids gemacht, weiß ich wieder nicht.
    Dann kommt main.
    Variablen&PINS definieren, LCD Ausgabe und danach hörts dann endgültig auf...

    Wo findet da die Berechnung für rpm statt?

    Mein "Projekt" ist halt eher etwas anderes. Ich möchte keinen digitalen Tacho mit verschiedenen Anzeigen, sondern einen "Leistungsprüfstand" bauen. Aus Zeit, bewegter Masse und Drehzahl kann man die Leistung am Hinterrad errechnen.
    Normalerweise steht das Mopped mit dem Hinterrad auf einer Rolle mit z.B. 200kg. Anhand der Zeit, wie lange das Mopped bis zur Höchstdrehzahl, der Masse(200kg) und der Drehzahl selbst, kann man dann die Leistungskurve anzeigen lassen.

    So ein Leistungsprüfstand ist aber groß, teuer etc....
    Die Idee hier ist, dass ich statt der Rolle einfach das komplette Gewicht (Roller, Fahrer, etc) nehme und auf einer möglichst ebenen Strasse mit wenig (Gegen-)Wind einen Messlauf absolviere.
    Und dafür eignet sich der Pi bestens. Kleines Gehäuse, Batterie betrieben usw...

    Aber um das erstmal zu testen möchte ich im ersten Anlauf erstmal den Pi an das Mopped hängen und gucken, ob meine Schaltung überhaupt funktioniert, so wie ich mir das vorstelle.

    Die Schaltung:

    Abgenommen wird das Signal am Zündkabel. Ist ein 1-Zylinder. Bei 2 oder 4 Zylindern müsste man dann vor den Zündverteiler. Der Vorteil vom Abgriff am Zündkabel liegt in der universalen Nutzung. So muss ich nicht jedes Mopped bzw. LiMa kennen und kann mich einfach immer am Zündkabel orientieren.

    Bei einer festen Installation am Mopped macht der Abgriff an der LiMa natürlich wieder mehr Sinn. Aber auch dann könnte man die Schaltung anpassen. DENN die Nutzung von IC´s hat Vorteile. So kann ich z.B. schon mit dem 3V3 Ausgang vom Pi arbeiten und muss nicht über die Bordversorgung gehen. Hab also keine Probleme mit Spannungsschwankungen. IC´s sind robust und vorallendingen langlebig. Auch gibt es keine Prellung.

    Vielleicht kannst du das ja irgendwie für dich nutzen?!

  • Hi Berti,

    ich hab' auch'n 1-Zylinder, eine SR500, die das Tachometer bekommt. Die Zündimpluse von der CDI-Einheit liegen ganz praktisch vor, da kann man einfach abgreifen.

    Der MicroController, den Du da verwendest ist eine Einheit? Und kommt gleich mit verschiedenen angelegten Spannungen zurecht?

    Zum Code:

    lastum liest von der Kommandozeile die Kilometersumme für das Aufaddieren nach dem Einschalten.

    refresh aktualisiert das LCD.

    poff setzt das PowerOff-Flag (Maschine aus).

    speedo zählt die Radumdrehungen hoch.

    rpm zählt die Motorumdrehungen hoch.

    main holt sich zunächst die vorhergehende Kilometeranzahl.

    Dann wird die wiringPi-Bibliothek inititalisiert.

    Dann werden die GPIO-Pins im Modus geschaltet und initialisiert.

    Dann wird das LCD-Display initialisiert (Z104ff).

    In Z117ff werden die Interupt-Handler für die einzelnen PINs registriert: Wenn auf dem PIN das entsprechende Ereignis auftritt, wird die Routine aufgerufen.

    In Z191ff wird auf der Konsole/dem Display div. Kram ausgegeben.

    In Z138-154 ist dann die eigentliche Hauptschleife, die gemäß der "refreshrate" periodisch durchlaufen wird.
    Hier wird die zurückgelegte Anzahl in Metern ermittelt und in Z148 die aktuelle Umdrehungszahl errechnet, in Z151ff werden dann die aktuellen Werte abgelegt und der Zyklus beginnt von Neuem.

    Du kannst es Dir grundsätzlich so vorstellen, dass Du alle paar (Milli)Sekunden auf die Anzeige schaust, inzwischen haben die Interrupt-Handler die Zähler für Radumdrehungen und Motorumdrehungen hochgezählt und Du schaust nach der Differenz zum vorherigen Mal und errechnest die aktuelle Geschwindigkeit/Umdrehungszahl.

    Ist's nun klarer?

    Lieben Gruß, Thomas

  • Die Schaltung: ....

    Vielleicht kannst du das ja irgendwie für dich nutzen?!

    aber das IC sollte an 3,3V nicht an 5V !

    der PI mag nicht mehr als 3,3V am GPIO, das IC läuft auch mit 3,3V ;)

    lasst die PIs & ESPs am Leben !
    Energiesparen:
    Das Gehirn kann in Standby gehen. Abschalten spart aber noch mehr Energie, was immer mehr nutzen. Dieter Nuhr
    (ich kann leider nicht schneller fahren, vor mir fährt ein GTi)


  • Hi Berti,

    ich hab' auch'n 1-Zylinder, eine SR500, die das Tachometer bekommt. Die Zündimpluse von der CDI-Einheit liegen ganz praktisch vor, da kann man einfach abgreifen.

    Der MicroController, den Du da verwendest ist eine Einheit? Und kommt gleich mit verschiedenen angelegten Spannungen zurecht?

    Zum Code:

    <snip>


    Also den 4093 gibts fertig zu kaufen. Ist nen Standardbauteil. Wenn man sich ne eigene Platine ätzt passt der ganze Kram auf ne 5 Mark große Münzfläche. Mit ner Lochrasterplatine wirds nen ticken größer. Sollte aber SR500 konform klein versteckt werden können ;)

    Die Schaltung fängt irgendwas bei 2, irgendwas Volt an zu funktionieren. Braucht IC typisch super wenig Strom und kann bestens am 3,3V Pin vom Pi betrieben werden.

    aber das IC sollte an 3,3V nicht an 5V !

    der PI mag nicht mehr als 3,3V am GPIO, das IC läuft auch mit 3,3V ;)

    Also im Schaltplan stehen noch 5V... Aber der Einwand ist natürlich korrekt. 3,3V ist richtig. Die Betriebsspannung der Schaltung ist auch gleich die Ausgangspannung. Am Besten nimmt man die 3,3V vom PI und führt sie auf einen Input zurück.

    Zum Code... Wenn du erlaubst, Thomas, würde ich den Code mal als Basis für Testzwecke nutzen und alles rauslöschen, was ich nicht brauche.

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!