====== I/Q Modulator ====== Es soll ein I/Q Modulator entstehen mit dem man auf einfache Art und Weise HF erzeugen und modulieren kann. Einzig ein Lokaler Oszillator(LO) und eine Soundkarte wird benötigt. ===== Projektstatus ===== * Schaltplan erstellt: ** Rev3 erledigt, vorgelegt ** --- //[[dl3yc@darc.de|Sebastian Weiß]] 2014/02/03 06:52// * Layout erstellt: ** Rev3 erledigt, vorgelegt ** --- //[[dl3yc@darc.de|Sebastian Weiß]] 2014/02/03 06:52// * Review Schaltplan: **erledigt, Rev 3 ** --- //[[stefan@biereigel.de|Stefan Biereigel]] 2014/02/03 09:27// * Review Layout: **erledigt, Rev 3** --- //[[stefan@biereigel.de|Stefan Biereigel]] 2014/02/03 09:27// * Fertigung Leiterplatte: ** erledigt ** --- //[[dl3yc@darc.de|Sebastian Weiß]] 2014/02/03 14:17// * Inbetriebnahme Leiterplatte: ** erledigt ** --- //[[dl3yc@darc.de|Sebastian Weiß]] 2014/02/06 14:47// ===== Schaltungsbeschreibung ===== Die Signale einer handelsüblichen (preiswerten) Soundkarte sind massebezogen(single-ended). Die Basisbandsignale(I/Q) aus der Soundkarte werden in differentielle Signale umgewandelt. Für die Verwendung der Schaltung mit einem Rechtecksignal als LO dient das Filter am LO-Eingang. Danach wird der LO einem Puffer zugeführt, der differentielle Signale für den Modulator bereitstellt. Zusätzlich kann das LO-Signal per Dämpfungsglied im Pegel angepasst werden Zu erreichbare Daten: * Frequenzbereich: 140..500MHz -> 2m- und 70cm-Band nutzbar * LO-Buffer: 10..500MHz * Mischer: 140..1000MHz * Frequenzbereich BB: 0..80MHz -> auch für (D)ATV geeignet: [[https://web.archive.org/web/20180719124307/http://www.g8ajn.tv/dlhardware4.html|DIGI lite]] * Ausgangsleistung: 0dBm (1mW) ==== LO-Filter ==== Das Design des Filters ist schon erprobt, es macht sich gut im 2m-LNA vom SDR. Initial bekam ich damals (tm) eine 1cmx2cm große Leiterplatte von Winni DL2AWT mit genau dieser Filtertopologie. Folglich simulierte ich das Ding mal und fand passende Werte, die es auch bei Reichelt gibt. C2 und C3 sind dabei Trimmkondensatoren(3-10pF) mit 47pF Keramikkondensator parrallel geschalten. {{projekte:iqmod:simulation.png?600|}} {{projekte:iqmod:simulationsergebnis.png?600|}} {{projekte:iqmod:2m-filter.asc|LTSpice-File}} Erreichbare Daten: * Einfügedämpfung: 0dB * 3dB-Bandbreite: 15.5MHz ==== Untersuchung verschiedener LOs ==== === Si570 === Überblick Spektrum bei Sollfrequenz 144,6MHz: {{projekte:iqmod:si570_direct.jpg?200|}} Spektrum mit 2m-Filter: {{projekte:iqmod:si570_2m_filter.jpg?200|}} {{projekte:iqmod:si570_2m_filter_1.jpg?200|}} * Leistung: -1,6dBm Spektrum mit 70cm-Filter: {{projekte:iqmod:si570_70cm_filter.jpg?200|}} {{projekte:iqmod:si570_70cm_filter_1.jpg?200|}} * Leistung: -9dBm === VNWA === Überblick Spektrum bei Sollfrequenz 144,6MHz: {{projekte:iqmod:vnwa_direct.jpg?200|}} Spektrum mit 2m-Filter: {{projekte:iqmod:vnwa_2m_filter.jpg?200|}} {{projekte:iqmod:vnwa_2m_filter_1.jpg?200|}} * Leistung: -27,2dBm Überblick Spektrum bei Sollfrequenz 433,8MHz: {{projekte:iqmod:vnwa_70_direct.jpg?200|}} Spektrum mit 70cm-Filter: {{projekte:iqmod:vnwa_70_filter.jpg?200|}} {{projekte:iqmod:vnwa_70_filter_1.jpg?200|}} * Leistung: -32,6dBm === Raspberry Pi per GPCLK0 === Spektrum APRS(144,800MHz) links direkt, rechts mit 2m-Filter: {{projekte:iqmod:rpi_direct_aprs.jpg?200|}} {{projekte:iqmod:rpi_filter_aprs.jpg?200|}} Spektrum 145,450MHz links direkt, rechts mit 2m-Filter: {{projekte:iqmod:rpi_145_450_direct.jpg?200|}} {{projekte:iqmod:rpi_145_450_filter.jpg?200|}} C-Code zur Ansteuerung: #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #define BCM2708_PERI_BASE 0x20000000 #define GPIO_BASE (BCM2708_PERI_BASE + 0x200000) /* GPIO controller */ #define PAGE_SIZE (4*1024) #define BLOCK_SIZE (4*1024) int mem_fd; char *gpio_mem, *gpio_map; char *spi0_mem, *spi0_map; // I/O access volatile unsigned *gpio = NULL; volatile unsigned *allof7e = NULL; // GPIO setup macros. Always use INP_GPIO(x) before using OUT_GPIO(x) or SET_GPIO_ALT(x,y) #define INP_GPIO(g) *(gpio+((g)/10)) &= ~(7<<(((g)%10)*3)) #define OUT_GPIO(g) *(gpio+((g)/10)) |= (1<<(((g)%10)*3)) #define SET_GPIO_ALT(g,a) *(gpio+(((g)/10))) |= (((a)<=3?(a)+4:(a)==4?3:2)<<(((g)%10)*3)) #define GPIO_SET *(gpio+7) // sets bits which are 1 ignores bits which are 0 #define GPIO_CLR *(gpio+10) // clears bits which are 1 ignores bits which are 0 #define GPIO_GET *(gpio+13) // sets bits which are 1 ignores bits which are 0 #define ACCESS(base) *(volatile int*)((int)allof7e+base-0x7e000000) #define SETBIT(base, bit) ACCESS(base) |= 1< ^ LO ^ Frequenz ^ Leistung ^ | Si570 | 144,6MHz | 6,3dBm | | Si570 | 433,8MHz | -1dBm | | VNWA | 144,6MHz | -19,2dBm | | VNWA | 433,8MHz | -24,6dBm | Der I/Q-Modulator will -10dBm..0dBm am LO-Eingang. Der LO-Buffer verstärkt das LO-Signal wie folgt: {{projekte:iqmod:max2470_amp.png?300|}} Somit muss der LO mindestens -26dBm liefern. **TODO:** * ATTiny45 PLL-Ausgang: Spektrum, Leistung - z.B. 48MHz -> 2m(3. Harmonische) und 96MHz -> 70cm(3.Harmonische) * es ergeben sich 144MHz(Bandanfang 2m) und 432MHz(Bandmitte 70cm), Untersuchung der möglichen Frequenzschritte * ATTiny auch als Modulator(TinyFox)? * würde man dann quasi seine NF erst Frequenzmodulieren und dann hoch/runtermsichen um es spektral zu verschieben? klingt spannend :) * genau, man macht die FM als Basisbandverarbeitung und hat dort die bekannten pos. und neg. Frequenzen; danach gehts in den Mixer ===== Schaltplan ===== Revision: 3 {{projekte:iqmod:iqmod_sch.png?650|}} * als {{projekte:iqmod:iqmod_sch.pdf|PDF-Datei}} * als {{projekte:iqmod:iqmod.sch|Eagle-Datei}} Vorberechnung des Dämpfungsglieds ^ Dämpfung ^ R15,R16 ^ R14,R17 ^ R18^ | 0dB | - | 100Ω | - | | -20dB | 120Ω | 56Ω | 237Ω | | -25dB | 120Ω | 56Ω | 475Ω | Links zu den verwendeten Schaltkreisen: * differentielle Treiber [[http://www.analog.com/static/imported-files/data_sheets/AD8132.pdf|AD8132]] * I/Q Modulator [[http://www.analog.com/static/imported-files/data_sheets/AD8345.pdf|AD8345]] * VCO Buffer [[http://datasheets.maximintegrated.com/en/ds/MAX2470-MAX2471.pdf|MAX2470]] Inspiriert durch: [[http://hft.uni-duisburg-essen.de/arbeiten/Vortrag_BA_Al_Rifai_Khaled.pdf|Khaled Al Rifai ]] ==== Änderungen ==== === Revision 1 === //[[dl3yc@darc.de|Sebastian Weiß]] 2014/01/31 22:53// * LO-Aufbereitung um Dämpfungsglied ergänzt für Verstärkung des Buffers zu kompensieren und Pegel-Anpassung an den verwendeten LO vornehmen zu können == Review: == * Am AD8132 ist I+ am negativen Ausgang des Opamps, und I- am positiven –> Symbolfehler, Pin 4 und 5 getauscht? * Wenn, dann ist das auch schon im Datenblatt von AD8345 Seite 14 falsch. * das machen alle (tm) so: [[http://www.ecircuitcenter.com/Circuits/adcin_fully_diff/adcin_fully_diff1.htm|ADC Input Driver]] * es ergibt auch Sinn, wenn es eine Gegenkopplung statt einer Mitkopplung gibt * auf den invertierenden Ausgang per Kreis im Symbol hinweisen * Eingangspolarität am AD8345 tauschen === Revision 2 === //[[dl3yc@darc.de|Sebastian Weiß]] 2014/02/01 15:54// * AD8132 Symbolanpassung: Markierung invertierender Ausgang * AD8345 * Symbolanpassung: optische Anpassung * Footprint: Exposed-Pad abgerundet * Polarität der differentiellen Basisbandsignale korrigiert == Review: == * ist OK so --- //[[stefan@biereigel.de|Stefan Biereigel]] 2014/02/02 08:59// * MAX2470 hat hochomigen Eingang -> 50Ω Widerstand zur Anpassung des Eingangs hinzufügen * Koppel-Kondensator vor dem Eingang des MAX2470 hinzufügen --- //[[dl3yc@darc.de|Sebastian Weiß]] 2014/02/02 13:07// === Revision 3 === --- //[[dl3yc@darc.de|Sebastian Weiß]] 2014/02/03 06:52// * Koppel-Kondensator vor dem Eingang des MAX2470 hinzugefügt. == Review == * was ist mit dem angesprochenen 50 Ohm Widerstand dort am Eingang? Weggelassen? --- //[[stefan@biereigel.de|Stefan Biereigel]] 2014/02/03 09:24// * Nein, der wird mit in die 2 Widerstände des Dämpfungsglieds eingerechnet ===== Layout ===== Revision: 3 {{projekte:iqmod:iqmod_pcb.png?200|}} * als {{projekte:iqmod:iqmod_pcb.pdf|PDF-Datei}} * als {{projekte:iqmod:iqmod.brd|Eagle-Datei}} ==== Änderungen ==== === Revision 1: === == Review: == * Positionierabstand D1 / C1 evtl vergrößern * Leiterbahn zu X2 verbreitern (Anpassung) - Relevant? * 2mm sind nicht relevant -> ganze Leiterplatte verkleinern * Schrift vergrößern? * war durch ein group all/change size mit den Bauteilnamen verkleinert wurden * I/Q-Anschlüsse evtl weiter zusammenrücken? Würde das Anlöten von Klinkenkabel o.ä. vereinfachen * Befestigungsbohrungen * Gehäuse soll eine kleine Box aus Leiterplattenmaterial werden -> Masse noch drumherum zum anlöten === Revision 2: === * PCB horizontal verkleinert * Abstand C1 <-> D1 vergrößert * Anpassung an korrigierte Polarität der differentiellen Basisbandsignale == Review: == * Positionierung X1 und X2 - aus dem Gehäuse muss dann die komplette, (quadratische?) Grundfläche der SMA-Stecker ausgefräst werden, wenn das so gewollt ist - OK, ansonsten müssten sie etwas weiter nach innen gesetzt werden * ansonsten so OK * Die Steckverbinder werden wohl doch SMB, SMA-Buchsen verteuern die Leiterplatte um 1000% === Revision 3: ==== * Koppelkondensator C20 hinzugefügt ==Review:== * kann man C20, R17, R14 usw denn so noch vernünftig bestücken? Sieht sehr eng dort aus. * ansonsnten keine Regressionen festzustellen ===== Anleitung zur Inbetriebnahme ===== - Bestückung Spannungsaufbereitung - 0..10V an VIN anlegen - Auslösespannung TVS-Diode: //6,8 V//(Soll: 6,5V) - Verpolungstest: 0..-30V, Spannung an Betriebsspannung der Schaltkreise: max. -0,8V - Bestückung X1(SMA, LO-Eingang) und Filter ohne Dämpfungsglied; Koax von Mittenanzapfung L3/L4 zu VNA - VNWA-Messung LO-Filter: {{projekte:iqmod:lo-filter_wo_trimmer.png?100|}} - Spektrum Si570 mit Filter: {{projekte:iqmod:si570_lo_filter.jpg?100|Spektrum Si570 mit Filter}} - Bestückung Rest, 50Ohm-Abschluss an X1 + X2 - Stromaufnahme bei VIN=5V: //xxx mA// (Soll:90..120mA) **TODO** - Prüfung der Spannung über C3, C4, C5, C8, C10 (Soll: VIN) **OK** - Spannng und Ripple VCM: //0,8 V//(Soll: 0,7V) - Messungen per Oszilloskop, Signalgenerator an X1 f=144MHz; f=1kHz an IN_I/IN_Q: - Phasenbeziehung zwischen LO+ und LO-: //xxx°//(Soll: 180°) **entfällt** - Phasenbeziehung zwischen BB_I+ und BB_I-: //xxx°//(Soll: 180°) **entfällt** - Phasenbeziehung zwischen BB_Q+ und BB_Q-: //xxx°//(Soll: 180°) **entfällt** - Spektrumanalyzer an X2, Signalgenerator an X1 f=144MHz, IN_I und IN_Q mit 1kHz SSB-Signal - Spiegelfrequenzunterdrückung: //xxx dB// - LO Leakage: //xxx dBc// {{projekte:iqmod:iqmod_sch_inbetrieb.pdf|Inbetriebnahme-Schaltplan}} ===== Ansteuerung ===== Um normale Audio-Dateien FM-moduliert als I/Q-Signale mit einer Soundkarte ausgeben zu können, gibt es folgendes kleines Tool: **fmmod**. Dieses ist im [[https://github.com/loetlab-jena/xplorer|Xplorer-Github]] zu finden.