|
![]() |
Für eine Modulation müssen allerdings die Werte für Phasenverschiebung und Amplitude ständig geändert werden (entsprechend dem Verlauf des Modulationssignals). Damit setzt die Geschwindigkeit des Interfaces zwischen steuernder Einheit (z.B. PC oder PIC) und AD7008 der erreichbaren Modulationsfrequenz eine Grenze. Das schnelle (bis zu 32-Bit breite) Parallelinterface kam für mich nicht in Frage, da ich einen PIC zur Ansteuerung benutzen wollte, und es dem an ausreichenden I/O-Pins mangelt. Das serielle Interface ist leider deutlich langsamer. Deshalb kann ich meine Lösung auch nicht als Funktionsgenerator bezeichnen. Es ist ein Sinusgenerator mit programmierbarer Frequenz und Amplitude.
Trotzdem ist eine Modulation bis zu etwa 14 kHz-Samplefrequenz theoretisch möglich . Überlegenswert wäre für die Zukunft der Anschluss des seriellen AD7008-Interfaces an MSSP des 16F876 oder den synchronen USART des 16F628. Letzterer erfordert zwar zusätzliche Inverter in den seriellen Leitungen, aber beide seriellen PIC-Interfaces schiebt mit bis zu 5000 kBaud die 32-Datenbits in weniger als 10 µs in den AD7008. Das ergäbe eine Modulation mit einer Samplerate von 100 kHz. Das reicht um z.B. die 10,7 MHz-ZF eines FM-Radios mit kompletter Stereo-Modulation zu erzeugen
Nachbau?
Der Chiphersteller Analog Devices gibt den Preis des AD7008 mit ca.
23 $ an. Das sind garantiert nicht die Endabnehmerpreise. Als ich 1997
das erste Mal mit dem Chip in Kontakt kam, war 90 DM (also 45 €) im
Gespräch. Außerdem kenne ich immer noch keinen Lieferanten.
Wer auf die Möglichkeit der
Amplitudenregelung/Amplitudenmodulation
und der I/Q-Modulation verzichten kann ist wahrscheinlich mit dem
AD9835
für
7 $ besser bedient. Dieser Chip basiert auf dem gleichen Prinzip wie
der
AD7008, hat aber kein paralleles Interface (was sich mit einem PIC
sowieso
nicht nutzen lässt) sowie keine I/Q-Multiplikatoren zur
Amplitudenregelung
in Sin und Cos. Die Frequenzerzeugung (und sogar die Phasenmodulation)
entsprechen aber dem AD7008.
Ist FREQ0 auf den Wert 1 eingestellt, sind für einen
Zyklus
232 = 4.294.967.296 (also rund 4,3 Milliarden) Additionen
nötig.
Bei einem Takt von 50 MHz dauert das 85,9 Sekunden. Die erzeugte
Frequenz
ist 0,01164 Hz.
Die höchste nutzbare Frequenz ist die Hälfte des 50 MHz
Taktes
(also 25 MHz) und ergibt sich bei einem FREQ0-Wert von
2.147.483.648.
Zwischen diesen beiden Extremen lassen sich über 2 Milliarden
fein abgestufte Frequenzen einstellen. Der Abstand zwischen zwei
Nachbarfrequenzen
beträgt bei 1 kHz etwa 0,01 Hz - also 0,001% . Die Abstufung wird
mit steigender Frequenz immer feiner.
Die oberen 12 Bit des 32-Bit Sägezahns werden einer sin/cos look-up-Table zugeführt. Die aus der Tabelle kommenden 10-Bit sin- und cos-Werte werden durch Multiplikatoren geleitet, durch die ihre Amplitude eingestellt wird. Die in der Amplitude modifizierten sin- und cos-Werte werden addiert, und die Summe von einem 10 Bit DAC in eine analoge Spannung gewandelt.
| Um den AD7008 anzusteuern, wird ein 2-zeiliges-LCD-Display und eine kleine Tastatur verwendet. Beides wird an Port B eines 16F628 angeschlossen. Am Port A hängt die AD7008-Platine. Die Schaltung zum Anschluss von Display und Tastatur ist mit dem Lehrbeispiel 'Tastatur&LCD-Display' identisch, es werden aber nur 5 Tasten benötigt. | ![]() |
![]() |
Der PIC16F628 sowie die Stromversorgung befinden sich
auf einer
Platine (Bus628), an die die
Generatorplatine
sowie LCD/Tastatur angesteckt wurden.
Eingebaut wurde alles in ein Plastik-Gehäuse. (Im Foto
noch ohne Filter und Verstärker.) |
Eine höhere Genauigkeit lässt sich erreichen, wenn
man
anstelle des Quarzoszillators einen diskret aufgebauten
50-MHz-Oszillator
mit Quarz und Trimmkondensator aufbaut, diesen in ein
Thermostat-Gehäuse
einsetzt und kalibriert. Im Hobbybereich ist das aber nicht wirklich
nötig.
Der Nutzer wird bei der Bedienung vielleicht dadurch irritiert, dass z.B. eine Erhöhung der Frequenz um 10 kHz, vom Generator nicht genau befolgt wird. Die Frequenz wird vielmehr um etwas weniger als 10kHz erhöht. Ähnlich verhält es sich mit allen Einstellschrittweiten von 0,01Hz bis 10 MHz. Das resultiert daraus, dass der AD7008 die Frequenzen nicht in 0,01Hz-Schritten verändern kann, sondern in 0,01164 Hz-Schritten. Ein Sprung um exakt 10 kHz ist deshalb nicht möglich. Das Display zeigt keine Wunschfrequenzen an, sondern die Frequenz, die auch wirklich erzeugt wird. Auf jeden Fall, kann man sich der gewünschten Frequenz aber immer bis auf einen prinzipiellen Fehler von 0,00582 Hz annähern. (mal abgesehen vom zusätzlichen Frequenzfehler, der durch den Quarzoszillator bedingt wird)
| Die Hardware ist aufgebaut und funktioniert.
Nebenstehendes
Foto der Generatorplatine zeigt eine Urversion mit abweichender
Steckerbelegung. Das
Grundgerüst für das komplette Gerät ist ein Bus628.
Generator, Filter und Verstärker funktionieren. Eine Steuerung über RS-232 ist vorbereitet, aber die Nutzung in der Software noch nicht vorgesehen.. |
![]() |
|
| Nachdem die Schaltung zuerst für die Ansteuerung mit 7
PIC-I/O-Pins
ausgelegt war, benötige ich z.Z. nur noch 5 I/O-Pins. Deshalb
könnte
die Platine nun auch am PortA eines 16F84 betrieben werden. Die Software wird aber weiter für den 16F628 ausgelegt, und wird auf 16F84-Grenzen keine Rücksicht nehmen. Insbesondere die teilweise nötige 64-Bit Routinen benötigen recht viele Register, mit denen der 16F84 nicht gerade üppig bestückt ist. |
![]() |
![]() |
Die Software (auf 16F628) ermöglicht die
Frequenzeinstellung
von 0 Hz bis 25 MHz auf 0,02 Hz genau! (10 stellig) Die Frequenzanzeige erfolgt auf einem LCD-Display. Die Bedienung über 5 Tasten ist intuitiv. |
![]() |
Die Ausgangsamplitude ist in 64 Schritten
zwischen 0V und
1,1 V p-p einstellbar. Unterhalb von 2 Hz und über 7 MHz bricht
sie
etwas zusammen. Die Spannungsangabe bezieht sich auf das Signal vor dem
Filter (an JP2). Hinter dem Verstärker beträgt die Spannung
bei voll aufgedrehtem Potentiometer etwa 4V p-p. |
![]() |
Drei Frequenz-Amplituden-Einstellungen können abgespeichert und jederzeit wieder abgerufen werden. Beim Einschalten wird automatisch die zuletzt gespeicherte Frequenz und Amplitude eingestellt. |