【Autosar】MCAL - PWM(NXP - S32K14x)

MCAL - PWM(NXP - S32K14x)

MCAL - 汇总

  • 配置工具:EB Tresos Studio
  • 芯片类型:S32K146

1. 概述

PWM(pulse width modulation) - 脉宽调制。S32K146芯片可以通过FlexTimerFlexIO这两个模块来产生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(周期值):8CnV(占空比值):5,当CNT(Counter)值向上计数到5后,channel output输出翻转,CNT继续计数到MOD值后,输出再次翻转,一个周期结束,CNT清0,开始下一个周期计数。这样产生的波形为边缘对称

边缘对齐模式的输出翻转点有两个:CnV值和Mod值。

在这里插入图片描述
在这里插入图片描述

1.1.2 中心对齐

中心对齐的计数方式是向上向下计数,如下图所示:

计数方式:

Counter的初始值为CNTIN,从0开始向上计数,计数到了MOD之后开始递减至0,周而复始。

在这里插入图片描述

中心对齐PWM

如下图所示,MOD(周期值):8CnV(占空比值):5,当CNT(Counter)值向上计数到5后,channel output输出翻转,CNT继续计数到MOD值后,一个周期结束,此时输出状态维持不变,CNT开始递减,开始下一个周期,当CNT值递减到CnV值后,输出翻转,CNT继续递减至0,周而复始。这样产生的波形为中心对称

边缘对齐模式的输出翻转点有一个:CnV值。

在这里插入图片描述
在这里插入图片描述

1.1.3 重装载

此部分没有理解完全、也没有验证,如果有误请大家帮忙指出

当我们修改了占空比时,波形不是立马发生变化的,什么时候生效取决于设定的重装载点(reload point)和重装载频率。

从下图可以看到重装载点有以下三点:

  1. 周期的一半:当达到了周期的一半时,HCSEL = 1,触发一次重装载机会,重装载次数加一。

    在这里插入图片描述

  2. 周期结束(只适用于边缘对齐,此项是一直工作的):当达到了周期的一半时,CNT = MOD,触发一次重装载机会,重装载次数加一。

  3. 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

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值