最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊

TIDA-010062提供的圖騰柱無橋PFC的PWM狀態(tài)機(jī)實(shí)現(xiàn)

2022-07-10 14:06 作者:楊帥鍋講電源  | 我要投稿

? 前言:這是2020年學(xué)習(xí)TIDA參考設(shè)計(jì)做的一些記錄,整理了TI的參考設(shè)計(jì)在無橋圖騰柱的控制上的一些思考和實(shí)現(xiàn)方法。(最近有不少人問過我正向東西)。

?

MCU的資源使用說明:


?? 首先注意這個(gè)結(jié)構(gòu)體定義,它設(shè)定了圖騰柱PFC在PWM的多個(gè)狀態(tài),并根據(jù)AC電網(wǎng)的電壓來實(shí)現(xiàn)狀態(tài)機(jī)種各個(gè)子狀態(tài)的切換??梢钥吹降氖菑恼截?fù)或者是從負(fù)到正都經(jīng)歷了三個(gè)狀態(tài),避免發(fā)生錯(cuò)誤,而且也方便引入控制功能進(jìn)去。


typedef?union{

? ??enum

? ? {

? ? ? ??pwmSwState_normalOperation?=?0,

? ? ? ??pwmSwState_positiveHalf?=?1,

? ? ? ??pwmSwState_negativeZeroCrossing1?=?2,

? ? ? ??pwmSwState_negativeZeroCrossing2?=?3,

? ? ? ??pwmSwState_negativeZeroCrossing3?=?4,

? ? ? ??pwmSwState_negativeHalf?=?5,

? ? ? ??pwmSwState_positiveZeroCrossing1?=?6,

? ? ? ??pwmSwState_positiveZeroCrossing2?=?7,

? ? ? ??pwmSwState_positiveZeroCrossing3?=?8,

? ? ? ??pwmSwState_defaultState?=?9,

? ? }enum_pwmSwState;

? ??int32_t?pad;

}TTPLPFC_pwmSwState;


extern?TTPLPFC_pwmSwState?TTPLPFC_pwm_SwState;


? 下面是PWM狀態(tài)機(jī)函數(shù),是放在每個(gè)開關(guān)周期的中斷控制函數(shù)種執(zhí)行,接受電流環(huán)輸出的Duty數(shù)據(jù),并直接寫入到PWM模塊的寄存器里面實(shí)現(xiàn)占空比輸出。下面我會(huì)在函數(shù)里面用簡單的用中文注釋里面說明以下TI的實(shí)現(xiàn)方法和思考。


#pragma?FUNC_ALWAYS_INLINE(TTPLPFC_pwmDriver)

static?inline?void?TTPLPFC_pwmDriver()

{

#if?TTPLPFC_DC_CHECK?==?0

? ??switch(TTPLPFC_pwm_SwState.enum_pwmSwState)

? ? {

? ? ? ? /*First state after B2 Tasks initialization*/

? ? ? ??case?pwmSwState_normalOperation:


? ? ? ? ? ??//

? // Wait for positive zero crossing: pwmSwState_positiveZeroCrossing1

? ? ? ? ? ??//PWM state get into positive zero crossing state1 when Vin<0.

? ? ? ? ? ??//TTPLPFC_threshold_PZC2=0.01,

? ? ? ? ? ??//


/*?在MCU復(fù)位后的全局變量初始化時(shí),會(huì)把這個(gè)狀態(tài)機(jī)放在pwmSwState_normalOperation的初始位置,通常在這個(gè)情況下會(huì)把所有PWM的輸出拉到,為了保險(xiǎn)起見還會(huì)設(shè)置一個(gè)PWM TZ FLAG的故障位標(biāo)志,讓PWM模塊也維持在輸出為低的故障模式,如果外部有管理PWM的邏輯器件,也會(huì)拉低PWM的輸出,防止錯(cuò)誤的時(shí)序損壞開關(guān)器件。*/

/* 從上面的代碼可見,已經(jīng)是進(jìn)入了開始PWM工作的流程,并且等待電網(wǎng)電壓相位的過零穿越,需要注意的是它是要等電網(wǎng)從負(fù)到正穿越,并且把PZC2這個(gè)閾值的比較點(diǎn)是設(shè)置為0.01。那么PZC2是需要跟誰進(jìn)行比較呢?很顯然是跟電網(wǎng)鎖相環(huán)的輸出值進(jìn)行比較,為了避免干擾,通常會(huì)用鎖相環(huán)輸出的完美正弦波來進(jìn)行相位的過零穿越的判定。*/


/* 下面這行代碼就是開始比較AC電網(wǎng)的鎖相環(huán)的值了,這里TTPLPFC_acSine_Prev 是把鎖相環(huán)的當(dāng)前輸出滯后了一拍,起到雙層判定的效果。如果通過這里if判定,那么可以把狀態(tài)機(jī)轉(zhuǎn)移到下一個(gè)狀態(tài)了。*/


? ? ? ? ? ??if(TTPLPFC_acSine?<?TTPLPFC_threshold_PZC2

? ? ? ? ? ? ? ? ? ? &&?TTPLPFC_acSine_Prev?<?0)

? ? ? ? ? ? {

? ? ? ? ? ? ? ??//

? ? ? ? ? ? ? ??//State switch.

? ? ? ? ? ? ? ??//

?/* 切換狀態(tài)到正向穿越,并且直接強(qiáng)迫限制此時(shí)的Duty到最小值,為了防止意外發(fā)出的PWM損壞開關(guān)管 */


? ? ? ? ? ? ? ??TTPLPFC_pwm_SwState.enum_pwmSwState?=

? ? ? ? ? ? ? ? ? ? ? ??pwmSwState_positiveZeroCrossing1;


? ? ? ? ? ? ? ??//

? ? ? ? ? ? ? ??//Limit PU of Duty.

? ? ? ? ? ? ? ??//

? ? ? ? ? ? ? ??TTPLPFC_DutyPU?=?0.004f;


? ? ? ? ? ? ? ??//

//Force PWM output low by AQ(LOW_FREQ) and DB(HIGH_FREQ)

? ? ? ? ? ? ? ??//


/*?這里使用宏定義直接強(qiáng)迫了PWM的動(dòng)作寄存器輸出H/L都是低電平,

是用在圖騰柱的低頻橋臂,然后強(qiáng)迫設(shè)置PWM寄存器的死區(qū)模塊的上升/下降沿死區(qū)模塊為TTPLPFC_PFC_PWM_PERIOD值,也就是死區(qū)長達(dá)達(dá)到一個(gè)周期,那就是把PWM的有效輸出全部用死區(qū)吃掉了,是禁用PWM的輸出的一種簡單方法*/

? ? ? ? ? ? ? ??TTPLPFC_AQ_SW_FORCE_PWMxA_LOW_PWMxB_LOW(

? ? ? ? ? ? ? ? ? ? ? ??TTPLPFC_LOW_FREQ_PWM_BASE);

? ? ? ? ? ? ? ??TTPLPFC_SET_PWM_DBRED(TTPLPFC_HIGH_FREQ_PWM_BASE,

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??TTPLPFC_PFC_PWM_PERIOD);

? ? ? ? ? ? ? ??TTPLPFC_SET_PWM_DBFED(TTPLPFC_HIGH_FREQ_PWM_BASE,

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??TTPLPFC_PFC_PWM_PERIOD);


? ? ? ? ? ? ? ??//

? ? ? ? ? ? ? ??//Limit output of current loop PI regulator.

? ? ? ? ? ? ? ??//

/* 初始化電流環(huán)的PI參數(shù),清除PI控制器的內(nèi)部數(shù)據(jù)和輸出,防止影響到Duty控制*/

? ? ? ? ? ? ? ??TTPLPFC_gi.i10?=?0;

? ? ? ? ? ? ? ??TTPLPFC_gi.i6?=?1;

? ? ? ? ? ? ? ??TTPLPFC_gi_out?=?0;


? ? ? ? ? ? ? ??//

? ? ? ? ? ? ? ??//Clear trip flags twice.

? ? ? ? ? ? ? ??//This flag has been cleared in B2 Tasks.

? ??? ? ? ? ? ? /* 分別清除兩個(gè)橋臂的PWM故障,為后面開啟發(fā)波做準(zhǔn)備,前面提到的是在初始狀態(tài)強(qiáng)制設(shè)置了PWM TZ FLAG故障的標(biāo)志,這里檢查到零穿越后,在轉(zhuǎn)移函數(shù)種清除掉標(biāo)志位 */

? ? ? ? ? ?? ? ??TTPLPFC_HAL_clearPWMTripFlags(TTPLPFC_LOW_FREQ_PWM_BASE);

? ? ? ? ? ? ? ??TTPLPFC_HAL_clearPWMTripFlags(TTPLPFC_HIGH_FREQ_PWM_BASE);


? ? ? ? ? ? ? ??//

? ? ? ? ? ? ? ??//Initialize current loop reference.

? ? ? ? ? ? ? ??//

? ? ? ? ? ? ? ??TTPLPFC_ac_cur_ref_inst_pu?=?0.00f;


? ? ? ? ? ? ? ??//

? ? ? ? ? ? ? ??//Set close loop flags. Begin close loop actions.

? ? ? ? ? ? ? ??//

? ? ? ? ? ? ? ??TTPLPFC_closeGiLoop?=?1;

? ? ? ? ? ? ? ??TTPLPFC_closeGvLoop?=?1;

? ? ? ? ? ? }

? ? ? ? ? ??break;


? ? ? ? /*Positive half state*/

? ? ? ??case?pwmSwState_positiveHalf:


? ? ? ? ? ??//

? ? ? ? ? ??//Set LOW_FREQ PWM output to control current direction.

? ? ? ? ? ??//Set DBRED to allow HIGH_FREQ PWM output.

? ? ? ? ? ??//

/* 進(jìn)入電網(wǎng)正相位工作,這里用宏開啟低頻橋臂的低端開關(guān)位高,高端開關(guān)位低。同時(shí)減少高頻橋臂的開關(guān)的的上升沿死區(qū)到正常工作范圍,下降沿死區(qū)依然位周期長度,沒做修改*/

? ? ? ? ? ??TTPLPFC_AQ_SW_FORCE_PWMxA_LOW_PWMxB_HIGH(TTPLPFC_LOW_FREQ_PWM_BASE);

? ? ? ? ? ??TTPLPFC_SET_PWM_DBRED(TTPLPFC_HIGH_FREQ_PWM_BASE,

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??TTPLPFC_dbRED_SetValue_ticks);


? ? ? ??#if?TTPLPFC_CONTROL_RUNNING_ON?==?CLA_CORE

? ? ? ? ? ??if(TTPLPFC_guiPrms_W >?480?&& TTPLPFC_highPowerTrans_flag ==?0)

? ? ? ? ? ? {

? ? ? ? ? ? ? ??TTPLPFC_gi.Kp?= TTPLPFC_GI_PI_KP_CLAH;

? ? ? ? ? ? ? ? TTPLPFC_gi_pi_ki = TTPLPFC_GI_PI_KI_CLAH;

? ? ? ? ? ? ? ??TTPLPFC_gi.Ki?= TTPLPFC_gi_pi_ki;

? ? ? ? ? ? ? ? TTPLPFC_highPowerTrans_flag =?1;

? ? ? ? ? ? }

? ? ? ? ? ??else?if(TTPLPFC_guiPrms_W <?430?&& TTPLPFC_highPowerTrans_flag ==?1)

? ? ? ? ? ? {

? ? ? ? ? ? ? ??TTPLPFC_gi.Kp?= TTPLPFC_GI_PI_KP_CLAL;

? ? ? ? ? ? ? ? TTPLPFC_gi_pi_ki = TTPLPFC_GI_PI_KI_CLAL;

? ? ? ? ? ? ? ??TTPLPFC_gi.Ki?= TTPLPFC_gi_pi_ki;

? ? ? ? ? ? ? ? TTPLPFC_highPowerTrans_flag =?0;

? ? ? ? ? ? }

? ? ? ??#endif


? ? ? ? ? ??//

? ? ? ? ? ??//TTPLPFC_threshold_NZC1=0.01,

? ? ? ? ? ??//when TTPLPFC_ac_sign_filtered == 0, Vin is negative.

? ? ? ? ? ??//

/* 檢查到鎖相環(huán)的輸出開始轉(zhuǎn)移到從正到負(fù)的穿越點(diǎn) */


? ? ? ? ? ??if(TTPLPFC_acSine?<?TTPLPFC_threshold_NZC1?||

? ? ? ? ? ? ? ? ? ??TTPLPFC_ac_sign_filtered?==?0)

? ? ? ? ? ? ? ? {


? ? ? ? ? ? ? ??//

? ? ? ? ? ? ? ??//State switch.

? ? ? ? ? ? ? ??//

? ? ? ? ? ? ? ??TTPLPFC_pwm_SwState.enum_pwmSwState?=

? ? ? ? ? ? ? ? ? ? ? ? ? ??pwmSwState_negativeZeroCrossing1;

? ? ? ? ? ? ? ??//

? ? ? ? ? ? ? ??//AQCSFRC xA LOW, xB LOW

? ? ? ? ? ? ? ??//

/* 轉(zhuǎn)移到pwmSwState_negativeZeroCrossing1狀態(tài),并且首先強(qiáng)迫把低頻橋臂的開關(guān)拉低,也就說還沒等到穿越到負(fù)向,就提前關(guān)閉了低頻橋臂開關(guān)。防止低頻橋臂的開關(guān)體二極管影響的反向恢復(fù)在過零點(diǎn)產(chǎn)生電流噪音。*/


? ? ? ? ? ? ? ??TTPLPFC_AQ_SW_FORCE_PWMxA_LOW_PWMxB_LOW(

? ? ? ? ? ? ? ? ? ? ? ? ? ??TTPLPFC_LOW_FREQ_PWM_BASE);

? ? ? ? ? ? ? ? }

? ? ? ? ? ??break;


? ? ? ? /*NZC state1:*/

? ? ? ??case?pwmSwState_negativeZeroCrossing1?:


? ? ? ? ? ??//

? ? ? ? ? ??//TTPLPFC_stateSlew++;

? ? ? ? ? ??//Force high_freq PWM output low by DB(HIGH_FREQ).

? ? ? ? ? ??//

? ? ? ? ? ??TTPLPFC_SET_PWM_DBRED(TTPLPFC_HIGH_FREQ_PWM_BASE,

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??TTPLPFC_PFC_PWM_PERIOD);

? ? ? ? ? ??TTPLPFC_SET_PWM_DBFED(TTPLPFC_HIGH_FREQ_PWM_BASE,

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??TTPLPFC_PFC_PWM_PERIOD);

? ? ? ? ? ??//

? ? ? ? ? ??//Limit PU of Duty.

? ? ? ? ? ??//

? ? ? ? ? ??TTPLPFC_DutyPU?=?0.004f;


/* 轉(zhuǎn)移到負(fù)向穿越的NZC1后,同時(shí)也關(guān)閉了高頻橋臂的PWM輸出,這里還是通過把死區(qū)增加到周期長度的方法來實(shí)現(xiàn),同時(shí)也斷開了電流環(huán)的輸出,占空比強(qiáng)制寫為0.004 */


? ? ? ? ? ??if(TTPLPFC_acSine?<=?0?)

? ? ? ? ? ? {

? ? ? ? ? ? ? ??//

? ? ? ? ? ? ? ??//State switch.

? ? ? ? ? ? ? ??//


/* 由于NZC1的判斷點(diǎn)是鎖相環(huán)的acSIN是0.01,還沒有到零點(diǎn)以下的負(fù)相位,所有這里繼續(xù)等待AC電網(wǎng)正式穿越到零以下*/


? ? ? ? ? ? ? ??TTPLPFC_pwm_SwState.enum_pwmSwState?=

? ? ? ? ? ? ? ? ? ? ? ??pwmSwState_negativeZeroCrossing2;

? ? ? ? ? ? }

? ? ? ? ? ??break;


? ? ? ? /*NZC state2:*/

? ? ? ??case?pwmSwState_negativeZeroCrossing2?:


? ? ? ? ? ??//

? ? ? ? ? ??//TTPLPFC_stateSlew++;

? ? ? ? ? ??//Limit PU of Duty.

? ? ? ? ? ??//


/* 繼續(xù)等待電網(wǎng)相位往負(fù)向穿越,當(dāng)判定到電網(wǎng)鎖相環(huán)小于-0.01后,轉(zhuǎn)移狀態(tài)到NZC3 */?


? ? ? ? ? ??TTPLPFC_DutyPU?=?0.004f;

? ? ? ? ? ??if(TTPLPFC_acSine?<?TTPLPFC_threshold_NZC2)

? ? ? ? ? ? {

? ? ? ? ? ? ? ??//

? ? ? ? ? ? ? ??//Initialize two flags. Use in control DBFED in NZC3.

? ? ? ? ? ? ? ??//

? ? ? ? ? ? ? ??TTPLPFC_stateSlew?=?0;

? ? ? ? ? ? ? ??TTPLPFC_softStartDuty_ticks?=?0;

? ?

/* 初始化過零Duty軟起計(jì)數(shù)器和軟啟Duty變量 */


? ? ? ? ? ? ? ??//

? ? ? ? ? ? ? ??//State switch.

? ? ? ? ? ? ? ??//

? ? ? ? ? ? ? ??TTPLPFC_pwm_SwState.enum_pwmSwState?=

? ? ? ? ? ? ? ? ? ? ? ??pwmSwState_negativeZeroCrossing3;


? ? ? ? ? ? ? ??//

? ? ? ? ? ? ? ??//Enable xA xB Swap

? ? ? ? ? ? ? ??//

/* 需要重點(diǎn)說明的是,這里通過調(diào)整PWM模塊的DB模塊內(nèi)部的SWAP來交換PWMA和PWMB的輸出邏輯,在前面我們得知,EPWM3A是作為HG驅(qū)動(dòng),EPWM3B是LG的驅(qū)動(dòng),這里把A/B交換驅(qū)動(dòng)位置后,PWM模塊參數(shù)的Duty和互補(bǔ)的輸出則就是進(jìn)行交換后的輸出*/

? ? ??? ? ??TTPLPFC_ENABLE_SWAP_DEADBAND_OUTPUT(TTPLPFC_HIGH_FREQ_PWM_BASE);


? ? ? ? ? ? ? ??//

? ? ? ? ? ? ? ??//PI parameter use in PZC3 state.

? ? ? ? ? ? ? ??// 清除電流環(huán)的PI控制器內(nèi)部數(shù)據(jù)

? ? ? ? ? ? ? ??TTPLPFC_gi.i10?=?0;

? ? ? ? ? ? ? ??TTPLPFC_gi.i6?=?1;

? ? ? ? ? ? ? ??TTPLPFC_gi.Ki?=?0;

? ? ? ? ? ? ? ??TTPLPFC_gi_out?=?0;

? ? ? ? ? ? }

? ? ? ? ? ??break;


? ? ? ? /*NZC state3:*/

? ? ? ??case?pwmSwState_negativeZeroCrossing3?:



? ? ? ? ? ??//

? ? ? ? ? ??//Control DBFED.

? ? ? ? ? ??//

/* 這里在每次進(jìn)入中斷后位過零后軟啟動(dòng)占空比強(qiáng)制加1,來實(shí)現(xiàn)軟啟動(dòng)由于在前面交換了A/B的輸出位置,因此這里操作FED下降沿的死區(qū)其實(shí)是在操作HG的驅(qū)動(dòng)脈寬,可見下面FED的死區(qū)由周期最大值逐漸減少到10。因?yàn)榍懊鍰uty強(qiáng)制寫入了0.004,因此HG的輸出占空比是最小的,對應(yīng)AHC(有源互補(bǔ)輸出模式)的配置,LG的占空比是達(dá)到96%這么大的。因此,這里的實(shí)現(xiàn)就是把上管的占空比從0增到最大值96%,同時(shí)還維持下管為低電平關(guān)閉狀態(tài)*/


????TTPLPFC_softStartDuty_ticks?=?TTPLPFC_softStartDuty_ticks?+?1;

? ?TTPLPFC_softStartDeadBandFED_ticks?=?TTPLPFC_PFC_PWM_PERIOD

? ? ? ? ? ? ? ? ? ? -?TTPLPFC_softStartDuty_ticks?*?50;


? ? ? ? ? ??//

? ? ? ? ? ??//Limit DBFED.

? ? ? ? ? ??//TTPLPFC_dbFED_SetValue_ticks=10

? ? ? ? ? ??//

? ? ? ? ? ??if(TTPLPFC_softStartDeadBandFED_ticks?<

? ? ? ? ? ? ? ? ? ??TTPLPFC_dbFED_SetValue_ticks)

? ? ? ? ? ? {

? ? ? ? ? ? ? ??TTPLPFC_softStartDeadBandFED_ticks?=

? ? ? ? ? ? ? ? ? ? ? ??TTPLPFC_dbFED_SetValue_ticks;

? ? ? ? ? ? }


? ? ? ? ? ??//

? ? ? ? ? ??//Set DBFED=500?.

? ? ? ? ? ??//

? ? ? ? ? ??TTPLPFC_SET_PWM_DBFED(TTPLPFC_HIGH_FREQ_PWM_BASE,

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??TTPLPFC_softStartDeadBandFED_ticks?);


? ? ? ? ? ??//

? ? ? ? ? ??//Count work times in PZC3.

? ? ? ? ? ??//

? ? ? ? ? ??TTPLPFC_stateSlew++;


//

// ? ? ? ? ? ?if( fabsf(TTPLPFC_DutyPU) < ?0.004f)

// ? ? ? ? ? ?{

// ? ? ? ? ? ? ? ? ? ?if(TTPLPFC_DutyPU > 0) ? ? ?TTPLPFC_DutyPU = 0.004;

// ? ? ? ? ? ? ? ? ? ?else ? ? ? ? ? ? ? ? ? ? ? ?TTPLPFC_DutyPU = -0.004;

// ? ? ? ? ? ? }

//


? ? ? ? ? ??//

? ? ? ? ? ??//TTPLPFC_stateSlew>10&&Vin<0

? ? ? ? ? ? /*? 軟啟動(dòng)這里強(qiáng)迫進(jìn)入10次,并且VAC確實(shí)是在負(fù)向相位,則正式進(jìn)入負(fù)向區(qū)域工作模式 */

? ? ? ? ? ??if(TTPLPFC_stateSlew?>?TTPLPFC_stateSlewMax

? ? ? ? ? ? ? ? ? ? &&?TTPLPFC_ac_sign_filtered?==?0)

? ? ? ? ? ? {


? ? ? ? ? ? ? ??//

? ? ? ? ? ? ? ??//PI parameter use in PZC3 state.

? ? ? ? ? ? ? ??// 重新寫入PI參數(shù)

? ? ? ? ? ? ? ??TTPLPFC_gi.i10?=?0;

? ? ? ? ? ? ? ??TTPLPFC_gi.i6?=?1;

? ? ? ? ? ? ? ??TTPLPFC_gi.Ki?=?TTPLPFC_gi_pi_ki;

? ? ? ? ? ? ? ??TTPLPFC_gi.Umax?=?TTPLPFC_GI_PI_MAX;

? ? ? ? ? ? ? ??TTPLPFC_gi.Umin?=?TTPLPFC_GI_PI_MIN;

? ? ? ? ? ? ? ??TTPLPFC_gi_out?=?0;


? ? ? ? ? ? ? ??//

? ? ? ? ? ? ? ??//State switch.

? ? ? ? ? ? ? ??//

TTPLPFC_pwm_SwState.enum_pwmSwState?=?pwmSwState_negativeHalf;


? ? ? ? ? ? ? ??//

? ? ? ? ? ? ? ??//Set DBFED=10

? ? ? ? ? ? ? ??// 設(shè)置正常工作的死區(qū)時(shí)間

? ? ? ? ? ? ? ??TTPLPFC_SET_PWM_DBFED(TTPLPFC_HIGH_FREQ_PWM_BASE,

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??TTPLPFC_dbFED_SetValue_ticks);


? ? ? ? ? ? ? ??//

? ? ? ? ? ? ? ??//Reset flags.

? ? ? ? ? ? ? ??// 清除過零軟啟動(dòng)flag,為正向穿越做準(zhǔn)備

? ? ? ? ? ? ? ??TTPLPFC_softStartDuty_ticks?=?0;

? ? ? ? ? ? ? ??TTPLPFC_stateSlew?=?0;

? ? ? ? ? ? }

? ? ? ? ? ??break;


? ? ? ? /*Negative half state*/

? ? ? ??case?pwmSwState_negativeHalf:


? ? ? ? ? ??//

? ? ? ? ? ??//Set LOW_FREQ PWM output to control current direction.

? ? ? ? ? ??//Set DBRED to allow HIGH_FREQ PWM output.

? ? ? ? ? ? /*??設(shè)置低頻橋臂驅(qū)動(dòng)為HG為H,LG為LOW,同時(shí)設(shè)置上升沿死區(qū)為正常工作時(shí)間,進(jìn)入正常工作模式*/

? ? ? ? ? ??TTPLPFC_AQ_SW_FORCE_PWMxA_HIGH_PWMxB_LOW(TTPLPFC_LOW_FREQ_PWM_BASE);

? ? ? ? ? ??TTPLPFC_SET_PWM_DBRED(TTPLPFC_HIGH_FREQ_PWM_BASE,

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??TTPLPFC_dbRED_SetValue_ticks);

/* 監(jiān)測到負(fù)向到正向穿越后,關(guān)閉低頻橋臂驅(qū)動(dòng),高頻橋臂還沒關(guān)*/

? ? ? ? ? ??if(?TTPLPFC_acSine?>?TTPLPFC_threshold_PZC1

? ? ? ? ? ? ? ? ? ? ||?TTPLPFC_ac_sign_filtered?==?1)

? ? ? ? ? ? {

? ? ? ? ? ? ? ??//

? ? ? ? ? ? ? ??//State switch.

? ? ? ? ? ? ? ??//

? ? ? ? ? ? ? ??TTPLPFC_pwm_SwState.enum_pwmSwState?=

? ? ? ? ? ? ? ? ? ? ? ??pwmSwState_positiveZeroCrossing1;


? ? ? ? ? ? ? ??//

? ? ? ? ? ? ? ??//AQCSFRC xA LOW, xB LOW

? ? ? ? ? ? ? ??//

? ? ? ? ? ? ? ??TTPLPFC_AQ_SW_FORCE_PWMxA_LOW_PWMxB_LOW(

? ? ? ? ? ? ? ? ? ? ? ??TTPLPFC_LOW_FREQ_PWM_BASE);


? ? ? ? ? ? }

? ? ? ? ? ??break;


? ? ? ? /*PZC state1:*/

? ? ? ??case?pwmSwState_positiveZeroCrossing1?:


? ? ? ? ? ??//

? ? ? ? ? ??//TTPLPFC_stateSlew++; //DONOTUSE

? ? ? ? ? ??//Force high_freq PWM output low by DB(HIGH_FREQ).

? ? ? ? ? ? /* 關(guān)閉高頻橋臂的驅(qū)動(dòng)輸出,強(qiáng)迫死區(qū)為最大值*/

? ? ? ? ? ??TTPLPFC_SET_PWM_DBRED(TTPLPFC_HIGH_FREQ_PWM_BASE,

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??TTPLPFC_PFC_PWM_PERIOD);

? ? ? ? ? ??TTPLPFC_SET_PWM_DBFED(TTPLPFC_HIGH_FREQ_PWM_BASE,

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??TTPLPFC_PFC_PWM_PERIOD);


? ? ? ? ? ??//

? ? ? ? ? ??//Limit PU of Duty.

? ? ? ? ? ??//

? ? ? ? ? ??TTPLPFC_DutyPU?=?0.004f;

? ? ? ? ? ??if(TTPLPFC_acSine?>=?0?)

? ? ? ? ? ? {

? ? ? ? ? ? ? ??//

? ? ? ? ? ? ? ??//State switch.

? ? ? ? ? ? ? ??//

? ? ? ? ? ? ? ??TTPLPFC_pwm_SwState.enum_pwmSwState?=

? ? ? ? ? ? ? ? ? ? ? ??pwmSwState_positiveZeroCrossing2;

? ? ? ? ? ? }

? ? ? ? ? ??break;


? ? ? ? /*PZC state2:*/

? ? ? ??case?pwmSwState_positiveZeroCrossing2?:


? ? ? ? ? ??//

? ? ? ? ? ??//TTPLPFC_stateSlew++;//DONOTUSE

? ? ? ? ? ??//Limit PU of Duty.

? ? ? ? ? ??//

? ? ? ? ? ??TTPLPFC_DutyPU?=?0.004f;

? ? ? ? ? ??if(TTPLPFC_acSine?>?TTPLPFC_threshold_PZC2?)

? ? ? ? ? ? {

? ? ? ? ? ? ? ??//

? ? ? ? ? ? ? ??//State switch.

? ? ? ? ? ? ? ??//

? ? ? ? ? ? ? ??TTPLPFC_pwm_SwState.enum_pwmSwState?=

? ? ? ? ? ? ? ? ? ? ? ??pwmSwState_positiveZeroCrossing3;


? ? ? ? ? ? ? ??//

? ? ? ? ? ? ? ??//Initialize two flags. Use in control DBFED in PZC3.

? ? ? ? ? ? ? ??//

? ? ? ? ? ? ? ??TTPLPFC_stateSlew?=?0;

? ? ? ? ? ? ? ??TTPLPFC_softStartDuty_ticks?=?0;


? ? ? ? ? ? ? ??//

? ? ? ? ? ? ? ??//Dead band output swap disabled.

? ? ? ? ? ? ? ??// 恢復(fù)正常開關(guān)的邏輯,禁用SWAP功能

? ? ? ? ? ? ? ??TTPLPFC_DISABLE_SWAP_DEADBAND_OUTPUT(

? ? ? ? ? ? ? ? ? ? ? ??TTPLPFC_HIGH_FREQ_PWM_BASE);


? ? ? ? ? ? ? ??//

? ? ? ? ? ? ? ??//PI parameter use in PZC3 state.

? ? ? ? ? ? ? ??//

? ? ? ? ? ? ? ??TTPLPFC_gi.i10?=?0;

? ? ? ? ? ? ? ??TTPLPFC_gi.i6?=?1;

? ? ? ? ? ? ? ??TTPLPFC_gi_out?=?0;

? ? ? ? ? ? ? ??TTPLPFC_gi.Ki?=?0;

? ? ? ? ? ? }

? ? ? ? ? ??break;


? ? ? ? /*PZC state3:*/

? ? ? ??case?pwmSwState_positiveZeroCrossing3?:


? ? ? ? ? ??//

? ? ? ? ? ??//Control DBFED.

? ? ? ? ? ??// TTPLPFC_PFC_PWM_PERIOD = 1000

? ? ? ? ? ? /*與負(fù)向穿越一樣通過在該區(qū)域操作PWM3A的下降沿來實(shí)現(xiàn)對實(shí)現(xiàn)過零軟啟動(dòng)。不同的地方是,這里讓上管維持低電平關(guān)閉,將下管的占空比從0增加到最大,實(shí)現(xiàn)過零后軟啟動(dòng)*/

? ? ? ? ? ??TTPLPFC_softStartDuty_ticks?=?TTPLPFC_softStartDuty_ticks?+?1;

? ? ? ? ? ??TTPLPFC_softStartDeadBandFED_ticks?=?TTPLPFC_PFC_PWM_PERIOD?-

? ? ? ? ? ? ? ? ? ??TTPLPFC_softStartDuty_ticks?*?50;


? ? ? ? ? ??//

? ? ? ? ? ??//Limit DBFED.

? ? ? ? ? ??//

? ? ? ? ? ??if(TTPLPFC_softStartDeadBandFED_ticks?<

? ? ? ? ? ? ? ? ? ??TTPLPFC_dbFED_SetValue_ticks?)

? ? ? ? ? ? {

? ? ? ? ? ? ? ??TTPLPFC_softStartDeadBandFED_ticks?=

? ? ? ? ? ? ? ? ? ? ? ??TTPLPFC_dbFED_SetValue_ticks;

? ? ? ? ? ? }


? ? ? ? ? ??//

? ? ? ? ? ??//Set DBFED=500?.

? ? ? ? ? ??//

? ? ? ? ? ??TTPLPFC_SET_PWM_DBFED(TTPLPFC_HIGH_FREQ_PWM_BASE,

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??TTPLPFC_softStartDeadBandFED_ticks);

? ? ? ? ? ??//

? ? ? ? ? ??//Count work times in PZC3.

? ? ? ? ? ??//

? ? ? ? ? ??TTPLPFC_stateSlew++;


//

// ? ? ? ? ? ?if( fabsf(TTPLPFC_DutyPU) < ?0.004f)

// ? ? ? ? ? ?{

// ? ? ? ? ? ? ? ? ? ?if(TTPLPFC_DutyPU > 0) ? ? ?TTPLPFC_DutyPU = 0.004;

// ? ? ? ? ? ? ? ? ? ?else ? ? ? ? ? ? ? ? ? ? ? ?TTPLPFC_DutyPU = -0.004;

// ? ? ? ? ? ? }

//


? ? ? ? ? ??//

? ? ? ? ? ??//TTPLPFC_stateSlew>10&&Vin>0

? ? ? ? ? ??//

? ? ? ? ? ??if(TTPLPFC_stateSlew?>?TTPLPFC_stateSlewMax

? ? ? ? ? ? ? ? ? ? ? &&?TTPLPFC_ac_sign_filtered?==?1)

? ? ? ? ? ? {

? ? ? ? ? ? ? ??//

? ? ? ? ? ? ? ??//PI parameters use in positive half.

? ? ? ? ? ? ? ??//

? ? ? ? ? ? ? ??TTPLPFC_gi.i10?=?0;

? ? ? ? ? ? ? ??TTPLPFC_gi.i6?=?1;

? ? ? ? ? ? ? ??TTPLPFC_gi_out?=?0;

? ? ? ? ? ? ? ??TTPLPFC_gi.Ki?=?TTPLPFC_gi_pi_ki;


? ? ? ? ? ? ? ??//

? ? ? ? ? ? ? ??//State switch.

? ? ? ? ? ? ? ??//

? ? ? ? ? ? ? ??TTPLPFC_pwm_SwState.enum_pwmSwState?=?pwmSwState_positiveHalf;


? ? ? ? ? ? ? ??//

? ? ? ? ? ? ? ??//Set DBFED=10

? ? ? ? ? ? ? ??//

? ? ? ? ? ? ? ??TTPLPFC_SET_PWM_DBFED(TTPLPFC_HIGH_FREQ_PWM_BASE,

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??TTPLPFC_dbFED_SetValue_ticks);


? ? ? ? ? ? ? ??//

? ? ? ? ? ? ? ??//Reset flags.

? ? ? ? ? ? ? ??//

? ? ? ? ? ? ? ??TTPLPFC_stateSlew?=?0;

? ? ? ? ? ? ? ??TTPLPFC_softStartDuty_ticks?=?0;

? ? ? ? ? ? }


? ? ? ? ? ??break;

? ? ? ? /*Protect state: OCP OVP*/

? ? ? ??case?pwmSwState_defaultState:

? ? ? ? ? ??//

? ? ? ? ? ??//Limit PU of Duty.

? ? ? ? ? ??//

? ? ? ? ? ??TTPLPFC_DutyPU?=?0.01f;


? ? ? ? ? ??//

? ? ? ? ? ??//Force PWM output low by AQ(LOW_FREQ) and DB(HIGH_FREQ).

? ? ? ??? ??/* 初始化后,直接把高頻低頻PWM全部關(guān)閉*/

? ? ? ? ? ??TTPLPFC_AQ_SW_FORCE_PWMxA_LOW_PWMxB_LOW(TTPLPFC_LOW_FREQ_PWM_BASE);

? ? ? ? ? ??TTPLPFC_SET_PWM_DBRED(TTPLPFC_HIGH_FREQ_PWM_BASE,

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??TTPLPFC_PFC_PWM_PERIOD);

? ? ? ? ? ??TTPLPFC_SET_PWM_DBFED(TTPLPFC_HIGH_FREQ_PWM_BASE,

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??TTPLPFC_PFC_PWM_PERIOD);

? ? ? ? ? ??break;


? ? ? ??default:

? ? ? ? ? ??TTPLPFC_pwm_SwState.enum_pwmSwState?=?pwmSwState_defaultState;

? ? }


#endif

}


PWM狀態(tài)機(jī)應(yīng)用在PFC上的測試視頻:

感謝觀看,謝謝支持,本人能力有效,如有錯(cuò)誤懇請幫忙指正,謝謝。


更多PFC介紹:

1、降低單相PFC的ithd的幾個(gè)點(diǎn)子


TIDA-010062提供的圖騰柱無橋PFC的PWM狀態(tài)機(jī)實(shí)現(xiàn)的評論 (共 條)

分享到微博請遵守國家法律
金寨县| 广南县| 鹿邑县| 浪卡子县| 新龙县| 海丰县| 当雄县| 富川| 韩城市| 阿拉善右旗| 临西县| 乐业县| 孟村| 高雄县| 嘉鱼县| 龙井市| 宜良县| 阿城市| 腾冲县| 苍南县| 东山县| 赣榆县| 五寨县| 伊通| 闽清县| 昌吉市| 武威市| 延安市| 南部县| 来凤县| 拉萨市| 无锡市| 阿拉善左旗| 寿光市| 沧源| 祥云县| 南乐县| 乐东| 内江市| 东阳市| 贵阳市|