Hallo liebe Community,
da ich noch ein "Neuling" auf dem Gebiet der Arduino´s bin, wollte ich mich hier einmal an euch wenden, um einige Unklarheiten die während der Einarbeitungsphase in das u.g. Projekt aufgekommen sind, ggf. zu beseitigen.
Zum Projekt/Vorhaben:
Es soll ein 3-Phasen-Sinus Generator mit variabler Frequenz & Amplitude aufgebaut werden. Dabei soll die Phasenabweichung des Sinussignals maximal 0,01° betragen und einen Frequenzbereich von 50 Hz bis 5 kHz abdecken können (Umwandlung von PWM- auf Sinussignal soll über einen DAC erfolgen).
Nun zu meinen Fragen:
-
Also grundsätzlich lässt sich die Amplitude des Sinussignals über den "Duty-Cycle" der PWM justieren oder?
-
Die Frequenz lässt sich wahrscheinlich nicht "vollvariabel" einstellen oder? Weil ich mich etwas in die Timer Programmierung eingelesen habe - Dazu ist mein aktueller Wissensstand, dass zwar verschiedene Frequenzen möglich sind, allerdings nur fünf verschiedene pro Timer. Ist das soweit korrekt aufgefasst von mir?
3.1 - PWM ohne pfeifen - Scynd.de ->Hier meine Quelle
-
Und zum Sinus Signal: Wenn ich meine PWM-Signal aus 256 (0-255) Stufen aufbaue, um eine komplette "Sinuswelle" zu erhalten (zwecks der Genauigkeit) wird es mit der geforderten Frequenz des Sinus wahrscheinlich schwierig oder?
Für eure Unterstützung, sowie Hilfreiche Tipps zu meinem Anliegen, bedanke ich mich jetzt schon einmal im Vorraus 
- was nun; PWM oder DAC?
- Finde ich unmöglich mit den Vorgaben
- verstehe ich nicht.
Ich glaube Deine Vorgaben sind zu hoch geschraubt.
Es soll ein 3-Phasen-Sinus Generator mit variabler Frequenz & Amplitude aufgebaut werden. Dabei soll die Phasenabweichung des Sinussignals maximal 0,01° betragen und einen Frequenzbereich von 50 Hz bis 5 kHz abdecken können (Umwandlung von PWM- auf Sinussignal soll über einen DAC erfolgen).
also mal nachgerechnet. 360° sind 20mS bis 0,2mS
Ein 0,01° Fehler ist eine Zeitgenauigkeit von:
bei 50 Hz; 20mS Genauigkeit 0,555 µS
bei 5000 Hz; 200µS Genauigkeit 5,55 nS
Ich weiß nicht, wie genau man eine Sinuswelle mittels PWM erzeugen kann und wie hoch die Frequenz des PWM sein muß um die geforderte Genauigkeit zu erhalten.
DAC müßte dann mit 5nS oder 200Mhz angesteuert werden können um die Zeiten einhalten zu können.
Was willst Du denn eigentlich machen?
Grüße Uwe
Deine Anforderungen lassen sich nur mit sehr teurem Equipment erfüllen. Und wenn dann hinten auch noch Leistung herauskommen soll, um irgendwas anzutreiben, dann am besten gleich ein richtiger Drehstromgenerator.
Ich würde mal mit einem Mega anfangen, der kann 3 gekoppelte PWM-Signale mit einem Timer erzeugen. Wenn man die Frequenz ändert, muß man nur noch die Phasen nachjustieren.
uwefed:
- was nun; PWM oder DAC?
- Finde ich unmöglich mit den Vorgaben
- verstehe ich nicht.
Ich glaube Deine Vorgaben sind zu hoch geschraubt.
also mal nachgerechnet. 360° sind 20mS bis 0,2mS
Ein 0,01° Fehler ist eine Zeitgenauigkeit von:
bei 50 Hz; 20mS Genauigkeit 0,555 µS
bei 5000 Hz; 200µS Genauigkeit 5,55 nS
Ich weiß nicht, wie genau man eine Sinuswelle mittels PWM erzeugen kann und wie hoch die Frequenz des PWM sein muß um die geforderte Genauigkeit zu erhalten.
DAC müßte dann mit 5nS oder 200Mhz angesteuert werden können um die Zeiten einhalten zu können.
Was willst Du denn eigentlich machen?
Grüße Uwe
Vielen Dank erst einmal für die ausführliche Antwort.
Zu 1: Grundsätzlich ist es ja so, dass wenn ich in dem PWM-Signal den "Duty-Cycle" verändere, dass sich dann dadurch die Amplitude in dem Sinus verändern würde!? Da ja gilt 0 = 0 V und 255 = 5 V Spannung am Ausgang.
Zu 2: Die PWM Pins sind ja an Timer gekoppelt, beim UNO wären das ja 2 8 Bit- und ein 16 Bit-Timer. Und jetzt habe ich gelesen, dass sich die Frequenz durch Verstellen der Timer ändern lässt. Jedoch aber nur in 5 verschiedene Frequenzen, da es nur 5 Teiler für die Timer gibt - s. dazu angehängter Link (Tabelle).
Das wäre dann aber keine variable Frequenz Verstellung zw. 50 Hz und 5 kHz.
Viele Grüße
Phillip
Ach diese Frequenzen hast Du gemeint.
Grüße Uwe
DrDiettrich:
Deine Anforderungen lassen sich nur mit sehr teurem Equipment erfüllen. Und wenn dann hinten auch noch Leistung herauskommen soll, um irgendwas anzutreiben, dann am besten gleich ein richtiger Drehstromgenerator.
Ich würde mal mit einem Mega anfangen, der kann 3 gekoppelte PWM-Signale mit einem Timer erzeugen. Wenn man die Frequenz ändert, muß man nur noch die Phasen nachjustieren.
Zu dem Vorhaben: Es soll nur ein Messtechnik taugliches Signal herauskommen. Also wird "keine" Leistung benötigt...
Da ich wie gesagt noch "Blutiger Anfänger" bin- Ich verstehe das jetzt so: Mit dem Arduino MEGA ist möglich 3 gekoppelte PWM-Signale mit variabler Frequenz zu erzeugen. Und die Phasenverschiebung von 120° lässt sich ebenfalls justieren?
Dann müsste es doch möglich sein, mit dem UNO zwei gekoppelte PWW-Signale mit variabler Frequenz zu erzeugen oder liege ich hier falsch? Denn pro Timer sind doch 2 PWM Pins vorhanden.
Viele Grüße
Phillip
Hi
Diese Pins sind aber 180° zueinander - oder eben invertiert.
MfG
Der Mega hat eben 3 Kanäle (PWM Pins) pro Timer, deshalb habe ich ihn ja erwähnt.
Wenn die ersten Versuche die benötigte Geschwindigkeit des Controllers ergeben haben, kann man sich dem Aufbohren des Rechtecks in einen Sinus widmen - falls man einen ausreichend schnellen Controller bekommen kann. Oder man nimmt einen Controller mit 3 eingebauten DAC und probiert es damit...
Hallo,
warum der Umweg über PWM, wenn hintendran ein DAC hängt? Man kann dem DAC doch gleich seinen Wunschwert rüberreichen.
Zurück zu den Timern. Es gibt keine 5 festen Frequenzen für die Timer. Mittels Prescaler und TOP Wert kannste alles einstellen was du möchtest. Die Einzigste Einschränkung ist Ganzzahl Rundungstechnisch bedingt. Mit mehr oder weniger Aufwand je nach Timermode kannste die Frequenz live ändern.
Thema Phasenverschiebung.
Im PWM Mode ist keine Phasenverschiebung möglich. Nur Duty Cycle.
Wenn du dich ins Thema Timer einarbeiten möchtest, dann musst du das Manual lesen. Das geht wirklich nicht anders. Weil du wissen musst welches Bit in welchen Register welche Aufgabe hat. Eine kleine Erklärung zum Einstieg von mir gibts hier.
https://forum.arduino.cc/index.php?topic=519208.msg3538992#msg3538992
Ich verstehe das als eine Art Grundlage. Wenn du die Zusammenhänge verstanden hast, kannste das auf weitere Timermodi anwenden.
Weil die Stützpunktberechnung für einen guten Sinus Zeitaufwändig bzw. Zeitkritisch ist, gibts bei Forum - Mikrocontroller.net Projektthreads und Tutorials für das Thema.
Denn nur mit Timerkonfig und Register Updates ist das nicht getan. Der gesamte Rest kostet wertvolle Zeit.
Kennst Du einen µC mit 3 DAC?
Natürlich kann man mit 1 Timer keine 3 phasenverschobenen PWM-Signale erzeugen, aber mit CTC geht das schon. Wer das ohne Spicken geschafft hat, der kennt sich mit der Signalerzeugung mit Timern aus 
Tauglich für Meßzwecke dürfte keiner der µC basierten Ansätze werden, dafür würde ich eher bei DSP oder ganz im analogen Bereich suchen.
Schwebungssummer mit sauberem Sinus gibt es schon seit 100 Jahren, nur bin ich mir da nicht sicher, wie genau sich deren Phase stabilisieren läßt.
phil4444:
Umwandlung von PWM- auf Sinussignal soll über einen DAC erfolgen
Das funktioniert nicht. Ein DAC will binäre Daten als Input, kein PWM. Aus einem PWM kannst Du nicht so ohne weiteres ein Sinussignal machen - schon gar nicht in der geforderten Frequenz.
Dazu bräuchtest Du eine PWM mit einer wesentlich höheren Frequenz als deine Sinusfrequenz, die Du dann im Takt der Sinuswerte ändern und entsprechend aufwändig filtern musst.
Einen DAC musst Du mit Binärdaten entsprechend den Stützwerten deiner Sinuskurve füttern. Auch da bekommst Du aber erstmal keinen echten Sinus, sondern eine Treppenfunktion, die sich an den Sinus annähert. Je größer die Auflösung des DAC, desto feiner die Treppen, aber um so schneller musst Du ihn auch mit Binärwerten füttern. Mit einem ATMega wirst Du da nicht sehr weit kommen. Um einigermaßen zeitlich klar zu kömmen, musst Du die Stützwerte in einer Tabelle vorhalten, und dann - ja nach Frequenz - mehr oder weniger schnell an den DAC übergeben.
P.S. es gibt für sowas auch spezielle HW-Bausteine, die das wesentlich besser können. Inwieweit da mehrere Phasenverschobene Signale erzeugbar sind müsste man mal genauer untersuchen.
DrDiettrich:
Kennst Du einen µC mit 3 DAC?
Meinst du mich? Falls ja, ne kenne ich nicht. Das war allerdings auch nicht die Frage. Der TO würde so oder so 3 externe DACs benötigen.
Sein Hauptproblem was es zu lösen gilt ist die zeitkritische Berechnung, möglichst mit Tabellen und Beschickung der DACs mit neuen Stützwerten. Beim beschicken über SPI kann ich ihm schon den Tipp geben die USART im SPI Mode zu betreiben. Dank Buffer ist das ohne Pause möglich, solange der Rest auch schnell ist.
Falls es in Betracht bezogen werden kann, es gibt noch programmierbare Waveform Generatoren.
Doc_Arduino:
Der TO würde so oder so 3 externe DACs benötigen.
Wie soll 1 µC 3 externe DAC mit der geforderten maximalen Phasenverschiebung bedienen?
In dem er die Daten hintereinander an alle DACs rausgibt. Man kann jeden DAC individuell beschicken.
Was wäre denn deine Lösung? 3 PWM Signale eines Timers? Muss man danach noch durch einen RC Filter schicken. Haste wieder Bauteiltoleranzen.