diff --git a/Projects/epwm_test/Start_rfm.pmp b/Projects/epwm_test/Start_rfm.pmp index 28561d3..9ba808c 100644 Binary files a/Projects/epwm_test/Start_rfm.pmp and b/Projects/epwm_test/Start_rfm.pmp differ diff --git a/Projects/epwm_test/src/gpio_init.c b/Projects/epwm_test/src/gpio_init.c index ba4c60d..a742bc0 100644 --- a/Projects/epwm_test/src/gpio_init.c +++ b/Projects/epwm_test/src/gpio_init.c @@ -17,6 +17,11 @@ void GpioInit(void) GpioCtrlRegs.GPADIR.bit.GPIO1 = 1; GpioDataRegs.GPADAT.bit.GPIO0 = 0; GpioDataRegs.GPADAT.bit.GPIO1 = 0; + + GpioCtrlRegs.GPAGMUX2.bit.GPIO18 = 0; + GpioCtrlRegs.GPAGMUX2.bit.GPIO18 = 0; + GpioCtrlRegs.GPADIR.bit.GPIO18 = 0; + EDIS; } diff --git a/Projects/epwm_test/src/i2c_init.c b/Projects/epwm_test/src/i2c_init.c new file mode 100644 index 0000000..9a50b65 --- /dev/null +++ b/Projects/epwm_test/src/i2c_init.c @@ -0,0 +1,8 @@ +/* + * i2c_init.c + * + * Created on: 5 сент. 2023 г. + * Author: seklyuts + */ + + diff --git a/Projects/epwm_test/src/i2c_init.h b/Projects/epwm_test/src/i2c_init.h new file mode 100644 index 0000000..2b06b7f --- /dev/null +++ b/Projects/epwm_test/src/i2c_init.h @@ -0,0 +1,13 @@ +/* + * i2c_init.h + * + * Created on: 5 сент. 2023 г. + * Author: seklyuts + */ + +#ifndef SRC_I2C_INIT_H_ +#define SRC_I2C_INIT_H_ + + + +#endif /* SRC_I2C_INIT_H_ */ diff --git a/Projects/epwm_test/src/pwm_init.c b/Projects/epwm_test/src/pwm_init.c index ff38d1a..5991e67 100644 --- a/Projects/epwm_test/src/pwm_init.c +++ b/Projects/epwm_test/src/pwm_init.c @@ -8,6 +8,7 @@ #include "f28x_project.h" #include "pwm_init.h" #include "pwm_interrupts.h" +#include "gpio_init.h" #define COUNT_UP 1 #define COUNT_DOWN 0 @@ -15,6 +16,8 @@ volatile struct EPWM_REGS * EPwmRegs[17] = {NULL, &EPwm1Regs, &EPwm2Regs, &EPwm3Regs, &EPwm4Regs, &EPwm5Regs, &EPwm6Regs, &EPwm7Regs, &EPwm8Regs, &EPwm9Regs, &EPwm10Regs, &EPwm11Regs, &EPwm12Regs, &EPwm13Regs, &EPwm14Regs, &EPwm15Regs, &EPwm16Regs}; Uint32 EPwmTimerIntCount[17]; Uint16 EPwm_DB_Direction[17]; +volatile Uint16 PwmBrake100 = PERIOD_BRAKE; +volatile Uint16 PwmMotor100 = PERIOD_MOTOR; void pwm_AutoChange(uint16_t Num) @@ -57,13 +60,16 @@ void PWMAllInit(void) CpuSysRegs.PCLKCR0.bit.TBCLKSYNC =0; EDIS; - uint16_t i; - for(i = 2; i<=6; i++) - { - PWMInit(i, PERIOD); - } - PWMInit(11, PERIOD); + PwmBrake100 = PERIOD_BRAKE; + PwmMotor100 = PERIOD_MOTOR; + + PWMInit(2, PERIOD_MOTOR, COMPLIMENTARY); + PWMInit(3, PERIOD_MOTOR, COMPLIMENTARY); + PWMInit(4, PERIOD_MOTOR, COMPLIMENTARY); + PWMInit(5, PERIOD_BRAKE, INDEPENDED); + PWMInit(6, PERIOD_BRAKE, INDEPENDED); +// PWMInit(11, PERIOD, INDEPENDED); EALLOW; CpuSysRegs.PCLKCR0.bit.TBCLKSYNC =1; @@ -73,7 +79,7 @@ void PWMAllInit(void) void PWMInitGpio(void) { - InitEPwm1Gpio(); +// InitEPwm1Gpio(); InitEPwm2Gpio(); InitEPwm3Gpio(); InitEPwm4Gpio(); @@ -119,11 +125,11 @@ void PWMInitInterruptEn(void) PieCtrlRegs.PIEIER3.bit.INTx3 = 1; PieCtrlRegs.PIEIER3.bit.INTx4 = 1; PieCtrlRegs.PIEIER3.bit.INTx5 = 1; - // PieCtrlRegs.PIEIER3.bit.INTx6 = 1; + PieCtrlRegs.PIEIER3.bit.INTx6 = 1; } -void PWMInit(uint16_t Num, uint16_t Period) +void PWMInit(uint16_t Num, uint16_t Period, uint16_t Independed) { EPwmRegs[Num]->TBPRD = Period; // Set timer period @@ -146,7 +152,7 @@ void PWMInit(uint16_t Num, uint16_t Period) // // Setup compare // - EPwmRegs[Num]->CMPA.bit.CMPA = Period/2; + // // Set actions @@ -161,10 +167,22 @@ void PWMInit(uint16_t Num, uint16_t Period) // Active Low PWMs - Setup Deadband // EPwmRegs[Num]->DBCTL.bit.OUT_MODE = DB_FULL_ENABLE; - EPwmRegs[Num]->DBCTL.bit.POLSEL = DB_ACTV_HIC; //DB_ACTV_HI - independ + if(Independed) + { + EPwmRegs[Num]->CMPA.bit.CMPA = Period; + EPwmRegs[Num]->DBCTL.bit.POLSEL = DB_ACTV_HI; //DB_ACTV_HI - independ + EPwmRegs[Num]->DBRED.bit.DBRED = 0; + EPwmRegs[Num]->DBFED.bit.DBFED = 0; + } + else + { + EPwmRegs[Num]->CMPA.bit.CMPA = Period/2; + EPwmRegs[Num]->DBCTL.bit.POLSEL = DB_ACTV_HIC; + EPwmRegs[Num]->DBRED.bit.DBRED = EPWM_DB; + EPwmRegs[Num]->DBFED.bit.DBFED = EPWM_DB; + } EPwmRegs[Num]->DBCTL.bit.IN_MODE = DBA_ALL; - EPwmRegs[Num]->DBRED.bit.DBRED = EPWM_DB; - EPwmRegs[Num]->DBFED.bit.DBFED = EPWM_DB; + // EPwm1_DB_Direction = COUNT_UP; // diff --git a/Projects/epwm_test/src/pwm_init.h b/Projects/epwm_test/src/pwm_init.h index 1009be8..83d0221 100644 --- a/Projects/epwm_test/src/pwm_init.h +++ b/Projects/epwm_test/src/pwm_init.h @@ -9,14 +9,17 @@ #define SRC_PWM_INIT_H_ -#define PERIOD 5000 -#define EPWM_DB 300 -#define PERIOD_2 PERIOD/2 -#define PWM_MAX PERIOD - EPWM_DB +#define PERIOD_BRAKE 500 +#define PERIOD_MOTOR 5000 +#define EPWM_DB 150 +#define PERIOD_2 PERIOD_MOTOR/2 +#define PWM_MAX PERIOD_MOTOR - EPWM_DB #define PWM_MIN EPWM_DB +#define INDEPENDED 1 +#define COMPLIMENTARY 0 -void PWMInit(uint16_t Num, uint16_t Period); +void PWMInit(uint16_t Num, uint16_t Period, uint16_t Independed); void PWMInitGpio(void); void PWMInitEnable(void); void PWMInitInterruptEn(void); diff --git a/Projects/epwm_test/src/pwm_interrupts.c b/Projects/epwm_test/src/pwm_interrupts.c index 1ed3db7..fb8b1d0 100644 --- a/Projects/epwm_test/src/pwm_interrupts.c +++ b/Projects/epwm_test/src/pwm_interrupts.c @@ -8,10 +8,12 @@ #include "f28x_project.h" #include "pwm_init.h" #include"frm_uart.h" - +#include "gpio_init.h" volatile Uint16 AutoChange = 0; volatile Uint16 PWM_out = 0; +volatile Uint16 PWM_motor = PERIOD_2; +Uint16 Fault = 0, Fault_fix = 0; // @@ -19,8 +21,9 @@ volatile Uint16 PWM_out = 0; // __interrupt void epwm1_isr(void) { - if(AutoChange) pwm_AutoChange(1); - else EPwm1Regs.CMPA.bit.CMPA = PWM_out; +// if(AutoChange) pwm_AutoChange(1); +// else + EPwm1Regs.CMPA.bit.CMPA = PWM_out; // // Clear INT flag for this timer @@ -38,8 +41,10 @@ __interrupt void epwm1_isr(void) // __interrupt void epwm2_isr(void) { - if(AutoChange) pwm_AutoChange(2); - else EPwm2Regs.CMPA.bit.CMPA = PWM_out; + Gpio0out(1); +// if(AutoChange) pwm_AutoChange(2); +// else + EPwm2Regs.CMPA.bit.CMPA = PERIOD_MOTOR - PWM_motor; // GpioDataRegs.GPADAT.bit.GPIO0 = 1; FMSTR_enable_set(); // @@ -52,6 +57,7 @@ __interrupt void epwm2_isr(void) // PieCtrlRegs.PIEACK.all = PIEACK_GROUP3; // GpioDataRegs.GPADAT.bit.GPIO0 = 0; + Gpio0out(0); } // @@ -59,8 +65,9 @@ __interrupt void epwm2_isr(void) // __interrupt void epwm3_isr(void) { - if(AutoChange) pwm_AutoChange(3); - else EPwm3Regs.CMPA.bit.CMPA = PWM_out; +// if(AutoChange) pwm_AutoChange(3); +// else + EPwm3Regs.CMPA.bit.CMPA = PERIOD_MOTOR - PWM_motor; // // Clear INT flag for this timer @@ -76,8 +83,9 @@ __interrupt void epwm3_isr(void) __interrupt void epwm4_isr(void) { - if(AutoChange) pwm_AutoChange(4); - else EPwm4Regs.CMPA.bit.CMPA = PWM_out; +// if(AutoChange) pwm_AutoChange(4); +// else + EPwm4Regs.CMPA.bit.CMPA = PERIOD_MOTOR - PWM_motor; // // Clear INT flag for this timer // @@ -91,8 +99,20 @@ __interrupt void epwm4_isr(void) __interrupt void epwm5_isr(void) { - if(AutoChange) pwm_AutoChange(5); - else EPwm5Regs.CMPA.bit.CMPA = PWM_out; + Fault = !GpioDataRegs.GPADAT.bit.GPIO18; + if(Fault) + { + EPwm5Regs.CMPA.bit.CMPA = 0; + PWM_out = 0; + Fault_fix = 1; + } + else + { +// if(AutoChange) pwm_AutoChange(5); +// else + EPwm5Regs.CMPA.bit.CMPA = PERIOD_BRAKE - PWM_out; + } + // // Clear INT flag for this timer // @@ -107,8 +127,9 @@ __interrupt void epwm5_isr(void) __interrupt void epwm6_isr(void) { - if(AutoChange) pwm_AutoChange(6); - else EPwm6Regs.CMPA.bit.CMPA = PWM_out; +// if(AutoChange) pwm_AutoChange(6); +// else + EPwm6Regs.CMPA.bit.CMPA = PERIOD_BRAKE - PWM_out; // // Clear INT flag for this timer // diff --git a/Projects/epwm_test/src/sdfm.c b/Projects/epwm_test/src/sdfm.c index fe3f4b8..01f86ad 100644 --- a/Projects/epwm_test/src/sdfm.c +++ b/Projects/epwm_test/src/sdfm.c @@ -7,6 +7,7 @@ #include "f28x_project.h" #include "f2838x_sdfm_drivers.h" +#include "gpio_init.h" // // Defines // @@ -147,7 +148,7 @@ __interrupt void Sdfm1_ISR(void) { static uint16_t loopCounter1 = 0; - + Gpio1out(1); // // Wait for result from all the filters (SDIFLG) // @@ -195,6 +196,7 @@ __interrupt void Sdfm1_ISR(void) // Acknowledge this __interrupt to receive more __interrupts from group 5 // PieCtrlRegs.PIEACK.all = PIEACK_GROUP5; + Gpio1out(0); } //Sdfm_clearFlagRegister diff --git a/Projects/epwm_test/src/spi_init.c b/Projects/epwm_test/src/spi_init.c new file mode 100644 index 0000000..d72276d --- /dev/null +++ b/Projects/epwm_test/src/spi_init.c @@ -0,0 +1,10 @@ +/* + * spi_init.c + * + * Created on: 5 сент. 2023 г. + * Author: seklyuts + */ + + + + diff --git a/Projects/epwm_test/src/spi_init.h b/Projects/epwm_test/src/spi_init.h new file mode 100644 index 0000000..0e3e119 --- /dev/null +++ b/Projects/epwm_test/src/spi_init.h @@ -0,0 +1,15 @@ +/* + * spi_init.h + * + * Created on: 5 сент. 2023 г. + * Author: seklyuts + */ + +#ifndef SRC_SPI_INIT_H_ +#define SRC_SPI_INIT_H_ + + + + + +#endif /* SRC_SPI_INIT_H_ */