PWM auf der DDS

Fragen zur Software des digitalen Funktionsgenerators und des True-RMS-Messaufsatzes bitte hier stellen.
dg1vs
kann c't-Lab-Module konstruieren
kann c't-Lab-Module konstruieren
Beiträge: 138
Registriert: 20.12.2009, 22:26

Re: PWM auf der DDS

Beitrag von dg1vs »

psclab38 hat geschrieben:
thoralt hat geschrieben:Ja, das muss der Parser erledigen. Ich habe das im Changelog als ToDo vermerkt, aber werde es wahrscheinlich nicht selber machen. Bisher hatte den Parser immer jemand anders betreut, vielleicht findet sich jemand?
Also ehrlich! :roll: Der erste Parameter kostet Dich sicher nicht länger als 20 Minuten und den Rest hast Du eingebaut und getestet, bevor die Stunde voll ist. Ich war selbst immer erstaunt, wie schnell das geht.

Poste doch mal bitte für die anderen Interessierten, welchen Draht man genau fädeln muß, damit die PWM auch am Ausgang erscheint. Bevor jetzt alle raten müssen...

Grüße
Paul
Hi

ich mach es, aber nagelt mich nicht fest wann. Heute kamen die optoisolierten CAN-Tranceiver, morgen die Frontplatten und am Wochenende ist Kindergeburtstag, Fliesen soll ich auch noch legen achso und dann gibt es da noch nen Chef.....

Grüße Karsten
Benutzeravatar
thoralt
Site Admin
Site Admin
Beiträge: 262
Registriert: 10.04.2006, 08:48
Wohnort: Chemnitz
Kontaktdaten:

Re: PWM auf der DDS

Beitrag von thoralt »

Hallo,
psclab38 hat geschrieben:Poste doch mal bitte für die anderen Interessierten, welchen Draht man genau fädeln muß, damit die PWM auch am Ausgang erscheint. Bevor jetzt alle raten müssen...
guckst Du hier (Bild anklicken zum Vergrößern):
Zusätzliche PWM-Leitung auf dem DDS
Zusätzliche PWM-Leitung auf dem DDS
Der Ausgang PD4 (Pin 13) des Controllers wird mit dem Eingang (Pin 3) des U12a verbunden. C7 wird ausgelötet, der macht uns nur die niedrigen Frequenzen kaputt. Mit R13 kann man praktischerweise den Pegel gut einstellen. Anleitung zum Abgleich folgt, sobald ich ein Relais auf der Platine habe und die Offsetspannungs-/Pegelgenerierung testen kann.

An alle, die nicht jeden Tag SMD-Bausteine löten, geht noch ein Hinweis: Der Pin 13 am Controller ist leider nicht als Leitung herausgeführt, daher geht es beim Löten recht eng zu. Bitte gut aufpassen, dass keine Kurzschlüsse mit den Nachbarpins entstehen!

Viele Grüße
Thoralt
There are 10 kinds of people in this world: Those who understand binary and those who don't.
dg1vs
kann c't-Lab-Module konstruieren
kann c't-Lab-Module konstruieren
Beiträge: 138
Registriert: 20.12.2009, 22:26

Re: PWM auf der DDS

Beitrag von dg1vs »

dg1vs hat geschrieben: ich mach es, aber nagelt mich nicht fest wann. Heute kamen die optoisolierten CAN-Tranceiver, morgen die Frontplatten und am Wochenende ist Kindergeburtstag, Fliesen soll ich auch noch legen achso und dann gibt es da noch nen Chef.....
Hallo

gerade DCY DutyCYle eingebaut. Wenn noch Wünsche für weitere Kommandos in Bezug auf die PWM gewünscht sind... einfach melden.

Grüße Karsten
psclab38
kann c't-Lab-Konstrukteure konstruieren
kann c't-Lab-Konstrukteure konstruieren
Beiträge: 942
Registriert: 25.01.2008, 23:34

Re: PWM auf der DDS

Beitrag von psclab38 »

dg1vs hat geschrieben: Hallo

gerade DCY DutyCYle eingebaut. Wenn noch Wünsche für weitere Kommandos in Bezug auf die PWM gewünscht sind... einfach melden.

Grüße Karsten
Auch im Code? Oder nur im Excelsheet? Im Prinzip sollten alle Parameter, die man über's Panel einstellen kann, auch über den Bus verfügbar sein. Nur im umgekehrten Fall gibt's Abweichungen, also mehr Bus-Parameter als Panel-Parameter.

Warum ist int16_t iPWMDuty eigentlich 16 Bit, wenn's nur einen Range von 1..99 hat? Oder gibt's da im Hinterkopf die Idee, das mit 10 zu skalieren, damit man in 0.1%-Schritten arbeiten könnte?

Den PWM-Draht hab ich grade mal gezogen. Das Signal sieht so schon mal prima aus, läßt sich auch brav verstellen. Unterhalb von 20 Hz nagt aber irgendwer eine Ecke ab. Das funktioniert dann für PWM nicht mehr. Könnte C28 sein.
Die PMM Hi und Lo haben noch keine Funktion.

Grüße
Paul


P.S.: Die Encoder-Beschleunigung für die Frequenz ist auch ziemlich sportlich, fällt mir grade auf; vor allem abwärts. Wenn man da etwas zu schnell dreht, dann ist man mit einer Umdrehung von 300kHz auf 16mHz... Hat aber mit dem PWM nichts zu tun.
dg1vs
kann c't-Lab-Module konstruieren
kann c't-Lab-Module konstruieren
Beiträge: 138
Registriert: 20.12.2009, 22:26

Re: PWM auf der DDS

Beitrag von dg1vs »

psclab38 hat geschrieben:Auch im Code? Oder nur im Excelsheet?
Auch im Code, hat funktioniert, ich bin dann aber auch über :
psclab38 hat geschrieben:Warum ist int16_t iPWMDuty eigentlich 16 Bit, wenn's nur einen Range von 1..99 hat? Oder gibt's da im Hinterkopf die Idee, das mit 10 zu skalieren, damit man in 0.1%-Schritten arbeiten könnte?
gestolpert und habe beschlossen die Frage im Frage im Traum zu verarbeiten :) .

Grüße Karsten
psclab38
kann c't-Lab-Konstrukteure konstruieren
kann c't-Lab-Konstrukteure konstruieren
Beiträge: 942
Registriert: 25.01.2008, 23:34

Re: PWM auf der DDS

Beitrag von psclab38 »

dg1vs hat geschrieben:
psclab38 hat geschrieben:Auch im Code? Oder nur im Excelsheet?
Auch im Code, hat funktioniert, ...
Und, war's denn schwer? :wink:

Grüße
Paul
dg1vs
kann c't-Lab-Module konstruieren
kann c't-Lab-Module konstruieren
Beiträge: 138
Registriert: 20.12.2009, 22:26

Re: PWM auf der DDS

Beitrag von dg1vs »

psclab38 hat geschrieben:Und, war's denn schwer? :wink:
Nö, aber ich war schon müde....
dg1vs
kann c't-Lab-Module konstruieren
kann c't-Lab-Module konstruieren
Beiträge: 138
Registriert: 20.12.2009, 22:26

Re: PWM auf der DDS

Beitrag von dg1vs »

dg1vs hat geschrieben:Nö, aber ich war schon müde....
....zwar auch nicht besser, aber der Kaffe hilft.

Hi Thoralt sieht gut aus. Gerade ausprobiert...

Die Anpassungen des Parsers sind im CVS. Da iPWMDuty eigentlich positive Werte abdeckt ist vielleicht ein uint16_t besser geeignet, aber das ist eher unter der Rubrik Kosmetik einzuordnen.

Im Anpassen im dds-parser bin ich noch über folgendes gestolpert:

Code: Alles auswählen

struct
{
    union
    {
        double* f;
        int32_t* l;
        int16_t* i;
        uint16_t* u;
        uint8_t* b;
        const char* s;
    } ram;
    union
    {
        double* f;
        int32_t* l;
        int16_t* i;
        uint16_t* u; // TODO missing pointer ??????? added dg1vs
        uint8_t* b;
        const char* s;
    } eep;
}s;
Im dcg2 ist es m.M. richtig.

Grüße Karsten
dg1vs
kann c't-Lab-Module konstruieren
kann c't-Lab-Module konstruieren
Beiträge: 138
Registriert: 20.12.2009, 22:26

Re: PWM auf der DDS

Beitrag von dg1vs »

Warum ist int16_t iPWMDuty eigentlich 16 Bit, wenn's nur einen Range von 1..99 hat? Oder gibt's da im Hinterkopf die Idee, das mit 10 zu skalieren, damit man in 0.1%-Schritten arbeiten könnte?
Ich glaube die 0.1% Schritte sind praktisch nicht notwendig. Wahrscheinlich reichen 0.25% oder sogar 0.5% aus.

Grüße und schöne Woche

Karsten
Benutzeravatar
thoralt
Site Admin
Site Admin
Beiträge: 262
Registriert: 10.04.2006, 08:48
Wohnort: Chemnitz
Kontaktdaten:

Re: PWM auf der DDS

Beitrag von thoralt »

Hallo Leute,

nach ein paar Tagen Pause habe ich mich mal wieder in den Quelltext vertieft.
Warum ist int16_t iPWMDuty eigentlich 16 Bit, wenn's nur einen Range von 1..99 hat? Oder gibt's da im Hinterkopf die Idee, das mit 10 zu skalieren, damit man in 0.1%-Schritten arbeiten könnte?
So isses. Ich habe die Auflösung jetzt auf 0,1 % erhöht. Außerdem habe ich für die Pulsbreite die Quantisierung nachgerüstet, denn auch hier greift der gleiche Mechanismus wie bei der Frequenz. Die Auflösung beträgt also minimal 0,1 % (besonders bei niedrigen Frequenzen), kann aber, wenn es die Integer-Mathematik nicht anders hergibt, auch gröber werden (max. 1 %).

Die beiden neuen Sachen sind eingecheckt, aber noch nicht getestet (gestern abend hatte ich keine Lust, das c't-Lab in den Programmierzustand zu versetzen). Wer mag, kann ja mal den aktuellen Stand ausprobieren.

Viele Grüße
Thoralt
There are 10 kinds of people in this world: Those who understand binary and those who don't.
Benutzeravatar
thoralt
Site Admin
Site Admin
Beiträge: 262
Registriert: 10.04.2006, 08:48
Wohnort: Chemnitz
Kontaktdaten:

Re: PWM auf der DDS

Beitrag von thoralt »

Wer mag, kann ja mal den aktuellen Stand ausprobieren.
Update: Lieber nicht ausprobieren, die Pulsbreite lässt sich momentan nicht einstellen. Ich arbeite daran.
There are 10 kinds of people in this world: Those who understand binary and those who don't.
Benutzeravatar
thoralt
Site Admin
Site Admin
Beiträge: 262
Registriert: 10.04.2006, 08:48
Wohnort: Chemnitz
Kontaktdaten:

Re: PWM auf der DDS

Beitrag von thoralt »

Hallo Leute, speziell hallo Paul,

ich bin gerade dabei, das Handbuch für das DDS der neuen Firmware anzupassen. Dabei will ich natürlich auch ein paar Screenshots von den neuen Features machen. Momentan scheitere ich daran, dass ich im Sweep-Modus keine Marker sehe. Woran kann das liegen?

[EDIT]
Ich konnte mittlerweile Marker sehen :) Es lag daran, dass ich im dekadischen Modus war und dummerweise keine Dekade im Sweep eingestellt hatte. Aber es war noch ein anderer "Fehler" im Spiel: Ich hatte einen linearen Sweep eingestellt. Dann sehe ich keine Marker. Sobald ich auf logarithmisch umschalte, sind die Marker wieder da. Ist das ein Feature?
[/EDIT]

Noch eine andere Sache fiel mir auf:

Code: Alles auswählen

main.c, Zeile 430ff.:
		switch (pParams->ucWaveForm)
		{
			case WAVE_TRIANGLE:
				fLevel *= 1.224745;
				break;
			case WAVE_LOGIC:
				fLevel *= 0.70711;
				break;
			case WAVE_SQUARE:
				// no sweep markers in logic mode
				break;
	    }
Irgendwie macht das keinen Sinn - warum steht der Kommentar "no sweep markers in logic mode" im case-Zweig für den Rechteck-Modus? Wie ist das ursprünglich gemeint?

Viele Grüße
Thoralt
There are 10 kinds of people in this world: Those who understand binary and those who don't.
psclab38
kann c't-Lab-Konstrukteure konstruieren
kann c't-Lab-Konstrukteure konstruieren
Beiträge: 942
Registriert: 25.01.2008, 23:34

Re: PWM auf der DDS

Beitrag von psclab38 »

Hallo Thoralt,

schön, daß Du wieder ein wenig Zeit findest. 8)
thoralt hat geschrieben:ich bin gerade dabei, das Handbuch für das DDS der neuen Firmware anzupassen.
Oh ja, das schöne Handbuch ist in der Tat inzwischen nicht angefaßt worden...
thoralt hat geschrieben:Momentan scheitere ich daran, dass ich im Sweep-Modus keine Marker sehe. Woran kann das liegen?

[EDIT]
Ich konnte mittlerweile Marker sehen :) Es lag daran, dass ich im dekadischen Modus war und dummerweise keine Dekade im Sweep eingestellt hatte. Aber es war noch ein anderer "Fehler" im Spiel: Ich hatte einen linearen Sweep eingestellt. Dann sehe ich keine Marker. Sobald ich auf logarithmisch umschalte, sind die Marker wieder da. Ist das ein Feature?
[/EDIT]
Wenn Du so willst, dann ist es ein Feature, daß es nur Marker im logarithmischen Modus gibt, aber es ist auch dokumentiert:

Code: Alles auswählen

"changelog.txt":

* Sweep markers are now available for all log sweep modes: up, down, up+down
* note: sweep markers are still not available for linear sweep modes, sorry.
Im logarithischen Modus haben die Marker alle den gleichen Abstand, das kann man einfach vorausberechnen und im Interrupt ist dann nur eine simple Addition nötig. Im linearen Modus muß man da multiplizieren und das hatte ich mich damals nicht getraut. Aufgrund der Erfahrung mit den anderen Modulen, daß man dem Interrupt durchaus mehr zumuten kann, könnte man das vielleicht noch ergänzen, wenn Du nach dem PWM noch Platz überläßt.
thoralt hat geschrieben: Noch eine andere Sache fiel mir auf:

Code: Alles auswählen

main.c, Zeile 430ff.:
		switch (pParams->ucWaveForm)
		{
			case WAVE_TRIANGLE:
				fLevel *= 1.224745;
				break;
			case WAVE_LOGIC:
				fLevel *= 0.70711;
				break;
			case WAVE_SQUARE:
				// no sweep markers in logic mode
				break;
	    }
Irgendwie macht das keinen Sinn - warum steht der Kommentar "no sweep markers in logic mode" im case-Zweig für den Rechteck-Modus? Wie ist das ursprünglich gemeint?
Klingt vielleicht auf den ersten Blick nach wenig Sinn, aber: diese Switch/Case-Anweisung ist Teil der Berechnung, wie hoch die Marker maximal sind, damit der Abschwächer richtig gesteuert werden kann. Da das im Logic-Mode unsymmetrisch wird, und ich auch den Sweep im Logic-Mode unterdrückt habe, ist dieser Kommentar einfach eine Gedankenstütze, daß hier der Sonderfall für Logic nicht beachet werden muß. Da fehlt eigentlich die Anweisung

Code: Alles auswählen

fLevel *= 1.0;
, die ich mir aber aus offensichtlichen Gründen geschenkt habe.

Viele Grüße
Paul

PS: Nachfrage: Kannst du auch die Bißspuren am Rechteck unterhalb von 20Hz beobachten?
dg1vs
kann c't-Lab-Module konstruieren
kann c't-Lab-Module konstruieren
Beiträge: 138
Registriert: 20.12.2009, 22:26

Re: PWM auf der DDS

Beitrag von dg1vs »

thoralt hat geschrieben:Hallo Leute, speziell hallo Paul,

ich bin gerade dabei, das Handbuch für das DDS der neuen Firmware anzupassen. Dabei will ich natürlich auch ein paar Screenshots von den neuen Features machen. Momentan scheitere ich daran, dass ich im Sweep-Modus keine Marker sehe. Woran kann das liegen?
Hi Thoralt,

ich komme aktuell zwar nicht in den "Keller", würde mich aber anbieten, das Handbuch zu reviewen.

Grüße Karsten
Benutzeravatar
thoralt
Site Admin
Site Admin
Beiträge: 262
Registriert: 10.04.2006, 08:48
Wohnort: Chemnitz
Kontaktdaten:

Re: PWM auf der DDS

Beitrag von thoralt »

Hallo,
dg1vs hat geschrieben:ich komme aktuell zwar nicht in den "Keller", würde mich aber anbieten, das Handbuch zu reviewen.
Gern. Ich werde heute hoffentlich noch den Sweep beschreiben, dann fehlt "nur" noch der Inhalt des letzten Kapitels (es beschreibt die Hardware-Modifikationen zum Sync-Ausgang und PWM).
psclab38 hat geschrieben: [...]Aufgrund der Erfahrung mit den anderen Modulen, daß man dem Interrupt durchaus mehr zumuten kann, könnte man das vielleicht noch ergänzen, wenn Du nach dem PWM noch Platz überläßt.
Das klingt sehr gut. Ich gebe mir Mühe mit dem Platz :) Was die Zeit im Interrupt angeht - vielleicht kann man hier auch außerhalb vom Interrupt was vorberechnen?
psclab38 hat geschrieben:Klingt vielleicht auf den ersten Blick nach wenig Sinn, aber: diese Switch/Case-Anweisung ist Teil der Berechnung, wie hoch die Marker maximal sind, damit der Abschwächer richtig gesteuert werden kann. Da das im Logic-Mode unsymmetrisch wird, und ich auch den Sweep im Logic-Mode unterdrückt habe, ist dieser Kommentar einfach eine Gedankenstütze, daß hier der Sonderfall für Logic nicht beachet werden muß. Da fehlt eigentlich die Anweisung

Code: Alles auswählen

fLevel *= 1.0;
, die ich mir aber aus offensichtlichen Gründen geschenkt habe.
Den Sinn, dass der case-Zweig leer bleibt, verstehe ich schon. Aber warum ausgerechnet der case WAVE_SQUARE und nicht WAVE_LOGIC? Worauf ich hinauswollte - sind die cases hier aus Versehen vertauscht? Oder übersehe ich etwas?
psclab38 hat geschrieben:PS: Nachfrage: Kannst du auch die Bißspuren am Rechteck unterhalb von 20Hz beobachten?
Ehrlich gesagt nein. Meinst Du im Sweep oder normal? Ich habe mir das angesehen, sieht aber ganz sauber aus. Wie meinst Du das?
SCR0008.PNG
SCR0008.PNG (6.83 KiB) 5660 mal betrachtet
SCR0007.PNG
SCR0007.PNG (6.81 KiB) 5660 mal betrachtet
Ich habe zwei Screenshots gemacht, einmal ohne, einmal mit Sweep. Jeweils deutlich unter 20 Hz. Da sieht alles normal aus.

Viele Grüße
Thoralt
There are 10 kinds of people in this world: Those who understand binary and those who don't.
Antworten