|
Weitere Artikel aus dem Elo-Magazin
|
|
|
|
|
Schaltungstechnik - Grunlagen und HinweiseDDS-Generator 0,1Hz...100kHzIm vorausgegangenen Artikel habe ich schon folgendes festgestellt: „Die modernste Art von RC-Generatoren ist zweifellos die Synthese mit einem digitalen Signalprozessor. Aber das ist ein sehr umfangreiches neues Thema wie man mit Software einen Signalgenerator erstellt.Vielleicht findet sich jemand der einen Artikel dazu schreibt." Bis jetzt hat für ELO noch niemand einen entsprechenden Artikel verfasst. Man kann narürlich so etwas von der Stange kaufen, auch mit höherer Performance. Der Lerneffekt ist aber gering. Ziel meiner Ausführungen ist die Realisierung dieses Prinzips mit handelsüblichen Bauelementen, die übrigens weniger als 20 Euro kosten, als auch ein wenig KnowHow zu vermitteln. Es gibt auch sehr viel Info im Internet z.B. auf wikipeda.von Rudolf Drabek Funktionsweise in Kürze Wesentlicher Bestandteil bei DDS ist das „Phasenrad" um möglichst einfach das Funktionsprinzip zu erklären, hier mit nur 32 Zähnen. Ganzen Artikel lesen...
Geht jemand im Kreis um das Rad herum, von einem Zahn zum Nächsten und braucht dazu je 1 Sekunde, so ist er nach 32 s einmal um den Kreis herum. Jedes mal, wenn er beim Anfang vorbeikommt, läutet er eine Glocke. Nun, alle 32 s läutet es oder die Frequenz des Läutens beträgt 1/32 Hertz. Nimmt er 2 Zähne je Schritt so ist er nach 16 s herum = 1/16 Hz usw. Sie sehen also, dass die Frequenz in Stufen von 1/32 Hz erhöht werden kann. Das geht natürlich nicht grenzenlos. Nähme er 32 Schritte auf einmal in einer Sekunde, so bewegte er sich nicht, da er immer wieder an derselben Stelle landet . Herr Nyquist, Entdecker des Abtasttheorems, hat herausgefunden, dass man höchstens 16 Schritte bei 32 Zähnen ausführen darf. Also die Abtastrate darf höchstens die Hälfte der möglichen Zustände sein. Im gezeigten Beispiel ist eine Taktfrequenz von 1 Hz gewählt, nämlich die Schrittdauer. Die max. mögliche Frequenz, unter Berücksichtigung des Abtasttheorems, beträgt also 0,5 Hz ( 2 Schritte zu je 1 s Dauer über 16 Zähne). Mehr ist nicht dahinter. Was man aber erkennt ist die Tatsache, dass bei 3 Zähnen je Schritt schon etwas merkwürdiges auftritt. Nach 10 Schritten ist er fast herum, nach 11 Schritten aber schon einen Schritt in der neuen Periode. Es geht sich nie genau aus! Bei diesem Beispiel.
Auch in realen Phasenrädern tritt dieser Effekt auf und hat eine Unsicherheit der Nulldurchgänge zur Folge, es tritt eine mehr oder weniger große Frequenzmodulation auf. Und das nur durch die Digitalisierung, die ja ein festes Raster vorgibt. Man kann diesen Effekt nur sehr klein machen. Analoge Generatoren zeigen diesen Effekt natürlich nicht! Der vorgestellte DDS Generator ist mit einem 32 bit Phasenrad, jetzt Phasenaccumulator genannt, ausgestattet und die Schrittdauer beträgt exakt 0,6875000 Mikrosekunden. Die Schrittfrequenz betragt 1/0,6875 us = 1,45454545 Mhz periodisch. Die Zahnanzahl von 32 bit entspricht 4294967296, also mehr als 4 Milliarden Zähnen. Die Frequenz ergibt sich, wie schon erklärt, zu: f = Schrittweite . Schrittfrequenz / 32 bit bei Schrittweite = 1 ergibt sich fmin = 1,45454545e6 / 2exp32 = 0,0003386627 Hz fmax= 1,45454545e6/2 = 727272 Hz siehe nach bei Nyquist! Ich habe die max. Frequenz auf 102727 Hz begrenzt, da dann der Spannungszug einer Schwingung noch 14 mal gesampelt wird, die Spannungsform also noch gut zu erkennen ist. Für eine Fequenz von 1 Hz muss die Schrittweite also 2952,7900 sein. Das geht aber nicht, da man nur 2952 oder 2953 wählen kann. Es ergibt sich eine Abweichung von ca. 71 ppm oder 0,007 %, was für Amatuerzwecke sicher ausreicht. Für z.B. 100 Hz also 295279 Schritte. Der Fehler ist praktisch NULL ! Wichtig sind die 2 Nullen hinter dem Komma, da damit ab 100 Hz der Frequenzfehler kleiner als 0,005 ppm wird. Im NF-Bereich ist der Fehler < 3 ppm. Schon der Quarz wird ungenauer sein. Ich habe sehr viel Zeit aufgewendet mit billigen Quarzen einen möglichst geringen Fehler zu erreichen. Es geht sich mit einem 16 MHz Quarz s.o. gut aus. Ist das Ergebnis individuell zu ungenau, so kann man ja eine krumme Quarzfrequenz wählen, z.B. 16255812 Hz. Dies ergibt dann einen Schritt für 1 Hz von exakt 3000. Aber wie gesagt ab 10 Hz ist dier Frequenzfehler durch die Genauigkeit und Stabilität des Quarzes bestimmt. RealisierungDie Anordnung besteht aus zwei Teilen mit jeweils einem Atmel ATtiny2313: 2.1 dem Kontrollteil mit Display und Drehencoder - Bis auf die Bedienung ist nichts besonders. Aus dem SW Listing kann man entnehmen wie ein Display angesteuert wird, wie man einen Drehencoder bedient und die Kommunikation mit dem eigentlichen DDS Generator via RS232 mit 500 kBaud.
- Der Inhalt der Kommunikation ist die Information welche Spannungsform, Sinus, Dreieck, Sägezahn und Rechteck erzeugt werden soll und die Schrittweite um die der Phasenaccumulator incrementiert werden soll.
Es werden also 5 Bytes, 1 für die Spannungsform und 4 Bytes für den Stepwert, jedes mal, wenn der Drehencoder nach rechts = höhere Frequenz oder links gedreht wird . - Die SW Entwicklung ich habe mit dem Kontrollteil begonnen und den DDS Teil emuliert. Das hatte im Nachhinein den Vorteil, dass die Frequenz schon im Kontrollteil berechnet und am Display dargestellt wird und der DDS Frequenzgenerator ein reiner Sklave ist, der das 5 Byte Kommando umsetzt und das sehr schnell, nämlich in 100 us.
Bei Frequenzen bis etwa 1000 Hz hört man keine Umschaltstörung. Bei 10 kHz fehlt aber dann schon eine ganze Schwingung, was sich durch knacksen außert, da nicht im Nulldurchgang des Spannungszuges umgeschaltet wird.
2.1.1 Bedienung Das einzige Bedienelement ist ein Encoder. Es wird der Pollin Panasonic Drehgeber verwendet, der u.a. auch einen Druckschalter beinhaltet. Da der Frequenzbereich von 0,1 Hz bis 100 kHz geht muss es irgendeine Art von „Gangschaltung" geben, da es zu mühsam ist in 1/10 Hz Schritten den ganzen Frequenzbereich im Verhältnis 1 : 1.000.000 durchzudrehen, da dreht man eher selber durch. Solange der Schalter gedrückt ist, befindet man sich im Kommandomodus. Drehen entgegen dem Uhrzeiger ändert die Spannungsform, im Uhrzeigersinn wird der Frequenzstep geändert von 0,1 Hz auf 1 Hz, 10 Hz.......10kHz. Man darf auch beide Parameter bei gedrücktem Schalter ändern. Lässt man den Schalter los, so wird das Display upgedated und die neuen Daten übernommen. Man könnte natürlich auch feststellen wie schnell einer dreht und ein „Automatikgetriebe" vorsehen. Aber wie lange soll derselbe Gang eingelegt bleiben ? usw. Im Schaltbild ist ein TUX Display angegeben. Da ich aber in der Eagle Library das TC1602A Display nicht gefunden habe, soll dieser Hinweis genügen. Gleiches gilt für den Drehencoder. 2.1.2 Frequenzberechnung - Die Formel für die Frequenzberechnung ist ja schon bekannt. Ich verwende Fixkommaarithmetik. Da ein uC in Assembler keinen Dezimalpunkt kennt, der ja auf Grund des kleinsten Steps mit 0,1 Hz aber vorkommen muss, habe ich die Formel wie folgt abgeändert. Die Einerstelle also das LSB der Zahl repräsentiert die 1/10 Hz Stelle. Die Formel muss also nur mit dem Faktor 10 multipliziert werden und bei der Ausgabe im Display eben an der richtigen Stelle ein Dezimalpunkt ausgegeben werden.
- f = Schrittweite . (1454545.4 . 10) / 2exp32
- Die Frequenz wird durch Multiplikation der Schrittweite mit einer Konstanten und nachfolgender Division durch 2exp32 ermittelt.
Auf die komische zahl 1.45 periodisch komme ich noch zu sprechen. - Die Division ist höchst einfach. Warum? 32 bit sind 4 Byte. So wie eine Verschiebung um 1 Bit eine Multiplikation oder Division um den Faktor / Divisor 2 bedeutet, so ist eine Verschiebung um 4 Byte nach links eine Division durch die Zahl 4294967296.
2.2 dem eigentlichen DDS Generator - Das Phasenrad = Phasenaccumulator ist nichts anderes als ein 32 Bit SW Zähler, der , wenn er überläuft, wie bei der Skizze, wieder von vielleicht null zu zählen beginnt. Dieser Zählvorgang, nämlich den Schrittwert zum Phasenaccu zu addieren dauert ja eine gewisse Zeit gemessen in Cycles der ATtiny2313 Clockfrequenz von 16 MHz.
- Im Listing sehen sie, dass es minimal 10 Zyklen braucht. Das ist ein Zeitbedarf von min. 0,625 uS. Ich habe aber ein „nop" eingebaut also 11 Schritte geplant für die Addition und das holen der Daten aus einer der Spannungsformtabellen.
- Daraus ergeben sich einerseits die Zahl 16e6 / 11 = 1,45e6 periodisch, anderseits zusammen mit den 32 Bit eben die Zahl 2952,7900. Wichtig sind die 2 Nullen am Ende für die perfekte Genauigkeit weil ab 100 Hz kein bedeutender Zahlenrest hinter dem Komma vorkommt. Ich habe sehr viele Kombinationen untersucht, aber die gewählten Werte kommen mir optimal vor.
- Der Phasenaccu muss für einen kontinuierlichen Spannungsverlauf ungestört laufen. Also kein Interrupt oder Sonstiges darf hier stören.
Leider ist eine Stördauer von 100 us aber unvermeidlich je Drehimpuls vom Encoder. - Die Ausgabe der Spannung wurde mit einem R2R Widerstandsnetzwerk realisiert. Ich hatte in meiner Schatzkiste eben 12,1 k Widerstände mit 0,1% Genauigkeit, was natürlich mehr als genug für einen 8 Bit DA Wandler ist.
- Die Störspannungen sind 1/256 der möglichen Ausgangsspannung von 5V. Das sind 48 dB. Ausreichend für Amateuranwendungen. Wie sie wissen ist MP3 nicht viel besser. Eine klassische Audio CD hat ja einen 16 Bit DA Wandler mit 96 dB Störabstand. Eine weitere Störquelle sind die Abstufungen in den Spannungstabellen.
- Als ich das erste mal einen Kopfhörer mit dem Ausgang des DA Wandlers verband, war ich völlig hingerissen, dass ich nicht das kleinste Störgeräusch, sondern nur den reinsten Sinuston hörte.Die Sägezahntabelle werde ich möglicherweise noch ändern. Der Sägezahn klingt sehr scharf! Was natürlich auch heisst, dass sich jeder eine beliebige Spannungsform programmieren kann. Es ist zu erkennen wie, wenn man das Listing durchgeht.
Die Basis für den DDS Teil lieferte www.myplace.nu/avr/minidds/index.htm ErgebnisseEs folgen verschiedene kommentierte Bilder und Oszillogramme. Die Verrundung der Steps ist auf die Zeitkonstante des Innenwiderstandes des R2R Netzwerkes mit den 10 pF des Tastkopfes von 0,12 us bei einer Stepzeit von 0.6875 us zurückzuführen. Download: Ddsgen.zip (DDS_Generator.sch, dds32.asm, ddsgen.asm) Die passende Ergänzung zu diesem Artikel:  | Lernpaket - Elektronische Schaltungen Lieferumfang: 49 Bauteile, 192 Seiten Buch mit CD-ROM "Elektronische Schaltungen ISBN 978-3-645-65013-7 Versandkostenfrei* direkt beim Verlag bestellen
29,95 € 
|

Lernen Sie die ganze Vielfalt vom Franzis Buch- und Softwareverlag kennen
|