Forum: Mikrocontroller und Digitale Elektronik Quadratur Decoder mit DSP


von Johann (Gast)


Lesenswert?

Hi alle,

ich benoetige einen Puls Quadraturausgang (4. Phasen -> A u. B jeweils 
true und false). Mein System besteht zurzeit aus einem DSP C6747. 
Bislang bin ich dabei zu ueberlegen einen DDS dafuer zu nehmen. Der 
AD9852 bietet mir eigentlich genau das was ich brauche eher zuviel als 
das ich brauche. Das ist ein DDS mit 4 Ausgaengen (2 mal true und 
false). Die ansteuerung erfolgt guenstigerweise direkt ueber SPI oder 
digital parallel von der DSP.
Aber mir schein es so, als ob ich mit Kanonen auf spatzen schiessen 
wuerde. Ich habe noch keine erfahrung mit Quadratur Puls Ausgaengen. 
Deshalb meine Frage. Gibt es fertige Quadratur Decoder / Controller die 
mir folgendes liefern:
- 2 Phasen A u. B mit jeweils true und false
- beide Phasen haben gleiche Ausgabefrequenz nur die Phase B wirkt 
Richtungs bzw. Phasengesteuert
- Anteuerung ueber SPI oder digital parallel
- sehr genau! Der Ausgang sollte von 1 Hz bis 30 kHz einstellbar sein, 
mit einer Abweichung im promile Bereich

Gruss
Johann

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Johann schrieb:
> ich benoetige einen Puls Quadraturausgang
Also einen Rechteckausgang...
> Mein System besteht zurzeit aus einem DSP C6747.
> :
> Der Ausgang sollte von 1 Hz bis 30 kHz einstellbar sein,
Und zudem noch so langsam...
Warum machst du das nicht mit dem DSP in Software selber?
Das packt sogar ein 8-Bit AVR mit der linken Hand und nebenher...

> mit einer Abweichung im promile Bereich
Worauf bezieht sich diese Abweichung?
Auf die absolute Frequenz?
Eine Abweichung von 1 Promille bei 30kHz sind 3 Hz...
Eine Abweichung von 1 Promille bei 1 Hz ist 1mHz...
Eine Abweichung von 1mHz bei 30kHz sind 0,0003 ppm.
So genau ist keine (wirtschaftlich bezahlbare) Zeitbasis... :-o
Das wäre 1 Sekunde Abweichung auf 10 Jahre!

Oder bezieht sich diese Abweichung auf die relative Frequenz?
Das wäre einfach: ein jeder Quarz kleiner 100ppm packt das locker.

von Johann (Gast)


Lesenswert?

Genau es soll ein Rechteckausgang sein.

Der Fehler soll sich auf die relative Frequenz beziehen :)

Ich habe es schon mit dem PWM Ausgang der DSP versucht, dass kann man 
aber vergessen!!

Ich bin kein Experte in der Materie, aber ich denke softwaretechnisch 
waere es viel zu umstaendlich. Ich habe viele loops die Teilweise bis zu 
1ms bearbeitung benoetigen, auch CPU interups sind vorhanden. Ich kann 
es mir erlichgesagt softwaretechnisch nicht vortellen. Wie waere denn 
die Taktik es softwaretechnisch umzusetzen? Zaehlervariablen? oder 
Timer? ...

Die DSP hat auch nen Hardware Timer. Man koennte dann mit Interrups paar 
GPIOs steuern, aber dabei habe ich bedenken, da der PWM Controller des 
DSP auch nix andere gemacht hat, jedoch lgen die Fehler im 
prozentbereich, also nix mit promille.



Gruss
Johann

von Christian R. (supachris)


Lesenswert?

Johann schrieb:
> jedoch lgen die Fehler im
> prozentbereich, also nix mit promille.

Naja, das kommt dann auf die Genauigkeit der Zeitbasis an. Wenn du den 
Takt für den PWM Teil erst mit einer PLL aus dem Grundquarz erzeugst, 
kann das schon passieren. Wobei ich im Prozentbereich schon arg finde. 
Was genau war da ungenau? Ansonsten bleibt natürlich immer die 
Möglichkeit, das extern in einem CPLD oder FPGA zu machen....

von Tomas K. (Firma: tktronic) (tktronic)


Lesenswert?

Johann,

ist das beruflich oder privat ?

1. spezifiziere bitte die gewünschten genauigkeiten und schrittweiten 
der frequenzwahl ?
2. möchtest du den phasenversatz zwischen beiden spuren verstellen 
können ?

wir haben so eine quadratur-encoder simulation schon gemacht um ein 
eigenes design (decoder) umfassend automatisiert testen zu können. 
kleiner uC mit eigener clock per spi vom host-system angesteuert.

infos siehe 1.+2. bitte bei interesse deinerseits an tom at tktronic 
punkt de

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Christian R. schrieb:
> Wenn du den Takt für den PWM Teil erst mit einer PLL aus dem
> Grundquarz erzeugst, kann das schon passieren.
> Wobei ich im Prozentbereich schon arg finde.
Ok, wenn ich 30kHz mit 1/1000 auflösen will, brauche ich 30MHz auf dem 
Zähler. Ich könnte mir aber vorstellen, dass man da im Grenzbereich die 
Spec auch ein wenig lockern könnte... ;-)

Und wenn du dann mit 0,3% auskommen würdest, würde ein einziger mit 
10MHz getakteter Zähler mit 2 Compare-Einheiten (für die beiden Spuren) 
locker ausreichen. Und ich würde das Ganze per SW abwickeln, denn bei 
30kHz sind pro Zyklus ja ewige 33us Zeit... ;-)

von Johann (Gast)


Lesenswert?

@ Christian:

Ja dazu habe ich die PPL genutzt. Das Counterregister der PWM ist leider 
nur 16 bit. Das Reicht nicht aus um den gewuenschten Frequenzbereich zu 
decken. Deswegen musste die ganze Zeit die PPL und den Counter anedern. 
Da kann man sich schon vorstellen, dass es nicht toll funktioniert.

@ Thomas: Ich melde mich

@ Lothar:

0.3 % ist erheblich zuviel. Ich habe funktionen in meinem Code, die bis 
zu 1ms dauern. SW-Technisch ist es mir zu aufwendig und ich habe zweifel 
an der Genauigkeit.

von Johann (Gast)


Lesenswert?

Tomas Kuckenburg schrieb:
> 1. spezifiziere bitte die gewünschten genauigkeiten und schrittweiten
> der frequenzwahl ?
> 2. möchtest du den phasenversatz zwischen beiden spuren verstellen
> können ?

Fuer alle als info:

1. die Genauigkeit sollte im bereich von 50 Hz bis 30 kHz mindestens 
0,01 % sein. Unter 50 Hz darf es zunehmen.
2. Ja der Phasenversatz zwischen beiden Spuren muss verstellbar sein. 
Die B Spur soll die Richtung weisen. Also entweder 90 Grad vor oder 
nachlaufen.

Der DDS von AD bietet mir eine Aufloesung von 1uHz. Das wuerde meine 
Bedurfnisse voellig decken. Auch die ansteuerung ueber SPI ist 
vorteilhaft. Der IC ist aber erstmal bissle teuer und zweitens 
ueberdiemensioniert. Hat noch unzaehlige weitere Funktionen und kann bis 
100 Mhz Frequenzen ausgeben. Deswegen suche ich halt nach ner anderen 
Loesung oder einem anderen IC.

von Falk B. (falk)


Lesenswert?

Gähn, sowas langweiliges. Kann der DSP wahrscheinlich problemlos per 
Timer/PWM Funktion. Wenn nicht, reicht ein Timer mit Taktausgang und 
zwei popelige CMOS-ICs. Ist präzises wie der Takt des DSP, und damit 
wahrscheinlich quarzstabil.

Beitrag "Re: pulse direction signal zu encoder a b?"

MFG
Falk

von Falk B. (falk)


Lesenswert?

@Johann (Gast)

>1. die Genauigkeit sollte im bereich von 50 Hz bis 30 kHz mindestens
>0,01 % sein. Unter 50 Hz darf es zunehmen.

Das sind 100ppm, das macht jeder normale Quarz.

>2. Ja der Phasenversatz zwischen beiden Spuren muss verstellbar sein.

Wieviel? Welche Auflösung?

>Die B Spur soll die Richtung weisen. Also entweder 90 Grad vor oder
>nachlaufen.

Ist immer so bei einem Drehgeber.

MFG
Falk

von Johann (Gast)


Lesenswert?

Falk Brunner schrieb:
> Gähn, sowas langweiliges. Kann der DSP wahrscheinlich problemlos per
> Timer/PWM Funktion. Wenn nicht, reicht ein Timer mit Taktausgang und
> zwei popelige CMOS-ICs. Ist präzises wie der Takt des DSP, und damit
> wahrscheinlich quarzstabil.
>
> Beitrag "Re: pulse direction signal zu encoder a b?"
>
> MFG
> Falk

Wie gesagt per PWM gehts nicht. Eine PPL konstellation die mithilfe des 
16bit Counters den Frequenzbereich abdeckt gibts nicht. Ausserdem habe 
ich die Genauigkeit ueberprueft, die belauft sich bei hohen Frequenzen 
bis zu 1%.
Ich werde es mal mit dem Timer des DSP probieren. Der laeuft ohne PPL, 
sollte vlt. praziese genug sein.

Ein Timer muesste mit der DSP verbunden sein, der Takt wird 
Softwaretechnisch errechnet und ausgegeben. Die Frquenz (bzw. Pulsweite) 
wird dabei jede millisekunde geandert.

Phasenversatz immer 90 Grad. Aufloesung nicht sehr hoch.

von dsPIC33 (Gast)


Lesenswert?

Schau Dir mal die dsPIC30 bzw. dsPIC33 von Microchip an. Die haben 
mehrfach PWM-Ausgänge und sind sehr schnell.

von Falk B. (falk)


Lesenswert?

@  Johann (Gast)

>Wie gesagt per PWM gehts nicht.

>16bit Counters den Frequenzbereich abdeckt gibts nicht. Ausserdem habe
>ich die Genauigkeit ueberprueft, die belauft sich bei hohen Frequenzen
>bis zu 1%.

Kaum.

>Ich werde es mal mit dem Timer des DSP probieren. Der laeuft ohne PPL,
>sollte vlt. praziese genug sein.

>Phasenversatz immer 90 Grad. Aufloesung nicht sehr hoch.

Das ist aber im vollen Widerspruch zu deinem letzten Posting!

"Ja der Phasenversatz zwischen beiden Spuren muss verstellbar sein."

Ja was denn nun?

von Johann (Gast)


Lesenswert?

@ Falk:

Sorry mein Fehler. Ich muss die Moeglichkeit haben einen Ausgang, sei es 
B, um 90 und -90 Grad zum anderen Ausgang zu verschieben. Also ganz 
einfach Richtungsweisend.

von Falk B. (falk)


Lesenswert?

@  Johann (Gast)

>Sorry mein Fehler. Ich muss die Moeglichkeit haben einen Ausgang, sei es
>B, um 90 und -90 Grad zum anderen Ausgang zu verschieben. Also ganz
>einfach Richtungsweisend.

Aha. Also nimm die Schaltung aus dem Link oben, den Takt per Timer 
erzeugen, die Richtung per IO-Pin. Fertig.

MFG
Falk

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

>Die B Spur soll die Richtung weisen. Also entweder 90 Grad vor oder
>nachlaufen.
Ist sogar noch viel lustiger: wenn man sich den vorherigen 
Flankenwechsel merkt, kann man schon beim nächsten Flankenwechsel (A 
oder B) sagen, in welche Richtung es geht. Das nennt sich dann 
Vierfachauswertung...

Johann schrieb:
> 0.3 % ist erheblich zuviel.
Das hängt wie gesagt von der maximalen Taktfrequenz deines Zählers ab. 
Ich habe hier 10MHz angesetzt.

> Ich habe funktionen in meinem Code, die bis zu 1ms dauern. SW-Technisch
> ist es mir zu aufwendig und ich habe zweifel an der Genauigkeit.
Hat dein DSP keine Interrupts?
Das Umschalten des Port-Pins würde ich per Hardware machen 
(Compare-Funktion) und das Setzen des nächsten Umschaltzeitpunkts per 
Software...

Falk Brunner schrieb:
> Beitrag "Re: pulse direction signal zu encoder a b?"
Danke, Falk, den Beitrag hatte ich schon mal gesucht... ;-)

von Falk B. (falk)


Lesenswert?

@  Lothar Miller (lkmiller) Benutzerseite

>> Beitrag "Re: pulse direction signal zu encoder a b?"
>Danke, Falk, den Beitrag hatte ich schon mal gesucht... ;-)

Ist im Artikel Drehgeber verlinkt, damit er der Nachwelt erhalten 
bleibt.
Und das Klima rettet ;-)

von Johann (Gast)


Lesenswert?

Lothar Miller schrieb:
> Hat dein DSP keine Interrupts?
> Das Umschalten des Port-Pins würde ich per Hardware machen
> (Compare-Funktion) und das Setzen des nächsten Umschaltzeitpunkts per
> Software...

An Interrups habe ich auch schon gedacht. Welchen wuerdest du da 
benutzen? Timer Interrupts an GPIO?

Lothar Miller schrieb:
> Das hängt wie gesagt von der maximalen Taktfrequenz deines Zählers ab.
> Ich habe hier 10MHz angesetzt.

Ich habe soeben den DSP Internen Timer ausprobiert. Der laeuft mit 24 
Mhz. Bei hohen Freuqenzen habe ich einen Fehler von 0,2%. Das ist mir 
leider zu hoch.

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.