S32K144(12)FTM

PWM和输出比较的区别

输出比较模式下:

PWM模式: 频率和占空比可以任意设置,起始相位不能设置。 CNT < CCR时输出一种电平,CNT > CCR时输出相反的电平。

输出比较模式:频率和起始相位可以任意设置,占空比不能设置。输出频率为理论计算值一半。 CCR = CNT 时,翻转输出电平。

1、简介

开发板S32K144+S32DS+JLINK,裸机版的程序编写

FlexTimer模块(FTM)是一个2 - 8通道计时器,支持输入捕获,输出比较,并产生PWM信号来控制电机和电源

特点:

  • 时钟源可选择:
    1. 源时钟可以是FTM输入时钟、固定频率时钟或外部时钟时钟源
    2. 固定频率时钟是允许选择on的额外时钟输入芯片时钟源以外的FTM输入时钟
    3. 选择外部时钟将FTM时钟连接到一个芯片电平输入引脚,允许FTM计数器与芯片外时钟源同步
  • 预分频器除以1、2、4、8、16、32、64或128
  • 16位计数器:
    1. 它可以是一个自由运行的计数器或计数器的初始值和最终值,
    2. 计数可以向上或向下
  • PWM模式每个通道可以配置为输入捕获,输出比较,或边缘对齐
  • 输入捕获模式下:
  1. 捕捉可以发生在上升边缘、下降边缘或两个边缘

  2. 可以为一些通道选择一个输入过滤器。一个独特的分频器是适用于所有过滤器

  3. 在输出比较模式下,输出信号可以设置,清除,或翻转

  4. 所有通道都可以配置为中央对齐PWM模式

  5. 每对通道可以组合起来产生一个PWM信号,并对PWM信号的两个边缘进行独立控制

  6. FTM通道可以作为具有相等输出的成对、具有互补输出的成对或具有独立输出的独立通道来工作

  7. 死区时间插入可用互补对

  8. 生成匹配触发器

  9. PWM输出软件控制

  10. 多达4个故障输入,用于全局故障控制

  11. 每个通道的极性是可配置的

  12. 每个通道产生一个中断

  13. 当计数器溢出时产生中断

  14. 当检测到故障条件时,中断的产生

  15. 当寄存器重新加载点发生时,中断的产生

  16. 写入缓冲FTM寄存器的同步加载

  17. 半周和全周期寄存器的重新加载能力

  18. 关键寄存器的写保护

  19. 向后兼容TPM

  20. 测试输入捕获模式

  21. 直接访问输入引脚状态

  22. 用于脉冲和周期宽度测量的双边缘捕捉

  23. 正交解码器与输入滤波器,相对位置计数,和中断位置计数或捕捉位置取决于外部事件

  24. 可以选择FTM通道在通道输出上产生触发脉冲而不是PWM

  25. 抖动能力,以模拟精细边缘控制的PWM周期或PWM工作周期

2、原理图

3、寄存器

3.1、SC: Status And Control

SC包含溢出状态标志和控制位,用于配置中断启用、FTM配置、时钟源、滤波器预分频器和预分频器因子。此寄存器还包含输出启用控制位和重新加载机会标志控制。这些控件与此模块内的所有通道相关。

Field

Name

Description

0-2

PS

预分频: 1-128

3-4

CLKS

时钟源选择

5

CPWMS

配置计数模式

6

RIE

重载标志

7

RF

定时器溢出中断你使能

8

TOIE

定时器溢出标志

9

TOF

时钟引脚使能

16-23

PWMENn

通道nPWM使能

24-27

FLTPS

滤波器预分频

3.2、CNT: Counter

Field

Name

Description

0-15

COUNT

计数器的值

3.3、MOD: Modulo

模寄存器包含FTM计数器的模值。当FTM计数器达到模值后,溢出标志(TOF)在下一个时钟周期设置,FTM计数器的下一个值取决于所选的计数方法

Field

Name

Description

0-15

MOD

模值

3.4、C0SC - C7SC: Channel (n) Status And Control

CnSC包含通道(n)状态位和选择通道(n)模式的控制位和它的功能

Field

Name

Description

0

DMA

DMA使能

1

ICRST

输入捕获事件复位FTM计数器选择

2

ELSA

通道(n)边缘或水平选择

3

ELSB

通道(n)边缘或水平选择

4

MSA

通道(n)模式选择

5

MSB

通道(n)模式选择

6

CHE

通道(n)中断使能

7

CHIF

通道(n)事件标志

8

TRIGMODE

触发模式控制

9

CHIS

通道(n)输入状态

10

CHOV

通道(n)输出值

3.5、C0V - C7V: Channel (n) Value

Field

Name

Description

0-15

VAL

通道值

捕获的输入模式的FTM计数器值或输出模式的匹配值

3.6、CNTIN: Counter Initial Value

Field

Name

Description

0-15

INIT

FTM计数器初始化值

3.7、STATUS: Capture And Compare Status

Field

Name

Description

0-7

CHnF

通道事件标志

3.8、MODE: Features Mode Selection

Field

Name

Description

0

FTMEN

FTM使能

1

INIT

初始化通道输出

2

WPDIS

写保护禁用

3

PWMSYNC

PWM同步模式

4

CAPTEST

捕获测试模式使能

5-6

FAULTM

故障控制模式

7

FAULTIE

故障中断使能

3.9、SYNC: Synchronization

Field

Name

Description

0

CNTMIN

最小加载点启用

1

CNTMAX

最大加载点启用

2

REINIT

同步FTM计数器重新初始化

3

SYNCHOM

输出掩码同步

4

TGIG0

PWM同步硬件触发0

5

TGIG1

PWM同步硬件触发1

6

TGIG2

PWM同步硬件触发2

7

SWSYNC

PWM同步软件触发器

3.10、OUTINIT: Initial State For Channels Output

Field

Name

Description

0-7

CHnOI

通道n输出初始值

3.11、OUTMASK: Output Mask

Field

Name

Description

0-7

CHnOM

通道n输出掩码

3.12、COMBINE: Function For Linked Channels

Field

Name

Description

0

COMBINE0

合并通道,用于通道(n)和(n+1)的组合模式的选择

1

COMP0

通道(n)的补码

2

DECAPEN0

启用双边缘捕获模式

3

DECAP0

双边捕获模式捕获

4

DTEN0

死区时间启用

5

SYNCEN0

启用同步

6

FAULTEN0

故障控制使能

7

MCOMBINE0

修改合并模式

依次有1-3,总共0-3,0模式已写

3.13、DEADTIME: Deadtime Configuration      

这个寄存器选择死区时间的分频器和值

Field

Name

Description

0-5

DTVAL

死区时间值

6-7

DTPS

死区时间分频值

16-19

DTVALEX

扩展死区时间值

3.14、EXTTRIG: FTM External Trigger

外部触发器产生的时间,当FTM计数器等于其初始值时,使能生成触发器,选择在外部触发器的生成中使用的通道

Field

Name

Description

0

CH2TRIG

通道2外部触发启用

1

CH3TRIG

通道3外部触发启用

2

CH4TRIG

通道4外部触发启用

3

CH5TRIG

通道5外部触发启用

4

CH0TRIG

通道0外部触发启用

5

CH1TRIG

通道1外部触发启用

6

INITTRIGEN

初始化触发使能

7

TRIGF

通道触发器标志

8

CH6TRIG

通道6外部触发启用

9

CH7TRIG

通道7外部触发启用

3.15、POL: Channels Polarity

Field

Name

Description

0-7

POLn

通道n的极性

3.16、FMS: Fault Mode Status

Field

Name

Description

0

FAULTF0

故障检测标志0

1

FAULTF1

故障检测标志1

2

FAULTF2

故障检测标志2

FTM0-3支持此位

FTM4-7不支持

3

FAULTF3

故障检测标志3

5

FAULTIN

故障输入

6

WPEN

启用写保护

7

FAULTF

故障检测标志

3.17、FILTER: Input Capture Filter Control

这个寄存器为通道的输入选择过滤器值。

通道4、5、6和7没有输入过滤器

Field

Name

Description

0-3

CH0FVAL

通道n输入滤波器

选择通道输入的过滤器值。

当值为零时,将禁用筛选器。

4-7

CH1FVAL

8-11

CH2FVAL

12-15

CH3FVAL

3.18、FLTCTRL: Fault Control

Field

Name

Description

0

FAULT0EN

故障输入n使能

1

FAULT1EN

2

FAULT2EN

3

FAULT3EN

4

FFLTR0EN

故障输入过滤器n使能

5

FFLTR1EN

6

FFLTR2EN

7

FFLTR3EN

8-11

FFVAL

故障输入过滤器

15

FSTATE

故障输出状态

3.19、QDCTRL: Quadrature Decoder Control And Status

该寄存器具有控制位和正交解码器模式的状态位

Field

Name

Description

0

QUADEN

正交解码器模式启用

1

TOFDIR

正交解码器模式下定时器溢出方向

2

QUADIR

正交解码器模式下定时器计数方向

3

QUADMODE

正交解码器模式

4

PHBPOL

B相输入极性

5

PHAPOL

A相输入极性

6

PHBFLTREN

B相输入过滤器使能

7

PHAFLTREN

A相输入过滤器使能

3.20、CONF: Configuration

Field

Name

Description

0-4

LDPQ

重新加载的频率

6-7

BDMMODE

调试模式

9

GTBEEN

全局时基启用

10

GTBEOUT

全局时基输出

11

ITRIGR

加载点初始化触发器

3.21、FLTPOL: FTM Fault Input Polarity

这个寄存器定义了故障输入的极性

Field

Name

Description

0-3

FLTnPOL

故障输入n的极性

3.22、SYNCONF: Synchronization Configuration

这个寄存器选择PWM同步配置

Field

Name

Description

0

HWTRIGMODE

硬件触发模式

2

CNTINC

CNTIN寄存器同步

4

INVC

INVCTRL寄存器同步

5

SWOC

SWOCTRL寄存器同步

7

SYNCMODE

加载点初始化触发器

8

SWRSTCNT

同步模式

9

SWWRBUF

FTM计数器同步是由软件触发器激活的

10

SWOM

MOD, HCR, CNTIN和CV寄存器同步是由软件触发器激活的

11

SWINVC

输出掩码同步是由软件触发器激活的

12

SWSOC

反向控制同步是由软件触发器激活的

16

HWRSTCNT

软件输出控制同步由软件触发器激活

17

HWWRBUF

FTM计数器同步是由硬件触发器激活的

18

HWOM

MOD, HCR, CNTIN和CV寄存器同步是由硬件触发器激活的

19

HWINVC

MOD, HCR, CNTIN和CV寄存器同步是由硬件触发器激活的

20

HWSOC

输出掩码同步是由硬件触发器激活的

3.23、INVCTRL: FTM Inverting Control

该寄存器控制何时通道(n)输出成为通道(n+1)输出,以及通道(n+1)输出变为通道(n)输出。每一个INVmEN位对应对通道m的反相操作。

Field

Name

Description

0-3

INVmEN

一对通道n反相使能

3.24、SWOCTRL: FTM Software Output Control

该寄存器允许软件控制通道(n)输出并定义强制值到通道(n)输出:

•CH(n)OC位使软件能够控制相应的通道(n)输出。

•CH(n)OCV位选择对应通道(n)输出的强制值。

Field

Name

Description

0-7

CHnOC

通道n软件输出控制使能

8-15

CHnOCV

通道n软件输出控制值

3.26、PWMLOAD: FTM PWM Load

当FTM计数器从MOD寄存器的值更改为下一个值或当通道(j)匹配发生时,启用MOD, HCR, CNTIN, C(n)V,和C(n+1)V用它们的写缓冲区的值寄存器的重载

Field

Name

Description

0-7

CHnSEL

通道n选择

8

HCSEL

半周期选择

9

LDOK

加载使能

10

GLEN

全局加载使能

11

GLDOK

全局加载OK

3.27、HCR: Half Cycle Register

半周期寄存器包含FTM半周期重新加载特性的匹配值。

Field

Name

Description

0-15

HCVAL

半周期值

3.28、PAIRnDEADTIME: Pair n Deadtime Configuration

这个寄存器为这对n选择死时间的分频器和值。

Field

Name

Description

0-5

DTVAL

成对死区时间值

6-7

DTPS

承兑死区时间分频值

16-19

DTVALEX

扩展死区时间值

3.29、MOD_MIRROR: Mirror of Modulo Value

这个寄存器包含FTM计数器的整数和小数模值

Field

Name

Description

11-15

FRACMOD

计数器模值小数部分

16-31

MOD

计数器模值整数部分

3.30、C0V_MIRROR - C7V_MIRROR: Mirror of Channel (n) Match Value

这个寄存器包含通道(n)匹配的整数和小数值。

Field

Name

Description

11-15

FRACMOD

通道匹配小数部分

16-31

MOD

通道匹配整数部分

其中通道模式的选择如下图

 

 

 

4、代码编程

代码编程可以有:边沿对齐PWM、中间对齐PWM、输出比较、输入捕获

我偷懒了,其实其他的我也写了,但是我之前没保存,尴尬

4.1、ftm.h


#ifndef _FTM_H_
#define _FTM_H_


#include "common.h"    //公共要素头文件

void FTM0_init(void);
void start_FTM0_counter (void);
void FTM0_CH0_init(vuint_8 dutyoid);
void FTM0_CH1_init(uint_8 duty);
#endif

4.2、ftm.c

#include "ftm.h"

void FTM0_init(void)
{
	PCC->PCCn[PCC_FTM0_INDEX] &= ~PCC_PCCn_CGC_MASK; /* Ensure clk disabled for config */
	PCC->PCCn[PCC_FTM0_INDEX] |= PCC_PCCn_PCS(1) | PCC_PCCn_CGC_MASK;/* Clock Src=1, 8 MHz SOSCDIV1_CLK */
	
	/* Enable clock for FTM regs */
	FTM0->MODE |= FTM_MODE_WPDIS_MASK; /* Write protect to registers disabled (default) */
	FTM0->SC |= FTM_SC_PWMEN1_MASK | FTM_SC_PWMEN0_MASK | FTM_SC_PS(7);	/* Enable PWM channel 0 output*/
																		/* TOIE (Timer Overflow Interrupt Ena) = 0 (default) */
																		/* CPWMS (Center aligned PWM Select) = 0 (default, up count) */
																		/* CLKS (Clock source) = 0 (default, no clock; FTM disabled) */
																		/* PS (Prescaler factor) = 7. Prescaler = 128 */
	FTM0->COMBINE = 0x00000000;/* FTM mode settings used: DECAPENx, MCOMBINEx, COMBINEx=0 */
	FTM0->POL = 0x00000000; /* Polarity for all channels is active high (default) */
	FTM0->MOD = 62500 -1 ; /* FTM1 counter final value (used for PWM mode) */
	/* FTM1 Period = MOD-CNTIN+0x0001 ~= 62500 ctr clks */
	/* 8MHz / 128 = 62500Hz -> ticks -> 1Hz */
	FTM0->SC |= FTM_SC_CPWMS_MASK;
}
void FTM0_CH0_init(uint_8 duty)
{
	//mode select
	FTM0->CONTROLS[0].CnSC = FTM_CnSC_ELSB_MASK;
	/* FTM0 ch0 compare value (~50% duty cycle) */
	FTM0->CONTROLS[0].CnV = (FTM0->MOD+1)*duty/100;
}

void FTM0_CH1_init(uint_8 duty)
{
	//mode select
	FTM0->CONTROLS[1].CnSC = FTM_CnSC_ELSB_MASK;
	/* FTM0 ch1 compare value (~50% duty cycle) */
	FTM0->CONTROLS[1].CnV = (FTM0->MOD+1)*duty/100;
}
void start_FTM0_counter (void)
{
	FTM0->SC |= FTM_SC_CLKS(3);
	/* Start FTM0 counter with clk source = external clock (SOSCDIV1_CLK)*/
}

4.3、main.c

调用伪代码,因为全贴的话,我之前

FTM0_init();
FTM0_CH0_init(50); /* Init FTM0 CH0 */
FTM0_CH1_init(50); /* Init FTM0 CH0 */
PCC->PCCn[PCC_PORTD_INDEX ]|=PCC_PCCn_CGC_MASK;
PORTD->PCR[15]=PORT_PCR_MUX(2); /* Port D15: MUX = ALT2, FTM0CH0 */
PORTD->PCR[16]=PORT_PCR_MUX(2); /* Port D16: MUX = ALT2, FTM0CH1 */
start_FTM0_counter(); /* Start FTM0 counter */

4.4、irq

这部分没贴出来,但是FTM一般有两个中断,一个是计数的溢出中断,一个是通道触发中断

/* 使能溢出中断 */
FTM0->SC |= FTM_SC_TOF(1);
/* 注册中断 */
S32_NVIC_EnableIRQ(FTM0_Ovf_Reload_IRQn,10);
/* 中断服务函数 */
void FTM0_Ovf_Reload_IRQHandler(void)
{
	FTM0->SC &=  ~FTM_SC_TOF(1);     //清中断标志位
}

/* 使能溢出中断 */
FTM0->CONTROLS[0].CnSC |= FTM_CnSC_CHIE_MASK;
/* 注册中断 */
S32_NVIC_EnableIRQ(FTM0_Ch0_Ch1_IRQn,10);
/* 中断服务函数 */
void FTM0_Ch0_Ch1_IRQHandler(void)
{
	if((FTM0->CONTROLS[0].CnSC & FTM_CnSC_CHF_MASK))
	{
		FTM0->CONTROLS[0].CnSC &= ~FTM_CnSC_CHF_MASK;
	}
	if((FTM0->CONTROLS[1].CnSC & FTM_CnSC_CHF_MASK))
	{
		FTM0->CONTROLS[1].CnSC &= ~FTM_CnSC_CHF_MASK;
	}
}

 

  • 11
    点赞
  • 56
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
S32K144是一款32位汽车级微控制器,采用ARM Cortex-M4内核,具有高性能和低功耗的特点。RTOS(Real-Time Operating System)是一种实时操作系统,能够提供时间保证的任务调度和资源管理功能。 S32K144 RTOS是在S32K144微控制器上使用的RTOS系统。它具有以下特点和功能: 1. 实时性能:S32K144 RTOS能够为任务提供严格的时间保证,实时执行各种任务。这对于汽车行业来说至关重要,因为汽车系统通常需要在严格的时间限制内完成各种任务,如控制车辆的引擎、车载娱乐系统和安全功能等。 2. 多任务调度:RTOS能够有效地管理多个任务,并根据优先级和时间要求对任务进行调度,确保高优先级任务能够及时执行。这对于S32K144微控制器的复杂应用程序非常重要,因为它能够同时处理不同的任务,如数据采集、通信和控制。 3. 资源管理:S32K144 RTOS能够有效地管理设备上的各种资源,如外设、存储器和通信接口。通过资源管理,RTOS可以优化系统的性能和可靠性,并确保各个任务之间的资源共享和互斥。 4. 中断处理:RTOS能够有效地处理中断请求,在高优先级任务和中断之间实现快速的切换。S32K144 RTOS能够及时响应外部中断,以便及时处理紧急任务。 总之,S32K144 RTOS为S32K144微控制器提供了强大的实时功能,使其能够在汽车领域等实时应用中得到广泛应用。通过RTOS系统,S32K144能够实现高效的任务调度、资源管理和中断处理,从而提高系统的性能和可靠性。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值