S32K3学习笔记---S32K3之PWM模块

S32K3学习笔记—S32K3之PWM模块

1.前言

​ Pulse Width Modulation,脉冲宽度调制。PWM有非常广泛的应用,如直流电机的调速,开关电源、逆变器等。传统的PWM如果使用的通道过多,可能造成负载率过高,而S32K3的eMIOS模块有一个很大的改变,利用global counter buses 和 local counter buses 既能实现不同通道的PWM同步又能合理分配计数器资源。

2.原理

​ 首先得说一下eMIOS(Enhanced Modular IO Subsystem ),增强型模块化IO子系统,相比于传统的PWM有很大的不一样。功能更强大,可以简单的理解一下。

​ eMIOS提供独立的通道UCs --Unified channels,用户可以配置这些通道来为不同芯片应用程序中的不同功能生成或测量时间事件。eMIOS将这些频道分布在许多 global counter buses 和 local counter buses (只有TypeX型UCs可以生成Counter Bus)。每个local counter bus专用于一组八个相邻的通道。每个global counter bus作用于所有通道。每个counter bus 都可以生成自己的时基,每个counter bus 总线都有其专用通道提供的时基。

每个UC包含以下内容:

image-20240113180550850

那么什么是counter bus?

​ 个人理解为就是一个计数器。并且这个计数器可以作为其他通道的内部计数器且支持多个通道共用一个计数器,当然如果多个通道共用一个counter bus,就可以实现多个通道的PWM同步,如果合理的分配 global counter buses 和 local counter buses 可以降低MCU负载率,提高整体的性能。

​ UCs具体分布如下图:

image-20240107111800605

​ 可以看出eMIOS时钟是由CORE_CLK提供。包括两个global counter buses :BUS_A(UC23 – Unified channels 23)和BUS_F(UC22 ),五个local counter buses :BUS_B(UC0)、BUS_C(UC8)、BUS_D(UC16)。

​ 每个eMIOS通道有24个UCs。这些通道都是相互独立的但又是互相配合。因其在结构上有所差别,又分成了4种通道类型TypeX、TypeY、TypeG、TypeH。以下是每个通道的类型:

image-20240107200536807image-20240107200601669

​ 经过上面的理解,下图是一个总结:此图可以很详细的知道每个通道的类型、所能提供的counter bus及其适用的范围

image-20240107200048286

​ 这4种通道类型所支持的工作模式不同,以下X表示了该类型所支持的工作模式:

image-20240107200238038image-20240107200303559

​ 具体每种模式的区别参考芯片手册,很详细

image-20240113180028187image-20240113180246115

3.EB配置

​ PWM模块依赖于Port、Mcu、Mcl、Pwm

3.1 Port模块

​ Port主要是配置IO模式,具体Port配置可参考之前文章 S32K3学习笔记—S32K3之Gpt、Dio、Platform

image-20240106165437340

​ 1.选择eMIOS_OUT模式

3.2 MCU模块

​ MCU主要是配置参考时钟,MCU详细配置请参考S32K3学习笔记—S32K3之MCU模块

image-20240106170033716

​ 1.此处选择的系统时钟160M,此参数用于最后的Master Bus频率

image-20240106170215580

​ 1.使能eMIOS模块时钟,此处勿忘

3.3 MCL模块

image-20240106170646881

​ 1.支持多核使能

​ 2.需要用到eMIOS必须使能

image-20240106173958441

​ 1.使能支持调试状态

​ 2.使能全局时基

​ 3.时钟分频,此参数用于最后的Master Bus频率

​ 4.资源映射到给哪个核

image-20240106174220648

​ 1.根据需求注册counter bus, 此处将eMIOS通道0的所有counter bus全部分配

image-20240107102119439

​ 1.选择eMIOS通道

​ 2.此处选择向上计数模式 MCB_UP_COUNTER,可以根据需求选择方式

​ 3.当 2 选择 MCB_XX模式时,计数器从1开始计数到周期值。此参数用于最后的Counter Bus频率

​ 4.此偏移仅在通道启动时适用

​ 5.Counter Bus分频系数,此参数用于最后的Counter Bus频率

​ 6.是否支持DEBUG模式

​ 7.使能该Master Bus只用于PWM

注: Master Bus频率 == CoreClock / ClockDividerValue / DefaultPeriod / MasterBusPrescaler 。

3.4 PWM模块

image-20240107182507920

​ 1.建立eMIOS通道

image-20240107185304455

​ 1.eMIOS通道号

​ 2.PWM的模式,此处选择EMIOS_PWM_IP_MODE_OPWMB

​ 3.生成标志的时间,此处选择Trailing_Edge

​ 4.选择 global counter buses 或者 local counter buses

​ 5.是否需要冻结通道寄存器值,方便调试

​ 6.内部分频器系数,必须选择内部计数器才能使此设置生效。仅在OPWFMB和OPWMCB模式下有效。

​ 7.选择用于此eMIOS通道的内部预分频器的时钟源。仅在OPWFMB和OPWMCB模式下有效

​ 8.PWM生成时对应的处理事件,此处选择EMIOS_PWM_IP_NOTIFICATION_DISABLED,也可以触发中断或者DMA

​ 9.PWM输出的相移(以刻度为单位)。默认不偏移。相移参数只能在OPWMB或OPWMT模式下使用

​ 10.配置此eMIOS通道的输入计数源延迟(刻度为单位)以生成触发事件。默认不延迟。此参数仅用于OPWMT模式

​ 11.PWM输出转换期间的死区时间 。 此参数仅用于OPWMCB模式

image-20240107185335582

​ 1.选择具体的counter buses
image-20240107193212182

​ 1.PWM的硬件通道,选择之前配置的PwmEmios通道

​ 2.PWM的通道类型,此处选择PWM_FIXED_PERIOD

​ 3.选中此选项可配置以刻度为单位的默认周期单位,或取消选中此选项以配置以秒为单位的“默认周期”单位。

​ 4.初始化时Pwm通道的默认周期值,单位根据 3 中的配置。此处的频率必须和MCL中的counter buses频率一致

​ 5.初始化时Pwm通道占空比的默认值,

​ 6.在初始化时定义Pwm通道的极性

​ 7.当输出设置为空闲时,定义Pwm通道状态

​ 8.用户回调通知功能,只有选中PwmGeneral/PwmNotificationSupported时,此选项才会激活

​ 9.选择时钟源
image-20240107193249958

​ 1.将PWM映射到核0

至此,用eMIOS产生PWM的配置就完成。掌握原理配置还是比较简单。重点理解eMIOS和PWM的关系。当然S32K3 PWM也是支持传统的形式,用PWM内部的定时器去生成PWM波形。可以根据demo去配置和学习并实现,此处就不做记录。

4.代码调试

​ 可以通过Mcl_Emios_SetCounterBusPeriod修改counter bus的频率,但共用此counter bus的通道的频率都会改变。通过Pwm_SetDutyCycle改变输出的PWM的占空比来实现我们的需要的频率和占空比。可以合理分配资源,实现调频调速

int main_c0(void)
{
    uint8 num_blink = 0U;
    /* Initialize the Mcu driver */
    Mcu_Init(&Mcu_Config_VS_0);

    /* Initialize the clock tree */
    Mcu_InitClock(McuClockSettingConfig_0);

    /* Apply a mode configuration */
    Mcu_SetMode(McuModeSettingConf_0);

    /* Initialize all pins using the Port driver */
    Port_Init(&Port_Config_VS_0);

    /* Initialize Mcl driver */
    Mcl_Init(&Mcl_Config_VS_0);

    /* Initialize Pwm driver , after that Led on*/
    Pwm_Init(&Pwm_Config_VS_0);

    /* Set new period for all channels used external counter bus */
    Mcl_Emios_SetCounterBusPeriod(MCL_EMIOS_0_CH_22, 0x9000U, FALSE);

    /* Setup new duty cycle to the pin*/
    Pwm_SetDutyCycle(PwmChannel_0, 0x4000);

    /* change duty cycle to the pin */
    while(1)
    {
        Pwm_SetDutyCycle(PwmChannel_0, num_blink);
        num_blink += 1000;
        if(num_blink >= 65535)
        {
        	 num_blink= 0;
        }
    }
    return 0U;
}

5.展望

​ 对于UC modes,因其模式很多种,手册又比较详细,就没有自己整理一下,后续有时间整理一下这些模式,再加上。

  • 18
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
S32K3x4EVB-Q257是一款基于ARM Cortex-M内核的汽车电子控制系统的评估板。以下是入门指南: 1. 硬件准备:首先,确保你有一块S32K3x4EVB-Q257评估板、一台电脑和必要的USB连接线。 2. 软件安装:在电脑上安装相关的开发工具和软件。这可能包括S32 Design Studio集成开发环境(IDE)、S32 SDK软件开发套件、S32K Power Software Examples等。 3. 连接电源:将评估板插入电脑上的USB接口,并连接电源线到评估板上。 4. 下载示例代码:在S32 Design Studio中创建一个新项目,并下载示例代码到评估板上。这些示例代码将帮助你了解基本的功能和操作。 5. 硬件连线:根据需要,使用连接线将评估板与其他外部设备(例如传感器、显示屏等)连接起来。评估板上的引脚和接口可以通过手册查阅获得。 6. 运行代码:编译和下载代码到评估板上,并运行它。通过调试器或串口等方式,观察代码的执行情况和输出结果。 7. 进一步学习:通过阅读相关文档、手册和参考资料,了解评估板的更多功能和特性。你可以尝试修改示例代码或编写自己的代码,以实现特定的功能。 注意事项:在使用评估板时,务必遵循相关的安全操作规程,不要超过硬件的额定电压和电流,并保持设备的正确连接和操作。 以上是关于S32K3x4EVB-Q257入门的简要指南。希望这些信息对你有所帮助!

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值