
File name
Commit message
Commit date
File name
Commit message
Commit date
File name
Commit message
Commit date
//-------------------------------------------------------//
// Project Code : V2H6K01-23-ENEMAN
// File Name : GateCtrl.cpp
// Created on : 2023. 07. 24.
// Description :
// Author : KimJeongWoo
// Last modified Date :
//-------------------------------------------------------//
#include "Cpu1DeviceDefine.h"
float InvPwmFreq = 40.0e3; //Set Inverter PWM Frequency
float BoostPwmFreq = 40.0e3; //Set Boost PWM Frequency
float DabPwmFreq = 40.0e3; //Set DAB PWM Frequency
unsigned int InvPwmPrd = 0; //Initialize Inverter PWM Period
unsigned int BoostPwmPrd = 0; //Initialize Boost PWM Period
unsigned int DabPwmPrd = 0; //Initialize DAB PWM Period
float InvDeadtime = 0.7e-6; //Set Inverter Dead Time
float BoostDeadtime = 0.7e-6; //Set Boost Dead Time
float DabDeadtime = 0.7e-6; //Set DAB Dead Time
unsigned int TestCnt1 = 0; //Initialize PWM Test Count1
unsigned int TestCnt2 = 0; //Initialize PWM Test Count2
unsigned int TestCnt3 = 0; //Initialize PWM Test Count3
unsigned int TestCnt4 = 0; //Initialize PWM Test Count4
unsigned int TestCnt5 = 0; //Initialize PWM Test Count5
unsigned int TestCnt6 = 0; //Initialize PWM Test Count6
unsigned int TestCnt7 = 0; //Initialize PWM Test Count7
int FlagTestInvGatingInput = 0; //Initialize Inverter PWM Gating Test Flag
int FlagTestBoostGatingInput = 0; //Initialize Boost PWM Gating Test Flag
int FlagTestDabGatingInput = 0; //Initialize DAB PWM Gating Test Flag
void InitEPwm() //EPWM Initialize Function
{
SysCtl_disablePeripheral(SYSCTL_PERIPH_CLK_TBCLKSYNC); //Disable Peripheral
SysCtl_setEPWMClockDivider(SYSCTL_EPWMCLK_DIV_1); //EPWMClock = system_clock / SYSCTL_EPWMCLK_DIV
InitEPwm1Gpio(); //Initialize PWM1 GPIO
InitEPwm2Gpio(); //Initialize PWM2 GPIO
InitEPwm3Gpio(); //Initialize PWM3 GPIO
InitEPwm4Gpio(); //Initialize PWM4 GPIO
InitEPwm5Gpio(); //Initialize PWM5 GPIO
InitEPwm6Gpio(); //Initialize PWM6 GPIO
InitEPwm7Gpio(); //Initialize PWM7 GPIO
InitGateEnbGpio(); //Initialize PWM Gate Enable GPIO
//Booster
InitEPwm1(BoostPwmFreq, BoostDeadtime, TB_COUNT_UPDOWN, 0); //Initialize PWM1
BoostPwmPrd = EPwm1Regs.TBPRD; //Set Boost PWM Period
//Dab
//LvSide
InitEPwm2(DabPwmFreq, DabDeadtime, TB_COUNT_UPDOWN, 0); //Initialize PWM2
InitEPwm3(DabPwmFreq, DabDeadtime, TB_COUNT_UPDOWN, 0); //Initialize PWM3
//HvSide
InitEPwm4(DabPwmFreq, DabDeadtime, TB_COUNT_UPDOWN, 0); //Initialize PWM4
InitEPwm5(DabPwmFreq, DabDeadtime, TB_COUNT_UPDOWN, 0); //Initialize PWM5
DabPwmPrd = EPwm2Regs.TBPRD; //Set DAB PWM Period
//Inverter
InitEPwm6(InvPwmFreq, InvDeadtime, TB_COUNT_UPDOWN, 0); //Initialize PWM6
InitEPwm7(InvPwmFreq, InvDeadtime, TB_COUNT_UPDOWN, 0); //Initialize PWM7
InvPwmPrd = EPwm6Regs.TBPRD; //Set Inverter PWM Period
SysCtl_enablePeripheral(SYSCTL_PERIPH_CLK_TBCLKSYNC); //Enable Peripheral
}
void PwmTestCode() //Define PWM Test Function
{
// if (FlagTestBoostGatingInput == 1) //If Boost Gating Input Test Flag is TRUE
// {
// EPwm1Regs.CMPA.bit.CMPA = TestCnt1; //Set Compare Register
// FlagBoostGatingInput = 1; //Set Boost Gating Input Flag
// }
// else //Other Case
// {
// FlagBoostGatingInput = 0; //Set Boost Gating Input Flag
// EPwm1Regs.CMPA.bit.CMPA = 0; //Reset Compare Register
// }
//
// if (FlagTestDabGatingInput == 1) //If DAB Gating Input Test Flag is TRUE
// {
//
// EPwm2Regs.CMPA.bit.CMPA = TestCnt2; //Set Compare Register
// EPwm3Regs.CMPA.bit.CMPA = TestCnt3; //Set Compare Register
// //EPWM3번은 EPWM2번에 대해 상보
// EPwm4Regs.CMPA.bit.CMPA = TestCnt4; //Set Compare Register
// EPwm5Regs.CMPA.bit.CMPA = TestCnt5; //Set Compare Register
// //EPWM5번은 EPWM4번에 대해 상보
//
// EPwm2Regs.TBPHS.bit.TBPHS = 0; //Reset Phase Shift Register
// EPwm3Regs.TBPHS.bit.TBPHS = 0; //Reset Phase Shift Register
// EPwm4Regs.TBPHS.bit.TBPHS = TdabPhCnt; //Set Phase Shift Register
// EPwm5Regs.TBPHS.bit.TBPHS = TdabPhCnt; //Set Phase Shift Register
//
// FlagDabGatingInput = 1; //Set DAB Gating Input Flag
// }
// else
// {
//
// EPwm2Regs.CMPA.bit.CMPA = 0; //Reset Compare Register
// EPwm3Regs.CMPA.bit.CMPA = 0; //Reset Compare Register
// EPwm4Regs.CMPA.bit.CMPA = 0; //Reset Compare Register
// EPwm5Regs.CMPA.bit.CMPA = 0; //Reset Compare Register
//
// EPwm2Regs.TBPHS.bit.TBPHS = 0; //Reset Phase Shift Register
// EPwm3Regs.TBPHS.bit.TBPHS = 0; //Reset Phase Shift Register
// EPwm4Regs.TBPHS.bit.TBPHS = 0; //Reset Phase Shift Register
// EPwm5Regs.TBPHS.bit.TBPHS = 0; //Reset Phase Shift Register
//
// FlagDabGatingInput = 0; //Reset DAB Gating Input Flag
// }
//
// if (FlagTestInvGatingInput == 1) //If Inverter Gating Input Test Flag is TRUE
// {
// EPwm6Regs.CMPA.bit.CMPA = TestCnt6; //Set Compare Register
// EPwm7Regs.CMPA.bit.CMPA = TestCnt7; //Set Compare Register
//
// FlagInvGatingInput = 1; //Set Inverter Gating Input Flag
// }
// else //Other Case
// {
// EPwm6Regs.CMPA.bit.CMPA = 0; //Reset Compare Register
// EPwm7Regs.CMPA.bit.CMPA = 0; //Reset Compare Register
// FlagInvGatingInput = 0; //Reset Inverter Gating Input Flag
// }
//
// GateOutEnable(); //Call Gate Out Enable Function
}
void GateOutEnable(void) //Define Gate Out Enable Function
{
// if(FlagBoostGating == 1) //If Boost Gating Flag is TRUE
// {
// EALLOW; //Release Register Protection
// EPwm1Regs.TZCLR.bit.OST = 1; //One-Shot Flag Clear
// EDIS; //Lock Register Protection
// }
// else
// {
// EALLOW; //Release Register Protection
// EPwm1Regs.TZFRC.bit.OST = 1; //Force Trip Zones One Shot Event
// EDIS; //Lock Register Protection
// }
//
// if(FlagDabGating == 1)
// {
// EALLOW; //Release Register Protection
// EPwm2Regs.TZCLR.bit.OST = 1; //One-Shot Flag Clear
// EPwm3Regs.TZCLR.bit.OST = 1; //One-Shot Flag Clear
// EPwm4Regs.TZCLR.bit.OST = 1; //One-Shot Flag Clear
// EPwm5Regs.TZCLR.bit.OST = 1; //One-Shot Flag Clear
// EDIS; //Lock Register Protection
// }
// else
// {
// EALLOW; //Release Register Protection
// EPwm2Regs.TZFRC.bit.OST = 1; //Force Trip Zones One Shot Event
// EPwm3Regs.TZFRC.bit.OST = 1; //Force Trip Zones One Shot Event
// EPwm4Regs.TZFRC.bit.OST = 1; //Force Trip Zones One Shot Event
// EPwm5Regs.TZFRC.bit.OST = 1; //Force Trip Zones One Shot Event
// EDIS; //Lock Register Protection
// }
//
// if(FlagInvGating == 1)
// {
// EALLOW; //Release Register Protection
// EPwm6Regs.TZCLR.bit.OST = 1; //One-Shot Flag Clear
// EPwm7Regs.TZCLR.bit.OST = 1; //One-Shot Flag Clear
// EDIS; //Lock Register Protection
// }
// else
// {
// EALLOW; //Release Register Protection
// EPwm6Regs.TZFRC.bit.OST = 1; //Force Trip Zones One Shot Event
// EPwm7Regs.TZFRC.bit.OST = 1; //Force Trip Zones One Shot Event
// EDIS; //Lock Register Protection
// }
//
//
// GPIO_GATE_ENB = ~(FlagInvGating | FlagBoostGating | FlagDabGating);//GPIO GATE Enable Pin = Enable = FALSE
}
void GateOutDisable(void) //Define GPIO Gate Out Disable Function
{
GPIO_GATE_ENB = ~(0); //GPIO GATE Enable Pin = Disable = TRUE
}
int DabPwmComp = 0; //Initialize DAB PWM Compare
void PwmCntUpDate(void) //Define PWM Count Update Function
{
// //Boost
// EPwm1Regs.CMPA.bit.CMPA = TboostCnt; //Set Compare Register Boost Count
//
// //For Buck-Boost Test Start
// //LvSide
//// EPwm2Regs.CMPA.bit.CMPA = DabPwmPrd + DabPwmComp; //Set Compare Register DAB Count + Full Duty * 1/2
//// EPwm3Regs.CMPA.bit.CMPA = DabPwmPrd + DabPwmComp; //Set Compare Register DAB Count + Full Duty * 1/2
// //For Buck-Boost Test End
//
// //LvSide
// EPwm2Regs.CMPA.bit.CMPA = DabPwmPrd * 0.5 + DabPwmComp; //Set Compare Register DAB Count + Full Duty * 1/2
// EPwm3Regs.CMPA.bit.CMPA = DabPwmPrd * 0.5 + DabPwmComp; //Set Compare Register DAB Count + Full Duty * 1/2
//
// //For Inverter Test Start
// //HvSide
// EPwm4Regs.CMPA.bit.CMPA = DabPwmPrd + DabPwmComp; //Set Compare Register DAB Count + Full Duty * 1/2
// EPwm5Regs.CMPA.bit.CMPA = DabPwmPrd + DabPwmComp; //Set Compare Register DAB Count + Full Duty * 1/2
// //For Inverter Test End
//
//// //HvSide
//// EPwm4Regs.CMPA.bit.CMPA = DabPwmPrd * 0.5 + DabPwmComp; //Set Compare Register DAB Count + Full Duty * 1/2
//// EPwm5Regs.CMPA.bit.CMPA = DabPwmPrd * 0.5 + DabPwmComp; //Set Compare Register DAB Count + Full Duty * 1/2
//
// EPwm2Regs.TBPHS.bit.TBPHS = 0; //Set Phase Shift = 0
// EPwm3Regs.TBPHS.bit.TBPHS = 0; //Set Phase Shift = 0
// EPwm4Regs.TBPHS.bit.TBPHS = TdabPhCnt; //Set Phase Shift = DAB Phase Shift Count
// EPwm5Regs.TBPHS.bit.TBPHS = TdabPhCnt; //Set Phase Shift = DAB Phase Shift Count
//
//
// //Inverter
// EPwm6Regs.CMPA.bit.CMPA = TinvACnt; //Set Compare Register Inverter Count
// EPwm7Regs.CMPA.bit.CMPA = TinvBCnt; //Set Compare Register Inverter Count
//
// GateOutEnable(); //Call Gate Out Enable Function
}
void InitGateEnbGpio() //Define Initialize Gate Enable GPIO Function
{
GPIO_setMasterCore(95, GPIO_CORE_CPU1); //CPU1 Control GPIO 95 Pin
GPIO_setPinConfig(GPIO_95_GPIO95); //Select GPIO 95 Pin
GPIO_setDirectionMode(95, GPIO_DIR_MODE_OUT); //GPIO 95 Pin Output
GPIO_setPadConfig(95, GPIO_PIN_TYPE_STD); //GPIO 95 Pin Push-pull output
GPIO_setQualificationMode(95, GPIO_QUAL_ASYNC); //GPIO 95 Pin No synchronization
GPIO_writePin(95, 1); //GPIO 95 Pin HIGH = Disable
}
void GatePulseGenerate() //Define Gate Pulse Generate Function
{
// TinvACnt = LIMITER((unsigned int) (TinvA * InvPwmPrd), (InvPwmPrd - 30), 0.); //Inverter PWM Count of A Branch
// TinvBCnt = LIMITER((unsigned int) (TinvB * InvPwmPrd), (InvPwmPrd - 30), 0.); //Inverter PWM Count of B Branch
// TboostCnt = LIMITER((unsigned int) (Tboost * BoostPwmPrd), (BoostPwmPrd - 200), 200.); //Boost PWM Count
//
//// TdabPh = PiIbat.out; //DAB Phase Shift Time
//// TdabPh = LIMITER(TdabPh, 1, -1); //DAB Phase Shift Time Limit -1 = Min, 1 = Max
//
// if(TdabPh <= 0) //DAB Phase Shift Time Limit Smaller than 0
// {
// EPwm4Regs.TBCTL.bit.PHSDIR = TB_UP; //DAB Phase Direction = 1
// EPwm5Regs.TBCTL.bit.PHSDIR = TB_UP; //DAB Phase Direction = 1
// }
// else
// {
// EPwm4Regs.TBCTL.bit.PHSDIR = TB_DOWN; //DAB Phase Direction = 0
// EPwm5Regs.TBCTL.bit.PHSDIR = TB_DOWN; //DAB Phase Direction = 0
// }
//
// TdabPhCnt = LIMITER((fabs(TdabPh) * DabPwmPrd), DabPwmPrd, -DabPwmPrd); //DAB PWM Count
}