簡介
本文將詳細介紹如何使用 EB 工具配置 Flagchip FC7300 MCAL PWM 驅動 RGB,並重點強調了配置 pwm 模塊的過程以及對pwm 模塊的詳細解釋。本次示例演示將會使用 FTU1_CH1、FTU1_CH3、 FTU1_CH5 通道來驅動 RBG 燈點亮
硬體平台:旗芯微 FC7300DEMO BOARD V2 開發板
軟體平台:EB tresos 28.1.0 、Flagchip_FC_IDE 4.0.7
MCAL: 0.4.0
AUTOSAR VERSION : V4.6.0
以下是 MCAL PACK中 一些文件的簡要說明:
一、 PWM 實例 EB 配置
1.1 導入DemoBoard 例程
打開 Tresos Studio 左上角選擇 File→Import→Existing Projects into Workspace,選擇 FC7300 MCAL 包中的 DemoBoard/tools/DemoBoard_FC7300F8M_EB_Project 文件夾,如圖1.1-1.3所示步驟
圖1.3 Tools/DemoBoard
1.2 選擇需要用到的模塊
由圖 1.4 可以看到,導入進來的例程包含多個模塊,但是本次只需要用到Common、EcuC、Mcu、Os、Port、Pwm,所以右擊工程,選擇 Module Configurations,進入圖 1.6 所示界面並進行篩選。
1.3 配置 ECUC 模塊
在 RGB 燈的MCAL中必須有ECUC模塊,在Module Configurations 中添加ECUC模塊,選擇默認配置即可。
圖 1.7 ECUC 模塊
1.4 配置OS 模塊
在 RGB 燈的MCAL中必須有OS模塊,在Module Configurations 中添加OS模塊,選擇默認配置即可。
圖 1.8 OS 模塊
1.5 配置 MCU 模塊
MCU 模塊提供 MCU 初始化、復位、休眠、系統時鐘配置、外設時鐘配置等功能。
我們需要配置FOSC 使能,先雙擊 Mcu 模塊,進入如圖 1.9 所示界面,選擇 McuClockSettingConfig,勾選 FOSC Enable。
圖 1.9 Mcu 配置界面1
查看原理圖如圖 1.10 所示,RGB1r 對應 PTC12、RGB1g 對應 PTB29、RGB1b 對應 PTB21。通過查找如圖 1.11 所示引腳復用看到可復用到 FTU1_CH5、FTU1_CH3、FTU1_CH1。
圖 1.10 原理圖
圖 1.11 引腳復用
雙擊圖 1.9 index 欄下的 0,選擇 PCC 外設時鐘配置,添加如圖 12 所示的 FTU 時鐘並使能。
圖 1.12 Mcu 配置界面2
1.6 配置 IO 模塊
雙擊 port,進入到 port 配置模塊,如圖 1.13 所示。選擇 portconfig,現在配置需要用到的 PTB21、PTB29、PTC12。雙擊 port 前面的 index 欄下的 1,進入 portB 的配置界面。
圖 1.13 port配置界面
添加 PTB21、PTB29,名字命名為原理圖對應的 RGB 名,如 PTB21 為 RGB_1b。如圖 1.14 所示。
圖 1.14 portpin配置界面
雙擊 index 欄下的序號進入 PTB21 的配置界面。配置引腳模式為 FTU1_CH1,輸出模式,默認低電平。如圖 1.15 所示。同理,PTB29 和 PTC12 也是一樣的配置方法,引腳模式分別是 FTU1_CH3 和 FTU1_CH7,輸出模式,默認低電平。
圖 1.15 PTB21 配置界面
1.7 配置 PWM 模塊:
在 Module Configurations 中添加 PWM 模塊,在 PWM 模塊中的 PwmFtuModule 下添加 FTU 外設如圖 1.16 所示。
圖 1.16 PWM 配置界面
雙擊 Index 0 進入PwmFtuModule_0-> Ftu Modules 配置界面,選擇 Ftu外 設為 FTU_0,時鐘選擇為 BUS,參考源為 McuClockReferencePoint_Bus,選擇 PWM 計數方式為邊沿對齊模式、設置 PWM 頻率為 10 Khz。
圖 1.17 Ftu Modules配置界面
進入 PwmFtuModule_0-> PwmFtuChannels 的配置界面,添加三個 PWM_FTU_Channal ,將 Name 分別修改為 RGB1_1r、RGB1_1g、RGB1_1b, Ftu Hardware Channel 更改為與引腳定義對應的 FTU_CH5、FTU_CH3、FTU_CH1 通道、將通道設置為相互之間獨立。如圖 1.18 所示。
進入 PWM->PwmChannelConfigSet的配置界面添加三個 PwmChannel、Name 分別修改為RGB1_RED、RGB1_BLUE、RGB1_GREEN。如圖 1.19 所示。
雙擊 Index 0 進入 RGB1_RED 配置界面,選擇 PwmFtuChannel 為剛剛在 PwmFtuModule_0-> PwmFtuChannels 下配置的通道,選擇 PWM 極性為高,選擇 PWM 空閒時的電平為低。如圖 1.20 所示。
二、實例代碼解析
2.1 將 EB 配置好的工程編譯並更新代碼至 FCIDE 中
圖 2.1 編譯並更新
按照如圖 2.1 所示標註依次點擊,驗證錯誤,無錯誤後並生成代碼。
2.2 main.c
可以看到如圖 2.2 所示的 Pwm 已經添加進來並進行初始化。
把 Bsp_Pwm_20ms_Task_Event 函數添加至任務時間片函數中。
2.3 Pwm_PBcfg.c
我們可以看到 FTU0外設、FTU1_CHx 在EB 工具配置好的屬性
2.4 Bsp_Pwm.c
在 demo 示例中修改 Bsp_Pwm_20ms_Task_Event 函數,如圖 2.6 所示
這串代碼的解釋是:
當前 CPU 是 Core 0,代碼將執行 PWM 操作。
代碼將 PWM 通道 RGB1_RED、RGB1_GREEN、RGB1_BLUE 的占空比設置為變量 s_u32Rgb2DutyVal 的值。檢查變量 s_u8BreathDirection 的值。如果為 0,代碼將 RGB1 通道的占空比增加 s_u32Rgb1Step 的值。呼吸效果逐漸變亮。如果占空比超過最大占空比值(PWM_MAX_DUTY),則將 s_u32Rgb1DutyVal 設置為最大占空比值,並將 s_u8BreathDirection 設置為 1。
如果 s_u8BreathDirection 為 1,代碼檢查當前占空比值(s_u32Rgb1DutyVal)是否大於 s_u32Rgb1Step。如果是,則將占空比減去 s_u32Rgb1Step。呼吸效果體現為逐漸變暗。如果占空比小於或等於 s_u32Rgb1Step,則將占空比設置為 0,並將 s_u8BreathDirection 設置為 0。
由此來設置三色為相同的亮度。可以看到 RGB 燈呈現白光的呼吸效果。
三、燒錄和調試
3.1 將工程編譯並燒錄到開發板
觀察 RGB 燈,可以看到 RBG 呈呼吸狀態被點亮
四、PWM 模塊詳解
FC7300 PWM 模塊提供獨立/互補/同步通道輸出,邊沿/中心對齊模式,產生可變占空比與周期脈衝等功能
4.1 General 配置
圖 4.1 General 配置
①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 PwmChannel
4.2.1 雙擊Index 進入PwmChannel-> General配置
圖 4.3 PwmChannel General 配置
- PwmChannelId:PWM 通道 Id 號
- PWM Hardware IP:PWM 的硬體單元選擇
- PwmFtuChannel:選擇一個 FTUx Channelx 配置
- PwmMcuClockReferencePoint:PWM 的 Mcu 時鐘參考源
- 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.4 PwmFtuModule
4.3.1 雙擊 Index0 進入 PwmFtuModule-> PwmFtuModule_0->Ftu Modules 配置界面
4.5 PwmFtuModule-> PwmFtuModule_0->Ftu Modules 配置界面
- 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:死區時間計數分頻器
- 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.6 PwmFtuModule-> PwmFtuModule_0->Ftu Fault 配置界面
- 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.3 PwmFtuModule-> PwmFtuModule_0->PwmFtuChannels 配置界面,每個 FTU 外設最多可配置 8 個 PWM 通道
圖 4.7 PwmFtuModule-> PwmFtuModule_0->PwmFtuChannels配置界面
4.3.4 雙擊 Index0,進入 PwmFtuChannles-> General 配置界面
圖 4.8 PwmFtuChannles-> General配置界面
- Ftu Hardware Channel : FTU 硬體通道選擇
- Edge configuration setting for current channel:當前通道的模式,可配置為獨立、同步、互補通道
- Enable Deadtime on combined channels: 使能互補通道死區時間
4.4 PwmPowerStateConfig配置
圖 4.9 PwmPowerStateConfig配置
4.5 PublishedInformation PWM 模塊版本信息
圖 4.10 PublishedInformation PWM 模塊版本信息
4.6 PWM 模塊常用函數
1. Pwm_Init:初始化PWM 模塊
2. Pwm_DeInit:將 PWM模塊復位至默認狀態
3. Pwm_SetDutyCycler:設置 PWM 通道占空比
4. Pwm_SetPeriodAndDuty:設置 PWM 周期與通道占空比
5. Pwm_SetOutputToIdle:將PWM輸出設置為空閒狀態
6. Pwm_GetOutputState:獲取PWM通道輸出空閒狀態
7. Pwm_EnableNotification:使能 PWM 通道事件通知
8. Pwm_DisableNotification:失能PWM 通道事件通知
9. Pwm_GetVersionInfo: 獲取 PWM 模塊版本信息
10. Pwm_GetChannelState:獲取PWM通道占空比狀態
11. Pwm_EnableTriggerOut:使能PWM通道重載觸發輸出
12. Pwm_DisableTriggerOut:失能PWM通道重載觸發輸出
13. Pwm_MaskOutputs:強制停止 PWM 通道輸出
14. Pwm_UnMaskOutputs:解除強制停止 PWM 通道輸出
15. Pwm_SetPowerState: 進入預先準備好的電源狀態
16. Pwm_GetCurrentPowerState: 返回 PWM 硬體單元的當前電源狀態
17. Pwm_GetTargetPowerState: 返回 PWM 硬體單元的目標電源狀態
18. Pwm_PreparePowerState: 允許 PWM 硬體模塊進入請求的電源狀態
五、總結
本文以 PWM 驅動 RGB 為示例,介紹了如何配置和使用 FC7300 的 PWM(脈寬調製)模塊,通過本文的講解,讀者可以了解到如何正確配置 PWM 模塊,以實現脈寬調製的功能。
六、參考文獻
(1) AUTOSAR_SWS_PWMDriver.pdf
(2) FC7300 Reference Manual V0.6.pdf
(3) FC7300 DataSheet V0.4.pdf
歡迎在博文下方留言評論,我們會及時回復您的問題。
如有更多需求,歡迎聯繫大聯大世平集團 ATU 部門:atu.sh@wpi-group.com 作者:Amanda Yang / 楊友莉
更多資訊,請掃碼關注我們!
評論