Re: DDS-Messsender bis 40 MHz mit AD9850 und ATmega328 selber bauen
Hallo zusammen,
heute ist eine Auswahl an RF-Detektoren ICs von Analog eingetroffen. Nicht zu spät, denn mit meinen alten konventionellen HF-Tastköpfen war die Kalibrierung immer sehr aufwendig (ein Referenzwert/db). Mit dem oben schon beschriebenen AD8307 habe ich nun einen neuen Tastkopf gefertigt, der Baustein hat eine Bandbreite von 500 MHz, einen Dynamikbereich von -75 bis + 17dbm, und liefert 25mV/db zurück. Eine Kalibrierung habe ich bei 0dbm und -60dbm am MEGA2560 vorgesehen, die Werte müssen dann allerdings in das (den?) Sketch übernommen und neu transferiert werden. Ja Benutzerfreundlichkeit sieht anders aus, aber im Moment ist es noch so.
Die Messungen mit dem AD8307 sehen jedenfalls sehr gut aus. Ich habe mehrere Szenarien mit Pegelreferenz, Messsender, PMR und 2m Handfunkgerät mit mehreren Sonden unternommen und war positiv überrascht, erstaunlich was der kleine Baustein kann.
Jetzt stellt sich eine Frage. AD8307 fest als Eingangs-IC des Messgerätes nutzen, damit braucht man auch nur einen Satz an Kalibrierungsdaten im MEGA2560 oder doch flexibel mit mehreren Messköpfen arbeiten? Mehrere Messköpfe haben natürlich Vorteile. Dann muss der MEGA2560 aber auch mehrere Kalibrierungsdatensätze verwalten können. Wo speichern? Das TFT Display hat auf der Rückseite noch einen SD-Kartenslot, allerdings soll dieser laut Datenblatt des Displays nur mit dem UNO R3 funktionieren, nicht jedoch mit dem MEGA2560. Kann man das Problem irgendwie umgehen? Vielleicht mit soetwas wie einem Software-UART? Die nächste Frage, wie unterscheidet das Messgerät die Messköpfe? Vielleicht ginge es automatisch mit einer Binär-kodierten Messkopfnummer, die 2 bis 3 Eingänge des MEGA2560 auf einen definierten Pegel setzt. Als Anschluß könnte dann eine 5- oder 8- polige DIN-Buchse dienen, es wird ja keine HF sondern nur noch eine Gleichspannung übertragen. Wie würdet Ihr das lösen?
!!!
Fotos, Grafiken nur über die
Upload-Option des Forums, KEINE FREMD-LINKS auf externe Fotos.
!!! Keine
Komplett-Schaltbilder, keine Fotos, keine Grafiken, auf denen
Urheberrechte Anderer (auch WEB-Seiten oder Foren) liegen! Solche Uploads werden wegen der Rechtslage kommentarlos gelöscht!
Keine Fotos, auf denen Personen erkennbar sind, ohne deren schriftliche Zustimmung.
Re: DDS-Messsender bis 40 MHz mit AD9850 und ATmega328 selber bauen
Hallo Bernhard,
tolles Projekt
Der AD8307 ist genau der richtige Käfer für diese Aufgabe, und eine logarithmische Amplitudenskala ist für einen Wobbler fast Pflicht. Zur Tastkopferkennung: Ich würde dazu einen Analogeingang verwenden (es hat ja noch ein paar übrig), der mit einem Widerstand nach 5V verbunden wird. Der angeschlossene Tastkopf hat dann einen Widerstand nach Masse, dessen Wert vom Tastkopf abhängt. So kann man einfach verschiedene Tastköpfe mit nur einer zusätzlichen Leitung unterscheiden, so wie es auch die modernen Oszis mit den passiven Tastköpfen machen. Alternativ kann man natürlich ein I2C-EEPROM in den Tastkopf bauen, in dem auch gleich die Kalibrierdaten abgelegt sind. Das braucht aber eine Betriebsspannung und zwei Portleitungen.
Ob man den 8307 in das Gerät oder den Tastkopf einbaut, ist eine Philosophiefrage, es gibt Gründe dafür und dagegen. Dafür spricht, dass man keine Speisespannung nach aussen führen muss und mit einem simplen Koaxkabel das Mess-Signal zuführen kann. Dagegen spricht, dass ein längeres Koaxkabel dazu geeignet ist, Störungen einzusammeln, welche dann mitgemessen werden. Daher wäre ein aktiver Tastkopf besser (idealerweise mit galvanischer Trennung). Bei einem eingebauten AD8307 besteht auch die Gefahr des Übersprechens vom DDS-Generator auf den AD8307. Man kann auch beides machen, wenn man einen Analogausgang für externe Tastköpfe verwendet und einen zweiten für den eingebauten AD8307. Per Software kann man dann einfach wählen, von welchem Eingang (oder auch beiden gleichzeitig) man messen will.
Zur Speicherung von Kalibrier- oder sonstigen Einstellwerten: Gewisse Atmel-Controller haben ein integriertes EEPROM, das sich hervorragend für solche Sachen eignet. Ob dein Typ auch dazugehört, weiss ich nicht, aber im Datenblatt steht das normalerweise auf der ersten Seite bei den Features. Eine andere Möglichkeit ist die Verwendung eines Sektors vom Programm-Flash. Bei allen grösseren Atmel-Controllern ist das Flash entweder in viele relativ kleine Sektoren unterteilt oder kann sogar wie ein EEPROM byteweise gelöscht werden. Ein Sektor kann nun für solche Daten verwendet werden. Dabei ist zu beachten, dass während dem Lösch- und Programmiervorgang kein Programmcode aus dem Flash ausgeführt werden kann. Dieses Problem wird je nach Controller wie folgt gelöst: Einige Controller haben ein Boot-ROM (oder Flash), in dem die Programmier-Routinen enthalten sind. In diesem Fall können direkt von der Applikation diese Routinen aufgerufen werden, vorher müssen alle Interrupts gesperrt werden. Bei anderen Controllern muss die Programmier-Routine selber geschrieben und aus dem internen RAM ausgeführt werden. Das Datenblatt gibt hier Auskunft, und im Internet findet man meistens passende Programmbeispiele. Grundsätzlich kann das auch der Arduino-Bootloader. Da dieser 'Open Source' ist, sollte es möglich sein, die Programmierfunktionen zu nutzen.
Eine weitere Möglichkeit wäre die Verwendung eines seriellen EEPROMs oder Flash (SPI oder I2C, je nach Vorliebe und verfügbaren Schnittstellen). Diese sind sehr einfach zu bedienen und mit Speichergrössen ab ein paar kByte bis in den zweistelligen MByte-Bereich zu haben. EEPROMs (oder die kompatiblen FRAMs) sind dabei einfacher zu handhaben, da jedes Byte individuell überschrieben werden kann und nicht ganze Sektoren gelöscht werden müssen wie bei Flash.
Re: DDS-Messsender bis 40 MHz mit AD9850 und ATmega328 selber bauen
Hallo HB9,
vielen Dank fuer deine Ideen. Leider habe ich immer noch keine finale Entscheidung getroffen. Vom laufenden Programm ins Flash des MEGA2560 zu schreiben ist mir zu heikel, ich befuerchte ich ueberschreibe dort den Bootloader oder das Programm selbst. Mit meinem Wissensstand in Sachen C Programmierung , ich programmiere ja erst seit einer Woche, ist mir das ein noch zu komplexes Unterfangen.
Die Sache mit einem seriellen EEPROM direkt im Messkopf gefaellt mir am Besten, aber das im Programm umzusetzen ueberfordert mich ebenfalls noch. Es ist weniger das serielle Protokoll was mir Probleme bereitet, sondern die Datensatzverwaltung die ich programmieren muesste. Im Moment sieht die Kalibrierhilfe naemlich noch so aus: Referenzpegel anlegen, Messwerte des ADC abschreiben, Messwerte ins Programm tippen und den MEGA2560 neu programmieren.
Das alles ueber das Touchscreen zu erledigen und die Messwerte wie in einem Dateisystem zu schreiben und lesen ist mir zu hoch. Da brauche ich noch mehr Praxiserfahrung um das Umsetzen zu koennen.
Ich wurde jetzt so vorgehen. Alle Messwerte der unterschiedlichen Koepfe wie gehabt manuell ins Programm schreiben und den MEGA neu pogrammieren. Jeder Kopf bekommt eine eindeutige Nummer (entweder binaer ueber mehrere I/Os oder analog ueber einen Spannungsteiler). Der MEGA liest beim Programmstart die "Messkopfnummer" und waehlt den Datensatz mit den Kalibrierwerten aus einem mehrdimensionalen ARRAY aus. Aber das programmiere ich erst spaeter, im Moment habe ich genug von C und Mikrokontrollern. Mit etwas Abstand vom Projekt werden die Ideen und Umsetzungen sicher wieder klarer.
Re: DDS-Messsender bis 40 MHz mit AD9850 und ATmega328 selber bauen
Hallo Bernhard,
am Anfang ist vieles undurchsichtig und riecht nach Aufwand, das kenne ich. Dein Lösungsvorschlag ist da eine gute Wahl, fürs erste sicher zweckmässig, und später kann diese Lösung einfach erweitert werden, indem das Array nicht mit Konstanten, sondern mit den Werten aus eine EEPROM initialisiert wird, der ganze übrige Code bleibt dabei unverändert.
Für die Daten im EEPROM braucht es übrigens weder ein Filesystem noch sonst etwas Kompliziertes, in C kann man sehr einfach Variablenwerte byteweise von einem Speicher in einen anderen schieben. Ziemlich sicher findet man für den Arduino auch schon fertige Bibliothekfunktionen für das Schreiben und Lesen von Daten in seriellen EEPROMs. Aber das hat ja noch Zeit, messen kann man auch ohne EEPROM, und wenn man nicht täglich eine neue Sonde kalibrieren muss, ist das Neuprogrammieren des Controllers ja kein grosser Aufwand. Viel Spass beim weiteren Experimentieren!
Re: DDS-Messsender bis 40 MHz mit AD9850 und ATmega328 selber bauen
Hallo zusammen,
heute habe ich weitergebastelt und mich vom Steckbrett getrennt. Der DDS erhielt eine Pufferstufe mit zwei 2N3904 in Sandwichtechnik. Softwaretechnisch habe ich noch einen Frequenzzähler implementiert, es sind ja noch genügend Pins frei. Dazu gab es noch eine Vorverstärker der ab 50mV anschlägt. In der Endfassung werde ich die Verbindungen noch richtig HF tauglich ausgestalten und die Steckleiste vom MEGA2560 entfernen, sowie die Steuerleitungenbindungen direkt mit der Platine verbinden.
Die Messköpfe werden über eine 8 (9) poligen DIN Buchse angeschlossen, die Erkennung des Kopfes erfolgt über einen Spannungsteiler an einem Analogeingang des MEGA2560.
Ich habe noch die Idee mehrere NF-Eingänge mit der Buchse zu realisieren. Je nach gemessener Frequenz kann über einen Analogschalter auf eine andere Modulationsquelle umgeschaltet werden. Somit simuliert man mit einem Sender mehrere AM-Stationen. Im Netz war noch ich die Umsetzung einer Software-FM-Modulation zu sehen. Die NF wird über einen Analogkanal gesampelt und der DDS über Software entsprechend in der Freuenz moduliert. Über die 2. oder 3. Oberwelle ist die Aussendung dann im UKW-Band zu hören. Der Code dafür ist offen, falls mal jemand soetwas mit einem Controller nachbauen möchte.
Re: DDS-Messsender bis 40 MHz mit AD9850 und ATmega328 selber bauen
Hallo Bernhard,
Hut ab! Wirklich ganz große Klasse! Vielen Dank! Ich muss jetzt mal so langsam anfangen die Teile zu bestellen, die zudem günstig zu beschaffen sind. Ich denke, dass viele an einem Nachbau Interesse haben werden, da sich dieses Projekt fast schon an eine "eierlegende Wollmichsau" erinnert.
Eigentlich sollte man ja den Titel dieses Themas ändern zu "Bauprojekt DDS-Wobbelsender mit Arduino" als Vorschlag. Meine Frage an die Moderation. Kann ich das als Themenstarter machen?
Re: DDS-Messsender bis 40 MHz mit AD9850 und ATmega328 selber bauen
Hallo Volker,
ich muss mich bremsen, es ist ja eigentlich dein Bauprojekt und statt nachzubauen habe ich jetzt vorweggebaut. Asche auf mein Haupt. Mein AD9851 ist angeblich schon auf dem Postweg. Ob zu Wasser oder Luft stand nicht dabei, 4-8 Wochen soll es wohl dauern. Ich hoffe es kommt durch den Zoll.
Gestern habe ich im Netz ein DDS-Board gesehen, damit konnte man 400 oder 500 MHz direkt erzeugen. Zusaetzlich gab es ein Controllerboard dazu (AVR oder STM32) mit kleinem Farbgrafikdisplay. Der Preis lag bei knapp ueber 30 EURO. Leider habe ich vergessen die Daten aufzuschreiben oder den Link als Lesezeichen zu setzen. Vielleicht kennst Du oder jemand anders dieses DDS-Entwicklungssystem, ich waere daran interessiert.
Re: DDS-Messsender bis 40 MHz mit AD9850 und ATmega328 selber bauen
Hallo zusammen,
es wurde weitergebastelt. Um die verschiedenen Modulationskanaele (4 Stueck an der Zahl) auf einen physischen Modulationsanschluss am DDS-Modul herunterzubrechen, habe ich einen Analogschalter 4066 verwendet. Die Ausgaenge der 4 Schalter wurden zusammengefasst, die einzelnen Schaltimpulse kommen von noch freien Anschluessen des MEGA2560. Die logische Abbildung erfolgt dann einfach im Programm.
Die Modulatonskanaele koennen dann direkt auf der DDS-Einstellungsseite zu- oder weggeschaltet werden, auch ein Mischbetrieb ist moeglich.
Leider ist meine Telefonkamera nicht die Beste, sie hat unter den schwierigen Lichtverhaeltnissen und dem Gegenlicht des TFT-Bildschirms ihre Probleme.
Durch die Moeglichkeit jetzt verschiedene Modulationsquellen per Software zu- und weg-zuschalten, erschliesst sich die Moeglichkeit mit nur einem DDS-Modul mehrere Sender im gesamten Frequenzbereich des DDS zu simulieren. Man muss lediglich die Frequenzzaehleranwendung dahingehend erweitern, dass im Fangbereich einer bestimmten, frei waehlbaren Soll-Festfrequenz das DDS-Modul und der Modulationskanal durch die Software umgestellt wird. Die Ist-Frequenz kommt ja vom Oszillatorkreis des Radios und wird dem MEGA2560 ueber einen Vorverstaerker zugefuehrt und rechnerisch vom Betrag der Zwischenfrequenz befreit. Die Einstellungen wie ZF, Frequenz von 4 simulierten Radiostationen usw kann man bequem ueber das Touchscreen erledigen.
Eingabe einer Sendefrequenz einer zu simulierenden Radiostation.
Hier zu sehen, die Simulation von 4 Radiostationen auf der Mittelwelle. Jeder Radiostation ist eine Frequenz zugewiesen, oben die aktuelle Position des Skalenzeigers an einer Ilmenau210. Der Frequenzabgriff erfolgt induktiv von außerhalb des Radios, im Bereich des Oszillatorsystems. Die ZF wird vom MEGA2560 weggerechnet.
Insgesamt ist der Speicherplatz des MEGA2560 nun zu gut 20% gefuellt. Es gibt also noch viel Platz fuer weitere Softwaremodule und Funktionen. Mal sehen was noch so kommt.
Re: DDS-Messsender bis 40 MHz mit AD9850 und ATmega328 selber bauen
Hallo Bernhard,
das mit der Simulation mehrerer Sender ist eine gute Idee. Jetzt musst du nur noch Fading implementieren, dann wird es richtig echt Der HF-mässige Aufbau mit der Abschirmung ist mir gleich positiv ins Auge gestochen... Meinen HF-Augen tut es einfach weh, wenn man immer häufiger hochgetaktete Digitalschaltungen oder sonstige Störquellen ohne irgendwelche Abschirmungen vor sich hinstrahlen sieht.
Das Display sieht richtig gut aus, bei meinem nächsten Digital-Projekt werde ich auch so was verbauen. Ideen sind ausreichend vorhanden, vom VHF/UHF-Signalgenerator über die Aufrüstung meines Amateurfunk-Transceivers bis zum Software Defined Radio. Der nächste Winter kommt bestimmt, aber voerst wartet noch mein Resonar auf ein paar Streicheleinheiten
Re: DDS-Messsender bis 40 MHz mit AD9850 und ATmega328 selber bauen
Hallo HB9,
danke fuer deine Antwort. Jetzt wo ich etwas tiefer in der Arduino-Materie drinstecke wuerde ich folgendes beim zweiten Exemplar anders machen.
1. Arduino Nano statt MEGA2560 nehmen, 5x Nano gibt es schon fuer 15 EUR 2. Das TFT-Touchdisplay weglassen, dann reicht auch ein Nano-Board 3. Ein Bluetooth-Modul fuer 5-6 EUR statt des Displays nehmen 4. Die komplette Steuerung und Visualisierung ueber ein Smartphone oder TabletPC erledigen, die sind qualitativ doch um Zehnerpotenzen besser als das hier gezeigte Display.
Sprich das ganze Projekt liesse sich noch mal um 10-15 EUR verbilligen.