Forum: Analoge Elektronik und Schaltungstechnik 2 Channel Signalgenerator - Entwicklungsprojekt


von Tim R. (mugen)


Lesenswert?

Moin erstmal!

Für einige Messaufbauten brauche ich oft einen Signalgenerator mit 
mindesten 2 Kanälen. Für mich reicht oft ein einfaches Sinus-Signal, 
wobei die Phasenverschiebung zueinander einstellbar sein sollte.

Zunächst habe ich im Forum nach bestehenden Lösungen und Geräten 
gesucht. Ich selber wurde nicht im Internet fündig. Als kostenintensive 
Lösung habe ich nur Signalgeneratoren gefunden, die mindestens 259€ 
(Siglent SDG1010 - was sehr sehr günstig ist) kosten. Leider hat genau 
dieses Gerät unterschiedliche DA-Wandler und kann somit nicht gleiche 
Ausgangsspannungen zur Verfügung stellen. Nicht weiter schlimm, aber 
dieser Kompromiss gefällt mir überhaupt nicht. Aus diesem Grund möchte 
ich zunächst einen kostengünstigen Signalgenerator für <= 60Hz 
entwickeln und hoffen auf Unterstützung bei den Spezifikationen. Dieses 
Projekt werde ich zu 100% durchführen, wird aber sicherlich einige 
Monate in Anspruch nehmen. Den Source-Code und die Gerberdaten werde ich 
veröffentlichen.

Spezifikationen:

Zwei Analoge Ausgänge mit >=+-10V; >=14bit; max. 60Hz; sample rate ca. 
216Ksps  ( 1/60Hz = 16,66ms --> 16,66ms / 3600 = 4,63µs -> 216k )
- Kurzschlussfeste Ausgänge
- Klirrfaktor: <= 0.2% (wobei ich hier wenige Kenntnisse besitze)
- Offset einstellbar, wie auch die Amplitude (digital oder Analog? )
- Ein oder zwei DA Wandler, die zueinander synchronisierbar sein 
sollten. Ich möchte mir die Möglichkeit offen halten die Anzahl der 
Kanäle von 2 auf 4 zu erweitern.
- evtl. Triggerausgang
- Frequenzänderungen des Sinussignals bei 0° oder 180°; evtl. dieses 
Event auf dem Triggerausgang ausgeben (Goodie)

Power Supply: 230V auf +-15V; konservativer Aufbau

Bedienung: zunächst einfach
Steller: Offset, Amplitude 1, Amplitude 2, Phasenverschiebung, Frequenz
Anzeige: möglichst übersichtlich und kostengünstig

Mögliche Logik: C2000 Serie, STM32, MSP430G2... (Value Line), XILINX 
CPLD

Schön wäre eigentlich die Möglichkeit die Schaltung einfach nachbauen zu 
können, dies würde aber die Auswahl der Logik/Mikrocontroller schnell 
auf  MSP430 oder STM32 reduzieren. MSP430G2553 ziehe ich aufgrund des 
Preises vor, wobei der Code sehr kompakt sein sollte um ein SPI Signal 
von ca. 5Mhz zu erzeugen. Ich bin mir nicht einmal sicher ob es 
überhaupt möglich ist - muss geprüft werden.

Mögliche DA Wandler:

Analog Devices:

1x AD5722 12bit - ca. 9€
1x AD5732 14bit
1x AD5752 16bit - ca. 20€ (würde ich als zu teuer definieren)


Texas Instruments:

2x DAC8831 16bit - soic - ca. 16€

... ich suche noch weitere möglich DAC raus. Vorschläge sind erwünscht!. 
Am Liebsten wären mir DACs, die man in gleichem PIN-Layout in 
unterschiedlichen Auflösungen (12, 14 und 16bit) kaufen kann.

Optionale Erweiterungen:
+ Erhöhung der Ausgangsfrequenz
+ Rechteck, Sägezahn (Wobei ich für ersteres eine Komparatorenlösung 
vorziehen würde)

Zielpreis wäre eigentlich zwischen 20€ und 50€, aber aufgrund des DA 
Wandlers und die Anzeige sehe ich da etwas schwarz die 20€ zu erreichen.

von Tim R. (mugen)


Lesenswert?

Billige AD Wandler, wobei diese wirklich nicht genau sind, 16Bit steht 
nur in der Überschrift:

Texas Instruments DAC8411 DAC8311 DAC7311 DAC6311 DAC5311

Wenn es billig sein soll, dann würde der DAC8311 (14bit) und DAC7311 
(12bit) durchaus reichen. Die Signalqualität bei Wechselsignalen könnte 
ich mit meinem Oszilloskop (8Bit AD) eh nicht richtig prüfen. lach

von Na Sowas (Gast)


Lesenswert?

Es geht um ein Stueck oder so. Dann vergiss die Preise. Die Arbeit ist 
viel teurer. Dann mach gleich eine vierlagige Leiterplatte. Die ist 
erstens leichter zu routen, und zweitens kompakter.

von Tim R. (mugen)


Lesenswert?

Na Sowas schrieb:
> ...vierlagige Leiterplatte.

Bestimmt nicht, wird für private Zwecke viel zu teuer. Ich bin selber 
ein Fürsprecher für 4lagige, aber dies würde nur Sinn machen bei 
teureren Projekten.

von Hop Triceratop (Gast)


Lesenswert?

Eine 4 lagige Leiterplatte gibt's fuer 100 Euro. Wie lange dauert das 
Layout mit einer 2 Lagigen, wie lange mit einer 4 Lagigen ? Nun nimmt 
man die Differenzstunden und multipliziert die mit einem Stundenlohn. 
Rechne.

von Tim R. (mugen)


Lesenswert?

Hop Triceratop schrieb:
> Nun nimmt
> man die Differenzstunden und multipliziert die mit einem Stundenlohn.
> Rechne.

Es ist eigentlich mehr als traurig, da stelle ich mich bereit etwas zu 
entwickeln, weil ich es selber benötige und weil ich es der 
Allgemeinheit zur Verfügung stellen möchte. Was bekomme ich? Kritik von 
Gästen. Dabei kennen die liebe Gäste überhaupt nicht meinen Hintergrund, 
welche Erfahrungen ich bereits gemacht habe und wie gut ich im Layouten 
bin. Mich interessiert zunächst nicht die Arbeitszeit, ich bin eher am 
Überlegen ob ich einen kleinen ungenauen Signalgenerator bauen soll oder 
eher mit einer höheren Signalqualität. Ich will hier überhaupt nicht in 
diesem Stadium irgendeine Diskussion über Platinen, Layer oder Layout 
führen. Würdet ihr einmal in einem realen Projekt mitgearbeitet haben, 
dann wüsstet ihr es auch.

von Ralph B. (rberres)


Lesenswert?

Hop Triceratop schrieb:
> Eine 4 lagige Leiterplatte gibt's fuer 100 Euro. Wie lange dauert das
>
> Layout mit einer 2 Lagigen, wie lange mit einer 4 Lagigen ? Nun nimmt
>
> man die Differenzstunden und multipliziert die mit einem Stundenlohn.
>
> Rechne.

Weist du denn, ob der TE das im Rahmen einer Diensttätigkeit macht?
Dann würde ich dir unter gewisse Umständen Recht geben.

Wenn er es aber als privates Hobby macht, dann sind 100 Euro ( oder sind 
es sogar mehr? ) für eine vierlagige Leiterplatte schnell ein Betrag, 
der alleine so groß ist, wie die sonstige Kosten. Somit also nicht 
tragbar.

Ralph Berres

von Hop Triceratop (Gast)


Lesenswert?

Ok. Lassen wir die Layer. Das ganze soll zwar als Lehrprojekt 
aufgegleist werden, aber nicht unbedingt fuer eine Multilayer 
Leiterplatte. Auch gut.
Es gibt immer noch genug zu tun. Ich wuerd das FPGA/CPLD sein lassen, 
und einen Controller waehlen, der 4 SPI Schnittstellen auf's Mal 
bedienen kann. Ein zusaetzliches FPGA/CPLD erhoeht nur den Aufwand, und 
erschwert die Reproduzierbarkeit.

von Ralph B. (rberres)


Lesenswert?

Tim R. schrieb:
> Es ist eigentlich mehr als traurig, da stelle ich mich bereit etwas zu
>
> entwickeln, weil ich es selber benötige und weil ich es der
>
> Allgemeinheit zur Verfügung stellen möchte.

Mal ganz im Ernst. Ich würde an deiner Stelle für deinen privaten 
Gebrauch genau das Gerät entwickeln und bauen, was deinen persöhnlichen 
Anforderungen genau entspricht. Das würde ich ganz im stillen Kämerlein 
machen ohne irgend jemanden hier zu informieren.

Wenn dein Projekt dann abgeschlossen ist, würde ich es zur 
Veröffentlichung Fachzeitschriften wie
Funkamateur Elektor UKW Berichte usw anbieten. Wenn das Projekt 
interessant für einen breiteren Personenkreis ist, bekommst du für die 
Veröffentlichung sogar noch Geld.

Da brauchht man wirklich das Forum hier nicht dafür. Wie du schon 
festgestellt hast, wird hier eh nur alles zerredet.

Ralph Berres

von Jobst M. (jobstens-de)


Lesenswert?

Nur mal so als Frage:

Du möchtest eine maximale Ausgangsfrequenz von 60Hz mit 216ksps 
abtasten?
Warum dieser Aufwand?
60Hz lassen sich mit weit geringerer Abtastrate sauber produzieren.
Auch mit einem Klirrfaktor von weniger als 0,2%


Gruß

Jobst

von Tim R. (mugen)


Lesenswert?

> Du möchtest eine maximale Ausgangsfrequenz von 60Hz mit 216ksps
> abtasten?
> Warum dieser Aufwand?
> 60Hz lassen sich mit weit geringerer Abtastrate sauber produzieren.
> Auch mit einem Klirrfaktor von weniger als 0,2%

Ich bin zunächst davon ausgegangen die Phasenverschiebung zwischen den 
Kanälen in 0,1° Schritten einstellen zu können.

Bei 1° genaue Einstellung bräuchte ich mindestens:

T = 1/60Hz = 16,66ms
1° = 16,66ms / 360 = 46,296µs würde eine Samplerate von 21,6Ksps 
entsprechen.

Faktor 10 davon, wenn eine 0,1° genaue Einstellung erfolgen soll.

von Jobst M. (jobstens-de)


Lesenswert?

Tim R. schrieb:
> Bei 1° genaue Einstellung bräuchte ich mindestens:

Nein, brauchst Du nicht. Das geht anders.
Du mußt nur die Stützstellen korrekt berechnen.


Gruß

Jobst

von Ulrich (Gast)


Lesenswert?

Für ein 60 Hz Signal reicht der Ausgang einer ganz normalen Soundkarte 
alle mal aus. Die passende Lösung (bis ca. 18 kHz) wäre also ein alter 
PC mit einer durchschnittlichen Soundkarte und etwas Software und einem 
Ausgangsverstärker dazu.

Mit einer Abtastrate von 200 kHz könnte man Signale bis etwa 40-80 kHz 
darstellen, je nachdem wie viel Aufwand man bei Rekonstrucktionsfilter 
treibt. Mit einem der genannten schnellen µC könnte die Abtastrate aber 
ggf. auch etwas höher (Richtung 1 MHz) werden, auch wenn dabei die 
Auflösung etwas geringer wird.  Für nur Sinus gibt es auch gleich 
fertige DDS ICs - da reicht dann ein kleiner 8 Bit µC für die Steuerung 
und Anzeige.

von Jobst M. (jobstens-de)


Lesenswert?

Ulrich schrieb:
> Für nur Sinus gibt es auch gleich
> fertige DDS ICs - da reicht dann ein kleiner 8 Bit µC für die Steuerung
> und Anzeige.

Da kann er aber nicht die Phase von 2 Signalen einstellen.

Soundkarte fällt vermutlich wegen unterer Grenzfrequenz aus.


Gruß

Jobst

von Tim R. (mugen)


Angehängte Dateien:

Lesenswert?

Ulrich schrieb:
> Rekonstrucktionsfilter

Und genau bei diesem Thema bekomme ich gerade etwas Kopfschmerzen. Mein 
SCILab qualmt gerade und versuche schon vorab in der Signaltheorie (sehr 
eingerostet) einige Probleme vorab zu lösen. Da sieht man sehr schön, 
dass Auflösung nicht immer alles ist, wenn die Samplefrequenz nicht 
stimmt.

Eine Samplerate von 250Ksps sieht allerdings sehr vielversprechend aus, 
wenn man Dithering (Aufmodulierter Sägezahn) nutzt.
--> http://www.mikrocontroller.net/articles/Dithering


SCILab-Code (Erste Anfänge, bitte nicht zu viel Kritik)
1
sample_rate = 250000; //Ksps
2
anzahl_perioden = 1;
3
frequenz = 60;    // Hz
4
ausloesung = 8; // resolution  bit
5
res_bit = 2/(2^ausloesung); // Value per bit
6
sample_rate_inv = 1/sample_rate;
7
t_periode = 1/frequenz;
8
t = 0:(1/sample_rate):anzahl_perioden*t_periode;
9
N=size(t,'*'); //number of samples
10
s=sin(2*%pi*frequenz*t);
11
s2=s;
12
l_i = size(s,'*');
13
for i=1:l_i;
14
    if(s2(i)>=0)
15
        if(modulo(s(i),res_bit)<res_bit)
16
            s2(i) = (round(s(i)/res_bit))*res_bit;
17
        else
18
            s2(i) = ()round(s(i)/res_bit) + res_bit)+res_bit;  
19
        end  
20
    else
21
        if(modulo(s(i),res_bit)<-res_bit)
22
            s2(i) = (round(s(i)/res_bit) + res_bit)+res_bit; 
23
        else
24
            s2(i) = (round(s(i)/res_bit))*res_bit; 
25
        end
26
    end
27
end;
28
29
30
//nun alle samples einmal einen Schritt nach links verschieben
31
l_value = s2(0);//erste Position merken, wobei dies immer 0 sein sollte
32
33
34
l_i = size(s,'*'); // ja nochmal
35
for i=1:(l_i-1);
36
    s2(i)=s2(i+1);
37
end;
38
s2(l_i) = l_value; //oh ein wunder 0
39
40
//quantisierungsrauschen
41
l_i = size(s,'*'); // ja nochmal
42
l_flipflop = 0;
43
for i=1:(l_i);
44
    if l_flipflop == 0 then
45
        s2(i)=s2(i)+res_bit;
46
        l_flipflop = 1;
47
    else
48
        s2(i)=s2(i)-res_bit;
49
        l_flipflop = 0;        
50
    end
51
end;
52
53
54
plot2d(s);
55
e=gce();
56
e.children.foreground = 5
57
plot2d(s2);
58
e=gce();
59
e.children.polyline_style = 1
60
e.children.foreground = 2

von Jobst M. (jobstens-de)


Lesenswert?

Tim R. schrieb:
> - Frequenzänderungen des Sinussignals bei 0° oder 180°

Würde ich bei 90° oder 270° machen, einfach um den vollen Pegel zu 
garantieren. (Ist in Deinem Fall allerdings weniger kritisch)


Ich habe auch gerade mal Simuliert.
250kHz PDM und ordentliches Filter dahinter. Erfüllt Deine Bedingung von 
<0,2% Klirr. Ich habe mir nicht einmal Mühe gegeben.
Das Ganze ist also mit einem ATmega168 mit Boardmitteln + Filter (.. 
Verstärker, etc.) zu erledigen. Bis zu 4 Kanäle sind kein Problem - wenn 
sie an einem Port sitzen. Der IRQ benötigt ca. 50 von 80 Takten, bei 
20MHz Takt.


Gruß

Jobst

von Tim R. (mugen)


Lesenswert?

Jobst M. schrieb:
> Ich habe auch gerade mal Simuliert.

Sehr schön! Wie hast du es simuliert?

von Jobst M. (jobstens-de)


Lesenswert?

Ich habe einen berechneten Datenstrom über ein Filter geschickt.

Das kann man alles in Calc/Excel machen.


Gruß

Jobst

von Jobst M. (jobstens-de)


Angehängte Dateien:

Lesenswert?

Hier der Stream.

Dies durch ein 300Hz 24dB/Okt Filter schicken ...
Alle 4µs ein Bit ...


Gruß

Jobst

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.