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 selectFTM0->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 selectFTM0->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;}
}

S32K144(12)FTM相关推荐

  1. 构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(12)-系统日志和异常的处理②...

    原文:构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(12)-系统日志和异常的处理② 上一讲我们做了日志与异常的结果显示列表,这一节我们讲要把他应用系统中来. ...

  2. 路由器连接帧中继网络的接口是(11),连接双绞线以太网的接口是(12)。 【答案】D B

    路由器连接帧中继网络的接口是(11),连接双绞线以太网的接口是(12). (11)A.AUI接口 B.RJ-45接口 C.Console接口 D.Serial接口 (12)A.AUI接口 B.RJ-4 ...

  3. FPGA逻辑设计回顾(12)RAM以及ROM的RTL设计及其验证

    前言 本文首发:FPGA逻辑设计回顾(12)RAM以及ROM的RTL设计及其验证 RAM以及ROM在FPGA中的实现大体有两种方式,一种是使用IP核定制,一种是RTL设计. 也许有人会反驳,那原语呢? ...

  4. python入门(12)dict

    python入门(12)dict Python内置了字典:dict的支持,dict全称dictionary,在其他语言中也称为map,使用键-值(key-value)存储,具有极快的查找速度. 举个例 ...

  5. Xamarin图表开发基础教程(12)OxyPlot框架支持的金融图表类型

    Xamarin图表开发基础教程(12)OxyPlot框架支持的金融图表类型 OxyPlot组件中支持5种类型的金融图表,它们分别为销量图.高低图.股票K线图.股票走势图和旧式股票图,如图1.20~1. ...

  6. C# 学习笔记(12)hex文件转bin文件小工具

    C# 学习笔记(12)hex文件转bin文件小工具 hex文件格式 hex文件格式网上有很多 我这里参考HEX文件格式详解https://blog.csdn.net/weixin_39752827/a ...

  7. 【程序员眼中的统计学(12)】相关与回归:我的线条如何? (转)

    阅读目录 目录 1 算法的基本描述 2 算法的应用场景. 3算法的优点和缺点 4 算法的输入数据.中间结果以及输出结果 5 算法的代码参考 6 共享 相关与回归:我的线条如何? 作者 白宁超 2015 ...

  8. 深度学习之循环神经网络(12)预训练的词向量

    深度学习之循环神经网络(12)预训练的词向量  在情感分类任务时,Embedding层是从零开始训练的.实际上,对于文本处理任务来说,领域知识大部分是共享的,因此我们能够利用在其它任务上训练好的词向量 ...

  9. 深度学习之卷积神经网络(12)深度残差网络

    深度学习之卷积神经网络(12)深度残差网络 ResNet原理 ResBlock实现 AlexNet.VGG.GoogleLeNet等网络模型的出现将神经网络的法阵带入了几十层的阶段,研究人员发现网络的 ...

  10. 深度学习(12)TensorFlow高阶操作一: 合并与分割

    深度学习(12)TensorFlow高阶操作一: 合并与分割 1. concat 2. stack: create new dim 3. Dim mismatch 4. unstuck 5. spli ...

最新文章

  1. 一个“复制/删除”方式的滚动
  2. vld不输出泄漏信息_光纤天线方案和泄漏电缆方案的比较
  3. Flask 第三方组件之 script
  4. debian 修改apache2 https 端口为11443
  5. API开放平台基于accessToken实现
  6. 第6讲 Zend 整合数据库
  7. 福昕高级PDF 专业版程序安装及注意事项
  8. 软件 规则引擎_如何设计软件规则引擎
  9. 2022最新小额借贷系统程序源码+附教程文档
  10. 推荐一款国产免费开源的ERP进销存系统 附带安装详细教程
  11. 【程序员日记】快乐的一周嘛(第8期)(财富、快乐、技术)
  12. lighttpd 配置php,Lighttpd常用配置方法
  13. 注意:2021教资面试详细流程与技巧记牢了(含资料)
  14. Mybatis中的大于、小于、大于等于、小于等于、不等于的两种写法
  15. 【WebAPI 验证】给 webapi加上token 验证(包括上传文件方法)
  16. App Store上推广App的实战经验
  17. AMBA-APB协议
  18. 修改MYSQL 表中的字段属性
  19. 关于java中的反射
  20. 用python爬虫来登录深信服ac行为控制器,涉及到js加密部分,更新url分类库(针对企业微信更新)

热门文章

  1. 【绘制矩形】已知二维平面矩形的对角线两点坐标,如何确定四个点的坐标
  2. 人工智能与算法学习总结报告!(珍藏版)
  3. Android 获取照相机图片或本地图片
  4. Excel如何制作二级下拉菜单
  5. matlab出现错误使用 / 矩阵维度必须一致
  6. 前端对接钉钉的步骤以及代码
  7. idea常用的搜索方式
  8. 求两个数的最大公约数(C++)
  9. 《资本之王》书中的精髓:黑石公司是如何成长为全球最顶尖的私募股权投资机构的?
  10. 2007五一[西北行] - 第二天:延安(窑洞,杨家岭,宝塔山...)