簡介
本文將詳細介紹如何使用 EB 工具配置 Flagchip FC4150 MCAL PWM 驅動 RGB,並重點強調了配置 pwm 模塊的過程以及對 pwm 模塊的詳細解釋。關於 mcu、port 、dio、icu、adc 模塊可參考之前發布的博文。本次示例演示將會使用 FTU0_CH3、FTU0_CH5、 FTU0_CH7 通道來驅動 RBG 燈點亮
硬體平台:旗芯微 FC4150 DEMO BOARD V2 開發板
軟體平台:EB tresos 28.1.0 、Flagchip_FC_IDE 4.04
MCAL: V1.1.0 & V1.1.1
一、MCAL 配置
1.1 配置 MCU 模塊
1.1.1 根據 demo board 電位器原理圖所示,我們需要在MCU模塊-> PCC下添加Port B 、E、FTU 0的外設並配置為時鐘使能。

▲ 圖 1.1.1

▲ 圖 1.1.2
1.2 配置 PORT 模塊
1.2.1進入Port B 的 PortPin 界面下,添加 PTB15引腳並命名為 RGB1_UL,配置 PTB15 為 FTU0_CH3 、輸出模式,默認電平為低。
▲ 圖 1.2.1
1.2.2進入Port B 的 PortPin 界面下,添加 PTB17引腳並命名為 RGB1_VL,配置 PTB17 為 FTU0_CH5 、輸出模式,默認電平為低。

▲ 圖 1.2.2
1.2.3 進入Port E 的 PortPin 界面下,添加 PTE7 引腳並命名為 RGB1_WL,配置 PTE7 為 FTU0_CH7 、輸出模式,默認電平為低。
▲ 圖 1.2.3
1.3配置 PWM 模塊
1.3.1 在Module Configurations 中添加 PWM模塊,在 PWM模塊中的 PwmFtuModule 下添加 FTU 外設。

▲ 圖 1.3.1
1.3.2 雙擊 Index 0 進入PwmFtuModule_0-> Ftu Modules 配置界面,選擇 Ftu 外設為 FTU_0,時鐘選擇為 CORE,參考源為 McuClockReferencePoint_Sys,選擇 PWM 計數方式為邊沿對齊模式、設置 PWM 頻率為 10 Khz。

▲ 圖 1.3.2
1.3.3 進入 PwmFtuModule_0-> PwmFtuChannels 的配置界面,添加三個 PWM_FTU_Channal ,將 Name 分別修改為 RGB1_UL、RGB1_VL、RGB1_WL, Ftu Hardware Channel 更改為與原理圖對應的 FTU_CH3、FTU_CH5、FTU_CH7 通道、將通道設置為相互之間獨立。

▲ 圖 1.3.3
1.3.4 進入 PWM->PwmChannelConfigSet的配置界面添加三個 PwmChannel、Name 分別修改為RGB1_RED、RGB1_BLUE、RGB1_GREEN

▲ 圖 1.3.4
1.3.4.1 雙擊 Index 0 進入RGB1_RED配置界面,選擇 PwmFtuChannel 為剛剛在 PwmFtuModule_0-> PwmFtuChannels 下配置的通道,選擇 PWM 極性為高,選擇 PWM 空閒時的電平為低。

▲ 圖 1.3.4.1
1.3.4.2 RGB1_BLUE、RGB1_GREEN 重複 1.3.4.1 的操作即可。
二、示例代碼解析
2.1 將 EB 配置好的工程編譯並更新代碼至 FCIDE 中
2.2 Main 函數
將 Bsp_Pwm_Init 函數取消屏蔽,Bsp_Pwm_5ms_Task_Event 函數添加至任務時間片函數中

▲ 圖 2.2.1

▲ 圖 2.2.2
2.3 Pwm_PBcfg.c
我們可以看到 FTU0外設、FTU0_CHx 在EB 工具配置好的屬性

▲ 圖 2.3.1(FTU硬體模塊配置屬性)

▲ 圖 2.3.2(FTU通道配置屬性)
2.4 Bsp_Pwm.c
在demo示例中修改 Bsp_Pwm_5ms_Task_Event函數,如圖3.4所示

▲ 圖 2.4
三、燒錄 & 調試
3.1 將工程編譯並燒錄到開發板
觀察 RGB 燈,可以看到 RBG 呈呼吸狀態被點亮

▲ 圖 3.1
四、MCAL PWM 模塊詳解
FC4150 PWM 模塊提供獨立/互補/同步通道輸出,邊沿/中心對齊模式,產生可變占空比與周期脈衝等功能
4.1 General 配置

▲ 圖 4.1
①PwmConfigurationOfOptApiServices
- PwmDeInitApi:復位 PWM 配置
- PwmGetOutputState :獲取 PWM 輸出狀態
- PwmSetDutyCycle :設置 PWM 占空比
- PwmSetOutputToIdle : 將 PWM 輸出設置為空閒狀態
- PwmSetPeriodAndDuty :設置 PWM 占空比和 PWM 周期使能,只有在 PWM-> PwmChannelConfigSet 下選用了 PWM_VARIABLE_PERIOD 才可以使用
- PwmVersionInfoApi:讀 PWM 模塊版本信息
- PwmGetChannelStateApi:獲取 PWM 通道狀態
- PwmEnableTriggerOut :使能 PWM 觸發輸出
②PwmGeneral
- PwmDevErrorDetect: 是否開啟錯誤檢測
- PwmDutycycleUpdatedEndperiod: 選擇更新 PWM 占空比的方式,立即更新/周期結束後更新
- PwmLowPowerStatesSupport: 啟用PWM低功耗模式,電源狀態管理相關的函數有(PWM_SetPowerState、 PWM_GetCurrentPowerState、 PWM_GetTargetPowerState、 PWM_PreparePowerState,、PWM_Main_PowerTransitionManager)
- PwmPowerStateAsynchTransitionMode:不需要配置
- Pwm Enable User Mode Support:不需要配置
- PwmIndex:指定此模塊實例的編號。如果只有一個實例,則其 Id 應為 0
- Fault Support Enable:啟用故障功能,用於關停 PWM 輸出
- EnableMaskingOperations :啟用兩個功能函數,分別是強制停止 PWM 通道輸出、解除強制停止 PWM 通道輸出
4.2 PwmChannel配置
添加在 PwmFtuModule 配置好的通道

▲ 圖 4.2
4.2.1 雙擊Index 進入PwmChannel-> General配置

▲ 圖 4.2.1
- PwmChannelId:PWM 通道 Id 號
- PWM Hardware IP:PWM 的硬體單元選擇
- PwmFtuChannel :選擇一個 FTUx Channelx 配置
- PwmChannelClass:PWM 通道類別,可選固定周期,可變周期
- PwmPolarity :PWM 極性
- PwmIdleState :PWM 空閒狀態電平
- Default Period(HZ):默認 PWM 輸出周期 (unit:Hz)
- Default Period Value :默認 PWM 輸出周期 (unit:s)
- PwmDutycycleDefault :默認 PWM 占空比
- PwmNotification:PWM 中斷回調函數
4.3 PwmFtuModule配置
最多可添加 FTU 0-7 ,8個FTU硬體外設

▲ 圖 4.3
4.3.1 雙擊 Index0 進入PwmFtuModule-> PwmFtuModule_0->Ftu Modules配置界面

▲ 圖 4.3.1
- Ftu Hardware Module:選擇Ftu 硬體外設
- Ftu Module Prescaler:Ftu 預分頻器
- Ftu Module clock selection:選擇 Ftu 時鐘輸入源
- Ftu Module clock Frequency:選擇 Ftu 時鐘頻率
- Ftu Module's Channels Alignment:選擇計數模式
- Reload Frequency: 重新加載次數,例:當選擇 LDFQ_EACH1 每次 cnt 計數等於 mod 時進行一次重新加載
- Default Period:配置 PWM 周期
- Default Period Value:根據 Default Period 點擊計算器標識可自動計算出
- Deadtime Counter:死區時間配置
- DeadTime Counter Prescaler:死區時間計數分頻器
Dead Time config note: 死區的值是以 Default Period Value 去進行設置的,例如圖 4.3.1,這邊是直接走的 Core CLK,150M,配置頻率為 10k,那一個周期就是 100us,period value 就是 150M/10K=15000。如果這裡要做一個 1us 的 deadtime,那麼 counter 就填 150。counter 到 150 就是 1/10K/(15000/150)=1us。死區的分頻是為了讓 dead value 能夠設大點。需要注意的是死區的 value 是不經過上面的 Ftu Module Prescaler 分頻的。也就是說,如果 Module Prescaler 選擇 2 分頻,那下面 Period Value 就會變成 7500,但還得按照15000 去算 dead value,它只與 Core CLK 有關
- Pwm Background Debug Mode configuration:PWM 在 Debug 時的行為,可選計數停止設立標誌位、計數停止輸出進入安全模式、計數停止輸出凍結、繼續進行 PWM 輸出
- Pwm Fault Funtionality and Clear Mode:故障控制模式,在使能 Fault Support Enable 可以進行配置,可選所有通道禁用、啟用偶數通道故障控制,手動故障清除、啟用所有通道故障控制,手動故障清除、啟用所有通道故障控制,自動清楚故障。使用手動清楚故障時,需要開啟中斷。
- Enable External Trigger Channel x:使能外部信號進行 PWM Channel 輸出
- Enable Reload Trigger:使能重新裝載時的觸發信號
4.3.2 PwmFtuModule-> PwmFtuModule_0->Ftu Fault 配置界面

▲ 圖 4.3.2
- Pwm Fault Filter Prescaler: Ftu 故障濾波分頻器
- Pwm Fault Filter Value : Ftu 故障濾波值
- Channel Output on Fault: 故障通道輸出、
- Fault notification enable: 故障通知使能
- Fault Input Channel: 故障輸入通道選擇
- Configure polarity for Fault Input Pin:配置故障輸入引腳極性
- Enable Fault Input Glitch Filter: 啟動故障輸入濾波器
- PwmFaultNotification:PWM 故障回調函數
4.3.2 PwmFtuModule-> PwmFtuModule_0->PwmFtuChannels配置界面,每個 FTU 外設最多可配置 8 個 PWM 通道

▲ 圖 4.3.2
4.3.3 雙擊 Index0 ,進入 PwmFtuChannles-> General 配置界面

▲ 圖 4.3.3
- Ftu Hardware Channel : FTU 硬體通道選擇
- Edge configuration setting for current channel:當前通道的模式,可配置為獨立、同步、互補通道
- Enable Deadtime on combined channels: 使能互補通道死區時間
4.4 PwmPowerStateConfig配置

▲ 圖 4.4
4.5 PublishedInformation PWM 模塊版本信息
4.6 PWM 模塊常用函數
- Pwm_Init:初始化 PWM 模塊
- Pwm_DeInit:將 PWM 模塊復位至默認狀態
- Pwm_SetDutyCycler:設置 PWM 通道占空比
- Pwm_SetPeriodAndDuty:設置 PWM 周期與通道占空比
- Pwm_SetOutputToIdle:將 PWM 輸出設置為空閒狀態
- Pwm_GetOutputState:獲取 PWM 通道輸出空閒狀態
- Pwm_EnableNotification:使能 PWM 通道事件通知
- Pwm_DisableNotification:失能 PWM 通道事件通知
- Pwm_GetVersionInfo: 獲取 PWM 模塊版本信息
- Pwm_GetChannelState:獲取 PWM 通道占空比狀態
- Pwm_EnableTriggerOut:使能 PWM 通道重載觸發輸出
- Pwm_DisableTriggerOut:失能 PWM 通道重載觸發輸出
- Pwm_MaskOutputs:強制停止 PWM 通道輸出
- Pwm_UnMaskOutputs:解除強制停止 PWM 通道輸出
五、總結
本文以 PWM 驅動 RGB 為示例,詳細介紹了如何配置和使用 PWM(脈寬調製)模塊,通過本文的講解,讀者可以了解到如何正確配置 PWM 模塊,以實現脈寬調製的功能。
六、參考文獻
(1) AUTOSAR_SWS_PWMDriver.pdf
(2) FC4150 Reference Manual V3.0.pdf
歡迎在博文下方留言評論,我們會及時回復您的問題。
如有更多需求,歡迎聯繫大聯大世平集團 ATU 部門:atu.sh@wpi-group.com 作者:Memory
更多資訊,請掃碼關注我們!
評論