本文将详细介绍如何使用 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
欢迎关注大大通博主:汽车大牛
了解更多汽车相关应用知识!
登录大大通,提问/评论,获取技术文档等更多资讯!