Hallo zusammen, ich beschäftige mich momentan mit Resolvern, das sind diese Dinge mit denen man die Lage eines Servomotors auslesen kann. Ich habe das Probehalber mal ausprobiert, habe an die Erregerspule 20kHz 3V gehängt und kann tatsächlich mit nem Oszilloskop die Sin und Cos-Werte an den anderen beiden Spulen erkennen. Mein Plan ist nun diese Werte mit nem Mikrocontroller in einen Winkel umzurechnen. Ich denke ich müsste die Werte der beiden Spulen verstärken und kann sie dann über die ADCs auslesen, dazu muss ich natürlich auf den Nulldurchgang des Erregersignals triggern. Aber wie erzeuge ich denn die 20kHz? Mit PWM komme ich mit viel Mühe und Not an 5-10KHz ran, indem ich eine Sinus-Tabelle hinterlege und OCR ständig korrigiere. Ich habe einiges über einen Max038 gelesen, der aber wohl nicht ganz leicht auszugleichen ist. Früher habe ich mal mit zwei OPs Frequenzen erzeugt, aber wie gut das tatsächlich war? Tatsächlich sind die 20Khz aus meinem Sinusgeneratur (den ich mal vor 10Jahren aus dem Müll gefischt habe) auch ziemlich schlecht, der Sinus ist irgendwie schief, daher ist die Null an den Resolverspulen nicht wirklich Null. Ich glaube um ein gutes Ausgangssignal kommt man nicht drumherum. Schön wäre es, wenn der Mikrocontroller, der die ADCs einließt auch die Frequenz erzeugen würde, da ich dann weiß, wann ich die ADCs auslesen muss. Hat jemand ne Idee? Schorsch
Hi, es gibt da was fertiges: http://www.analog.com/en/analog-to-digital-converters/synchroresolver-to-digital-converters/products/index.html Ähnliches hab ich auch schon von anderen gesehen, das kann aber schnell auch recht teuer werden, kommt auf Auflösung und Genauigkeit an. Grüße Flo
Da die Frequenz fest ist, kann man den µC ein 20 kHz Rechtecksignal erzeugen (z.B. PWM Ausgang) lassen, und das dann filtern, etwa mit einem aktiven Tiefpass (etwa 2-3 OPs je als Tiefpass Filter 2. Ordnung, Grenzfrequenz bei etwa 20-25 kHz). So dramatisch sollte ein leicht gestörtes Sinussignal nicht sein, denn die Oberwellen kann man bei der Auswertung raus filtern - sofern der µC genügend Rechenleistung hat - mit einem AVR wird es schwer, aber ein ARM sollte da keine Problem haben. Wichtiger sind da eine konstante Amplitude und feste Phasenbeziehung zum Sampeln des ADC. Eine moderne Alternative zum max038 wäre ein kleiner DDS Chip wie AD9833. Nur für den Resolver aber eher übertrieben.
Hi, Georg, > Aber wie erzeuge ich denn die 20kHz? Ein Colpitts-Oszillator ist mit L und C schnell aufgebaut. Wenn Du mit dem die Rotorwicklung speist, kannst Du an den Statorwicklungen die Resolverspannungen abnehmen. Mit einem Prozessor mit mehreren Capture-Eingängen sollten auch die Nulldurchgänge auswertbar sein. Aus der AVR-Serie kenne ich keinen, aber aus der ARM-Reihe. Ciao Wolfgang Horn
Ulrich H. schrieb: > Da die Frequenz fest ist, kann man den µC ein 20 kHz > Rechtecksignal erzeugen (z.B. PWM Ausgang) lassen, und > das dann filtern, etwa mit einem aktiven Tiefpass > (etwa 2-3 OPs je als Tiefpass Filter 2. Ordnung, > Grenzfrequenz bei etwa 20-25 kHz). Genau. Butterworth-Filter 5. Ordnung geht mit 2 OPV; bei f_g = 25kHz wird die Grundwelle (1. Harmonische, also 20kHz) um 5% gedämpft. Die 2. Harmonische fällt bei Tastgrad 0.5 sowieso aus; die 3. Harmonische liegt ca. 48dB unter der Grundwelle.
Hallo, PWM ist keine sehr gute Lösung, Rechteck noch weniger, und wegen der Filterung ist beides nicht so universell. Ich würde daher einen externen DAC verwenden und von einem der einfachen 8pinnigen Controller mit Sinusdaten versorgen lassen - im Audiobereich bekommt man mit 44 kHz Raten HiFi-Signale, und das schafft ein Controller lässig, der sonst nichts zu tun hat. Im Endeffekt sind das 2 8polige ICs, mit weniger dürfte das Problem kaum lösbar sein. Georg
Hi, Georg, > PWM ist keine sehr gute Lösung, Begründung? Wieso nicht? (RC-Tiefpass vorausgesetzt.) > Rechteck noch weniger Ja, ich würde den Frequenzgang eines Resolvers gerne aufnehmen, bevor ich mich zu den Oberwellen und deren Auswirkungen äußere. Ich verwende gern Switched Capacitor Filter, weil deren Filtereigenschaften mit der Taktfrequenz linear verändert werden können. Das LMF100 scheint mit 5 V auskommen zu können. Diese Filter lassen sich als Sinus-Oszillatoren schalten. Oder, wo es auf die Phase ankommt, auch als schalbandige Filter mit einer zweiten Frequenz anregen. Ein RC-Filter vor der Endstufe dämpft den Ripple - falls das nicht der Resolver bereits schon kann. So ein SCF erspart viel Rechenpower. Ciao Wolfgang Horn
Wolfgang Horn schrieb: >> PWM ist keine sehr gute Lösung, > Begründung? Wieso nicht? Weil der Filter (ohne gehts eh nicht) einerseits die gewünschte frequenz durchlassen soll, andrerseits die PWM-Frequenz nicht. Das kann bei 20 kHz Nutzfrequenz recht aufwendig werden, PWM ist eher für langsam veränderbare Werte wie bei einer Motorsteuerung geeignet. Ein 8poliger DAC mit Spannungsausgang und I2C-Interface ist viel problemloser. Es scheint aber hier Mehrheitsmeinung zu sein, dass man alle Probleme der Welt mit PWM lösen muss. DACs sind wohl völlig unbekannt. Georg
Georg eine PWM ist doch auch eine Digital-Analog Conversion... Gruß, Holm
Holm Tiffe schrieb: > Georg eine PWM ist doch auch eine Digital-Analog Conversion Ja, aber ein PWM-Signal springt zwischen 0 und VCC hin und her, ein DAC-Ausgang ist dagegen treppenförmig, also viiiel näher am Sinus und leichter zu filtern. Anscheinend ist die Funktion eines DAC wirklich völlig unbekannt. Georg
Hier eine App Note von TI. http://www.ti.com/lit/an/spra605/spra605.pdf Die erzeugen auch nur ein Rechteck das dann Tiefpass gefiltert wird.
In der Ti-Note wird schon PWM als eine Art DAC zur Nachbildung den Sinus genutzt - sogar gleich 2 Kanäle. Etwas Filter braucht man da auch. Normal sollten ein paar Harmonische nicht groß weiter stören, wenn man die Auswertung Frequenzselektiv macht, also durch Multiplikation mit sin(wt+Phi). Die harmonischen lassen sich so sehr gut unterdrücken. Wenn man mutig ist könnte man vermutlich sogar mit dem Rechteck auf den Resolver - ein einfacher Tiefpassfilter ist aber kein großer Aufwand, zumal der nicht besonders exakt sein muss: Hauptsache die Grundfrequenz kommt gut durch und die 3 fache und höher werden einigermaßen unterdrückt. Wichtiger als wenig harmonische ist ein stabile Amplitude - deshalb gerade kein Bandpass hoher Güte. Etwas Dämpfung der harmonischen kann man ggf. auch auf der Empfängerseite noch einbauen - einen Anti-Aliasing-filter sollte man da ja sowieso haben. Der darf auch bei 200 kHz Samplingrate ruhig auch bei 25 kHz liegen (und damit relativ einfach ausfallen), wenn einen nur die 20 kHz interessieren. Mit zwei 20 kHz Rechtecksignalen kann auch durch einfache Addition dafür sorgen, das auch die 3 fache Frequenz nicht mehr Auftaucht - die erste stärker Störfrequenz wäre dann erst bei 100 kHz.
Hallo, die Ti-Note finde ich wirklich schön. Den AD2S1210 hatte ich auch schon gesehen, aber ich sträube mich noch 18EUR für einen IC auszugeben.... an einen DAC habe ich auch schon gedacht, habe sogar noch einige MCP4912 hier, der ließe sich in 4.5µs setzen, da kann man schon gute 1000 mal den Wert verändern ehe die nächste Periode anfängt. das würde klappen. Lasst uns mal über Sampling-Frequenzen reden. Lassen wir oversampling erstmal beiseite....: Der Motor, den ich hier habe der macht 6000U/min. Das ist 100U/s. Für hohen Geschwindigkeiten reicht es mir vermutlich 4mal pro Umdrehung die Position festzustellen. Ich muss also 400mal pro Sekunden Sampeln. Das sollte eingentlich kein Problem sein. Ich würde jetzt erstmal meinen Lieblingscontroller, der atmega8 nehmen und den bei 1kHz sampeln lassen. Der wird sicherlich niemals exakt das Maximum treffen. Hier würde ich also einen Integrator dazwischensetzen (Der müsste ja nur so bestimmt sein, dass bei maximaler Drehzahl wieder null ist :-)). Auf der Sendeseite tendiere ich momenten zum Butterworthfilter, der durch ein PWM Rechteck-Signal aus dem mega8 gespeist wird. Die Frage ist, was man am Ende haben will... ich will zum Schluss einen Regelkreis in den ich meinen FU für den Motor anschließen kann. Hier kann ich auch nur mit einigen kHz arbeiten, also macht viel mehr nicht wirklich sinn, es sei denn, man will die Signalqualität sehr viel verbessern. Was denkt ihr? Schorsch
Georg T. schrieb: > Aber wie erzeuge ich denn die 20kHz? M.E. sollte man da analog denken. Ein Wienbrückengenerator mit einem OPV sollte da einen recht klirrarmen Sinus liefern können. Vielleicht reicht sogar ein einfacher Phasenschieberoszillator. Gruss Harald
sin -------- 90 Grad Phasenschieber--------+ | | +---+ Addierer | + |----Comparator ----Stopsignal +---+ | | cos ---------------------------------------+ 20Khz Rechteck -------Tiefpass----------------+------------Resolver Speisung | +---Comparator --- Startsignal Man kann das ganze auch ohne ADC machen. Man addiert das sin Signal um 90 Grad Phasenverschoben zum cos Signal Als resultat ergibt das ein Signal das nur die Phase zum Referenzsignal aendert aber nicht seine Amplitude. Mit dem Referenzsignal startet man einen Timer im Controller und mit anderen Signal stopp man ihm. Der Zählerstand ist dann abhängig von der Winkelstellung.
Ulrich H. schrieb: > In der Ti-Note wird schon PWM als eine Art DAC zur > Nachbildung den Sinus genutzt - sogar gleich 2 Kanäle. Ja... ein 1.6bit-DAC (3 Zustände)... Ein Kanal steuert in Positive, der andere ins Negative. Neutral ist GND. > Etwas Filter braucht man da auch. Ja. [...] > Mit zwei 20 kHz Rechtecksignalen kann auch durch einfache > Addition dafür sorgen, das auch die 3 fache Frequenz nicht > mehr Auftaucht - die erste stärker Störfrequenz wäre dann > erst bei 100 kHz. Genau. Ich weiss nicht, wer das Prinzip der Sinuserzeugung mit Ringzähler und gewichteten Widerständen noch kennt. Man kann das bis auf einen dreistufigen Ringzähler (sechs Zustände) reduzieren und erhält dann folgendes Signal [Festbreitenschrift verwenden]:
1 | |
2 | ___ ___ |
3 | _I . I_ . _I . I_ . _ |
4 | I___I I___I |
5 | |
6 | 0 + + 0 - - 0 + + 0 - - |
Der Witz daran ist folgender: Die geradzahligen Harmonischen (also 2./4./6.) fehlen sowieso, die 3.Harmonische wird, wie Ulrich schon erwähnt hat, durch die spezielle Impulsfolge zu Null gemacht. Die Grundwelle (1. Harmonische) will man haben; die 2./3./4. Harmonische fehlen ganz (!), die niedrigste Harmonische ist also die 5. mit -14dB (bezogen auf die Grundwelle). Aufgrund des recht großen spektalen "Loches" (20kHz zu 100kHz in unserem Anwendungsfall) ist es einfach, die Harmonischen ausreichend zu dämpfen; auch die Frequenz kann in gewissen Grenzen (+-20%) noch variiert werden.
Harald Wilhelms schrieb: > Georg T. schrieb: > >> Aber wie erzeuge ich denn die 20kHz? > > M.E. sollte man da analog denken. Hmmjaaahh... > Ein Wienbrückengenerator mit einem OPV sollte da einen > recht klirrarmen Sinus liefern können. Vielleicht reicht > sogar ein einfacher Phasenschieberoszillator. Das stimmt im Prinzip. In der Praxis gibt es zahlreiche Ärgernisse mit der Konstanz sowohl der Amplitude als auch der Frequenz und der spektralen Reinheit. Von Drift, Alterung usw. nicht zu reden. Nachträgliches Variieren der Frequenz ist auch ein Problem. Mir ist ein vernünftig dimensioniertes Filter analog genug; die Impulsfolge an dessen Eingang kann von mir aus gern digital erzeugt sein... :)
Wenn das ganze mit einem Mega8 Ausgewertet werden soll, oder für so etwas wie eine Motorregelung ist das eine absolute low-end Lösung. Schon der ADC im AVR ist recht langsam und kann keine 2 Kanäle gleichzeitig abtasten. Bei 20 kHz kommt man da sowieso nur auf etwa 2 Abtastpunkte je Periode - wenn es gut geht Min und Max -> ein guter Sinus ist da dann schon fast nicht gewünscht, sondern eher so etwas wie ein Rechteck mit verrundeten Flanken, so dass man unabhängig vom genauen Timing die Extremwerte bekommt. Das mit dem Messen der 2 Kanäle ist dann wohl eine Frage von nacheinander: etwa erst 4 Werte (= 2 Periode) von Kanal A, dann 4 Werte von Kanal B und dann wieder Kanal A. Durch mitteln der Werte von Kanal A hat man dann so etwas wie eine Schätzung für den Zeitpunkt der Messung von Kanal B. Wirklich gut ist aber was anderes. Etwas besser sähe es ggf. schon mit einem Xmega aus. Immerhin spart man sich mit nur 2 Punkten je Periode die kompliziertere Auswertung, die den µC sonst auch eher überfordern würde. Für eine einfache Motorregelung (DC Motor) mit eher hoher Geschwindigkeit. ist der Resolver aber auch nicht unbedingt die richtige Wahl. Der Resolver wäre eher etwas wenn es um vielleicht 1-10 U/min geht und man eine hohe Winkelauflösung braucht. Der Passende µC wäre dann wohl auch eher ein Cortex M3, halt so dass man mit wenigstens 100 kHz den AD abtasten kann - am besten auch noch 2 Kanäle echt gleichzeitig. Der AVR wäre größtenteils mit der Auswertung des Resolvers beschäftigt, bzw. man müsste da schon Abstriche machen, damit der µC mitkommt.
Hallo Ulrich et al, Ja genau, ich möchte eine low-end Lösung! :-) Warum viel mit oversampling rummachen, wenn eine ganz einfache Lösung auch tut, denke ich - ich möchte es wenigstens probieren, ehe ich 18EUR für einen IC ausgebe Ich glaube eins unserer Missverständnisse ist, dass ich nicht versuchen möchte die 20KHz komplett abzutasten. Ich gehe nur mit 20Khz in den Resolver, da ich dann eine ordentliche Amplitude herausbekomme, wenn weniger geht, nehm ich auch weniger. Ich denke wirklich, wie schon oben beschrieben, dass eine Ermittlung der Lage etwa 1x pro Millisekunde ausreicht. Um zu umgehen, dass man die Amplitude an der richtigen Stelle misst, würde ich das Sin und Cos-Signal ja über einen Integrator laufen lassen. Ich habe soetwas schonmal für ein "Schallpegelmessgerät" gebastelt. Du ziehst den Sinus lang. Klar man könnte hier wieder mit TrueRMS ICs anfangen - dann ist man auch ganz schnell wieder bei 18EUR :p Den Vorschlag von Possetitjel mit den drei Zuständen finde ich auch gar nicht schlecht. Da kann ich ja die zwei OCR Ausgänge des Timer1 vom mega8 nehmen und entsprechend versetzt zueinander laufen lassen. Den Rest müsste eine einfache Inverschaltung erledigen. Ich habe gestern noch versucht einen Butterworthfilter zusammenzulöten aber irgendwie schein ich mich verrechnet zu haben :-) Schorsch
Ulrich H. schrieb: > > Für eine einfache Motorregelung (DC Motor) mit eher hoher > Geschwindigkeit. ist der Resolver aber auch nicht unbedingt die richtige > Wahl. Sorry nochwas, Der Motor ist ein 3-phasen Servomotor (AC). DC kommt nicht in Frage ebenso wenig etwas anderes als ein Resolver, denn ich habe beides schon :-) war ein Geschenk. Mit den Motoren will die Schrittmotoren an meiner CNC Fräse ersetzen. Schorsch
Probleme wird dir wie von Ulrich gesagt das NICHT simultane Sampeln der Signale machen, glaub ihm und mir. Für die Filterung tut es doch auch einfach die richtige Abtastrate und ein Moving Average. Dann kannst du schon ein Notch auf der Trägerfrequenz und deren vielfachen erzeugen. Ist auch leicht umzusetzen.
Die beste Qualität gibt es natürlich mit einem DDS-Generator, aber das braucht man hier ja nicht, die Frequenz muß ja nicht auf die xte. Stelle genau sein. Insofern einfach einen analogen Oszillator mit Glühlampe zur Stabilisierung aufbauen (Hewlett-Packard Design). Ich glaub die Basis ist der Colpitts? Die Schaltung findet man praktisch in vielen OPV-Datenblättern, z.B. zum LT1007 ist glaube ich eine Referenzimplementation im Datenblatt drinnen. Oder einfach nach Hewlett Packard Oszillator suchen. Der ist dann relativ frequenzgenau und sehr störungsarm (<0,1% THD, >60 dB). Das reicht, daß kein Mensch das am Oszi von einem idealen Sinus unterscheiden kann. Und die Bauteile sind recht günstig.
Einen Notch auf der Trägerfrequenz will man gerade nicht. Mit der Synchronen Abtastung (also immer feste Zahl an Punkten pro Periode) haben die Oberwellen aber auch einen festen Beitrag und tragen ggf. mit zum Signal bei - das muss dabei nicht mal stören, da es mit der Grundwelle im festen Verhältnis steht.
Hallo, vor Jahren habe ich einen interessanten Ansatz zur Resolverauswertung gesehen. Wenn ich mich recht entsinne, war das im Buch "Digitale Regelung elektrischer Antriebe" von Rolf Schönfeld (vermutlich die 2. Auflage, denn in der 1. finde ich es nicht mehr). Er dreht das Prinzip um und speist die beiden Ausgangswicklungen mit einem Quadratursignal, also Sinus und Cosiuns. An der eigentlichen Erregerwicklung kann man dann einen phasenverschobenen Sinus mit (nahezu) konstanter Amplitude abgreifen. Die Erregersignale kann man recht einfach über zwei Compare-Einheiten erzeugen und die Phasenverschiebung über die zugehörige Capture Unit automatisch erfassen. Damit läuft die Resolverauswertung fast ohne Zutun der MCU. Ich habe das mal spaßeshalber auf einem AVR (USB162) implementiert und mit dem Luft-CDC-Code kombiniert. Grüßle, Volker.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.