Hallo, ich erzeuge 2 von einander unabhängige PWM Signale. Beide haben die Frequenz 10kHz also eine Periodendauer von 100µs. Momentan sind sie übereinander gelagert (siehe Bild 1), doch ein Signal muss ich so ändern, dass es High wird wenn das andere Low wird (siehe Bild 2). Diese Signale sollen gleichzeitig gestartet werden. Ich verwende: dsPIC33FJ256MC710A µC dsPICDEM MCLV Developmend Board PCD Compiler von CCS Ich hoffe jemand kann mir helfen eine Phasenverschiebung bei einer PWM zu erzeugen. mfg
Wie soll das Signal für einen anderen Duty Cycle ausssehen? Im Moment könntest du das Signal auch einfach invertieren.
Es soll gleich aussehn. Ja invertieren würde funktionieren aba wie sieht mein Code dann aus? Mein Code ist momentan: #include <33FJ256MC710A.h> #include <stdio.h> #include <stdlib.h> #fuses XT,PR_PLL, NOWDT #use delay (crystal=8M, clock=80M) void main() { set_tris_b(0); while(1) { //1.PWM Signal setup_motor_pwm (1,MPWM_FREE_RUN,3998); set_motor_unit(1,1, MPWM_ENABLE ,0,0); set_motor_pwm_duty(1,1,3600); //2.PWM Signal setup_motor_pwm (1,MPWM_FREE_RUN,3998); set_motor_unit(1,2, MPWM_ENABLE ,0,0); set_motor_pwm_duty(1,2,3600); } }
Wieso nennst du die PWMs unabhängig, wenn die eine genau das Gegenteil der anderen sein soll? DAS kriegt man mit den kleinsten AVR-Tiny-µC hin... Keine Ahnung von PICs, ich nehme aber an, dass die das auch können.
Weil ich sie unabhängig erzeuge. Ich weiß ich könnte es über einen Timer machen, geht es aber auch einfacher über einen Befehl?
Erwin schrieb: > Wieso nennst du die PWMs unabhängig, wenn die eine genau > das Gegenteil der anderen sein soll? > > DAS kriegt man mit den kleinsten AVR-Tiny-µC hin... Das kriegt man auch mit einem Transistor hin.
Ich weiß, ich verwende aber einen µC weil ich dann in weitere Folge eine Motorsteuerung machen muss. Dazu muss ich aber wissen wie ich bei PWM-Signalen eine Phasenverschiebung erzeugen kann.
Rolf Magnus schrieb: > Das kriegt man auch mit einem Transistor hin. Kann man den auch in C programmieren? :-)
Harald Wilhelms schrieb: > Rolf Magnus schrieb: > >> Das kriegt man auch mit einem Transistor hin. > > Kann man den auch in C programmieren? :-) Wenn man einen Tiny im SOT-Gehäuse als Transistor tarnt, dann schon :-) (Weiß jetzt nicht die Bezeichnung der kleinen Tinys)...
>dass es High wird wenn das andere Low wird (siehe Bild 2). Diese >Signale sollen gleichzeitig gestartet werden. Hm.. ich vermute was.. >eine Motorsteuerung machen muss. Dachte ich mir. Die beiden Signale sollen bestimmt Hi/Lo-Side FET ansteuern. Da musst DU einen Timer nehmen, der Komplementärausgänge mit Totzeit hat. Sieh mal in Datenblätter eines Atmel AT90PWM... als Beispiel.
Ich glaube du solltest dir die Methoden nochmal genau ansehen. Ich kenne mich mit den dsPIC und dem CCS nicht aus, aber mir fällt als erstes auf: Du hast setup_motor_pwm(), set_motor_unit() und set_motor_pwm_duty() in der while Schleife. Zumindest setup_motor_pwm sollte vor der Schleife stehen.
Harald Wilhelms schrieb: > Rolf Magnus schrieb: > >> Das kriegt man auch mit einem Transistor hin. > > Kann man den auch in C programmieren? :-) Der weiß auch ohne Programm, was er zu tun hat, ist also eigentlich viel intelligenter als ein µC. ;-)
Wenn ich's richtig verstanden habe, willst du nur das erste PWM invertieren. Das könntest du mit einem externen Inverter oder auch im PIC machen: dsPIC33F/PIC24H Family Reference Manual Section 14. Motor Control PWM 14.11.4 Complementary PWM Output Mode http://ww1.microchip.com/downloads/en/DeviceDoc/70187E.pdf
:
Bearbeitet durch User
Hallo ich habe das gleiche Problem und konnte es bisher noch nicht beheben. Kann mir bitte wer dabei helfen die PWM Signale zu invertieren? Ich nutzte ebenfalls den dsPIC33FJ256MC710A und auch das dsPICDEM MCLV.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.