S32K344之eMIOS

目录

前言

介绍

eMIOS资源

eMIOS通道类型及工作模式

CNTn

Counter Bus

 结构框图

UC特点

UC结构

UC控制和数据路径

Buffered modes 缓冲模式

UC的工作模式

General-Purpose Input and Output (GPIO) mode

Single Action Input Capture (SAIC) mode

Single Action Output Capture (SAOC) mode

Input Pulse Width Measurement (IPWM) mode

Input Period Measurement (IPM) Mode

Double Action Output Compare (DAOC) mode

Pulse Edge Counting (PEC) mode

Modulus Counter (MC) mode

Modulus Counter Buffered (MCB) mode

Output Pulse Width and Frequency Modulation Buffered (OPWFMB) mode

Center Aligned Output PWM with Dead Time Insertion Buffered (OPWMCB) mode

Output PWM Buffered (OPWMB) mode

Output PWM with Trigger (OPWMT) mode

CT组件

CT组件 Emios_Mcl_IP

1、Name

2、ConfigTimeSupport

3、Mcl General Configuration

Mcl Emios Common

4、EmiosCommon

Emios Master Buses

CT组件 Emios_Pwm

EMIOS PWM

PwmGeneral

Emios Instance

Emios Channels

EmiosChlrqCallback

实战



前言

PWM输出是MCU很重要的功能,不同的MCU有不同的PWM生产方式以及配置方法,一般都是“比较输出”原理。在S32K344中,能产生PWM的模块有好几个eMIOS、FlexIO等。其中eMIOS(Enhanced Modular IO Subsystem 增强型模块化IO子系统)可专门用于PWM生成(还具有其他功能:测量脉宽等)。

介绍

eMIOS资源

Timer width:定时器宽度
Number of channels:通道数
Channels configuration
Local Channel prescaler width:本地通道预分频器宽度
Number of global counter buses:全局计数器总线数量
Number of global prescaler:全局预分频器数量
Global channel:全局通道
prescaler width:预分频器宽度

eMIOS通道类型及工作模式

eMIOS的Unified channels ,UC,即eMIOS模块的通道(有24个),分成了4种通道类型,分别是TypeX,TypeY,TypeG,TypeH。这4种通道类型的区别就在于它们所支持的工作模式不同,下表显示了每种通道所支持的工作模式。且每个通道只是一种类型【具体每种通道是何种类型可翻阅用户手册】。

注:有X的代表支持该模式!!!而不是不支持

总结:S32K344有3个eMIOS,每个eMIOS有24个UC,分为4种类型:XYGH。

每种类型支持不同的工作方式,有不同的应用场景。

CNTn

UC内部计数器的值。当eMIOS处于GPIO模式或UC被冻结时,此寄存器是读写的。对于所有其他模式,此寄存器都是只读的。当进入某些UC模式时,eMIOS会自动清除此寄存器。 
以下模式使用UC计数器:
*输出脉冲宽度和频率调制缓冲(OPWFMB)模式
*中心对齐输出PWM与死时间插入缓冲(OPWMCB)模式
*脉冲边缘计数(PEC)模式
*模数计数器(MC)模式
*模数缓冲(MCB)模式
所有其他模式不在这个列表不使用内部计数器。
每个模块实例都支持不同数量的寄存器。
下图说明部分通道有自己的计数器寄存器,而每个eMIOS实例又不一样。eMIOS1、2就没有CNT1-CNT7,所以CH1-CH7没有内部计数器。CNT0、CNT8、CNT16以及CNT22、CNT23每个实例都有CNT,因为CNT0、8、16可用于生成局部(本地)Counter_bus,CNT22、23可用于生成全局Counter_bus。

注:ChType X和G都有内部计数器。
因此,Type X、 Type G的通道功能会强大一点,其支持的工作模式会更多一些。此外,Type X的通道可生产Counter Bus供给其他通道参考【↓】。

Counter Bus

What?字面意思就是计数器总线。拆开来说,计数器就是计数的,总线一般是一个信号传输的线路。在手册中,对于计数器总线作用的描述:通过计数器总线共享的同步时基。

eMIOS的特别处之一就是Counter Bus。Counter Bus由特定的(TypeX)通道产生,Counter Bus有全局的和局部的。CNT22、23可用于生成全局Counter_bus可用于所有通道作为“计数参考”。如此一来,多个参考该全局Counter_bus的通道可以做到共享时基,即同步。因此可以同步生成多路PWM,这在电机控制中是很重要的。

TypeX型通道CH0,CH8,CH16分别生成局部Bus Counter_bus_B,Counter_bus_C,Counter_bus_D,局部Bus只能供给部分通道;TypeX型通道CH22,CH23生成全局Bus Counter_bus_A,Counter_bus_F,全局Bus可以为其他所有通道提供Bus。
上图整理如下表所示:

Counter bus
ChannelsTimebase channel
Global bus A
All UCs
23
Global bus F
All UCs22
Local bus B
UC0 - UC7
0
Local bus C
UC8 - UC158
Local bus D
UC16 - UC2316

如果你需要计数功能,那么在选择通道的时候就需要选择X或者G类型的通道,这些通道最终和GPIO脚一一对应。所以在设计硬件电路选脚的时候就需要考虑这些因素。其它功能都需要仔细阅读一遍,比如配置PWM需要设置周期时,也需要特定的通道。因为有些通道不支持PWM周期可调,只支持占空比可调。由于ch22和ch23可以做计数总线,为所在组的其它通道提供计数总线引用,所以在实际设计电路时,这两个通道对应的引脚最好不要用作其它用途。
 

 结构框图

eMIOS将这些通道分布在许多global 和 local counter buses。每个本地总线都专用于一组8个连续的通道。每个通道都可以生成自己的时间基,每个计数器总线都有一个专用通道提供它的时间基。

UC特点

*24个UC分布在本地计数器总线上,如计数器总线、通道和时基源所示
*由UC23驱动的全局计数器总线A
*由UC22驱动的全局计数器总线F
*通过计数器总线共享的同步时基
*每个通道的专用时基,与计数器总线不同
*全局时钟预分频器(GCP)
*每个通道一个CP
*每个UC的专用控制和状态寄存器
*24位宽数据寄存器
*影子标志寄存器(GFLAG),用于通过一次读取访问 访问所有通道标志
*能够冻结UC状态以进行调试
*电机控制能力

UC结构

每个UC包含以下内容:
*两个双缓冲数据寄存器An和Bn,允许在需要软件干预之前发生最多两个事件——输入捕获、输出比较或两者兼有
*两个比较器A和B,用于指示所选计数器总线何时等于An和Bn中的值
*一个内部计数器(CNTn[C]),可在除GPIO之外的所有模式下运行。 您可以将此计数器用作本地时基或对输入事件进行计数。如果当前模式中未使用CNTn[C] ,则可以将其用作时基。
*一个输出触发器,用于保持要施加到输出引脚的逻辑电平
*状态寄存器UC status n(S0-S23),用于标记输入捕获和匹配事件,指示标志超出和溢出,并显示输入和输出引脚状态
*控制UC操作的控制寄存器UC control n(C0-C23)
您可以控制每个UC的以下操作特性:
*指定UC行为的逻辑(Cn[MODE])(参见UC模式)
*计数器总线(Cn[BSL]),为所有定时功能提供时基
*CP(Cn[UPRE]和C2_n[UCUEXTPRE])
*确定有效引脚转换的输入滤波器的最小输入脉冲宽度(Cn[IF])
*要检测哪些输入边缘(Cn[EDSEL])
*四个输出禁用输入信号(Cn[ODISSL])中的哪一个用于禁用输出
*对于除GPIO之外的所有输出模式,是否禁用输出触发器(Cn[ODIS])

上述摘自用户手册,换言之:

Cn[MODE] 指定工作模式、Cn[BSL]选择计数器总线:每个通道需要选择计数器总线用于参考、选择时钟分频值、输入滤波、边沿检测、输出禁用。

其中的UC control and datapath的详细框图如下:

UC控制和数据路径

如UC控制和数据路径图(上面)所示,UC包含控制和数据路径子块。
控制子块产生信号来控制数据路径子块中的多路复用器。eMIOS以独立于其他模式的专用逻辑实现每个UC模式。UC模式共享一组寄存器,允许存储顺序事件。
数据路径块包含通道A和通道B寄存器、内部时间基和比较器。多路复用器接收来自控制子块的输入,以配置特定通道模式的数据路径。此配置包括为寄存器输入选择比较器和数据的输入。A和B比较器的输出连接到控制块。

Buffered modes 缓冲模式

即使在An[A]和Bn[B]发生变化时,为了提供平滑的波形生成,
以下模式对An和Bn寄存器进行双重缓冲:
*模量计数器缓冲(MCB)
*模式输出脉冲宽度和频率调制缓冲(OPWFMB)
*模式输出PWM缓冲(OPWMB)
这些模式出现在不同的部分中,因为它们之间的非缓冲模式有几个基本的差异。
buffered的功能就是指在下一个周期生效。比如MC和MCB,MC是一个计数器,修改后立即生效,MCB也是计数器,但是在修改后的下一个周期生效。?

UC的工作模式

General-Purpose Input and Output (GPIO) mode

此模式禁用所有UC输入捕获和输出比较功能,并重置和禁用内部计数器(Cn[C])。所有控制字段保持可访问状态。
要将UC从一种操作模式更改为另一种操作方式,必须首先更改为GPIO模式,然后更改为所需的最终模式。要为UC准备新的操作模式,必须在退出GPIO模式并进入所需的最终模式之前配置AS1、BS1、AS2和BS2(请参阅AS1、AS2、BS1和BS2影子寄存器)。具体而言:
*写入An[A]在AS1和AS2中存储相同的值。
*写入Bn[B]在BS1和BS2中存储相同的值。
*写入ALTAn[ALTA]只在AS2中存储一个值。
也就是说,在此模型配置eMIOS的工作模式等。类似于FlexCAN在冻结模式下才能配置一样。

Single Action Input Capture (SAIC) mode

最简单的传统意义上的输入捕捉功能,检测到一个上升沿或者下降沿,UC就生成一个Flag信号Sn[FLAG],同时捕捉当前Counter Bus的值到AS2。

Single Action Output Capture (SAOC) mode

匹配输出功能,给AS2写入一个值,当Counter Bus的值与AS2相等时,这个时候就会产生一个Flag信号,同时控制输出跳变或者翻转。

Input Pulse Width Measurement (IPWM) mode

用来测量两个连续不同沿之间的宽度,即测量一个电平宽度。当检测到第一个沿(上升沿或者下降沿),捕捉Counter Bus的值,当检测到第二个沿(与第一个沿相反),再捕捉Counter Bus的值并产生一个Flag信号。
 

Input Period Measurement (IPM) Mode

用来测量两个连续相同沿的宽度,通常用来测量信号周期,即检测到第一个沿(上升沿或者下降沿),捕捉Counter Bus的值,当检测到第二个沿(与第一个沿相通),再捕捉Counter Bus的值并产生一个Flag信号。

Double Action Output Compare (DAOC) mode

用于生产一段固定长度的电平。这个模式相比较SAOC,就是它可以有两个比较输出,最常见的应用就是当第一个匹配事件发生时,输出信号翻转,第二个匹配事件发生时,输出信号再次翻转。第一个匹配成功后可生产Flag信号也可以不生成Flag信号(可配置),而第二个匹配成功后则肯定会产生Flag信号。
 

Pulse Edge Counting (PEC) mode

常用来测量信号的脉冲数或者边沿数。外部信号输入后,检测到有效信号后计数器累加,并且在当计数器CNT值发生匹配事件A后,复位计数器CNT并启动计数,发生匹配事件B后,停止计数并且输出Flag信号。

Modulus Counter (MC) mode

把一个通道变成一个传统定时器的功能了,或者可以为其他通道生成一个Counter base信号。可以工作在UP计数模式和Up Count-Down计数模式。中途可以随意修改匹配值AS1。

Modulus Counter Buffered (MCB) mode

生成一个Counter Bus信号,与MC差不多,多了个B(缓冲)。

使能了寄存器双缓存机制,让改变寄存器值得速度变得更加的快?

Output Pulse Width and Frequency Modulation Buffered (OPWFMB) mode

用来生成单个PWM信号,因为这种模式没有采用Counter Bus作为自己的计数器。

CNT与AS1匹配后输出翻转,CNT与BS1匹配后输出再翻转,一个周期结束。也就是说AS1决定PWM的占空比,BS1则决定PWM的周期。

Center Aligned Output PWM with Dead Time Insertion Buffered (OPWMCB) mode

用来生成同步PWM信号。

可以插入死区时间。AS1决定占空比,BS1决定死区时间,至于周期则由Counter Bus来决定。

Output PWM Buffered (OPWMB) mode

在这种模式下,UC产生具有可编程的前缘和后缘放置的PWM脉冲。您必须从其中一个计数器总线 中选择一个以MCB Up模式驱动的外部计数器。AS1和BS1分别定义了第一边和第二边。Cn[EDPOL] 定义了输出信号的极性。如果Cn[EDPOL] = 0,则当AS1匹配所选计数器总线时出现负边,而当 BS1与所选计数器总线匹配时出现正边。

有关必须写入Cn[MODE]才能进入此模式的值,请参阅OPWMB submodes and MODE field values. AS1和BS1在循环边界处分别从AS2和BS2进行双缓冲和更新。加载操作类似于在OPWFMB模式下发生 的加载操作。有关AS1和BS1更新的更多信息,请参见时间示例: AS1和BS1更新和flag。

当UC进入OPWMB模式时,UC驱动输出触发器上的Cn[EDPOL]。
这些规则适用于OPWMB模式:
  • 如果AS1和BS1匹配在同一计数器周期内同时发生,则BS1匹配优先于AS1匹配。
  • 周期n中的AS1=0匹配优先于周期n-1中的BS1匹配。
  • 如果AS1匹配发生在同一时间段内的BS1匹配之后,UC将屏蔽这些匹配。
  • UC将您在周期n中写入AS2或BS2的任何值加载到以下周期边界的AS1和BS1中(假设输出更新禁用(OUDIS)的相应OUn字段为0)。因此,UC在周期n+1中使用AS1和BS1匹配的新值。

Output PWM with Trigger (OPWMT) mode

这个模式不仅能生成PWM,还可以用来生成触发信号,通常用其来配合其他通道生成同步触发信号来触发ADC。而这个模式必须选择外部计数器,而且还必须是MC up和MCB up驱动生成的Counter Bus。

模式的详细介绍可查看用户手册,以下有几篇参考博文:

【精选】小猫爪:S32K3学习笔记03-S32K3之eMIOS_小猫爪的博客-CSDN博客

【精选】S32K3 eMIOS使用介绍(PWM输出与输入捕获)——基于MCAL_何飞阳的博客-CSDN博客

CT组件

关于配置EMIOS模块产生PWM的CT组件有两个,Emios_Mcl_IP、Emios_Pwm↓

CT组件 Emios_Mcl_IP

1、Name

2、ConfigTimeSupport

3、Mcl General Configuration

  • Name
  • Enable Development Error Detect:启用/禁用开发错误检测。

Mcl Emios Common

特定于供应商:Emios Common相关配置的容器参数。

  • Name
  • Enable Emios Common Support:特定于供应商:启用/禁用Emios通用支持。
    不知道是什么,不开启后面的配置项灰色。

4、EmiosCommon

  • Name
  • Emios Instance:选择平台上可用的EMIOS实例之一。
    取值:0-2
  • Enable EMIOS freez state:允许EMIOS组中的所有通道都可以进入调试模式。
  • EmiosMclEnableGlobalTimeBase:在EMIOS IP上启用全局时基或禁用。
  • Clock Divider Value:为范围(1-256)内的全局预分频器选择时钟分频器值。

Emios Master Buses

  • Name
  • Emios Channel:为所选实例选择平台上可用的EMIOS通道之一。
    通道:0、8、16、22、23。其中22、23为全局。
  • Master Bus Mode Type:配置此通道的主总线模式。
  • Default period:当在MCB模式中选择主总线模式类型节点时,计数器从1开始并计数到周期值。
  • Offset at start:此偏移仅在通道启动时适用。
  • Master Bus Prescaler:主总线分频
  • Master Bus Alternate Prescaler:主总线复用分频
  • Allow Debug Mode:
    好像和上面的Enable EMIOS freez state这个选项一样的作用,没搞懂?
  • PWM exclusive access:PWM独占访问开启当前计数器总线。
    不知道这个有什么用,在代码里没发现任何实质性变更。(点击更新源代码 没有变更)
    有个说法:勾选了该总线就只会用作PWM输出。

CT组件 Emios_Pwm

EMIOS PWM

  • Post Build Variant Used:指示模块实现是否具有或计划具有(即,在链接或构建后时间引入)新的构建后变化点。
  • Config Variant:
    -VariantCompile:仅预编译时间配置参数。只有一组参数。
    -VariantPostBuild:预编译和生成后时间配置参数的混合。

PwmGeneral

用于存储Pwm的一般配置的容器。

Emios Instance

平台上可用Emios模块的配置

  • Name
  • Hardware instance:EMIOS 实例
Emios Channels

平台上可用的Emios频道列表。

  • Name
  • Channel Id:选择EMIOS通道,CH0 - CH23
  • Mode select:选择Emios频道的模式:
    —OPWFMB:可变周期和可变占空比。总线:仅限内部
    —OPWMB:固定周期、可变占空比总线:仅限外部总线
    —OPWMCB:带死区时间插入的可变周期和可变占空比总线:仅限外部总线
    —OPWMT:固定周期,可变占空比,带触发生成总线:仅限外部总线
  • Flag Generation:选择何时设置标志。
    FLAG:FLAG将设置在后缘。
    FLAG_BOTH:标志将设置在前缘和后缘。
    对于OPWMT模式,只有在生成触发器时才会设置标志。
  • Counter Bus:选择通道使用的计数器总线。
    —EMIOS_PWM_IP_BUS_A           计数器总线A,适用于所有通道
    —EMIOS_PWM_IP_BUS_F           计数器总线F,适用于所有通道
    —EMIOS_PWM_IP_BUS_BCDE   计数器总线B、C、D或E通道
          总线B由通道0控制,可用于通道0->7
          总线C由通道8控制,可用于通道8->15
          总线D由通道16控制,可用于通道16->23
          总线E由通道24控制,可用于通道24->31
    —EMIOS_PWM_IP_BUS_INTERNAL 统一通道内部计数器
  • Freeze enable:此参数控制冻结启用位(FREN),如果通过EMIOS MCR寄存器中的FRZ位设置和验证,则冻结用于初始化的周期的所有寄存器值。
    —True  冻结通道寄存器值。
    —Fase  正常操作。
  • Output Disable Source:从四个输出禁用输入信号中选择一个。
  • Clock prescaler:选择用于此Emios频道的时钟预分频器。必须选择内部计数器才能使此设置生效。
    仅在OPWFMB和OPMCB模式下有效。
  • Clock prescaler Alternate:选择用于此eMIOS频道的备用时钟预分频器。必须选择内部计数器才能使此设置生效。
    只会在OPWFMB和OPWMCB模式下产生效果。
  • Prescaler Clock Source:选择用于此Emios通道的内部预分频器的时钟源。
    仅在OPWFMB和OPMCB模式下有效。
  • Polarity:定义通道的输出极性。
  • Flag Event response:定义生成标志事件时发生的情况。

EmiosChlrqCallback

为中断处理程序回调配置Notification函数和参数。

  • Name
  • Callback function
  • Callback parameter

  • Duty cycle [ticks]:用于初始化的占空比值(以节拍为单位)。
  • Period [ticks]:初始化时使用的期间值(以节拍为单位)。
    注:仅用于OPWFMB模式。
  • Phase Shift [ticks]:PWM输出的相移(以节拍为单位)。
    请注意,计数器将始终从1开始,并且代码中的相移值将增加1。
    相移值必须小于用作参考的通道的周期,否则将产生DET错误。
    注:相移参数只能在OPWMB或OPWMT模式下使用。
  • Trigger [ticks]:选择用于此Emios通道的输入计数源(时钟)Delay(以刻度为单位),用于生成触发事件。
    请注意,计数器将始终从1开始,并且代码中的Trigger值将增加1,然后该值将更新到Alternate A寄存器中。
    A2寄存器中的编程值必须小于或等于用作参考的通道周期的值,否则将不会生成CTU触发器。
    注:此参数仅用于OPWMT模式。
  • Deadtime [tick]:死区时间参数控制PWM输出转换期间的死区时间。
    注:此参数仅用于OPWMCB模式。

实战

......

【参考】:

【精选】小猫爪:S32K3学习笔记03-S32K3之eMIOS_小猫爪的博客-CSDN博客

【精选】S32K3 eMIOS使用介绍(PWM输出与输入捕获)——基于MCAL_何飞阳的博客-CSDN博客

NXP S32k3 MCAL EMIOS PWM配置_回头看轻舟已过万重山的博客-CSDN博客

【参考资料】:

用户手册

three phase Sensorless PMSM Motor Control Kit with S32K344 using RTD Low-Level API - AN13767

S32K3_RTD_Training_LCU

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值