文章目录
MCAL - PWM(NXP - S32K14x)
- 配置工具:EB Tresos Studio
- 芯片类型:S32K146
1. 概述
PWM(pulse width modulation) - 脉宽调制。S32K146芯片可以通过FlexTimer
和FlexIO
这两个模块来产生PWM。
1.1 工作原理(FlexTimer - PWM)
S32K146芯片通过FTM(FlexTimer)模块控制输出引脚产生PWM波。它的本质就是一个定时器,通过Counter(计数值)
与Mod(周期值)
、CnV(占空比值)
进行比较来触发对应的电平翻转操作。
PWM根据对齐方式又分为边缘对齐和中心对齐,造成两者的本质原因在于Counter计数方式,一种是Counter计数到Mod值后清0从头开始计数,一种是Counter计数到Mod后,从Mod开始递减到0。
1.1.1 边缘对齐
边缘对齐的计数方式是向上计数,如下图所示:
计数方式:
Counter的初始值为CNTIN
,从0开始向上计数,计数到了MOD
之后重置
为0,周而复始。
边缘对齐PWM
:
如下图所示,MOD(周期值):8
、CnV(占空比值):5
,当CNT(Counter)值向上计数到5后,channel output
输出翻转,CNT继续计数到MOD值后,输出再次翻转,一个周期结束,CNT清0,开始下一个周期计数。这样产生的波形为边缘对称
。
边缘对齐模式的输出翻转点有两个:CnV值和Mod值。
1.1.2 中心对齐
中心对齐的计数方式是向上向下计数,如下图所示:
计数方式:
Counter的初始值为CNTIN
,从0开始向上计数,计数到了MOD
之后开始递减
至0,周而复始。
中心对齐PWM
:
如下图所示,MOD(周期值):8
、CnV(占空比值):5
,当CNT(Counter)值向上计数到5后,channel output
输出翻转,CNT继续计数到MOD值后,一个周期结束,此时输出状态维持不变,CNT开始递减,开始下一个周期,当CNT值递减到CnV值后,输出翻转,CNT继续递减至0,周而复始。这样产生的波形为中心对称
。
边缘对齐模式的输出翻转点有一个:CnV值。
1.1.3 重装载
此部分没有理解完全、也没有验证,如果有误请大家帮忙指出
当我们修改了占空比时,波形不是立马发生变化的,什么时候生效取决于设定的重装载点(reload point)和重装载频率。
从下图可以看到重装载点有以下三点:
-
周期的一半:当达到了周期的一半时,
HCSEL = 1
,触发一次重装载机会,重装载次数加一。 -
周期结束(只适用于边缘对齐,此项是一直工作的):当达到了周期的一半时,
CNT = MOD
,触发一次重装载机会,重装载次数加一。 -
CnV翻转点:当
CNT = CnV
时,触发一次重装载机会,重装载次数加一。
从下图可以直观看到重装载点的发生位置,每触发一次则重装载次数加一,达到了设定频率后,设定值才会被写入指定寄存器。假设重装载机会只有周期结束
,那么如下图所示,在第三个周期结束后,更新设定值。
如下图所示,LDFQ
寄存器能够设定重装载次数:
2. API
函数 | 描述 |
---|---|
Pwm_Init | 初始化PWM驱动模块 |
Pwm_DeInit | 将PWM驱动模块恢复至默认状态 |
Pwm_SetDutyCycle | 设置占空比 |
Pwm_SetPeriodAndDuty | 设置周期和占空比 |
Pwm_SetOutputToIdle | 设置PWM通道输出为空闲状态 |
Pwm_GetOutputState | 读取PWM通道输出状态 |
Pwm_DisableNotification | 关闭边缘监检测事件通知 |
Pwm_EnableNotification | 使能边沿检测事件通知 |
Pwm_GetVersionInfo | 获取PWM模块版本号 |
3. 配置介绍
3.1 PwmChannel
PWM hardware IP:
选择硬件模块(FTM / FlexIO)
Pwm FtmChannel:
选择FTM模块通道(硬件选择FTM)
Pwm FlexIOChannel:
选择FlexIO通道(硬件选择FlexIO)
Default Period In Ticks:
开启(period单位:Ticks)/ 关闭(period单位:Second)
周期设置均为10ms,两种单位的设置方式如下图:
Default Period (0 -> 65534)
PWM周期值
PwmPolarity:
极性设置(定义PWM周期起始信号 - 初始电平状态的意思)
PwmDutycycleDefault (0 -> 32768):
占空比值(0:0% / 32768:100%)
PwmIdleState:
空闲时候的输出电平
PwmNotification:
中断回调函数
PwmMcuClockReferencePoint:
PWM时钟参考点
3.2 PwmFtmModule
3.2.1 Ftm Modules
Ftm模块配置:
Ftm Hardware Module:
选择FTM模块
Prescaler:
时钟分频(FTM外设时钟定义8MHz,8分频,那么10ms的周期就是10000)
FTM Module clock selection:
FTM模块时钟选择
Ftm Module's Channels Alignment:
PWM对齐方式(边缘对齐 / 中心对齐)
Reload Frequency:
重加载点(配合PwmDutycycleUpdatedEndperiod
使用)
Pwm Background Debug Mode configuration:
芯片进入调试模式时FTM的工作行为
3.2.2 PwmFtmChannels
Ftm Hardware Channel:
通道选择
Edge configuration setting for current channel:
暂未深入了解
3.3 PwmHwConfiguration
使能PWM通道和中断(如果不需要中断触发事件通知则不要勾选)。
参考资料:
S32K-RM.pdf - NXP
AUTOSAR_MCAL_PWM_UM[1].pdf - NXP