S32K3 MCAL PWM配置详解(同步PWM)基于EB tresos

本文详细介绍了如何配置PWM,包括创建两个通道,设置周期和占空比,选择硬件通道Emios_0,并配置外部bus以实现同步PWM。在MCL中启用API,配置Emiosmasterbus,确保时钟参考点与Emios同步,并在MCU和PORT模块中完成最后的通道设置。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

PWM配置详解

涉及模块 PWM PORT MCU MCL

PWM的英文全称是"Pulse Width Modulation",中文翻译为"脉冲宽度调制"。PWM的波形是一种周期固定的、宽度可调的方波。我们可以通过调节PWM波的占空比实现灯泡亮度、电机速度等控制。

首先在PWM模块下建立两个PWM通道(后续解释为什么是两个通道)

双击进入通道的配置,在这里我们可以设置默认周期和占空比,可以看到PWM的硬件通道和时钟参考点报错,且当前无法选择配置,先配置硬件通道

在PwmEmios选项卡下新增一个配置项

双击进入,选择Emios硬件,这里我们选择Emios_0

然后在Emios Channels下新增两个channnel

双击进入channel,配置项比较多,可以看一下用户手册,主要可以看一下模式配置,其他根据所需模式进行调节即可,这里主要讲一下counter bus,这里的counter bus有internal 和bus A 到bus F,PWM在产生周期方波的时候需要一个类似于timer一样的参考,internal就是PWM通道自带的timer,选择其他bus就是外部的timer,选择外部bus的一个好处是,可以给各PWM通道产生一个统一的timer,也就是说我们可以通过这个机制去产生同步PWM组,这在电机控制中是非常有用的

要实现同步PWM,需要我们配置好外部的bus,这部分需要在MCL中进行配置,打开MCL,在genenral界面下勾选此API

然后在Emios common下新建一个配置项,双击进入,这里我们选择Emios_0

然后电机Emios master bus,新建一个bus,在emios_0中能用于bus的channel分别为0,8,16,22,23,这里我们选择0,bus和各counter之间的关系如下图

回到pwmemios channel的配置项,我们分别选择emios的CH1和CH2

模式先择如下:

Counter选择如下

接下来我们去配置PWM的时钟参考点,我们选择了Emios作为生成PWM的硬件,时钟参考点要根据Emios来选择,可以看到312有两个Emios硬件,且时钟源都来自于CORE CLK

打开MCU的时钟配置,新增一个名为CORE CLK的参考点

然后在MCU的模式配置下,对Emios_0进行使能

然后回到pwm channel,选择我们配置好的Emios通道和时钟参考点

最后在PORT模块下配置两个通道,方向为OUT,配置到EMIOS_0_CH1和EMIOS_0_CH2即可

### S32K 微控制器 MCAL 层中的 PWM 配置与使用 #### 初始化MCAL层 为了在S32K微控制器上配置PWM功能,首先需要初始化MCAL(Microcontroller Abstraction Layer)层。这一步骤确保了底层硬件资源被正确设置以便后续调用[^1]。 ```c #include "Mcal.h" void Mcal_Init(void){ // Initialize the Microcontroller Abstraction Layer. } ``` #### 设置PWM模块参数 接下来定义用于控制特定通道的结构体变量来指定频率、占空比以及其他必要的属性。这些参数会直接影响到最终产生的波形特性[^2]。 ```c typedef struct { uint8_t channel; /* Channel number */ float dutyCycle; /* Duty cycle as a percentage (0..100) */ uint32_t frequencyHz;/* Frequency in Hertz */ } PwmConfigType; ``` #### 实现PWM启动函数 创建一个专门用来开启选定PWM信道的功能函数,在这里可以传递之前准备好的配置数据给它处理并激活相应的外设寄存器位完成实际操作[^3]。 ```c Std_ReturnType Pwm_StartChannel(PwmConfigType* config){ Std_ReturnType ret = E_OK; if(NULL == config){ ret = E_NOT_OK; }else{ // Configure and start the specified PWM channel based on provided settings. // This is pseudo-code, actual implementation will depend on specific hardware details of S32K series. // Set up timer for desired frequency... // Apply duty cycle to output compare register... // Enable PWM generation on selected pin/channel... // Start Timer/PWM operation... } return ret; } ``` 通过上述过程就可以实现基于S32K系列单片机上的PWM信号发生器了。需要注意的是具体细节可能会因不同型号而有所差异,因此建议查阅官方文档获取最准确的信息[^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值