Forum: Mikrocontroller und Digitale Elektronik Drehzahlmesser für Modellmotor


von Christian (Gast)


Lesenswert?

Moin

ich möchte gerne die Drehzahl meines Modellmotors (2,65ccm, bis zu 
35.000 RPM, sollte aber wenn möglich bis 40k messen können) messen und 
das Ergebnis mit dem RPI weiterverarbeiten (soll insgesamt ein Teil 
einer etwas komplexeren Steuerung werden, wobei die Motordrehzahl selber 
nicht zum steuern genutzt werden soll, sondern rein als Info für den 
Fahrer mitgemessen werden soll.

Der einzige Punkt, an dem man wirklich die Motordrehzahl messen könnte 
und der im eingebautem Zustand halbwegs zugänglich ist, ist die 
Schwungscheibe, dies ist eine Metallscheibe mit geriffeltem Rand.

Meine Idee wäre, an den geriffelten Rand mit einem Edding einen 
schwarzen Strich(auf die ansonsten silberne Scheibe) zu machen und die 
Stelle mit einer Reflex Lichtschranke zu "überwachen" Ähnlich wie das 
hier gemacht wurde:
http://www.rc-modellbau-schiffe.de/wbb2/thread_8312_Drehzahlmesser-selbst-gebaut.html

Grundsätzlich sollte das ja funktionieren oder könnte es da wegen der 
geriffelten Oberfläche Probleme geben?

Nun ist aber mein weitaus größeres Problem wie bekomme ich das Signal 
nun am geschicktesten (und mit so wenig Bauteilen wie möglich) in den 
RPI ^^
Problem ist, auf dem Auto ist grad so Platz für den RPI, massig Platz 
ist für Zusatzschaltung nicht.
Auf Dauer wird das Auto wohl oder Übel eine neue Grundplatte erhalten ^^

lg
Chris

von Matthias G. (matttthias)


Lesenswert?

Hallo Chris,
Zitat Radio Eriwan  "prinzipiell JA"......

Eine emorme Steigerung der Zuverlössigkeit würdest Du erreichen, wenn Du
eine ganze Hälfte des Rades schwärzen würdest...

Oder jeweils 2mal ein Viertel  oder noch enger....zur besseren 
Auflösung.

Als Sender hab ich in ähnlichem Ptrojekt (Tacho für ne Walze) eine
Laserdiode mit Kollimator verwendet. Dieser strahlt bei Dir das Rad 
kontinuierlich an.
Als Empfänger der Reflexion kannst dann eine Photodiode ( z.b. PD333)
http://www.everlight.com/datasheets/PD333-3C-H0-L2_datasheet.pdf
verwenden.
Die Signalaufbereitung krixt sicher selber hin.

Namasté   Matthias

von MaWin (Gast)


Lesenswert?

40000 rpm sind gerade mal 666 Impulse pro Sekunde, also Kinderkacke für 
den RPi.
Aber du musst Störungen fernhalten, Riffel könnten daraus wieder 400000 
Impulse machen.
Entweder dein schwarz ist so gut, dass die silbrigen Riffel nicht 
stören, oder das Phototransistorsignal wird gefiltert so dass er nur auf 
den breiten schwarzen Streifen anspricht, der muss mindestens 20 mal 
breiter als die Riffel sein, damit due nicht im Leerlauf zu Streifen 
werden. So ein Filter heisst Bandpass und man baut ihn mit einem OpAmp 
auf.

von Christian (Gast)


Lesenswert?

hm ok die Riffel könnten in der Tat zu größeren Problemen führen als 
gedacht, außerdem fürchte ich ein Problem bei zu hohem Lichteinfluss in 
etwa draußen in der Sonne, deswegen ist mir gerade die Idee gekommen in 
die Schwungscheibe einen Magneten einzulassen und an die Schwungscheibe 
einen Hallsensor zu setzen.

Ich denke da an den H501, der schaltet auf High wenn ein südpol 
vorbeikommt.
Das könnte man wunderbar mit einem Interruptpin lösen, wenn der RPI 
einen hätte :(

in einer Endlosschleife immer wieder den Status des Pins abzufragen 
fällt allein schon aus dem Grund flach, das der RPi später genug zu tun 
hat.

Gibt es IC's, die solche impulse zählen?

also praktisch nen IC der an die Signalleitung kommt, nen Zähler um eins 
erhöht sobald der Eingang high wird und der RPI kann dann jede Sekunde, 
alle zwei Sekunden oder so den Zählerstand auslesen und resetten und aus 
dem wert dann die Drehzahl berechnen?

Ich finde grad mit verschiedensten Suchbegriffen nichts was mir da 
weiterhilft :(

lg
Chris

von Jon D. (shee2e)


Lesenswert?

Hi, meinst du einen Zähler?
Oder halt jk-FF kaskadieren, also J und K = 1 und Q0 auf clock1, Q1 auf 
clock2 etc. Müsste ja mit 666 Hz noch laufen. vll. noch rc Glied 
abstimmen, dass nach jeder Flanke ein Ready Signal erzeugt.
Dann mit 10 oder 11 Bit parallel einlesen (oder in PISO mit latch und 
dann mit dem SPI einlesen).
MfG
shee2e

: Bearbeitet durch User
von Max H. (hartl192)


Lesenswert?

Das könnte man auch mit einem kleinen uC lösen. Der hat Zähler und SPI 
integriert.
Der PIC12F1840 z.B. hat SPI, 16bit Timer und Input Capture im DIL/SOIC-8

: Bearbeitet durch User
von Jon D. (shee2e)


Lesenswert?

Ach, stimmt, der könnte wahrscheinlich auch gleich die Drehzahl 
bestimmen.
Also µC der Wahl nehmen und ihn machen lassen.
Aber bitte beachten minimale Zeitliche Auflösung des Drehzahlsignals ist 
bei der Abtastung halt proportional zu Impulsen/s.
Heist wenn der Motor (ja ich weiß unrealistisch) 1 U/s du nur einmal die 
Drehzahl bestimmen kannst. (vorausgesetzt gleichförmige Bewegung)
MfG
shee2e

von Max H. (hartl192)


Lesenswert?

Wäre es bei so kleinen Frequenzen nicht genauer, wenn man mit dem Input 
Capture die Periodendauer misst?

Hier hat sich jemand damit beschäftigt: 
http://www.sprut.de/electronic/pic/projekte/frequenz/freq_uni_628.htm

von m.n. (Gast)


Lesenswert?


von Hummerkuchen (Gast)


Lesenswert?

Optische Erfassung bei Modellmotoren die immer mehr oder weniger sauen, 
wird schwierig sein.

von Stefan H. (cheeco)


Lesenswert?

Die Frage ob man die Zeit zwischen 2 Impulsen bestimmt oder die Anzahl 
der Impulse zählt kann man nicht eindeutig beantworten. Je nach Frequenz 
hat das eine oder das andere Verfahren Vorteile bezüglich der 
Genauigkeit. Ich verwende deswegen am liebsten eine Kombination aus 
beiden Verfahren:

Es wird eine Messzeit definiert, hier mit T_Mess bezeichnet.

Die Messung wird gestartet, und die laufende Zeit ist t=0.
Die Messung läuft grundsätzlich so lange, bis t >= T_Mess ist.

1.Sobald der erste Impuls (1. steigende Flanke) kommt, wird die aktuelle 
Zeit in den Zeitstempel t_1 geschrieben.

2.Beim nächsten Impuls (2. steigende Flanke), wird der aktuelle 
Zeitstempel in t_flast geschrieben. Der Impulszähler n (zum Start der 
Messung bei 0) wird um 1 inkrementiert.

3. Bei jedem nächsten Impuls wird Schritt 2 ausgeführt: n wird jedes mal 
inkrementiert, und der Zeitstempel t_flast gespeichert.

Sobald die Messung beendet wird, also t > T_Mess, können die Auswertung 
begonnen werden:

Wenn n = 0, dann Frequenz nicht messbar, also f < 1/T_mess
Wenn n > 0, dann gilt: Frequenz f = n/(t_flast-t_f1)


Wie man an der letzten Zeile sehen kann, geht für extrem hohe Frequenzen 
t_f1 gegen 0 (da der erste Impuls sehr schnell reinkommt), und t_flast 
geht gegen T_Mess: Das Verfahren konvergiert also gegen die klassische 
Impulszählung.

Für sehr kleine n (das kleinste ist logischerweise 1), ist das Verfahren 
eine ganz klassische Messung der Periodendauer.


Wie findet ihr das Verfahren? Machen das eigentlich viele so, also ist 
das "Allgemeinwissen"?


Grüße,

Stefan

von Christian (Gast)


Lesenswert?

Ok ich hab jetzt eine Lösung gefunden die denke ich recht gut 
funktioniert.

Und zwar nutze ich jetzt nen Hallsensor, der zwei mal pro umdrehung 
(zwei magnete) schaltet nach der ersten hälfte auf high und bei der 
zweiten hälfte auf low. Nun warte ich bis ich den ersten schaltpunkt 
hatte, dann warte ich eine umdrehung ab und messe die Zeit.

ich hab das bisher nur mit einem akkuschrauber als testmotor gemacht, da 
kam ich auf 856 1/min das ist denke ich ein recht realistischer Wert.

In wie weit die genauigkeit bleibt wenn der RPI noch mehr zu tun hat 
oder die drehzahlen höher werden weiß ich nicht, das muss ich später 
testen, notfalls muss da doch noch nen Atmega zwischen der das misst, 
der kann dann auch gleich die Motortemperatur messen, hab dann wenigsten 
kurze kabelwege zum sensor ^^

lg
Chris

von Michael L. (nightflyer88)


Angehängte Dateien:

Lesenswert?

Hier hätte ich etwas für Dich.

Ist ein Drehzahlsensor mit Tiny85 der als I2C Slave arbeitet. Das ganze 
könntest Du bequem am RPI anschliessen und einfach die Drehzahl per I2C 
abfragen.

Das ganze ist für Flugmodelle ausgelegt, um die Drehzahl eines 2-Blatt 
Propeller zu messen.
Der Sensor funktioniert mit einem Fototransistor, möchtest du 
stattdessen ein Hallsensor verwenden kannst du diesen einfach an PB4 des 
Tiny85 anschliessen, und somit die ganze Auswertelektronik mit LM358 
weglassen.

von Christian (Gast)


Lesenswert?

Danke, also meine Lösung hat wie befürchtet alles andere als gut 
geklappt, sobald ich nebenher andere Anwendungen auf dem RPI gestartet 
habe, wurden aus den ca 800 1/min azf einmal 12k oder mal 1-2 1/min. 
Somit leider unbrauchbar ^^

so ein Attiny ist ja schön klein, das ist da an der stelle gut machbar.
kann ich den Attiny mit einem STK200 kmpatiblem Programmierer für den 
Parallel Port programmieren?

lg
Chris

von Michael L. (nightflyer88)


Angehängte Dateien:

Lesenswert?

spielt keine rolle mit welchem Programmer du den Tiny flasht. Hier hast 
du noch das fertige Hex-file.


Hier ein beispiel in Bascom wie du die Drehzahl per i2c auslesen kannst:

I2cstart                           'Startkondition
I2cwbyte &H30                      'sende Slave Adresse
I2cwbyte &HA2                      'Subadresse Drehzahl
I2crepstart                        'Startkondition wiederholen
I2cwbyte &H31                      'sende Slave Adresse +1 für Lesen
I2crbyte H_adr , Ack               'lese Wert MSB
I2crbyte L_adr , Nack              'lese Wert LSB
I2cstop                            'Stoppkondition
Waitms 10


H_adr und L_adr musst du noch zu einem word zusammen fügen und 
anschliessende das ganze mit 10 multiplizieren, somit hast du den 
Drehzahlwert.

ACHTUNG -> Pullup Wiederstände (4.3k) nicht vergessen !! Sind im 
Schaltplan nicht eingezeichnet, da diese bei mir am Master hängen.

von MaWin (Gast)


Lesenswert?

Christian schrieb:
> sobald ich nebenher andere Anwendungen auf dem RPI gestartet
> habe, wurden aus den ca 800 1/min azf einmal 12k oder mal 1-2 1/min

Na ja nun, falsch programmiert, die Auswertung hängt nicht ausreichend 
am Interrupt eines Eingangs.

von A. B. (brewnera)


Lesenswert?

Ich hätte eine Frage zur obigen Schaltung von Michael:
Der LM358 arbeitet hier als Komparator, oder? Ich verstehe aber nicht, 
wie der in dem Fall funktionieren soll. Man hat doch immer das gleiche 
Potential an beiden Eingängen, oder? Und welche Rolle spielen hier die 
beiden Kondensatoren C1 und C2?

lg Andi

von Michael L. (nightflyer88)


Lesenswert?

Hallo Andi

Der LM358 ist dazu da, für die automatische Anpassung der Helligkeit. Im 
Detail kann ich dir das ganze auch nicht erklären, ich habe die 
Schaltung hier abgeschaut: 
http://www.sprut.de/electronic/pic/projekte/dehzahl/dreh.htm

von A. B. (brewnera)


Lesenswert?

Haha genau da hab ich die Schaltung auch zum ersten Mal gesehen ;-)
Derjenige hat sich die Schaltung aber auch nur wo ausgeborgt, und bei 
dieser "Quelle" steht leider auch keine Erklärung dabei.
Aber wird die Helligkeit nicht über die Vorwiderstände der Segmente 
eingestellt?

Könnte man auch einfach den internen Pull-up des ATtiny und den 
Fototransistor als Pull-down nutzen, um die Pulse für den µC Eingang zu 
bekommen?

von Karl H. (kbuchegg)


Lesenswert?

Das Prinzip müsste so sein

* Der OpAmp ist so verschaltet, dass er eine 'unendlich hohe' 
Verstärkung hat. Das heisst, sobald der + Eingang nur ein bischen 
positiver ist, als der - Eingang, geht der Ausgang auf High

* Wenn die beiden 40k Widerstände und die beiden Kondensatoren nicht 
wären, dann wären die beiden Eingänge tatsächlich immer auf gleichem 
Potential.

* Aber: die beiden Widerstände bilden ja zusammen mit den Kondensatoren 
RC-Glieder. D.h. eine Veränderung der Spannung am Spannungsteiler wird 
unterschiedlich schnell auf die beiden Eingänge vom OpAmp weitergegeben. 
Dadurch gibt es aber eine kurze Zeitspanne, in der die beiden Eingänge 
eben nicht gleiches Potential haben. Der OpAmp 'schaltet' seinen Ausgang 
entsprechend und man hat einen Puls der zur Auswertung geht.

von Karl H. (kbuchegg)


Lesenswert?

>  internen Pull-up des ATtiny und den Fototransistor als
> Pull-down nutzen, um die Pulse für den µC Eingang zu bekommen?

Könnte man.
Aber.
Du hast ja verschärfte Bedingungen am Modellflugplatz. Auf der einen 
Seite hast du keine gesicherte Lichtquelle hinter dem Propeller, die auf 
den Phototransistor leuchtet. Je nachdem, wie du den Drehzahlmesser 
hältst, misst du gegen das Gras, gegen einen Kollegen, gegen den Himmel, 
etc. etc. Jedesmal wird der Phototransistor anders ausgesteuert und je 
nachdem hast du dann am Spannungsteiler auch eine andere Grundspannung.

Das zweite ist, dass du nicht jede vom Phototranistsor festgestellte 
Helligkeitsänderung als 'Lichstrahl durch den Propeller unterbrochen' 
akzeptieren willst. Zieht vor der Sonne eine Wolke vorbei oder geht ein 
Kollege vorbei, dann zählt das nicht als Unterbrechung. D.h. du willst 
haben, dass die Heligkeitsänderung schon eine gewissen 
Mindest'Geschwindigkeit' haben muss. Läuft der Motor nicht und der 
Drehzahlmesser zeigt dir trotzdem 100U/min an, nur weil sich das Gras im 
Hintergrund im Wind bewegt und somit die Spannung am Spannungsteiler 
leicht schwankt, dann ist das nicht sehr zielführend.

Die Schaltung macht daher folgendes: Sie geht nicht auf die absolute 
Helligkeit, sondern auf Veränderungen in der Helligkeit. Und - diese 
Veränderungen müssen auch noch schnell genug sein. Nur dann generiert 
sie am Ausgang des OpAmps auch tatsächlich einen Puls.

: Bearbeitet durch User
von A. B. (brewnera)


Lesenswert?

Exzellente Erklärung, Dankeschön!

von A. B. (brewnera)


Lesenswert?

Ich hab nochmal drüber nachgedacht, und ganz klar ist es mir immer noch 
nicht.
Angenommen die beiden Eingänge hätten wirklich das gleiche Potential: 
was macht dann der opv? Der Ausgang kann ja nur V+ oder Gnd annehmen und 
würde hin- und herspringen, d.h. man hätte kein definiertes 
Ausgangssignal, oder?

von Karl H. (kbuchegg)


Lesenswert?

A. Brewner schrieb:
> Ich hab nochmal drüber nachgedacht, und ganz klar ist es mir immer noch
> nicht.
> Angenommen die beiden Eingänge hätten wirklich das gleiche Potential:
> was macht dann der opv? Der Ausgang kann ja nur V+ oder Gnd annehmen und
> würde hin- und herspringen

Genau das ist der Sinn der Sache

> d.h. man hätte kein definiertes
> Ausgangssignal, oder?

Doch. Die Information steckt darin, wie oft der Ausgang des OpAmp pro 
Sekunde hin und her springt. Jedes mal, wenn das Blatt der Luftschraube 
vor dem Sensor vorbeirauscht, geht der Ausgang des OpAmp einmal High und 
wieder Low.

: Bearbeitet durch User
von Jörg E. (jackfritt)


Lesenswert?

Wenn du einen Magneten an der Schwungscheibe anbringst achte auf das 
Auswuchten sons gib's bei 40k nen Lagerschaden ;)

von A-Freak (Gast)


Lesenswert?

Wenn du von Kubikzentimetern sprichst dann ist das doch ein 
Verbrennungsmotor?

Wie wäre es mit einem Mikrofon daß den Lärm aufnimmt?

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.