исправлен баг с работой при отключении питания с датчика токов (обработка ошибок)

This commit is contained in:
Eugene 2023-09-05 09:54:02 +03:00
parent 5e0cbb504a
commit fc2bf9f42c
3 changed files with 14 additions and 22 deletions

View File

@ -10,6 +10,7 @@
#include "pwm_init.h" #include "pwm_init.h"
#include "sdfm.h" #include "sdfm.h"
#include "f2838x_sdfm_drivers.h" #include "f2838x_sdfm_drivers.h"
#include "gpio_init.h"
void InitPerif(void) void InitPerif(void)
@ -22,16 +23,7 @@ void InitPerif(void)
SdfmInitGpio(); SdfmInitGpio();
SdfmInitEnable(); SdfmInitEnable();
EALLOW; GpioInit();
GpioCtrlRegs.GPAMUX1.bit.GPIO10 = 0;
GpioCtrlRegs.GPAMUX1.bit.GPIO11 = 0;
GpioCtrlRegs.GPAGMUX1.bit.GPIO10 = 0;
GpioCtrlRegs.GPAGMUX1.bit.GPIO11 = 0;
GpioCtrlRegs.GPADIR.bit.GPIO10 = 1;
GpioCtrlRegs.GPADIR.bit.GPIO11 = 1;
GpioDataRegs.GPADAT.bit.GPIO10 = 0;
GpioDataRegs.GPADAT.bit.GPIO11 = 0;
EDIS;
// Clear all interrupts and initialize PIE vector table: // Clear all interrupts and initialize PIE vector table:
// Disable CPU interrupts // Disable CPU interrupts

View File

@ -59,7 +59,7 @@ void PWMAllInit(void)
uint16_t i; uint16_t i;
for(i = 2; i<=5; i++) for(i = 2; i<=6; i++)
{ {
PWMInit(i, PERIOD); PWMInit(i, PERIOD);
} }
@ -78,7 +78,7 @@ void PWMInitGpio(void)
InitEPwm3Gpio(); InitEPwm3Gpio();
InitEPwm4Gpio(); InitEPwm4Gpio();
InitEPwm5Gpio(); InitEPwm5Gpio();
// InitEPwm6Gpio(); InitEPwm6Gpio();
} }
void PWMInitEnable(void) void PWMInitEnable(void)
@ -88,7 +88,7 @@ void PWMInitEnable(void)
CpuSysRegs.PCLKCR2.bit.EPWM3=1; CpuSysRegs.PCLKCR2.bit.EPWM3=1;
CpuSysRegs.PCLKCR2.bit.EPWM4=1; CpuSysRegs.PCLKCR2.bit.EPWM4=1;
CpuSysRegs.PCLKCR2.bit.EPWM5=1; CpuSysRegs.PCLKCR2.bit.EPWM5=1;
// CpuSysRegs.PCLKCR2.bit.EPWM6=1; CpuSysRegs.PCLKCR2.bit.EPWM6=1;
CpuSysRegs.PCLKCR2.bit.EPWM11=1; CpuSysRegs.PCLKCR2.bit.EPWM11=1;
} }
@ -133,7 +133,7 @@ void PWMInit(uint16_t Num, uint16_t Period)
// //
// Setup TBCLK // Setup TBCLK
// //
EPwmRegs[Num]->TBCTL.bit.CTRMODE = TB_COUNT_UPDOWN; // Count up EPwmRegs[Num]->TBCTL.bit.CTRMODE = TB_COUNT_UPDOWN;
EPwmRegs[Num]->TBCTL.bit.PHSEN = TB_DISABLE; // Disable phase loading EPwmRegs[Num]->TBCTL.bit.PHSEN = TB_DISABLE; // Disable phase loading
EPwmRegs[Num]->TBCTL.bit.HSPCLKDIV = TB_DIV1; // Clock ratio to SYSCLKOUT EPwmRegs[Num]->TBCTL.bit.HSPCLKDIV = TB_DIV1; // Clock ratio to SYSCLKOUT
EPwmRegs[Num]->TBCTL.bit.CLKDIV = TB_DIV1; EPwmRegs[Num]->TBCTL.bit.CLKDIV = TB_DIV1;
@ -161,7 +161,7 @@ void PWMInit(uint16_t Num, uint16_t Period)
// Active Low PWMs - Setup Deadband // Active Low PWMs - Setup Deadband
// //
EPwmRegs[Num]->DBCTL.bit.OUT_MODE = DB_FULL_ENABLE; EPwmRegs[Num]->DBCTL.bit.OUT_MODE = DB_FULL_ENABLE;
EPwmRegs[Num]->DBCTL.bit.POLSEL = DB_ACTV_HIC; EPwmRegs[Num]->DBCTL.bit.POLSEL = DB_ACTV_HIC; //DB_ACTV_HI - independ
EPwmRegs[Num]->DBCTL.bit.IN_MODE = DBA_ALL; EPwmRegs[Num]->DBCTL.bit.IN_MODE = DBA_ALL;
EPwmRegs[Num]->DBRED.bit.DBRED = EPWM_DB; EPwmRegs[Num]->DBRED.bit.DBRED = EPWM_DB;
EPwmRegs[Num]->DBFED.bit.DBFED = EPWM_DB; EPwmRegs[Num]->DBFED.bit.DBFED = EPWM_DB;
@ -171,7 +171,7 @@ void PWMInit(uint16_t Num, uint16_t Period)
// //
EPwmRegs[Num]->ETSEL.bit.INTSEL = ET_CTR_ZERO; // Select INT on Zero event EPwmRegs[Num]->ETSEL.bit.INTSEL = ET_CTR_ZERO; // Select INT on Zero event
EPwmRegs[Num]->ETSEL.bit.INTEN = 1; // Enable INT EPwmRegs[Num]->ETSEL.bit.INTEN = 1; // Enable INT
EPwmRegs[Num]->ETPS.bit.INTPRD = ET_3RD; // Generate INT on 3rd event EPwmRegs[Num]->ETPS.bit.INTPRD = ET_1ST; // Generate INT on 1 event
} }

View File

@ -10,8 +10,8 @@
#include"frm_uart.h" #include"frm_uart.h"
volatile Uint16 AutoChange = 1; volatile Uint16 AutoChange = 0;
volatile Uint16 PWM_out = PERIOD_2; volatile Uint16 PWM_out = 0;
// //
@ -40,7 +40,7 @@ __interrupt void epwm2_isr(void)
{ {
if(AutoChange) pwm_AutoChange(2); if(AutoChange) pwm_AutoChange(2);
else EPwm2Regs.CMPA.bit.CMPA = PWM_out; else EPwm2Regs.CMPA.bit.CMPA = PWM_out;
GpioDataRegs.GPADAT.bit.GPIO10 = 1; // GpioDataRegs.GPADAT.bit.GPIO0 = 1;
FMSTR_enable_set(); FMSTR_enable_set();
// //
// Clear INT flag for this timer // Clear INT flag for this timer
@ -51,7 +51,7 @@ __interrupt void epwm2_isr(void)
// Acknowledge this interrupt to receive more interrupts from group 3 // Acknowledge this interrupt to receive more interrupts from group 3
// //
PieCtrlRegs.PIEACK.all = PIEACK_GROUP3; PieCtrlRegs.PIEACK.all = PIEACK_GROUP3;
GpioDataRegs.GPADAT.bit.GPIO10 = 0; // GpioDataRegs.GPADAT.bit.GPIO0 = 0;
} }
// //
@ -61,7 +61,7 @@ __interrupt void epwm3_isr(void)
{ {
if(AutoChange) pwm_AutoChange(3); if(AutoChange) pwm_AutoChange(3);
else EPwm3Regs.CMPA.bit.CMPA = PWM_out; else EPwm3Regs.CMPA.bit.CMPA = PWM_out;
GpioDataRegs.GPADAT.bit.GPIO11 = 1;
// //
// Clear INT flag for this timer // Clear INT flag for this timer
// //
@ -71,7 +71,7 @@ __interrupt void epwm3_isr(void)
// Acknowledge this interrupt to receive more interrupts from group 3 // Acknowledge this interrupt to receive more interrupts from group 3
// //
PieCtrlRegs.PIEACK.all = PIEACK_GROUP3; PieCtrlRegs.PIEACK.all = PIEACK_GROUP3;
GpioDataRegs.GPADAT.bit.GPIO11 = 0;
} }
__interrupt void epwm4_isr(void) __interrupt void epwm4_isr(void)