Hands-On 基于 Flagchip FC7300 MCAL-PWM 驱动 RGB

本文将详细介绍如何使用 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

欢迎关注大大通博主:汽车大牛

了解更多汽车相关应用知识!

登录大大通,提问/评论,获取技术文档等更多资讯!

  • 19
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值