CH573 PWM 疑問

關于PWM,使用主定時器產(chǎn)生,并在每秒定時器中進行周期和占空比的修改。? 目前發(fā)現(xiàn)在每秒修改的時候,即使周期和占空比數(shù)據(jù)不變,輸出的波形也會變化。


需要確認的是,在定時器關閉,更新占空比后,再開啟。計數(shù)值是繼續(xù)還是從0開始?? ?

我是否需要在關閉的時候,先獲取計數(shù)值,再在更新占空比后,講計數(shù)值寫回,再開啟定時器。??

這樣是否可以從上次繼續(xù)。


同時關閉開啟是否保持之前電平,是否需要檢查電平,在和初始電平一致的時候,進行改寫?


有沒有建議?

進一步測試:

嘗試改寫周期的時候。我先將原周期和當前計數(shù)值讀取到全局變量,? 隨后根據(jù)新的周期值,等比例縮放計數(shù)值。


將新周期和縮放的計數(shù)值寫入定時器,目的是讓PWM在原來為完成的波形繼續(xù)輸出。? 但是實際測試,重開后,PWM從0開始,計數(shù)值感覺沒有被寫入。



? PWMPeriod_OLD=R32_TMR3_CNT_END;? ? //讀取當前周期

? ? ? ?Current_Count=TMR3_GetCurrentCount(); //讀取當前計數(shù)值

? ? ? ?PWMPREIOD=Meter_PWM_Pam(Meter_Imp_const3,TempPower);? //計數(shù)新周期

? ? ? ?TMR3_PWMCycleCfg( PWMPREIOD );? ?//寫新周期

? ? ? ?NEW_PWM_COUNT=PWMPREIOD;

? ? ? ?NEW_PWM_COUNT=NEW_PWM_COUNT*Current_Count/PWMPeriod_OLD;//根據(jù)周期,等比例縮放計數(shù)值,保持剩余計數(shù)在周期的中占比不變

? ? ? ?TMR3_Disable();

? ? ? ?R32_TMR3_COUNT=NEW_PWM_COUNT;? ?//更新計數(shù)值

? ? ? ?TMR3_PWMActDataWidth( PWMPREIOD/2 );? ? ? ? ? ? ? // 占空比 50%, 修改占空比必須暫時關閉定時器

? ? ? ?TMR3_Enable();



R32_TMR3_COUNT=NEW_PWM_COUNT;? ?//更新計數(shù)值

感覺這語句沒有效果。 是否這個寄存器無法寫入。開啟后,默認從0開始計數(shù)



嘗試賦值計數(shù),放在開啟定時器后,馬上改寫,也是不行。


詢問專家,是否無法改變這個當前計數(shù)值這個寄存器?? 因為在之前其他M0中可以實現(xiàn)這個功能。??


否則在每次改寫周期的時候,會有一個明細的寬度加長。



定時器關閉,再開啟, 定時器cnt值從0開始;

更新定時器的周期(period) 建議在定時器的CNT 剛過0時候更新,

如果同時更新占空比(dutycycle),需要先更新占空比(dutycycle),再更新周期(period)

因為占用比的更新,是寫fifo,fifo只有當定時器從0 開始時候,才會被加載進去,

這意味著, 可以這樣去更新占空比,和周期,這樣可以大大避免切換時候引起的抖動:

??????????????????uint32_t?period=?should_set;
??????????????????uint32_t?dutycycle=?period/2;

??????????????????while(R32_TMR3_COUNT>20);????????//wait?if?timer?cnt?>?20
??????????????????TMR3_PWMActDataWidth(dutycycle);?//update?dutycycle?to?fifo
??????????????????while(R32_TMR3_COUNT<21);????????//wait
??????????????????while(R32_TMR3_COUNT>20);????????//wait?if?timer?cnt?>?20
??????????????????TMR3_PWMCycleCfg(period);????????//update?period

另外注意:

1,上訴代碼加入放在ram中運行會比放在flash中 抖動弱;

2,原則上,上述代碼不可被打斷;


這個代碼是放在哪里?主循環(huán)中嗎?? 如何保證計數(shù)值可以正確發(fā)現(xiàn)? 主頻60M,? 計數(shù)20的時間很短。 會不會因為其他認為錯過更新


已經(jīng)理解,多謝


接著上面的問題,我按照這個方式,對周期的影響可以明顯減小。??

但是發(fā)現(xiàn)一個問題,在這個過程中,會產(chǎn)生一次PWM中斷。而導致主循環(huán)無法進入。(感覺中斷一直再進)。

我在這代碼前關閉中斷使能,? 完成后開啟中斷??梢越鉀Q異常。? 但是這樣會丟失一次中斷。


是否有什么設置方法,可以不關閉中斷,而不影響。


我在初始化的時候,開啟中斷,周期設置為67100000

? GPIOPinRemap(ENABLE,RB_PIN_TMR2);

? GPIOB_ResetBits( GPIO_Pin_11 );? ? ? ? ? ? // 配置PWM口 PB11

? GPIOB_ModeCfg( GPIO_Pin_11, GPIO_ModeOut_PP_5mA );


? TMR2_PWMInit( High_Level, PWM_Times_1 );


? TMR2_ClearITFlag( TMR0_3_IT_CYC_END );

? PFIC_EnableIRQ(TMR2_IRQn);

? TMR2_ITCfg( ENABLE, TMR0_3_IT_CYC_END);


? PWMPREIOD=67100000;

? TMR2_PWMCycleCfg( PWMPREIOD );

? TMR2_Disable();

? TMR2_PWMActDataWidth( PWMPREIOD/2 );? ? ? ? ? ? ? // 占空比 50%, 修改占空比必須暫時關閉定時器

? TMR2_Enable();


最后在每秒鐘更新:更新周期調試下,為31304

? ? ? ?PWMPREIOD=31304;? ??

? ? ? ?Width_PWM=PWMPREIOD/2;

// PFIC_DisableIRQ(TMR2_IRQn);

? ? ? ?while(R32_TMR2_COUNT>20);? ? ? ? //wait if timer cnt > 20

? ? ? ? ?TMR2_PWMActDataWidth(Width_PWM); //update dutycycle to fifo

? ? ? ?while(R32_TMR2_COUNT<21);? ? ? ? //wait

? ? ? ? while(R32_TMR2_COUNT>20);? ? ? ? //wait if timer cnt > 20

? ? ? ? TMR2_PWMCycleCfg(PWMPREIOD);? ? ? ? //update period

? //? ? ? PFIC_EnableIRQ(TMR2_IRQn);



在進入這個代碼后,主循環(huán)每秒點燈不亮。


再關閉中斷使能后,可以正常工作。? ?


從原理上,在這個代碼過程中,會產(chǎn)生PWM中斷,是否因為中斷導致了整個PWM機制異常。? ? ? 如果無法避免,那是否需要手動增加一次中斷計數(shù)。


另外,其他如定時器中斷,是否有關系。?


繼續(xù)請求幫助:

??uint32_t?period=?should_set;
??????????????????uint32_t?dutycycle=?period/2;
?
??????????????????while(R32_TMR3_COUNT>20);????????//wait?if?timer?cnt?>?20
??????????????????TMR3_PWMActDataWidth(dutycycle);?//update?dutycycle?to?fifo
??????????????????while(R32_TMR3_COUNT<21);????????//wait
??????????????????while(R32_TMR3_COUNT>20);????????//wait?if?timer?cnt?>?20
??????????????????TMR3_PWMCycleCfg(period);????????//update?period


這個代碼在正常的時候,驗證了波形有明顯的改善。


事實上,程序會出現(xiàn)死機,R32_TMR3_COUNT這個值一直保持在一個異常數(shù)據(jù)狀態(tài),數(shù)值為0X8E2317FD.? ?不再增加計數(shù)。

理論上計數(shù)值最高位始終是0.?

在這個過程中,是否有概率出現(xiàn)跨過計數(shù)周期,而沒有清零計數(shù)的可能。

在計數(shù)從0開始的時候,F(xiàn)IFO更新,但沒有生效。? 隨后更新了周期。? 這個時候占空比采用上周期的值,而周期已經(jīng)更新。如果占空比>周期,是否會發(fā)生上訴死機問題?

內部的比較是否必須先達到占空比值



只有登錄才能回復,可以選擇微信賬號登錄

国产91精品新入口,国产成人综合网在线播放,九热这里只有精品,本道在线观看,美女视频a美女视频,韩国美女激情视频,日本美女pvp视频