INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.

Antwort schreiben 
 
Themabewertung:
  • 0 Bewertungen - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
MotorClubtisch
18.04.2015, 22:13
Beitrag #1
MotorClubtisch
Hallo.
Ich baue meinen zweiten Motorclubtisch.
Der erste war ein Geschenk und hat so ausgesehen:

https://vimeo.com/121976834


Nun bin ich an einem V8, der anstelle des schnöden Schlüsselschalters eine anständige Armatur bekommt mit Drehzahlmesser, Spannungsmesser und Temperaturmesser.
Die Kurbelwelle ist jetzt Stufenlos regulierbar über Poti und Schrittmotor.
Der Schrittmotor hat ein sogenannten Encoder angeflanscht, der 500 Rechteckimpulse pro Umdrehung ausgibt.

Der Motor soll mit 1/100stel der richtigen Drehzahl drehen, die Drehzahlanzeige jedoch soll mir die original Drehzahl anzeigen.
Angenommen ein V8 macht so ca. max 6500 u/min.
Mein Motor dreht dann mit 65 U/min und die Drehzahlanzeige soll 6500 U/min anzeigen.
Vom Schrittmotor zur Kurbelwelle hab ich noch eine Übersetzung von 4.8 / 1.

Nun stockt das ganze Projekt kurz vor der Fertigstellung (bin schon seit ca. 2 jahren daran) seit Wochen oder Monaten, da ich den Signalaustausch zwischen Encoder und Drehzahlmesser nicht hinkriege. Grrrrrr.
Von der Leistung her hab ich mir gedacht, sollte der Arduino Nano reichen. Mit meinen kümmerlichen uralten BASIC Kenntnissen bin ich aber schnell an Anschlag gekommen.
Hab's geschafft die Impulse vom Encoder zu zählen via Analogeingang 4.
Der serielle Monitor zeigt Werte von 31 bei Low und ca 900 bei High.

Der Analoginput soll die Impulse registrieren und im entsprechenden Teiler via Digitaloutput an mein Drehzahlinstrument ausgeben.
Bei 65 U/min erhalte ich 2600 Impulse / sek. vom Encoder. (65 U/min x 4.8 x 500 /60 sek)
Der Drehzahlmesser soll dann 433.33 Impulse /sek. erhalten. (6500 x (8 zyl. / 2 (beim 4-takt Motor bekommt der einzelne Zylinder ja nur jeden zweiten Hub ein Zündimpuls)) / 60 sek.).
Bei der Minimaldrehzahl von 5 U/min erhalte ich dann 200 Impulse / sek vom Encoder und der Drehzahlmesser soll 33.33.. Impulse / sek. erhalten.
Gut, ich denke mal die Kommastelle kann man getrost vergessen...

Hat jemand iiiiirrrrrrgend eine Idee wie man das hinkriegt?Undecided
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
19.04.2015, 05:02 (Dieser Beitrag wurde zuletzt bearbeitet: 19.04.2015 05:03 von dqb312.)
Beitrag #2
RE: MotorClubtisch
Hallo,

wenn dein Drehzahlmesser nur rechteckimpulse benötigt, fällt mir da auf Anhieb ein:
- Eingangsfrequenzt in benötigte Herz umrechnen
- Ausgabe als Tonsignal auf einem Pin zum Drehzahlmesser

http://www.arduino.cc/en/pmwiki.php?n=Reference/Tone

Das geht m.E. aber nur, wenn der Drehzahlmeser einen Zeiger zur Anzeige nutzt. Zum Ändern der Tonefrequenz muss der Ton erst ausgeschaltet und mit den neuen Parametern wieder eingeschaltet werden. Dazu muss der Drehzahlmesser träge genug sein.

Ein anderer Weg wäre, den Arduino als Steuerung für die Drehgeschwindigkeit des Motors zu nutzen, dann brauchst du keine Motordrehzahl zu messen sondern nur beide Signale (Steuerung Motor und Drehzahlmesser) passend zueinander zu erzeugen.

ps: Ich denke, du musst in deiner Berechnung nicht durch 2 teilen, da die Drehzahl und nicht die Zündimpulszahl angezeigt wird.

Gruß Rainer
Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
19.04.2015, 21:13 (Dieser Beitrag wurde zuletzt bearbeitet: 19.04.2015 21:14 von tschowannofritsch.)
Beitrag #3
RE: MotorClubtisch
Hmmmm.
"Eingangsfrequenz in Hz umwandeln"

Da bildet sich auch schon ein grosses Fragezeichen in meinem Kopf...
Vieleicht könnte man die vergangene Zeit messen von einem Impuls zum nächsten.
Das wäre dann ein Wert "Impulszeit" der mit zunehmender frequenz kleiner wird...

Ausgabe in ein "Tone" find ich gute Idee. Ich habe ein Analoges Drehzahlinstrument.
Da "Impulszeit" mit zunehmender Drehzahl kleiner wird müsste man diesen Wert irgendwie negieren können, sodass er grösser wird. Ein höherer Wert bei "Tone" ergibt auch eine höhere Ausgangsfrequenz. Richtig?

Arduino als Steuerung zu benutzen für den Schrittmotor ist keine Option, da mir die Steuerung den Schrittmotor mit einer Rampe beschleunigt oder verlangsamt.
Das würde das programm wider aufwendiger machen. Und ich bin ein absoluter Arduino neuling.

So sieht das ganze auf dem Papier aus:


Angehängte Datei(en) Thumbnail(s)
   
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
20.04.2015, 04:31
Beitrag #4
RE: MotorClubtisch
Hallo,

du bist auf die richtigen Gedanken gekommen.

Zum Messen einer Impulszeit kann der Befehl pulsein genutzt werden. http://www.arduino.cc/de/pmwiki.php?n=Reference/PulseIn

Zum Umwandeln der ermittelten Werte in die benötigte Frequenz geht der Befehl map. http://www.arduino.cc/de/pmwiki.php?n=Reference/map
Dort geht z.B. val = map(val, 0, 1023, 0, 255); oder val = map(val, 0, 1023, 255, 0); (im 2. Beispiel wird wie benötigt die Richtung der Ausgabewerte umgedreht).

Um Ausreißer bei den Messungen abzufangen geht der Befehl constrain. http://www.arduino.cc/de/pmwiki.php?n=Re.../constrain

Falls deine Versorgungsspannung über 12 V sein kann, empfehle ich dir, einen 7809 vor den Arduino zu hängen. Damit schützt du den integrierten Spannungswandler und er wird nicht ganz so warm.
Teste mal, ob dein DZM mit Signalen von nur 5V auskommt, sonst brauchst du noch eine Pegelanpassung.

Gruß Rainer
Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
23.04.2015, 21:22
Beitrag #5
RE: MotorClubtisch
Hab schon mal ein Teilerfolg.

"Tone" funktioniert hervorragend. Kann mit einem testPoti am Analogeingang schön hoch und runterregeln.
Mit dem Schrittmotor angehängt sieht es ein bischen anders aus.
"pulseIn" gibt mir werte von ca 340 - 26. Im oberen Drehzahlbereich sieht das gut aus, das heisst der Zeiger ruckelt nicht. Aber im unteren Bereich, kurz vor null, schwankt der ein bischen. Hab da bei konstannter Schrittmotordrehzahl Werte von 323 bis 340. Kann man das irgendwie glätten?
Zudem bewegt sich der Zeiger nicht linear. Er steigt sehr schnell von 500 rpm auf 5000rpm bei minimaler Drehzahlerhöhung des Schrittmotors. Dann geht's relativ gemächlich bis maximal 6500rpm. Hrmpf.
Vieleicht muss ich doch mal probieren mit einer LM2907,LM231 Variante....

Hier noch mein Superprogram....:

// Tacho 8 zylinder einstellen

int freq = 0;
int potiwert = 0;
int SchrittmotorPin = A4;

int SchrittmotorWert = 0;
int duration;

void setup() {
Serial.begin(9600);
pinMode(SchrittmotorPin, INPUT);
}

void loop() {


SchrittmotorWert = digitalRead(SchrittmotorPin);
duration = pulseIn(SchrittmotorPin, HIGH);
freq = map(duration, 350, 26, 20, 427);
tone(9,freq);

Serial.println(duration);


}
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
23.04.2015, 22:00
Beitrag #6
RE: MotorClubtisch
(23.04.2015 21:22)tschowannofritsch schrieb:  Hab da bei konstannter Schrittmotordrehzahl Werte von 323 bis 340. Kann man das irgendwie glätten?
Ja, z.B. arithmetisches Mittel über die n letzten Messungen, exponentielle Glättung, Ermittlung des Medians aus den letzten n Messungen und noch ein paar mehr Möglichkeiten. Ich mache sowas am liebsten so, dass ich mir immer die letzten 10 (z.B.) Werte merke. Dann jeweils die zwei größten und die zwei kleinsten wegwerfen und aus dem Rest das arithmetische Mittel bilden.

Zitat:Zudem bewegt sich der Zeiger nicht linear. Er steigt sehr schnell von 500 rpm auf 5000rpm bei minimaler Drehzahlerhöhung des Schrittmotors. Dann geht's relativ gemächlich bis maximal 6500rpm. Hrmpf.
Das ist klar, da die Drehzahl und die Impulslänge nicht linear voneinander abhängt, sondern linear zum Kehrwert. Du hattest gesagt, dass der Motor 500 Pulse pro Umdrehung liefert. Wenn wir annehmen, dass das Puls-Pause-Verhältnis 1:1 ist, dann sollte folgende Formel zum Erfolg führen:
U = 60 * (1000000 / 500) / ( p * 2)
U sind dann die Umdrehungen in 1/min, p die gemessene Impulszeit in Mikrosekunden. 26 würde dann 2307rpm entsprechen und 340 wären 176rpm.
Wahrscheinlich ist das nicht wirklich genau, da da ein paar Annahmen drinstecken. Der Einfachheit halber kannst Du einfach irgendwas durch die Impulsdauer teilen und das Ergebnis durch das map jagen.
Gruß,
Thorsten

Falls ich mit einer Antwort helfen konnte, wuerde ich mich freuen, ein paar Fotos oder auch ein kleines Filmchen des zugehoerigen Projekts zu sehen.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste