文章目录
MCAL - PWM(NXP - S32K14x)1. 概述1.1 工作原理(FlexTimer - PWM)1.1.1 边缘对齐1.1.2 中心对齐1.1.3 重装载
2. API3. 配置介绍3.1 PwmChannel3.2 PwmFtmModule3.2.1 Ftm Modules3.2.2 PwmFtmChannels
3.3 PwmHwConfiguration
MCAL - PWM(NXP - S32K14x)
MCAL - 汇总
配置工具: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