简介
本文将详细介绍如何使用 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
更多资讯,请扫码关注我们!