Open-B1 (noch) eine Erweiterung für den R&S UPL

Wed 18 March 2026

Audio, Elektronik, Messtechnik

Hier wird die Entwicklung eine Erweiterungskarte für den UPL Audio-Analyzer von R&S vorgestellt.

HINWEIS: Bei diesem Hobbyprojekt handelt es sich um einen Prototypen einer Idee und nicht um ein fertiges Produkt. Nachbau und Verwendung erfolgen auf eigenes Risiko!!!

Allgemeines

Dieses mal wenden wir uns der B1 Erweiterung des R&S UPL zu, diese ist so etwas wie der Mt. Everest, wenn man sich vorher mit dem Nachbau einer B5 beschäftigt hat.

Die Karte ist randvoll mit edelsten Komponenten, die teilweise nur noch für die Raumfahrt gebaut werden. Diese haben leider auch wieder mal Mondpreise. Ein, relativ, einfacher J-FET aus der Oszillatorstufe kostet bei einschlägigen, namhaften, Distributoren jenseits der 40 Eur, pro Stück. Vielleicht kann man da etwas tun, damit der modernere Nachbau nicht ganz so heftig auf den Geldbeutel drückt.

Funktionsprinzip

Um einen THD+N < -130dB zu erreichen gingen die Entwickler kompromisslos vor, das System basiert auf einem State-Variable Oscillator. Also zwei hintereinander geschalteten RC-Phasenschiebern, die damit 180 Grad Phasendrehung erzeugen und damit per Definition einen sehr reinen Sinus ausgeben.

Der Oszillator

Dabei ist zu beachten, dass die Amplitude eines solchen Signals leider nicht konstant ist, da die verschiedenen Einstellungen die Systemimpedanz verändern und somit der entstehende Pegel nicht konstant ist.

Um diesen Mangel zu behehben, wird eine automatische Pegelanpassung genutzt (AGC). Diese steuert den Ausgabepegel so nach, dass dieser in erster Näherung über den nutzbaren Parameterraum konstant bleibt.

Pegelstabilisierung (ALC)

Das aus diesem Abschnitt entstehende, verstärkte oder abgeschwächte Cosinus-Signal wird an den Oszillator zurückgeführt und an dessen Summenpunkt wieder eingespeist. Durch konstruktive/destruktive Interferrenz wird dann das Ausgangssignal (Sinus) in seinem Pegel indirekt geregelt.

Original Schaltplan abzeichnen

Auch dieses mal wurde zunächst der original Schaltplan abgezeichnet, die Board-Outline zurecht gerückt und dann erst einmal alles auf “Original” gezeichnet und die Bauteile grob platziert. Danke Bjirre für die präzise Arbeit im Abzeichnen des Schaltplans.

Dabei stellte sich heraus, dass der Schaltplan auch sämtliche händische Nacharbeiten, wie fliegende Bauteile, Fädeldrähte usw. enthielt. Damit entfiel zum Glück das Nachzeichen und Nachdokumentieren dieser Komponenten.

Dennoch fanden sich viele Bauelemente, die entweder nicht mehr hergestellt, z.B. J104, oder die aufgrund ihrer speziellen Anwendungsfälle in der Raumfahrt extrem teuer waren.

Auch der analoge Multiplizierer für die automatische Pegelreglung (AGC), damals von Motorola, ist mittlerweile nicht mehr erhältlich. Also braucht es, mal wieder, einen Haufen Substitutionen. Nur diesmal sind die Anforderungen an die Bauteile deutlich höher, wir wollen ja auch das Niveau der Original-Erweiterung erreichen.

Prüfsystem bauen

Um ein solches Meisterwerk der Technik gebührend zu würdigen, braucht es zunächst einmal eine Prüfvorrichtung, in der man es außerhalb seiner rostigen und schweren Heimat in Ruhe auf Herz und Nieren testen kann.

Hier kommt das bewährte Micropython auf einem Raspberry Pi Pico ins Spiel. Hiermit kan man die Hardware schnell interaktiv in Betrieb nehmen, ohne den lästigen Code/Compile/Flash/Fail/Repeat-Zyklus.

Der Pico sitzt auf einer kleinen Adapterleiterplatte mit Pegelwandlern, Spannungsreglern, Sicherungen und zwei B1-Steckplätzen. So kann man später hoffentlich ordentliche A/B Vergleiche machen, ohne ständig umstecken zu müssen.

Erste Erkenntnisse

Zunächst wurden die Steuerungsregister und deren Auswirkung auf die B1 untersucht. Hierzu wurde nahezu der gesamte Einstellraum der Karte von einem Python-Skript einem “richtigen” Computer das mithilfe einer Bibilothek mit dem Pico und einem an strategischen Stellen in der B1 angeschlossenen Vierkanal-Oszilloskop die Reaktion der Karte untersuchte.

Die Karte hat nicht weniger als vier Parameter, die die auszugebende Frequenz einstellen. Der offensichtlichste die Frequenzbereichswahl, diese wurde sogar im Service-Handbuch erwähnt, was einiges Kopfzerbrechen gespart hat. Denn man könnte auch mehrere Zweige gleichzeitig einschalten. Aber, da im Service-Manual explizit steht, dass es vier Generatorbereich gibt, konnte dies ausgeschlossen werden.

Hier werden die Integrator-Kondensatoren durch Parallelschaltung angepasst. Die J-FET 2N5432 im klassischen TO-52 Metallgehäuse werden heute noch für die Raumfahrt hergestellt. Vermutlich sollte man sich hierbei schon nach etwas “irdischeren” Bauteilen umsehen, der Stückpreis jenseits der 40 Eur/Stück ist wirklich astronomisch.

Wahl des Frequenzbereichs

Dann kommt die “Grobeinstellung” mittels vier gewichteter Widerstände. Diese stellen die grobe Frequenz ein und können insgesamt 16 Werte annehmen. Also haben wir schon mal 4*16=64 Stellwerte, das werden aber noch mehr.

Frequenz-Grobeinstellung

Dann kommt das “Loop-Gain”, dieses wirkt quasi als Grobeinstellung des Oszillators indem er einen weiteren 41k1-Widerstand immer stärker in die Schleife mit einmischt. Hier stehen dem geneigten Programmierer immerhin 12-Bit zur Verfügung. Also 4096 diskrete Werte, macht dann 4164096=131072 Einstellwerte.

Frequenzeinstellung

Ferner gibt es dann noch den “Tune” DA-Wandler mit weiteren 12 Bit. Dieser mischt der Schleifenrückkopplung noch mehr Signal zu. Damit kommen wir auf wahnsinnige 4164096*4096=1073741824 theoretisch einstellbare Wertekombinationen. Selbstverständlich gibt es hier Überlappungen der Frequenzen bei verschiedenen Kombinationen von Parametern.

Frequenz-Feineinstellung

Um diesen, doch relativ unhandlichen, Werteraum möglichst großflächig abzutesten, wurde die einzlnen Parameter etwas ausgedünnt: Währen Frequenzbereich (range) und Grobeinstellung (coarse) vollständig ausgefahren wurden, wurde der Stellbereich der beiden D/A-Wandlern in jeweils 16 Schritten durchlaufen. Damit kamen nur etwa 4100 Schritte heraus.

Dazu brauchte der Messaufbau aufgrund von Fehlmessungen, Nachstellen von Messbereichen usw. etwa 20 Stunden. Mit einem automatisierten Multimeter und einer Schaltmatrix wäre das vermutlich in der halben Zeit gegangen, aber man muss ja nutzen was gerade da ist.

Hieraus ergaben sich für das vorliegende Muster die folgenden Parameter für die Frequenzgleichung:

$$ f(\mathrm{coarse}, \mathrm{gain}, \mathrm{tune}) = a + b\cdot \mathrm{coarse} + c\cdot \mathrm{gain} + d\cdot \mathrm{tune} $$

range a b c d
0 108273.653 -6939.9653 -1.5444 1.2271
1 21910.3292 -1400.4995 -0.4558 0.3474
2 1872.7969 -116.7636 -0.0304 -0.001
4 191.5329 -11.943 -0.0029 -0.0002

Zur Berechnung der Parameter wurde die scikit-learn-Bibliothek in Python verwendet:

import numpy as np
import pandas as pd
from sklearn.linear_model import LinearRegression

control = pd.read_csv("../../Documentation//frequency_control.csv", sep=";")

# Mark bad readings
for column in control.columns:
    control.loc[control[column] > 9e32] = np.nan


# Do an individual fit for each range
for range in [0, 1, 2, 4]:
    data = control[(control["range / 1"] == range)]
    lr = LinearRegression()
    lr.fit(data[["coarse / 1", "gain / 1", "tune"]], data["freq / Hz"])

    print(
        f"f{range}(coarse, gain) = {lr.intercept_}  {lr.coef_[0]}*coarse {lr.coef_[1]}*gain",
    )

Einschwingzeit ermitteln

Da sich die Karte mit ihrer Pegelregelung (AGC) in endlicher Zeit einschwingen sollte, muss diese auch in einem Nachbau passen. Zur Bewertung der Eigenschaften wurde wieder der Testaufbau, diesmal mit anderem Code genutzt.

Ersatzbauteile finden

TBD

Ausblick

Quellcode