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
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.
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
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....
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
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... ;-)
@ 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.
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.
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
@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
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.
@ 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?
@ 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.
@ 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
>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... ;-)
@ 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 ;-)
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.