Wie schon angekündigt, der Rest der Bilder vom X108G
und meine erste Modifikation an der Versorgungszuführung.
Nächtes mal will ich Bilder von der Tastung und bessere Messungen zu
den Filtern (CW,SSB,AM) liefern.
vy73
Markus
Wie schon angekündigt, der Rest der Bilder vom X108G
und meine erste Modifikation an der Versorgungszuführung.
Nächtes mal will ich Bilder von der Tastung und bessere Messungen zu
den Filtern (CW,SSB,AM) liefern.
vy73
Markus
Wie schon angekündigt, der Rest der Bilder vom X108G.
Markus
Hallo Forum,
hatte wieder etwas Zeit und kommte das Gerät partiell zerlegen.
Anbei die Fotos auf mehrere Beiträge verteilt.
Werde beim nächsten Mal auch noch die Abschirmungen abnachen,
um das Darunter zu fotographieren.
Konnte es Mangels eines starken Lötkolbens nicht sofort machen.
Meine erste Modifikation an dem Gerät war das Anbringen einer
N-Buchse, da ich hauptsächlich N-Kabel und N-Zubehär habe.
Als Endlösung will ich SMA-Buches nehmen, suche nur noch eine
Variante mit dem selben Flansch.
Der Tausch ist sehr leicht zu bewerkstellinen, da der Antennenanschluß auf
einer separaten Platine an der Rückblende montiert ist und nur mittels
Federkontakte mit dem Mainboard verbunden ist.
Zudem habe ich das Lautsprecherkabel gekürzt. Es war sehr großzügig
bemessen und im aufgewickeltem Zustand zwischen den beiden
Platinen versteckt.
Einen kleinen Kern auf die Leitung unmittelbar nach dem NF-Verstärker-
ausgang habe ich auch plaziert.
Zudem noch einen Kern auf die Stromversorgungsanschlüsse drauf,
damit nichts ins Gerät einstrahlt.
Ich hoffe Ihr könnt die einzelnen ICs Aufschriften auf den Bildern noch
erkennen, wobei ich mir bei der Komprimierungsrate nicht mehr sicher bin.
Es sind Kandidaten dabei wie AD831, AD9834, AD9913, ADE-1 und
noch einige mehr.
Die verwendeten Teile sind zumindest hochwertig, wie sehr das Gerätekonzept
stimmig ist kann ich noch nicht beurteilen. Muss mich noch durch die Platine
navigieren und vorallem die Innereien unter den Schirmungsblechen ergründen.
Soweit ein Zwischenbericht. Weitere Einzelheiten folgen.
vy73
Markus
Uwe,
genau das meine ich.
Mir ist es passiv auch lieber, aber vielleicht ist diese Info für andere vom Nutzen.
Gruß
Markus
Hallo Uwe,
bei mir war der RP-FPGA nach Anbringen eines 5V RPi-Lüfters (30mmx30mm) oberhalb des KK
nur 48°C warm, laut SW-Monitor. Dabei habe ich die Web-Spec.-App am laufen gehabt (bei 62,5MHz).
Somit ist der Kühlbedarf nicht so hoch, wenn der kleine Lüfter schon soviel Abkühlung bringt (von 78°C aub 48°C).
Ich habe allerdings übersehen, dass ja onboard bereits ein Lüfteranschluß vorliegt und habe mich deshalb an
Pin #1 (+5V) der linken Leiste drangehängt.
Bei den RP Gehäusen, die es bei Reichelt, Pollin und Elektor gibt, ist ja eine Lüfterhalterung vorhanden.
Hast Du eigentlich überprüft ob Dir der Lüfter über die Spannungsversorgung oder über seine Kommutierung
die Störungen im unteren Frequenzband macht?
Gruß
Markus
Hallo Uwe,
das hört sich nach erheblicher Arbeit an, vorallem was das Ausmessen angeht.
Hast Du denn schon den Kühlkörper abmontiert?
Im kalten Zustand hält er sehr fest. Ich habe heute die beiden Stifte herausgenommen,
konnte aber den KK nicht ohne Kraftaufwand entfernen, was ich mir verkniffen habe.
Werde morgen versuchen den FPGA vorzuheizen und dann nochmals den Versuch
nach der Stromabschaltung vernehmen. Manchmal sind die Wärmepasten/Pads dann
weich und lassen sich besser handhaben.
Ich bin der Meinung, das ein KK wie im Anhang angedeutet ausreichen würde.
Mir persönlich würde ein Cu-KK mehr zusagen, wobei das natürlich die teurere und
auch mechanisch schwerere Lösung ist.
Aufgrund des Gewichts werden möglicherweise die beiden Befestigungslöcher nicht
nehr ausreichen und mann muss dann doch die Ecklöcher hinzunehmen.
Damit würder der KK größer und auch noch höcher vom Aufbau, wenn man die IO-Ports
nicht zudecken, sondern weiterhin benützen will.
Werde mir auch dazu Gedanken machen.
Man könnte ja einen Abdruck mit einer plastelinartigen-Masse machen, oder man hat Zugang
zu einem 3D-Scanner, der die Oberfläche abtastet und damit ein genaues Modell erstellt.
Bin gerade noch am Überlegen, während ich diese Zeile schreibe. Wir werden sehen, was
dabei rauskommt.
Bis dahin
Grüße
Markus
Hallo Uwe,
hast Du schon Dir eine CAD-Zeichnung erstellt, oder musst Du noch diese Fleißarbeit machen?
Mußt Du Dich selber an die Maschine stellen, oder kann die CAD/CAE Daten lesen und gleich
mehrere Stück rausspucken.
Ich wäre an zwei solchen Kühlkörpern interessiert, falls Dein Aufwand sich in Grenzen hält.
Ich selber hätte auch die Möglichkeit vorort sowas in Auftarg zu geben, müsste aber erst die Leute,
die dies machen darauf ansprechen, da ich sie noch nicht persönlich kenne.
Wir haben die feinsten Gerätschaften für sowas, allerdings benötige ich einen genauen und maschienen-
lesbaren Plan für die Herstellung und muss natürlich auch eine Lücke finden in der dies machbar wäre.
Leider bin ich noch kein Experte für die diversen CAD/CAE Formate und müsste mich erst schlau machen,
in welcher Art die Vorlage zu sein hat.
Also sollte es bei Dir aus irgendwelchen Gründen nicht klappen, so kannst Du mich bitte darauf nochmals
ansprechen und ich werde meine Fühler in der Firma ausstrecken.
Gruß
Markus
Hallo Wolfgang,
hallo Uwe,
war am WE unterwegs, so dass ich micht "Spielen" konnte ;-).
Wolfgang - Hat es mit dem RP SD-Image und dem Vergrößern der Partition geklappt?
Uwe - Werde es erst heute Abend schaffen weiter zu machen. Interessant ist ob Wolfgangs
Einwand mit den Verstärkern - dann eine Verbesserung erzielt wird, wenn Du die Schirmung
zwischen den beiden ICs anbringst, falls es das Layout der Platine zulässt.
Den Lüfter kann man Ja auch extern speisen. Ich habe meinen Lüfter an den 5V der linken IO-Leiste
angeschlossen (Pin #1), wenn die SMA-Buchsen nach oben zeigen.
Habe aber nicht im unteren Frequenzspektrum nach Störungen gesucht.
Gruß
Markus
Hallo Uwe,
gibt es das Vivado-Packet nicht auch für Windows?
Oder hast Du wegen den GCC ARM-Tools für das
Compilieren auf Linux gesetzt?
Gruß
Markus
Hallo Uwe,
wie hast Du Deine VM mit debian konfiguriert?
RAM/CPU/DISK.
Ich habe einen NB mit 4GB RAM und einen mit 8GB RAM.
Beide unter SUSE 13.1 mit x86_64 OS.
Meinst Du dass ich auf der 4GB Maschine eine 2GB VM
für diesen Zweck konfigurieren könnte.
Wie ist Deine Erfahrung was die Eckdaten für die Vivado
Installation angeht.
Bis Dato hatte ich nur FPGA SW für Altera (Quartus Webedition) auf
meinen Systemen. Xilinx habe ich bewusst vermieden.
Gruß
Markus
Hallo Uwe,
beide Eingänge waren beschaltet.
Am Eingang A hing der FA-VA3 mit 5MHz (ca. 4dBm)
Am Eingang B hatte ich den FA-Testgenerator, wobei das Gerät zu dem Zeitpunkt der
Messung ausgeschaltet war.
Wenn ich beide Signale einspeise, ist die Spektrale Linie trotzdem vorhanden.
Siehe Bilder im Anhang.
Ich habe die VA Frequenz auf 6MHz geschoben, damit man die 5MHz Linie des
TG mit 10MHz Signal sieht. Ih habe sie mit einem x gekennzeichnet.
Gruß
Markus
Hallo Forum,
habe gerade ein Signal (5MHz) an ChA eingespeißt und es
auch auf ChB gesehen - mit der Specanalyzer Web-Gui.
Siehe Bilder.
Markus
Hallo Uwe,
hallo OMs,
habe mich selber ausgetrickst.
Beim Oszi waren die Eingänge hohohmig und nicht 50 Ohm,
was durch die Anschlußleitungen bereist Reflexionen durch
Fehlanpassung zur folge hatte. Siehe Bilder:
Sorry
Markus
Hallo Uwe,
neues Problem
root@red-pitaya:/home/sdr/iqgen2# ./iq 10.0e6 +900 +0.0 +0.0 <= Bild #1 Kreis ok
root@red-pitaya:/home/sdr/iqgen2# ./iq 1.0e6 +900 +0.0 +0.0 dito
root@red-pitaya:/home/sdr/iqgen2# ./iq 5.0e6 +900 +0.0 +0.0 dito
root@red-pitaya:/home/sdr/iqgen2# ./iq 8.0e6 +900 +0.0 +0.0 dito
root@red-pitaya:/home/sdr/iqgen2# ./iq 9.0e6 +900 +0.0 +0.0 dito
root@red-pitaya:/home/sdr/iqgen2# ./iq 10.0e6 +900 +0.0 +0.0 <= Bild #2 Kreis verformt
root@red-pitaya:/home/sdr/iqgen2# ./iq 12.0e6 +900 +0.0 +0.0
root@red-pitaya:/home/sdr/iqgen2# ./iq 11.0e6 +900 +0.0 +0.0
root@red-pitaya:/home/sdr/iqgen2# ./iq 15.0e6 +900 +0.0 +0.0 <= Bild #3 kreis verformt und größer!
Ab zehn MHz wird der Kreis Unsymetrisch - (keine Elipse sondern ein Tropfen!)
Zudem steigt der Pegel an, verbeulter Kreis wird größer
Siehe Anhang
Markus
Anbei noch meine Calibrationskonstanten aus dem EEPROM:
root@red-pitaya:/home/sdr/iqgen2# calib -r -v
FE_CH1_FS_G_HI = 45870551
FE_CH2_FS_G_HI = 45870551
FE_CH1_FS_G_LO = 1016267064
FE_CH2_FS_G_LO = 1016267064
FE_CH1_DC_offs = 78
FE_CH2_DC_offs = 25
BE_CH1_FS = 42755331
BE_CH2_FS = 42755331
BE_CH1_DC_offs = -150
BE_CH2_DC_offs = -150
Hallo Uwe,
kann bestätigen, dass der neue Code immer einen Kreis zeichnet.
root@red-pitaya:/home/sdr/iqgen2# ./iq 1.0e6 -900 +0.0 +0.0 <==KreIs
root@red-pitaya:/home/sdr/iqgen2# ./iq 1.0e6 +900 +0.0 +0.0 <==KreIs
root@red-pitaya:/home/sdr/iqgen2# ./iq 1.0e6 +450 +0.0 +0.0
root@red-pitaya:/home/sdr/iqgen2# ./iq 1.0e6 +1350 +0.0 +0.0
root@red-pitaya:/home/sdr/iqgen2# ./iq 1.0e6 -1350 +0.0 +0.0
root@red-pitaya:/home/sdr/iqgen2# ./iq 1.0e6 -450 +0.0 +0.0
root@red-pitaya:/home/sdr/iqgen2# ./iq 1.0e6 -900 +0.0 +0.0 <==KreIs
root@red-pitaya:/home/sdr/iqgen2# ./iq 1.0e6 +900 +0.0 +0.0 <==KreIs
Glückwunsch.
Jetzt werde ich den DC-Offset bestimmen.
Markus
Hallo Uwe,
möglicherweise ist dies nicht der Richtige Ort diese Frage zu stellen.
Ich versuche es trotzdem:
Sollte es in der fpga_awg.h statt
typedef struct awg_reg_t {
/** @brief Offset 0x00 - State machine configuration
*
* State machine configuration register (offset 0x00):
* bits [31:24] - Reserved
* bit [ 23] - Channel B output set to 0
* bit [ 22] - Channel B state machine reset
* bit [ 21] - Channel B set one time trigger
* bit [ 20] - Channel B state machine wrap pointer
* bits [19:16] - Channel B trigger selector
* bits [15: 8] - Reserved
* bit [ 7] - Channel B output set to 0
* bit [ 6] - Channel B state machine reset
* bit [ 5] - Channel B set one time trigger
* bit [ 4] - Channel B state machine wrap pointer
* bits [ 3: 0] - Channel B trigger selector
*
*/
nicht
typedef struct awg_reg_t {
/** @brief Offset 0x00 - State machine configuration
*
* State machine configuration register (offset 0x00):
* bits [31:24] - Reserved
* bit [ 23] - Channel B output set to 0
* bit [ 22] - Channel B state machine reset
* bit [ 21] - Channel B set one time trigger
* bit [ 20] - Channel B state machine wrap pointer
* bits [19:16] - Channel B trigger selector
* bits [15: 8] - Reserved
* bit [ 7] - Channel A output set to 0
* bit [ 6] - Channel A state machine reset
* bit [ 5] - Channel A set one time trigger
* bit [ 4] - Channel A state machine wrap pointer
* bits [ 3: 0] - Channel A trigger selector
*
*/
oder umgekehrt
typedef struct awg_reg_t {
/** @brief Offset 0x00 - State machine configuration
*
* State machine configuration register (offset 0x00):
* bits [31:24] - Reserved
* bit [ 23] - Channel A output set to 0
* bit [ 22] - Channel A state machine reset
* bit [ 21] - Channel A set one time trigger
* bit [ 20] - Channel A state machine wrap pointer
* bits [19:16] - Channel B trigger selector
* bits [15: 8] - Reserved
* bit [ 7] - Channel B output set to 0
* bit [ 6] - Channel B state machine reset
* bit [ 5] - Channel B set one time trigger
* bit [ 4] - Channel B state machine wrap pointer
* bits [ 3: 0] - Channel B trigger selector
*
*/
heisen?
Markus
HAllo Uwe,
danke für Deine ausführiche Antwort.
Zu der Konstantenänderung (auf die schnelle klappt es leider nicht)
"die Konstante auf 0x410041"
musst Du mir bitte noch sagen wo ich diese ändern soll.
Es gibt ja zwei Stellen, wo sie gesetzt werden:
Zeile 123: g_awg_reg->state_machine_conf = 0x000041;
und
Zeile 145: g_awg_reg->state_machine_conf = 0x110011;
oder sollen beide auf den o.g. Wert geändert werden?
Markus
Hallo OMs,
die ersten Schritte sind wie immer erwas Mühsam.
Verstehe ich das soweit richtig, dass der RP im FPGA bereits vorkonfigurierte
Funktionsblöcke beinhaltet, auf die man dan z.B. über Libs / Header-Files
zugreifen kann.
z.B. Arbitrary Waveform Generator (AWG) FPGA controller als Funktionsblock
kann über die Files fpga_awg.h / fpga_awg.c angesprochen werden.
Solange der FPGA nicht neu mit Strukturanweisungen gefüllt wird, wozu man ja die
Xilinx-Tools braucht, kann man auf diese vorkonfigurierten Strukturen, die im
Auslieferungszustand vorhanden sing, zugreifen.
Für heute genug gespielt - Jetzt gehts ins Bett
Morgen ist ja auch noch ein Tag.
Markus
Hallo Uwe,
ich schon wieder,
habe halt RP Blut geleckt
ist das der Code in dem Du eine LTU für den Sin/Cos aufbaust
um sie dann an den Kanal A/B zu schicken?
for(uint32_t i = 0; i < n; i++) {
data = round(amp1 * cos(2*M_PI*(double)i/(double)n));
if (data < 0) {
data += (1 << 14);
}
g_awg_cha_mem[i] = data;
data = round(amp2 * cos(2*M_PI*(double)((phase_offset + i) % n)/(double)n));
if (data < 0) {
data += (1 << 14);
}
g_awg_chb_mem[i] = data;
Anscheinend braucht man diese _agw_ Funktionen um mit dem Konfiguriertem FPGA zu kommunizieren.
Wo kann man sich über die Aufrufe
g_awg_reg->state_machine_conf = 0x000041;
und
g_awg_reg->state_machine_conf = 0x110011;
schlau machen, wie sind die Flags zu intepretieren.
Markus
Konnte meine Frage selbst beantworten:
uint32_t state_machine_conf;
/** @brief Offset 0x04 - Channel A amplitude scale and offset
*
* Channel A amplitude scale and offset register (offset 0x04) used to set the
* amplitude and scale of output signal: out = (data * scale)/0x2000 + offset
* bits [31:30] - Reserved
* bits [29:16] - Amplitude offset
* bits [15:14] - Reserved
* bits [13: 0] - Amplitude scale (0x2000 == multiply by 1, unsigned)
*/
aus fpga_awg.h
Hallo Uwe,
einen habe ich noch
Ich verstehe folgenden Zusammenhang nicht:
In der ersten if-Anweisung wird dafür gesorgt, dass der
Phasenparameter zwischen -1799 und + 1800 liegt,
sonst wird der Programmablauf unterbrohen.
In der Zugehörigen else-Anweisung wird der Phasenwert
Modulo 3600 geteilt, aber der Rest ist ja immer gleich dem
ursprünglichem Wert des Phasenparameters, da dieser
doch immer kleiner 1800 ist.
Kannst Du mir erklären was Du mit der Modulo 3600 Division
bezweckst. Irgend wie stehe ich auf dem Schlauch, was diese
Codesequenz angeht.
/* Phase Offset */
int32_t phase_offset = atoi(argv[2]);
if ((phase_offset < -1799) (phase_offset > 1800)) { <============= 1.
fprintf(stderr, "Invalid phase shift: %s\n", argv[2]);
usage();
return -1;
} else {
phase_offset = phase_offset % 3600; <============== 2.
if (phase_offset < 0) {
phase_offset += 3600;
}
/* scale it to match AWG buffer length */
phase_offset = n * phase_offset / 3600;
}
Danke für Deine Mühe schon mal im Vorraus.
Gruß
Markus