XMC單片機的PWM功能關閉後電平不確定問題解決

在使用XMC1402的互補PWM功能進行開發時,我遇到了一個問題,即在停止PWM輸出時始終有一個引腳會輸出高電平,不能兩路引腳保持一致低電平,後來確定原因是在關斷PWM的時候,單片機只是關閉了PWM的產生,而沒有將引腳電平拉低
在使用多個品牌的MCU進行測試後,我發現這個問題是普遍存在的,而且問題不只是在互補PWM中,單路PWM的輸出中也會出現這個問題。這樣的問題對於應用來講無疑是非常致命的,在使用互補PWM驅動功率器件時,包括在一些半橋/全橋電路、電機控制的應用中,如果不能保證在關斷PWM後兩個引腳保持一致的高低電平,也許會出現電路直通導致器件損壞等問題。

在MCU中,引腳在關斷PWM時候的電平取決於GPIO初始化的特性和關斷那一刻時的電平,對於出問題,想要得到恆定的高低電平,這裡提出兩種方法來解決:

1. 最簡單直接的方法,就是調整PWM的占空比為0或100,讓引腳一直輸出低電平,這種方法不需要關閉PWM,隨後想開啟PWM直接調整占空比即可,恢復響應快。但是這種方法的缺陷就是不能使用在互補PWM上,在互補PWM中,如果一路PWM輸出為低電平,那麼另外一路輸出就會為高電平(死區以外),這時候就該使用第二種方法。

2. 在互補PWM中,我們可以直接關閉PWM,強制輸出高低電平。首先關掉PWM,然後重新初始化GPIO為輸出模式,最後更改輸出電平。當想要開啟PWM的時候,再次重新初始化。在XMC中我們可以直接使用庫函數XMC_GPIO_Init(XMC_GPIO_PORT_t *const port, const uint8_t pin, const XMC_GPIO_CONFIG_t *const config)來進行配置,將引腳配置的寄存器值提前保存。

下面我貼出如何使用:

(1) 停止PWM輸出

XMC_GPIO_Init((XMC_GPIO_PORT_t *) PORT0_BASE, 12U,&PWM_stop_gpio_config);
其中 PWM_stop_gpio_config定義如下
const XMC_GPIO_CONFIG_t PWM_stop_gpio_config =
{ .mode = XMC_GPIO_MODE_OUTPUT_PUSH_PULL,
.output_level = XMC_GPIO_OUTPUT_LEVEL_LOW,};


(2) 啟動PWM輸出

XMC_GPIO_Init((XMC_GPIO_PORT_t *) PORT0_BASE, 12U,&PWM_CCU8_0_ch1_out0_config);

其中 PWM_CCU8_0_ch1_out0_config定義如下
const XMC_GPIO_CONFIG_t PWM_CCU8_0_ch1_out0_config =
{ .mode = XMC_GPIO_MODE_OUTPUT_PUSH_PULL_ALT7,
.input_hysteresis = XMC_GPIO_INPUT_HYSTERESIS_STANDARD,
.output_level = XMC_GPIO_OUTPUT_LEVEL_LOW };

 

參考資料:

(1) Peripheral - Capture and Compare Unit 8 (CCU8)

https://www.infineon.com/dgdl/Infineon-IP_CCU8_XMC-TR-v01_02-EN.pdf?fileId=5546d4624ad04ef9014b0780b3482262

(2) AP32288 - XMC1000/XMC4000 - Capture Compare Unit 8(CCU8)

https://www.infineon.com/dgdl/Infineon-CCU8-XMC1000_XMC4000-AP32288-AN-v01_01-EN.pdf?fileId=5546d4624e765da5014ed8dd5c7d1730

(3) 已解決:對稱CCU_8問題。始終保持引腳...- 英飛凌開發者社區 (infineon.com)

★博文內容均由個人提供,與平台無關,如有違法或侵權,請與網站管理員聯繫。

★文明上網,請理性發言。內容一周內被舉報5次,發文人進小黑屋喔~

評論