S32K144(12)FTM
PWM和输出比较的区别
输出比较模式下:
PWM模式: 频率和占空比可以任意设置,起始相位不能设置。 CNT < CCR时输出一种电平,CNT > CCR时输出相反的电平。
输出比较模式:频率和起始相位可以任意设置,占空比不能设置。输出频率为理论计算值一半。 CCR = CNT 时,翻转输出电平。
1、简介
开发板S32K144+S32DS+JLINK,裸机版的程序编写
FlexTimer模块(FTM)是一个2 - 8通道计时器,支持输入捕获,输出比较,并产生PWM信号来控制电机和电源
特点:
- 时钟源可选择:
- 源时钟可以是FTM输入时钟、固定频率时钟或外部时钟时钟源
- 固定频率时钟是允许选择on的额外时钟输入芯片时钟源以外的FTM输入时钟
- 选择外部时钟将FTM时钟连接到一个芯片电平输入引脚,允许FTM计数器与芯片外时钟源同步
- 预分频器除以1、2、4、8、16、32、64或128
- 16位计数器:
- 它可以是一个自由运行的计数器或计数器的初始值和最终值,
- 计数可以向上或向下
- PWM模式每个通道可以配置为输入捕获,输出比较,或边缘对齐
- 输入捕获模式下:
捕捉可以发生在上升边缘、下降边缘或两个边缘
可以为一些通道选择一个输入过滤器。一个独特的分频器是适用于所有过滤器
在输出比较模式下,输出信号可以设置,清除,或翻转
所有通道都可以配置为中央对齐PWM模式
每对通道可以组合起来产生一个PWM信号,并对PWM信号的两个边缘进行独立控制
FTM通道可以作为具有相等输出的成对、具有互补输出的成对或具有独立输出的独立通道来工作
死区时间插入可用互补对
生成匹配触发器
PWM输出软件控制
多达4个故障输入,用于全局故障控制
每个通道的极性是可配置的
每个通道产生一个中断
当计数器溢出时产生中断
当检测到故障条件时,中断的产生
当寄存器重新加载点发生时,中断的产生
写入缓冲FTM寄存器的同步加载
半周和全周期寄存器的重新加载能力
关键寄存器的写保护
向后兼容TPM
测试输入捕获模式
直接访问输入引脚状态
用于脉冲和周期宽度测量的双边缘捕捉
正交解码器与输入滤波器,相对位置计数,和中断位置计数或捕捉位置取决于外部事件
可以选择FTM通道在通道输出上产生触发脉冲而不是PWM
抖动能力,以模拟精细边缘控制的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相关推荐
- 构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(12)-系统日志和异常的处理②...
原文:构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(12)-系统日志和异常的处理② 上一讲我们做了日志与异常的结果显示列表,这一节我们讲要把他应用系统中来. ...
- 路由器连接帧中继网络的接口是(11),连接双绞线以太网的接口是(12)。 【答案】D B
路由器连接帧中继网络的接口是(11),连接双绞线以太网的接口是(12). (11)A.AUI接口 B.RJ-45接口 C.Console接口 D.Serial接口 (12)A.AUI接口 B.RJ-4 ...
- FPGA逻辑设计回顾(12)RAM以及ROM的RTL设计及其验证
前言 本文首发:FPGA逻辑设计回顾(12)RAM以及ROM的RTL设计及其验证 RAM以及ROM在FPGA中的实现大体有两种方式,一种是使用IP核定制,一种是RTL设计. 也许有人会反驳,那原语呢? ...
- python入门(12)dict
python入门(12)dict Python内置了字典:dict的支持,dict全称dictionary,在其他语言中也称为map,使用键-值(key-value)存储,具有极快的查找速度. 举个例 ...
- Xamarin图表开发基础教程(12)OxyPlot框架支持的金融图表类型
Xamarin图表开发基础教程(12)OxyPlot框架支持的金融图表类型 OxyPlot组件中支持5种类型的金融图表,它们分别为销量图.高低图.股票K线图.股票走势图和旧式股票图,如图1.20~1. ...
- C# 学习笔记(12)hex文件转bin文件小工具
C# 学习笔记(12)hex文件转bin文件小工具 hex文件格式 hex文件格式网上有很多 我这里参考HEX文件格式详解https://blog.csdn.net/weixin_39752827/a ...
- 【程序员眼中的统计学(12)】相关与回归:我的线条如何? (转)
阅读目录 目录 1 算法的基本描述 2 算法的应用场景. 3算法的优点和缺点 4 算法的输入数据.中间结果以及输出结果 5 算法的代码参考 6 共享 相关与回归:我的线条如何? 作者 白宁超 2015 ...
- 深度学习之循环神经网络(12)预训练的词向量
深度学习之循环神经网络(12)预训练的词向量 在情感分类任务时,Embedding层是从零开始训练的.实际上,对于文本处理任务来说,领域知识大部分是共享的,因此我们能够利用在其它任务上训练好的词向量 ...
- 深度学习之卷积神经网络(12)深度残差网络
深度学习之卷积神经网络(12)深度残差网络 ResNet原理 ResBlock实现 AlexNet.VGG.GoogleLeNet等网络模型的出现将神经网络的法阵带入了几十层的阶段,研究人员发现网络的 ...
- 深度学习(12)TensorFlow高阶操作一: 合并与分割
深度学习(12)TensorFlow高阶操作一: 合并与分割 1. concat 2. stack: create new dim 3. Dim mismatch 4. unstuck 5. spli ...
最新文章
- 一个“复制/删除”方式的滚动
- vld不输出泄漏信息_光纤天线方案和泄漏电缆方案的比较
- Flask 第三方组件之 script
- debian 修改apache2 https 端口为11443
- API开放平台基于accessToken实现
- 第6讲 Zend 整合数据库
- 福昕高级PDF 专业版程序安装及注意事项
- 软件 规则引擎_如何设计软件规则引擎
- 2022最新小额借贷系统程序源码+附教程文档
- 推荐一款国产免费开源的ERP进销存系统 附带安装详细教程
- 【程序员日记】快乐的一周嘛(第8期)(财富、快乐、技术)
- lighttpd 配置php,Lighttpd常用配置方法
- 注意:2021教资面试详细流程与技巧记牢了(含资料)
- Mybatis中的大于、小于、大于等于、小于等于、不等于的两种写法
- 【WebAPI 验证】给 webapi加上token 验证(包括上传文件方法)
- App Store上推广App的实战经验
- AMBA-APB协议
- 修改MYSQL 表中的字段属性
- 关于java中的反射
- 用python爬虫来登录深信服ac行为控制器,涉及到js加密部分,更新url分类库(针对企业微信更新)