Mit diesem Projekt wird aus dem STM32F429-Disco Board ein DDS-Funktionsgenerator
Es sind 4 Kurvenformen im Flash abgespeichert (Sinus, Rechteck, Sägezahn, Dreieck)
Auswählbar per Touch und Einstellbar von 1Hz bis 50kHz. (Die Amplitude und der Offset vom Signal kann auch eingestellt werden)
Mit dem PC-Programm kann der Funktionsgenerator parallel zum Touch gesteuert werden und hier können auch User-Kurvenformen geladen und übertragen werden.
(das notwendige CSV-File-Format kann z.B. per Excel erstellt werden)
Hinweise :
Je nach eingestellter Frequenz ist ein mehr oder weniger großer “Jitter” auf dem Signal.
Ich bin mir nicht sicher ob das Prinzip bedingt durch die DDS kommt oder ein SW-BUG ist
(hab aber keine Lust da noch mehr Zeit zu investieren)
Auch werden die Kurvenformen bei hohen Frequenzen sehr unsauber. Um das zu verbessern müsste ein externer Tiefpass angebracht werden.
Analoger Ausgang :
DAC-2 an PA5
Verbindung zum PC :
per USB-OTG-Buchse (CN6)
1 2 3 4 5 6 7 8 9 10 11 | Befehle : ---------- "Help" : anzeige der Version und aller Befehle "GET_FRQ" : Eingestellte FRQ auslesen "GET_AMP" : Eingestellte Amplitude auslesen "GET_OFF" : Eingestellter Offset auslesen "GET_WAVE" : Eingestellte Wellenform auslesen "SET_FRQ=a.b" : FRQ einstellen (als Float-Wert) "SET_AMP=a" : Amplitude einstellen (als Int-Wert) "SET_OFF=a" : Offset einstellen (als Int-Wert) "SET_WAVE=a" : Wellenform einstellen (als Int-Wert) |
Version :
V:1.00 vom 03.04.2014
implementierte Funktionen :
Ausgabe von einer Kurvenform an PA5
Kurvenformen : Sinus, Rechteck, Sägezahn, Dreieck (aus dem Flash)
User-Kurvenform : 2 bis 4096 Stützpunkte (aus dem RAM)
DAC-Auflösung : 12bit
Frq-Einstellung : 1 Hz bis 50kHz
Amplituden-Einstellung : 0 bis 4095 (0-3,3V)
Offset-Einstellung : 0 bis 4095 (0-3,3V)
Anzeige und Steuerung per Touch oder über USB-OTG-Buchse
User-Kurvenform wird per PC-Programm übertragen.
Screenshots :
Hier der komplette CooCox-Projektordner zum download :
Hier das PC-Programm zum download :
Moin Uwe,
danke für den Funktionsgenerator.
Ich hab den Hex Code mal in einen 429 programmiert.
An PA5 wird ein Sinus von von GND bis 3V ausgegeben.
Die Spitzen des Sinus sind abgeflacht (in Sättigung).
Allerdings kann ich die Frequenz nur mit den Pfeilen bei
Waveform sinus verstellen.
Bei 10kHz zeigt der Sinus allerdings sehr deutliche Stufen.
Ich hoffe, meine Messung kann Dir ein wenig helfen.
Gruß
Adolf
da scheint noch irgendein BUG in ded DAC-Lib zu sein…Kanal-2 ist “invertiert” …k.A. warum (das Übersteuern dürfte auch nicht sein…maxwert ist 4095 = 12bit)
bei Version A.03 kann die Amplitude eingestellt werden. Das bei 10kHz der Sinus nicht mehr “sauber” ist, ist normal. DDS-Frq liegt nur bei 250kHz und die ROM-Tabelle für den Sinus hat 256 Einträge. Also ist alles > 1kHz “unsauber”
Hi Uwe,
ich habe ein ähnliches Problem wie oben beschrieben. Bei mir ist der Sinus beim Minimum abgeflacht. Durch einstellen des Offsets wird es besser, aber ich komm leider nicht dahinter wo es herkommt .
Hast du eine Idee ?
Vielen Dank schonmal und viele Grüße,
Stefan
Ist das beim Dreieck-Signal genauso ?
Ja bei dem Dreieck Signal sind die Spitzen unten auch flach.
dann ist die DAC Auflösung wohl nicht linear von 0 bis 4095. Dann musst du die Amplitude kleiner machen und den Offset etwas nach oben schieben, bis das Dreieck-Signal sauber aussieht. Bin mir nicht sicher wo da der Fehler liegt.
Hallo Uwe,
einsame Klasse deine Libs und Projekte. Hat mir sehr viel geholfen, um mit dem F4 warm zu werden. Das Begrenzungsproblem liegt wahrscheinlich an den DACs selbst. Im buffered Mode sind weder null, noch drei Volt zu erreichen. Die Puffer sind wohl nicht Rail to Rail. Das habe ich beim 407 festgestellt und das Datenblatt bestätigt das.
Grüße Lothar
Hi,
it is a very usefull example, can i have the source of pc program?
in which language is written?
Thanks to everyone!!