Hallo Zusammen,
ich möchte mir eine kleine Schaltung zur sensorlosen Drehzahlmessung für
Brushless Motoren bauene, wo ich über eine Phase das Signal abgreife.
Ich kenne so kleine Tools welche es im Modellbaushop zu kaufen gibt.
Da ich später diese Informationen bzgl Drehzahl mit dem µC (Arduino )
auswerten man, brauche ich halt eine maßgeschneiderte Lösung.
An einer Motorphase liegt ja ein sinusähnliches ( oder ein tatsächliches
Sinussignal ? ) Signal an.
Wie weiß ich dann, dass der Motor eine volle Umdrehung gemacht hat? Wie
viele Sinusperioden müsste ich abwarten?
Wie steht die Phasenspannung ( peak -peak ) eigentlich zur Lipospannung
( zB im Betrieb mit 3S )
Als Auswerteschaltung habe ich mir einen Zero Crossing Converter
vorgestellt.
http://sound.westhost.com/appnotes/an005-f3.gif
Wäre dieser Schaltungstyp mit seiner Dimensionierung für meinen
Anwendungsfall geeignet?
lg
Dieter
Das ( meist "sinusähnliche" ) Signal liegt prinzipiell zwischen jeweils
2 Phasen an.
I.d.R. wird das mit einer 3~Brücke aus einer Gleichspannung durch
"Taktung" gewonnen, dort gibt es insoweit die Möglichkeit, gegen die
dortige Leistungs-Masse zu messen.
Ein kompletter "Sinus" bedeutet dann je nach Polpaarzahl des Motors eben
1 - 1/2 - 1/3 usw. Umdrehung.
Die Auswerteschaltung muss natürlich mit den real anstehenden Spannungen
zurechtkommen - den OP "einfach so" direkt an die Motorwicklung zu
legen, ist nicht möglich.
Guckst du hier:
http://www.mikrocontroller.net/articles/Brushless-Controller_f%C3%BCr_Modellbaumotoren#Oszillogramme
Ich würde einfach die Low-Zeit einer Phase messen. Liegt sie über z.B.
100 Mikrosekunden, war das eine ganze Umdrehung des Magnetfeldes. Dann
natürlich noch die Anzahl Wicklungen berücksichtigen.
Ist die Zeit 1/PWM-Frequenz länger als die Low-Zeit bei Vollgas,
funktioniert das leider nicht so. Ich denke aber eher weniger dass das
der Fall ist.
mfg
Hallo
also lt den Oszillogrammen liegt ja auf jeder Phase eine sinusähnliches
Signal an wenn ich gegen Masse messe.
Entspricht die Amplitude dieser Phase der Zellenspannung des
angeschlossenen Lipos zb 4S?
Ich verstehe aber nicht, wie ich mit der Dauer der Low Zeit einer Phase
auf die Umdrehungen kommen.
Weiters verstehe ich den Bezug von 100Mikrosekunden nicht?
Könnt ihr mir da bitte noch helfen.
mfg
Dieter Sch schrieb:> also lt den Oszillogrammen liegt ja auf jeder Phase eine sinusähnliches> Signal an wenn ich gegen Masse messe.
Jein. Also beim zweiten Oszillogramm (Vollgas) könnte man das sagen.
Aber natürlich ohne Negative Spannung, alles oberhalb von GND. Beim
ersten Oszillogramm (nicht Vollgas, vielleicht 30% oder so) hat das mit
einem Sinus nicht viel zu tun finde ich. Denn da wirkt die PWM noch mit,
bei Vollgas ist kein PWM mehr vorhanden, da 100%.
> Entspricht die Amplitude dieser Phase der Zellenspannung des> angeschlossenen Lipos zb 4S?
Ja.
> Ich verstehe aber nicht, wie ich mit der Dauer der Low Zeit einer Phase> auf die Umdrehungen kommen.
Naja, wenn du das erste Bild betrachtest, solltest du ja erkennen dass
es kurze Low-Zeiten (während der PWM) und lange Low-Zeiten gibt. Pro
Umdrehung (elektrisch, nicht mechanisch) ist jede Phase genau einmal auf
Dauer-Low. Wenn du also auf diese lange Low-Zeit triggern kannst, hast
du die elektrische Drehfrequenz.
> Weiters verstehe ich den Bezug von 100Mikrosekunden nicht?
Damit du nun auf diese längere Low-Zeit triggern kannst, musst du sie
von den kurzen Low-Zeiten unterscheiden können. Du brauchst also ein
Zeitwert, bei dem du die Grenze setzt. Ist eine gemessene Low-Zeit
kleiner also diese Grenze, war es ein kurzes Low, also PWM. Ist die Zeit
grösser als die Grenze, war es ein langes Low und du zählst einen
Counter eins hoch.
Jetzt musst du nur noch die Grenze herausfinden. Dazu musst du wissen
wie lange ein PWM-Low ist (ist ja immer gleich lang), und du solltest
wissen wie kurz das kürzestmögliche Dauer-Low ist. Das wäre ja bei
Vollgas.
Auf den Oszi-Bildern ist die PWM glaube ich um die 20kHz, also 50
Mikrosekunden, und das kürzestmögliche Dauer-Low ca. 250 Mikrosekunden.
Jetzt nimmst du einfach die Mitte davon, um möglichst störsicher zu
sein. Also 150 Mikrosekunden.
Natürlich musst du diese Parameter auf deinen Motor anpassen, dazu wäre
ein Oszilloskop nicht schlecht. Ausserdem bin ich mir nicht sicher ob
bei Reglern ohne aktiven Freilauf ein PWM-Low überhaupt richtig messbar
ist.
> Könnt ihr mir da bitte noch helfen.
Ich habs versucht. Verstehst du es jetzt?
mfg
Nachtrag:
Man könnte sicher auch mit Analogtechnik quasi die PWM einfach
herausfiltern, damit direkt ein Rechtecksignal mit der richtigen
Frequenz dabei rauskommt. Bin aber in Analogtechnik überhaupt nicht fit,
deshalb ein digitaler, bzw. softwaretechnischer Lösungsvorschlag von
mir.
> An einer Motorphase liegt ja ein sinusähnliches ( oder ein> tatsächliches Sinussignal ? ) Signal an.
Es gibt unterschiedliche Motoren.
Bei sensorbehafteten würde ein Hallsensorausgang direkt die benötigte
Informatin liefern, aber du hast sensorlose.
Bei Rechteck/Trapez angesteuerten Motoren, würde die Ausgangsspannung
der Motorelektronik einer Phase direkt das benötigte Signal liefern.
Wenn die Motorelektronik jedoch eine Sinuskommutierung versucht durch
PWM, besteht die Möglicheit der Falschmessung.
Man kann den Motorstrom messen, aber im Moment des Nulldurchgangs führt
der durch seinen Ripple den die PWM ergibt eventuell zu Fehlmessungen.
Will man trotzdem messen, sollte man eine deutliche Hysterese einbauen.
Man kann auch die Ausgangsspannung der Elektronik RC filtern und damit
das PWM Signal unterdrücken, damit nur die viel niedrigere Frequenz der
Kommutuerung übrig bleibt. Das ist wohl einfacher zu bewerkstelligen.
MaWin schrieb:> Man kann auch die Ausgangsspannung der Elektronik RC filtern und damit> das PWM Signal unterdrücken, damit nur die viel niedrigere Frequenz der> Kommutuerung übrig bleibt. Das ist wohl einfacher zu bewerkstelligen.
Welches Ausgangsignal meinst du? Die Phasenspannung die ich gegen Masse
messe?
Würde dass mit einem Tiefpass gehen damit die PWM rausgefiltert wird?
Was bleibt dann übrig - eine sinusähnlicher Spannungsverlauf?
Wenn ja , könnte ich dann mit einem Zero Crossing Converter von Sinus
auf Rechteck umwandeln und somit die Frequenz ermitteln. Anschließend
einen Spannungsteiler nachschalten, damit ich die Spannung am µC
Verarbeiten kann.
Was mich aber noch stutzig macht ist.... wenn nun eine Periodendauer vom
Signal ( siehe Oszillogramme ) vollendet ist, wie schließe ich dann auf
die Frequenz. Welcher Signalverlauf entspricht nun einer vollen
mechanischen Umdrehung des Motors und wie spielt dabei die Polzahl mit?
> Wenn ja , könnte ich dann mit einem Zero Crossing Converter von Sinus> auf Rechteck umwandeln und somit die Frequenz ermitteln. Anschließend> einen Spannungsteiler nachschalten, damit ich die Spannung am µC> Verarbeiten kann.
Mensch, warum denn so kompliziert?
Mit der Softwarelösung brauchst du 2 Widerstände und ein paar Zeilen
Code.
Mit einem Tiefpass brauchst du 2 Widerstände, ein Kondensator und ein
paar Zeilen Code weniger als bei der reinen Softwarelösung.
Alles andere wäre doch Platz-, Geld- und Zeitverschwendung.
> Was mich aber noch stutzig macht ist.... wenn nun eine Periodendauer vom> Signal ( siehe Oszillogramme ) vollendet ist, wie schließe ich dann auf> die Frequenz. Welcher Signalverlauf entspricht nun einer vollen> mechanischen Umdrehung des Motors und wie spielt dabei die Polzahl mit?
Liest du deine Antworten nicht?
Beitrag "Re: Brushless Motor Drehzahlmessung - Signalabgriff auf einer Phase"
Aber nagut, hier die Lösungsformel (n=Drehzahl, f=Frequenz,
p=Polpaarzahl):
n = f/p
so einfach ist das...
Ach ja, wenn du auch am Regler rumlöten magst, kannst du auch gleich das
5V-Rechtecksignal eines Gate-Treiber-Einganges abzapfen. Unter Umständen
muss mann dann aber die PWM trotzdem noch rausfiltern, kommt auf den
Regler an.
Nachtrag:
Wenn du die Drehzahl gerne in U/min hättest, lautet die Formel:
n = 60*f/p
Nachtrag 2:
Und wenn es nicht abartig genau sein soll, kannst du auch gleich direkt
die Low-Zeit messen. dann ist f = 1/(3*T) und somit n = 60/(3*T*p).
Natürlich müssen die PWM-Lows trotzdem hereusgefiltert werden, ein
einfaches "if T > 150 Miktosekunden" reicht da aber...
Urban B. schrieb:> Mensch, warum denn so kompliziert?> Mit der Softwarelösung brauchst du 2 Widerstände und ein paar Zeilen> Code.
ja ok Softwarelösung ist das eine.
Von mir aus werde ich diese auch bevorzugen.
Nur würde die Hardwarelösung nach meinem Vorstellungen auch
funktionieren?
Wenn ich die Low Zeiten nun mit dem Arduino messe, wie genau ist da die
Function micros(). Liefert diese vernünftige Zeitwerte oder muss ich mit
dem internen Hardwaretimer arbeiten?
Dieter Sch schrieb:> Nur würde die Hardwarelösung nach meinem Vorstellungen auch> funktionieren?
Keine Ahnung, ich weiss nicht was für ein "Zero Crossing Converter" du
meinst. Dein Link im ersten Beitrag funktioniert nicht.
Mit einem Tiefpass und einem einfachen Schmitt Trigger sollte es aber ja
eigentlich schon funktionieren. Oder sogar ohne Schmitt-Trigger. Viele
Wege führen nach Rom...
> Wenn ich die Low Zeiten nun mit dem Arduino messe, wie genau ist da die> Function micros(). Liefert diese vernünftige Zeitwerte oder muss ich mit> dem internen Hardwaretimer arbeiten?
Ich weiss nicht was für eine Funktion micros() du meinst, und ich kenne
das Arduino Board nicht näher. Ich vermute mal, das ist nur ein while
mit asm(NOP) drin, das ist zu ungenau. Du musst schon ein Timer
benutzen. Bei den AVRs gibts für Zeitmessungen extra den Eingang "ICP",
du solltest unbedingt diesen Pin benutzen wenn das möglich ist. Das
macht die Software dann schon ziemlich einfach und auch genau. Mehr dazu
findest du unter "Input Capture", z.B. hier:
http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial/Die_Timer_und_Z%C3%A4hler_des_AVR#Einfangen_eines_Eingangssignals_.28Input_Capturing.29
Hallo,
so nun möchte ich an meiner Drehzahlmessung für meinen Motorprüfstand
für Brushlessmotore weiterarbeiten.
Heute habe ich mal mit dem Oszi folgende Signale abgegriffen.
1) Phase vom Motor auf GND gemessen
2) Phase zu Phase gemessen
Für die Berechnung der Drehzahl wäre nun welches Signal geeignet?
Bei 1) hätte ich ein Rechtecksignal, nur was sagt es aus?
Gruß
Dieter
Deine Steuerung nutzt ja eine Rückmeldung des Motors, entweder per
Hallsensoren oder ein aus der EMK gewonnenes Signal, um diesen
Anzusteuern.
Nimm einfach eines dieser Signale. Am einfachsten wäre das natürlich bei
Motoren mit Hallsensoren sonst must du das aufbereitete Signal auf der
Platine abgreifen. Nun musst Du nur noch die Anzahl der Magnete kennen
und damit den Teiler für eine Umdrehung, oder Du zählst die Impulse pro
Umdrehung aus.
Also am Brushlessregler ist ein ganz normaler Modellbau Brushless Motor
angeschlossen, welcher keinen Hallsensor hat.
Du sprichst nun eh vom linken Signalbild, welches ich zwischen Phase und
Masse gemessen habe.
Ist hier das Rechtecksignal notwendig für die weitere Signalverarbeite
oder???
Die Anz der Magnete ist bekannt, müsste diese nur abzählen wenn ich den
Motor wieder bei der Hand habe.
Die Oszi Bilder bringen in diesen Fall gar nichts.
Da keine Hallsensoren verwendet werden musst Du die Steuersignale auf
der Steuerplatine abgreifen. Also geanau eines der aufbereiteten Signale
das auch an den steuernden Controller geleitet wird um die Rotorposition
zu melden (Sozusagen der virtuelle Sensor) abgreifen. Die ganze
Schaltung zur Gewinnung der Steuerimpulse noch ein viertes mal
aufzubauen macht ja wenig Sinn.
?
jetzt bin ich verwirrt.
Es gibt ja die Möglichkeit, dass man die Drehzahl von Brushlessmotoren
an einer Phase messen kann, ohne dass man sich in die bestehende
Hardware ( gekaufte Modellbau Regler ) reinhackt!
Letztendlich kann man sich solche Drehzahlmesser auch kaufen.
Ich will das ganze halt nur selber bauen.
Bin davon ausgegangen das Du die Technik die hinter der Motoransteuerung
besser kennst bzw selbst aufgebaut hast (Motorprüfstand).
Natürlich kann man, wie gesagt, die Steuerimpulsgenerierung, wie in der
Steuerung verwendet, extra aufbauen um ein mobiles Gerät zu haben. Da
ich nur Motoren mit Sensoren benutze kann ich zur konkreten Schaltung
wenig sagen.
Es ist einfacher einen Reflektor an den Motor zu kleben (beim
Außenläufer ja besonders einfach) und mit einer Reflexlichtschranke
abzutasten, da ist man auch unabhängig vom Motrotyp und muss nich immer
erst die Pulse pro Umdrehung auszählen.
Wenn das Teil einen Propeller hat ist die Sache mit der Lichtschranke
noch einfacher da man dann den Reflektor nicht braucht.
Nein den Regler ( deine genannte Steuerungselektronik ) habe ich nicht
selbst gebaut, da der Motorprüfstand universal einsetzbar sein soll, für
viel verschiedene Modellmotoren und Reglertypen.
zB soll er für kleine Motoren mit schwachen Regler genauso verwendbar
sein, wie für starke Motoren mit den entsprechenden leistungstarken
Reglern...
so nun bitte wieder zurück zu meiner Frage.
Ich will ausschließlich die Drehzahl an einer Phase messen, indem ich
mich mit einer Messleitung reinhänge.
Es soll nichts aufgeklebt werden oder mit anderen Sensoren gemessen
werden.
Die Informationen welche ich von einer Phase bekommen, sollen auf die
Drehzahl zurückgerechnet werden.
Dass es geht zeigen ja die Threads weiter oben!
Mit einem Trigger und Tiefpass könnte es gehen. Die Sannung an den
Wicklungen ist ja eine PWM (das ist in dem Oszibild nicht gut zu sehen),
die muss der Tiefpass unterdrücken so das nur noch die gemittelte
Phasenspannung übrig bleibt. Diese kann dann durch einen Trigger in ein
Rechteckimpuls gewandelt werden. Die Verarbeitung und Anzeige macht dann
sinvollerweise ein kleiner Controller wobei es natürlich auch 'zu Fuss'
mit Logicschaltungen oder Analog mit Zeigerinstrument zu machen geht.
Da verschiedene Motoren verwendet werden muss halt immer die Impulszahl
pro Umdrehung ermittelt werden und in die Umrechnung zu U/min
eingbezogen werden.
Also ich habe den Link vom Peter mal durchgelesen, werde aber nicht
wirklich schlau daraus.
:-(
Zurück zu Steffen.
Du sprichst eh von meinen aufgenommenen Oszibilder, welches an einer
Motorphase anliegt.
Mit einem RC Tiefpass filtere ich nun die PWM raus, sodass ein
sinusähnliches Signal übrig bleibt.
Dann zB mit einem Schmitttrigger wandle ich es in ein Rechteck um + ggf
Spannungsteiler nachschalten damit das Spannungsniveu für den µC
verarbeitbar ist.
Würde dass so gehen?
Bzgl Tiefpass, wie lege ich die Grenzfrequenz aus, ab wann alles
rausgefiltert wird?
> Also ich habe den Link vom Peter mal durchgelesen, werde aber nicht> wirklich schlau daraus.
In einer 3/4 Stunde ?! Und dann wunderst du dich das du nichts verstehst
? rolleyes PISA laesst gruessen.
Steffen ist ja wirklich geduldig, aber es bringt doch ueberhaupt nichts,
wenn du nicht mal die Grundlagen lernen willst, bzw. versuchst zu
verstehen.
Nur mal nebenbei. Ist dir eigentlich aufgefallen, dass genau dein
Oszibild dort abgebildet ist und dies auch noch ausfuehrlich erklaert ?
Ne, oder ?
Hallo Forum,
so ich habe es nun geschafft. :-)
Ich habe nun eine Schaltung entwickelt, die aus dem Signal einer
Motorphase ein verarbeitungsfähiges Rechtecksignal für einen µController
bereitstellt.
Eine beliebige Motorphase verbinde ich mit meiner Auswerteschaltung,
welche über einen Spannungsteiler die Phasenspannung halbiert, weiters
dann über einen RC Tiefpass filtert.
Die Grenzfrequenz des Tiefpassfilters wurde wie folgt errechnet:
Annahme: max Motordrehzahl 15.000upm ( für Prüfstand ) n = 60*f/p
n Drehzahl
f Frequenz
p Polzahl
Ermittlung der max. Kommutationsfrequenz zur Abgrenzung des Tiefpasses.
In meinem Fall: p = 6 ; n = 15000upm
fc = 1500Hz
Schaue ich mir nach dem Tiefpassfilter das Signal mit dem Oszi an, so
sehe ich eine sinusähnliche Form, mit einem Gleichspannungsanteil von
etwa 50% der Phasenspannung ( vom Spannungsteiler )
Die Amplitude beträgt 1V.
Mit Hilfe einer Komperator OPV Schaltung, lasse ich nun den OpAmp bei
einem definierbaren Schwellwert ( über Poti ) durchschalten, sodass ich
dann am Ausgang ein Rechteck messe.
Da die Versorgungspannung des OpAmp 8V beträgt, beschränke ich das
Rechtecksignal mittels Z Diode auf 4,7V.
Gem der angehängten Bilder, erhalte ich dann letztendlich folgende
Rechtecksignale, welche sich dann relativ leicht mit ein paar
Programmzeilen mit einem µController auswerten lassen.
Messungen mittels IR Drehzahlsensor und händisches retourrechnen vom
Oszillogramm ergaben korrekte Messwerte!
Softwaretechnisch werde ich dem µC die LOW Signalwerte
1
PulseIn(PortNummer,LOW);
ermitteln lassen, da ich bei niederen Frequenzen ein toggeln des High
Impulses gem Oszillogramm feststellen konnte.
Ich hoffe dass nun mein von oben bis unten durchgezogener Thread auch
für die Nachwelt ein gutes Nachschlagewerk bietet, und so manch einer
hier Rat und Hilfe findet.
Weiters bedanke ich mich bei allen, die mir mit Rat und Tat zur Seite
gestanden haben und auch bei jenem, der durch "rolleyes" einpaar lustige
Zeilen hier verloren hat. :-P
In diesem Sinne, danke und bis bald.
gruß
Dieter
ar schrieb:> Die Z-Diode 4V7 hat keinen Vorwiderstand...
Ach ja, ein 1k wird sich sicherlich noch finden.
Es sollte sich aber auch noch ein Widerstand von 47-100k finden, der vom
Ausgang des Komparators IC6 auf den + Eingang gelegt wird. Damit bekommt
er eine kleine Hysterese, die das Ausgangssignal stabiler macht (keine
Spikes durch Rauschen).
Willi schrieb:> ar schrieb:>> Die Z-Diode 4V7 hat keinen Vorwiderstand...>> Ach ja, ein 1k wird sich sicherlich noch finden.
hmm ich habe einen 330Ohm Widerstand errechnet.
Ausgangsspannung OPV ist 8V.
Zenerspannung 4.7
=> Izmax = Ptot/Uz = 0,5W/4,7V=0,106A
Izmin = 10% von Izmax = 0,01A
Rv = Uv/Izmin = (8-4,7)/0,01 = 330Ohm
liege ich falsch.
Bzgl der Mitkopplung hätte ich dann einen frei wählbaren Ein und
Abschaltpunkt oder? (siehe Sinussignal von oberen Bild )
Hi,
habe den Thread zu spät gesehen.
Aber eine fertige Lösung bestehend aus Tiefpass mit anschliessendem
Komperator gibt es seit einigen Jahren von SM-Modellbau (Unilog
Drehzahlsensor)für ca. 15€
Gruß Ingo
Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.
Wichtige Regeln - erst lesen, dann posten!
Groß- und Kleinschreibung verwenden
Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang