diff --git a/pec930_sdk-v1.0.1/Examples/template/LLC_48V/inc/main.h b/pec930_sdk-v1.0.1/Examples/template/LLC_48V/inc/main.h index 0116921..3914f2d 100644 --- a/pec930_sdk-v1.0.1/Examples/template/LLC_48V/inc/main.h +++ b/pec930_sdk-v1.0.1/Examples/template/LLC_48V/inc/main.h @@ -53,12 +53,12 @@ extern "C" // 武士 12V 變壓器 + 47nF 諧振頻率 ~ 75KHZ // 實測值 106uH + 47nF = 73KHZ --> PERIOD = 820 ~ 830 // 高正 40uH + 68nF ~ 95KHZ -#define LLC_PERIOD_SS 400 // 600 = 100khz (EPWM initial use) +#define LLC_PERIOD_SS 300 // 300 = 200khz (EPWM initial use) #define DEAD_TIME 500 // ns #define DEAD_TIME_VALUE (DEAD_TIME * 0.06) // double // LLC free run, 改控 vbus_set -#define LLC_PERIOD_MIN 400 // MIN, 400 = 150KHZ (>760不會振) -#define LLC_PERIOD_MAX 820 // MAX, 800 = 75KHZ // 可調範圍太大會共振 +#define LLC_PERIOD_MIN 300 // MIN, 300 = 200KHZ (>760不會振) +#define LLC_PERIOD_MAX 600 // MAX, 600 = 100KHZ // 可調範圍太大會共振 #define LLC_COMP_GAIN_BIT 10 // 要慢才不會振 #define LLC_COMP_MAX ((LLC_PERIOD_MAX - LLC_PERIOD_MIN) << LLC_COMP_GAIN_BIT) // LLC Soft Start 掃頻 2倍 ~ 1倍 = 150KHZ ~ 73KHZ @@ -66,7 +66,7 @@ extern "C" #define LLC_SS_MAX (LLC_PERIOD_MAX << 2) // 精度不夠,放大 4 倍, 3280 #define LLC_SS_COUNT (LLC_SS_MAX - LLC_SS_MIN) // 3280 - 1600 = 1680 * 10us = 16.8ms // TIM0 參數 = ADC 取樣頻率 -#define TIM0_PERIOD 600 // 60M / 600 = 100KHZ +#define TIM0_PERIOD LLC_PERIOD_SS // IAC 參數 #define I_COMP_MAX 16000 // = V_COMP_MAX * 1.414 #define I_INT_GAIN_BIT 2 @@ -124,7 +124,7 @@ extern "C" void pfc_set_duty(uint16_t val); void pfc_pwm_enable(); void pfc_pwm_disable(); - void A_Pata_Reset(); + void A_Para_Reset(void); void Vol_Loop_LLC(void); void Cur_Loop_PFC(void); diff --git a/pec930_sdk-v1.0.1/Examples/template/LLC_48V/src/init.c b/pec930_sdk-v1.0.1/Examples/template/LLC_48V/src/init.c index ee8cddb..5c3fb41 100644 --- a/pec930_sdk-v1.0.1/Examples/template/LLC_48V/src/init.c +++ b/pec930_sdk-v1.0.1/Examples/template/LLC_48V/src/init.c @@ -16,12 +16,15 @@ void gpio_init(void) { GPIO_InitTypeDef gpio_init = { 0 }; - - // PA12, PWOK - gpio_init.GPIO_Pin = GPIO_Pin_12; + gpio_init.GPIO_Pin = GPIO_Pin_12; // PA12, PWOK + gpio_init.GPIO_Pin |= GPIO_Pin_06; // PA6, test pin + gpio_init.GPIO_Pin |= GPIO_Pin_07; // PA7, test pin gpio_init.GPIO_Mode = GPIO_Mode_OUT; gpio_init.GPIO_PuPd = GPIO_PuPd_NOPULL; GPIO_Init(GPIOA, &gpio_init); + + GPIO_WriteBit(GPIOA, GPIO_Pin_06, GPIO_PIN_LOW); + GPIO_WriteBit(GPIOA, GPIO_Pin_07, GPIO_PIN_LOW); } //=================================================================================== void adc_init(void) @@ -44,7 +47,7 @@ void adc_init(void) adc_init.DataAlign = ADC_DataAlign_Right; adc_init.Mode = ADC_Mode_Scan; // Scan mode ADC_Init(ADC0, &adc_init); - ADC_ExtTrigConfig(ADC0, ADC_ExtTrigSource_EPWM_CH1R, ADC_ExtTrigMode_Enable); + ADC_ExtTrigConfig(ADC0, ADC_ExtTrigSource_TIM0, ADC_ExtTrigMode_Enable); // ADC interrupt config sys_irq_attr_t irq_attr = { @@ -79,7 +82,6 @@ void llc_pwm_init(void) }; TIM_DeInit(EPWM); TIM_TimeBaseInit(EPWM, &tim_init); - TIM_ARRPreloadConfig(EPWM, ENABLE); // pwm @@ -90,10 +92,10 @@ void llc_pwm_init(void) .TIM_OCIdleState = TIM_OCIdleState_Reset, .TIM_OutputNState = TIM_OutputNState_Disable, .TIM_OCNPolarity = TIM_OCPolarity_High, - .TIM_Pulse = 1, + .TIM_Pulse = LLC_PERIOD_SS >> 1, }; TIM_OC1Init(EPWM, &pwm_init); - TIM_OC2Init(EPWM, &pwm_init); + TIM_OC1PreloadConfig(EPWM, ENABLE); // Output Compare 1 preload enable { /* Automatic Output enable, Break, dead time and lock configuration */ TIM_BDTRInitTypeDef bdtr_init = { 0 }; @@ -101,10 +103,6 @@ void llc_pwm_init(void) bdtr_init.TIM_DeadTime = DEAD_TIME_VALUE; TIM_BDTRConfig(EPWM, &bdtr_init); } - - TIM_Cmd(EPWM, ENABLE); - TIM_CtrlPWMOutputs(EPWM, ENABLE); - EPWM->CCMR1_OUTPUT_b.OC1PE = 1; // Output Compare 1 preload enable } //=================================================================================== void tim0_init(void) @@ -116,8 +114,6 @@ void tim0_init(void) .LPTIM_MatchValue = TIM0_PERIOD, }; LPTIM_Init(TIM0, &tim0_init); - - LPTIM_Enable(TIM0); } //=================================================================================== void sysclk_init(void) @@ -140,5 +136,14 @@ void SYS_Config(void) llc_pwm_init(); + tim0_init(); + + // EPWM enable + TIM_Cmd(EPWM, ENABLE); // enable EPWM + TIM_CtrlPWMOutputs(EPWM, ENABLE); // enable PWM OUT + + // TIM0 enable + LPTIM_Enable(TIM0); + uart_init(); } diff --git a/pec930_sdk-v1.0.1/Examples/template/LLC_48V/src/main.c b/pec930_sdk-v1.0.1/Examples/template/LLC_48V/src/main.c index 9257217..81201d9 100644 --- a/pec930_sdk-v1.0.1/Examples/template/LLC_48V/src/main.c +++ b/pec930_sdk-v1.0.1/Examples/template/LLC_48V/src/main.c @@ -119,7 +119,7 @@ uint16_t capture_packet_gap_ms = 1000; //============================================================================= // Private Function Definition //============================================================================= -void A_Para_Reset() +void A_Para_Reset(void) { digital_vcomp = (LLC_PERIOD_MAX - LLC_PERIOD_MIN) << LLC_COMP_GAIN_BIT; // vbus_set = (VBUS_SET * 4096 / VBUS_2ADC / 3.3); @@ -131,13 +131,12 @@ void A_Para_Reset() iac_comp_2 = 0; // set default value - TIM2->ARR = PFC_PERIOD; - TIM2->CCR1 = PFC_DUTY_MIN; // min for ss - TIM2->EGR |= 0x01; EPWM->ARR = LLC_PERIOD_SS; - EPWM->CCR1 = (LLC_PERIOD_SS >> 1); + EPWM->CCR1 = LLC_PERIOD_SS >> 1; EPWM->EGR |= 0x01; - llc_period_ss = 0; + llc_period_ss = LLC_SS_MIN; + + TIM0->MR0 = LLC_PERIOD_SS; pfc_running = 0; llc_running = 0; @@ -201,6 +200,7 @@ void llc_set_period(uint16_t val) { if (val > LLC_PERIOD_MAX) val = LLC_PERIOD_MAX; // 可以小,不能過大 EPWM->ARR = val; + TIM0->MR0 = val; EPWM->CCR1 = val >> 1; } //=================================================================================== @@ -502,6 +502,7 @@ void Vol_Loop_LLC(void) // 測試可工作 //================================================================================= __INTERRUPT void isr_adc_handle(void) { + GPIO_TogglePin(GPIOA, GPIO_Pin_06); // debug SAVE_IRQ_CSR_CONTEXT(); ADC_ClearITFlag(ADC0); @@ -598,6 +599,7 @@ int main(void) // system initial configuration SYS_Config(); + A_Para_Reset(); sys_delay(10); // delay 10ms // read plot param from flash @@ -616,6 +618,7 @@ int main(void) cloop_p->a2 = 3737; cur_loop_fun_en = 1; // 開啟電流環,專測電流環 + while (1) { uart_rx_task();