Pulsecodemodulation in C?!
-
ein problem dabei ist nur, dass man nicht beliebige folgen ausgeben kann, weil ja noch start und stopbits dazukommen, und evtl. noch pausen.
weiß nicht wie toll die realtime-fähigkeiten von dem verwendeten betriebssystem sind, aber evtl. eignet sich wie gesagt eine der steuerleitungen besser wegen beliebigem timing.
-
Mit "Puls-Code-Modulation" (PCM) hat das aber nichts zu tun, eher was mit "Puls-Width-Modulation" (PWM). Nur kann man damit aber auch keine verschiedenen Frequenzen erzeugen, sondern nur verschieden hohe Gleichspannungspegel (nach der Integration über einen Tiefpaß).
Mit der seriellen Schnittstelle kann man durchaus analoge Ausgangsspannungen erzeugen, nur nicht von 0% (entspricht +10V) bis 100% (entspricht -10V). Sondern maximal von 10% bis 90%. Weil bei 8N1 (das sind 10 bit) das Startbit immer 0 ist (eben 90%) und das Stopbit immer 1 (deswegen 10%). Die 8 Datenbits dazwischen können dann die übrigen 8 (nur acht!, nicht 256) Stufen darstellen.
Wird der Sendepuffer immer gefüllt, so ist der Ausgangs"-Takt" immer konstant (entsprechend der eingestellten Baudrate) und ohne Lücken zwischen Stopbit und folgendem Startbit, egal was der PC gerade macht. Nur schnell mal eben die Spannung ändern geht eben nicht, weil man ja nie weiß, wann das eigene Programm wieder mal drankommt, den Puffer zu füllen.Wenn also eine Schwingung erzeugt werden soll, so müssen also die 8 Datenbits entsprechend gesetzt sein: bei einer Dreieckschwingung z.B. so:
0x00 0x01 0x03 0x07 0x0F 0x1F 0x3F 0x7F 0xFF 0x7F 0x3F 0x1F 0x0F 0x07 0x03 0x01Das ist eine volle Dreiecks-Schwingung, die natürlich immer wieder hintereinander ausgegeben werden muß, damit man auch einen Ton und nicht nur ein Knacken hört.
Bei einer Baudrate von 115200,8N1 ergibt das 86,8056 Mikrosekunden Dauer für ein komplettes Byte und damit 0,1736112 ms für eine Schwingung (hier 2 Byte). Das sind dann 5,76 kHz (Dreieck, nicht Sinus).Den Rest der Rechnerei, um auf andere Frequenzen und Kurvenformen zu kommen, überlasse ich Dir. Siehe auch das Basic-Programm.
Blackbird
-
Ich muss da Blackbird ein bischen korrigieren, man kann mit PWM sehr wohl Sinuswellen verschiedener Frequenzen erzeugen, ist ja quasi die Hauptanwendung von PWM, denk mal an all die Synchronmotoren.
PS: Ein Sinus ist auch nur ein sich schnell genug veränderndes DC Potential, wenn du so willst.
Greets
-
Ein Sinus ist auch nur ein sich schnell genug veränderndes DC Potential, wenn du so willst.
Hatte ich das nicht geschrieben?
... mit PWM sehr wohl Sinuswellen verschiedener Frequenzen erzeugen, ist ja quasi die Hauptanwendung von PWM ...
Nein, ist sie nicht. Weil die PWM-Wiederholrate ein Vielfaches der Sinusfrequenz sein muß, da sie erst durch einen Tiefpaß gefiltert wird bevor eine "Gleichspannung" entsteht. Sonst hat man den PWM-Takt im Sinus drin. Ein parallel DA-Wandler wird häufig benutzt, um Sinus und andere Kurvenformen zu erzeugen.
PWM für Synchronmotoren? Wie geht denn das? Meinst Du einen 3-Phasen-Takt (oder -Sinus)?
Blackbird
-
Ja, ich denke wir sind uns schon einig, drückens einfach anders aus.
Ich weiss nicht wie dieser motor auf deutsch heisst, ich studiere auf französisch, also "moteur synchrone à aimant permanent" z.b. auf englisch heisst der brushless DC oder auch Brushless AC, je nachdem wie du ihn ansteuerst.Aber zurück zum Thema, wenn er das richtige über seinen Port ausgiebt, hat er nach seinem Tiefpass einen Sinus, erzeugt durch PWM.
-
muss man nicht um damit einen sinus erzeugen zu können negative und positive werte ausgeben können? Umpolen braucht man doch schon, oder geht das wirklich mit ein aus?
-
als steuersignal schon. mir kämen da spontan transistoren in den sinn. damit würde man dann 1/-1 draus machen und dann wie schon beschrieben.
-
Hi,
den Aufwand zu treiben ist für dieses Experiment allerdings müßig. Hauptsache Periodisch, und entfernt sinusähnlich(so entfernt, daß ein rechteck auch reicht) ob da jetzt ein Offset drauf ist, ist ohne Belang.
PS: ich glaub ein aus PWM erzeugtes Rechtecksignal langt zum testen völlig, und ist am einfachsten zu programmieren.
grüße, Con@n
-
Diabolito schrieb:
Ja, ich denke wir sind uns schon einig, drückens einfach anders aus.
Ich weiss nicht wie dieser motor auf deutsch heisst, ich studiere auf französisch, also "moteur synchrone à aimant permanent" z.b. auf englisch heisst der brushless DC oder auch Brushless AC, je nachdem wie du ihn ansteuerst.Er heißt ganz einfach Synchronmotor. Viel verbreiteter sind allerdings Asynchronmotoren und auch die brauchen Frequenzvariablen Drehstrom mittels Frequenzumrichter. Aber bis dahin seid ihr scheinbar noch nicht vorgedrungen
btw. wird das heutzutage auch anders gemacht und nicht mehr per PWM, das war nur bei alten Geräten so.
-
Alle haben recht
Brushless (DC) Motoren, wie sie heute z.B. in Elektroantrieben für Modellflugzeuge (und nicht nur dort) verwendet werden, haben einen Controller zur Steuerung, der ein 3-Phasen-Drehfeld mit veränderbarer Frequenz erzeugt. Jede Phase hat aber auch eine "PWM-"Regelung, d.h, das Puls-Pause-Verhältnis ist je nach erforderlicher Wellenleistung unterschiedlich groß. In den Pausen wird auch die durch die Gegeniduktivität erzeugte Spannung gemessen, damit die Drehfeldfrequenz (und das Puls-Pause-verhältnis) je nach Last und Stellvorgabe (= Drehzahl) nachgeregelt werden kann.
Mit der seriellen Schnittstelle wird nach der hier beschriebenen Methode ein Wechselspannungs-"Sinus" ausgegeben. 10% entsprechen ca. +10V und 90% ca. -10V. Hatte ich schon weiter oben erwähnt.
Die angegebene Frequenz ist jedoch rein theoretisch. Sie setzt voraus, dass der Integrationskondensator eine gleichbleibende Spannung über EIN Impulsdiagramm erzeugt. Tut er aber nicht. Es sind für einen Fehler von ca. 10% (+-5%) ungefähr 4 Integrationsperioden notwendig. D.h., ein "Sprung" der Ausgangsspannung von 10% auf 20% erfordert 4 aufeinanderfolgende GLEICHE Impulsdiagramme. Die so erzeugte Frequenz ist also nur ein Viertel so hoch wie weiter oben errechnet. Für größere Sprünge dauert es noch länger, sind aber bei dem aus einem Dreieck angenäherten Sinus nicht erforderlich.Das bedeutet aber auch, dass Signale mit steilen Flanken (Rechteck) auf diese Weise nicht erzeugt werden können.
Blackbird