基于EB_S32K3XX芯片的EMIOS_PWM的输出_1
由于初次学习EB,在这里同样是借助于官方的demo进行学习。导入官方基于EMIOS的PWM的EB工程和S32DS工程,先粗略的浏览一下相关配置。
这里使用的是S32K314芯片的开发板进行学习,首先打开EB的MCL模块,需要配置EMIOS的通道使用
这里可以看到有三路EMIOS通道可以使用,在此处点进去进行配置
此处对emios_1进行源通道配置,选用CH_23作为源时钟通道,采用向上计数法,初始化的频率周期值为32768,此处不需要重点关心,在之后的代码中还会重新配置。
再看看Port的配置,此处使用PTA29引脚配置为emios1_12作为一个PWM输出,
再看到PWM的eimos配置中,此处对emios1_CH12通道进行配置,选用OPWMB,官方解释为固定周期,我的理解即是在初始化完,进行配置时,便不能再控制其频率,但是通常不需要在控制过程中进行PWM的频率进行控制,这里选择OPWMB即可。分频系数为1,则代表使用的就是为源时钟,没有做任何分频
同时需要在PWM_CHANNEL中再对PWM进行配置,会生成一个对应的序列号,再代码配置中会用到,此处0为EIOMOS1_22。
此处再看一下,MCU的时钟配置,EMIOS模块使用的时钟为CORE_CLK,此处为48M,可能官方考虑到一些用户使用的板子没有外部晶振,所以此处选用的源时钟为内部FIRC时钟
再回到代码中,采用的也是常规的初始化方案,在PWM初始化完成后,需要配置EMIOS的计数周期(频率),如果需要产生一个10Khz的波形,此处EMIOS的满篇计数值应该如何配置呢?
emios1使用的源时钟为48M,代表每一个计数周期为1/48000000 S,而10khz的周期为1/10000,所以用1/10000除以1/48000000,可以得出计数值为4800,所以在Mcl_Emios_SetCounterBusPeriod函数中,初始化时,装填4800即可。
而关于PWM周期的控制,官方的给定使用的函数为Pwm_SetDutyCycle,第一个参数传递EB中PWM_CHANNEL的序号值,第二个参数代表占空比,但是100%占空比为0X8000 ,0%占空比为0X0000,所以为了实现占空比的传递,此处传入的值需要用0X8000*占空比。
/*==================================================================================================
* Copyright 2020 - 2025 NXP
*
* NXP Confidential and Proprietary. This software is owned or controlled by NXP and may only be used strictly
* in accordance with the applicable license terms. By expressly accepting
* such terms or by downloading, installing, activating and/or otherwise using
* the software, you are agreeing that you have read, and that you agree to
* comply with and are bound by, such license terms. If you do not agree to
* be bound by the applicable license terms, then you may not retain,
* install, activate or otherwise use the software.
*
* This file contains sample code only. It is not part of the production code deliverables.
==================================================================================================*/#ifdef __cplusplus
extern "C" {
#endif