int rpm = 850; float Freq_ind = 0; // Fréquence des impulsions de la sortie induction void epwm8_init(void); // Initialisation de l'ePWM8 void epwm_init(void) { DINT; // Configuration de la pin GPIO 42 pour la sortie Induction Essnce/Diesel EALLOW; GpioCtrlRegs.GPBPUD.bit.GPIO42 = 1; // Disable pull-up on GPIO42 (EPWM8A) GpioCtrlRegs.GPBMUX1.bit.GPIO42 = 1; // Configure GPIO42 as EPWM8A EDIS; // Configuration des paramètres de l'ePWM8 EALLOW; SysCtrlRegs.PCLKCR0.bit.TBCLKSYNC = 0; EDIS; epwm8_init(); EALLOW; SysCtrlRegs.PCLKCR0.bit.TBCLKSYNC = 1; EDIS; // Enable global Interrupts and higher priority real-time debug events: EINT; // Enable Global interrupt INTM ERTM; // Enable Global realtime interrupt DBGM } // Configuration de l'ePWM8 pour la sortie induction diesel/essence void epwm8_init(void) { EALLOW; // Setup TBCLK EPwm8Regs.TBCTL.bit.CTRMODE = 0x00; // Count up EPwm8Regs.TBCTL.bit.PHSEN = 0x0; // Disable phase loading EPwm8Regs.TBPHS.half.TBPHS = 0x0000; // Phase is 0 EPwm8Regs.TBCTR = 0x000; // Clear counter EPwm8Regs.TBCTL.bit.HSPCLKDIV = 0x100; // Clock ratio to SYSCLKOUT = /8 EPwm8Regs.TBCTL.bit.CLKDIV = 0x110; // Clock ratio to SYSCLKOUT = /64 --> TBCLK = SYSCLKOUT/512 // Set Compare values EPwm8Regs.CMPA.half.CMPA = 156; // Set compare A value : 156 = TBCLK/1000 = Nb de coup de clock pour 1ms // Set actions EPwm8Regs.AQCTLA.bit.ZRO = 0x10; // Set PWM1A on Zero event EPwm8Regs.AQCTLA.bit.CAU = 0x01; // Clear PWM1A on event A, up count (ie when counter equals CMPA value) // Shadow mode for the period EPwm8Regs.TBCTL.bit.PRDLD = 0; // Set period (TBPRD = T_désirée/T_base = (120/rpm)/(1/TBLCK)) EPwm8Regs.TBPRD = (18750000/rpm); // Fréquence des impulsions = 1/T_désirée = rpm/120 Freq_ind = ((float)rpm/120); EDIS; }