Gast
#1883206
Hallo! Ich bin gerade dabei eine einfach PWM zu realisieren. Die DSP läuft mit 150 Mhz und ich habe den Systemclock für die PWM mit 15 vorgeteilt. Welchen Wert im TBPRD Register muss man denn da reinladen? Die Initialisierung sieht so aus: EALLOW; SysCtrlRegs.PCLKCR0.bit.TBCLKSYNC = 0; // Stop all the TB clocks EDIS; // Setup Sync EPwm1Regs.TBCTL.bit.SYNCOSEL = TB_SYNC_IN; // Pass through // Allow each timer to be sync'ed EPwm1Regs.TBCTL.bit.PHSEN = TB_ENABLE; //Phase EPwm1Regs.TBPHS.half.TBPHS = 0; //Clock div 15; EPwm1Regs.TBCTL.bit.HSPCLKDIV=5; EPwm1Regs.TBCTL.bit.CLKDIV=3; EPwm1Regs.TBPRD = 18750; EPwm1Regs.TBCTL.bit.CTRMODE = TB_COUNT_UP; // Count up EPwm1Regs.ETSEL.bit.INTSEL = ET_CTR_ZERO; // Select INT on Zero event EPwm1Regs.ETSEL.bit.INTEN = PWM1_INT_ENABLE; // Enable INT EPwm1Regs.ETPS.bit.INTPRD = ET_1ST; // Generate INT on 1st event EALLOW; SysCtrlRegs.PCLKCR0.bit.TBCLKSYNC = 1; // Start all the timers synced EDIS; Mit dem Wert TBPRD = 18750 läuft die PWM mit exakt 10 ms. So wie gewollt. Aber warum gerade der Wert? Habe das Manual gelesen (SPRU791F) da steht eine Formel drin (TPWM = (TBPRD + 1) x TTBCLK) aber die passt irgendwie nicht zu dem Wert vom TBPRD. Ist die Formel falsch, oder mache ich da einen Denkfehler? Hoffe jemand bringt da bei mir Licht ins Dunkel! ;) Viele Grüße Max