Forum: Analoge Elektronik und Schaltungstechnik Wie erzeuge ich ein gutes 20kHz Signal für einen Resolver


von Georg T. (microschorsch)


Lesenswert?

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

von Florian R. (Firma: TU Wien) (frist)


Lesenswert?

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

von Ulrich H. (lurchi)


Lesenswert?

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.

von Wolfgang H. (Firma: AknF) (wolfgang_horn)


Lesenswert?

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

von Possetitjel (Gast)


Lesenswert?

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.

von Georg (Gast)


Lesenswert?

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

von Wolfgang H. (Firma: AknF) (wolfgang_horn)


Lesenswert?

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

von Georg (Gast)


Lesenswert?

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

von Holm T. (Gast)


Lesenswert?

Georg eine PWM ist doch auch eine Digital-Analog Conversion...

Gruß,

Holm

von Georg (Gast)


Lesenswert?

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

von Helmut L. (helmi1)


Lesenswert?

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.

von Ulrich H. (lurchi)


Lesenswert?

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.

von Georg T. (microschorsch)


Lesenswert?

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

von Harald W. (wilhelms)


Lesenswert?

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

von Helmut L. (helmi1)


Lesenswert?

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.

von Possetitjel (Gast)


Lesenswert?

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.

von Possetitjel (Gast)


Lesenswert?

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... :)

von Ulrich H. (lurchi)


Lesenswert?

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.

von Georg T. (microschorsch)


Lesenswert?

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

von Georg T. (microschorsch)


Lesenswert?

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

von Nop (Gast)


Lesenswert?

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.

von Frank (Gast)


Lesenswert?

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.

von Ulrich H. (lurchi)


Lesenswert?

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.

von Volker B. (Firma: L-E-A) (vobs)


Lesenswert?

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
Noch kein Account? Hier anmelden.