K60的FTM的PWM、输入捕获、正交解码(未理解完)
FTM模块默认对应引脚有3个FTM模块
FTM是一个神奇的模块,他能输出PWM,能输入捕获,能输出比较还能正交解码。英文全称是FlexTimer Module,你可以理解为高级定时器模块、易用定时器模块等等。不仅仅在Kinetis 32位处理器中,FTM是个常用的模块,在飞思卡尔的8位处理器中,他也是个常用的模块,只不过名字叫TPM。FTM会用了,飞思卡尔的其他单片机的FTM、TPM你就都会用了。在OSKinetis固件库中,我们可以用FTM模块来实现PWM、输入捕获和正交解码等常用功能,借用库函数实现功能不难,难的是理解这些功能怎么用、什么原理才是最重要的,下面我们一一介绍这3个功能。当然看完本文你就能用寄存器编写FTM的各个功能吗,呵呵,不可能的!否则要那1000多页的技术文档干什么用,但是我希望本文能起到抛砖引玉的功能,在你会用库函数的基础上,对他的内部机制有一个了解。
介绍几个小伙伴(FTM寄存器)
要想搞清楚FTM模块,首先我们要介绍几个重要的寄存器给大家,他们就像小伙伴一样,好好利用可以帮大忙呢。
FTMx_CNT(计数器寄存器),他负责喊号(计数)。
FTMx_SC(状态和控制寄存器),他负责……寄存器名字面意思,具体说就是决定CNT小朋友的喊号的快慢(计数频率,包括时钟源的选择和分频系数)。他还负责其他一些杂事,比如计数溢出、中断使能等等。
FTMx_MOD(模数寄存器),他负责记住一个数字,当CNT小朋友喊道这个数字的时候,他就提醒相关人员干一些事情,比如产生溢出中断标志,比如让CNT重新开始喊号。
FTMx_CNTIN(计数器初始值寄存器),他告诉CNT小朋友哪哪个数开始喊。
其中x代表不同的FTM模块的标号,比如MK60D系列单片机,有3个FTM模块,x就为0~2。
PWM输出功能
PWM工作原理
PWM是什么,能做什么用,不是我们要讲的,相信你也能百度到。这里我们主要讲PWM在Kinetis的FTM模块中是怎么工作的。还记得上面介绍的几个小朋友吗,他们只要一起干活,我们的PWM波就可以生成了,下面我来说说他们是怎么干活的。哦对了,说到PWM还有一个小朋友要介绍,就是FTMx_CnV(通道值寄存器)小朋友。其中n代表FTMx有n个这样的小朋友,对于FTM0模块来说,有8个。他们8个人负责PWM的脉宽(即占空比),他们每个人也会记住一个数字,当CNT喊道这个数字的时候,他就让PWM的输出产生上升或下降沿。
PWM最重要参数就是频率(周期的倒数)和占空比,下面的两个公式解释了他们是怎么确定的:
**PWM的周期=(MOD–CNTIN + 1) x 计数器周期
PWM的占空比=(CnV − CNTIN) / PWM的周期**
怎么样,上面的公式结果都是由我们认识的小朋友决定的吧。下面我来解说下这个工作流程,首先公式中的计数器周期是SC小朋友决定的,前面说了他负责喊号的快慢,因为他负责决定采用哪个频率为输入频率,这些频率候选有系统时钟、固定频率时钟以及外部时钟,他还负责这些输入频率的分频系数,总之SC小朋友决定了计数器周期,也就是CNT小朋友喊号的快慢。然后CNT小朋友从CNTIN小朋友那里知道了要喊的第一个数,他按照SC决定的快慢一直喊道MOD告诉他的数,喊完这些数,一个PWM周期也就产生了!
那么PWM的脉宽是怎么决定的呢,首先假定CNT在喊第一个数的时候,PWM通道输出高电平,当CNT喊到CnV小朋友告诉他的号的时候,PWM输出通道就会变为低电平,直到CNT继续喊道MOD的时候一个PWM周期结束,当重新开始喊CNTIN的号的时候,PWM的输出通道又变为了高电平,这样持续下去,就产生了PWM波形!
你以为一个FTMx模块只能输出一路PWM就错了,我们刚才说了CnV根据x的不同,有n个通道可以输出PWM,如果是x=0,那么FTM0就有8个CnV,C0V到C7V这8个小朋友,因此FTM0可以输出8路不同占空比的PWM,但是由于负责喊号的CNT以及他的其他小伙伴在FTM0中仅仅各有1人,因此FTM0只能输出一种频率的PWM。
如果上面的描述让你和你的小伙伴都惊呆了,那么就看看上面这幅图,从技术文档中的Figure 39-181截出来的。红圈后面的波形就行PWM输出通道输出的波形。深绿色的圈代表CNT从CNTIN开始计数,此时输出高电平。当计数到CnV的时候,浅绿色圈处,产生channel(n)match通道匹配事件,变为低电平。当整个计数周期完成,即蓝圈的范围,CNT计数到MOD时,一个波形输出完成。
PWM例程讲解
前面讲了FTM中的几个小伙伴的故事,目的是为了让大家了解PWM的工作流程,下面我们来具体看看例程中,是如何利用库函数来生成PWM的。首先看例程“LPLD_ServoControl”,这是一个控制舵机转动的例程,我们知道舵机的控制PWM频率一般是50Hz,其他的舵机有可能不同,因此我们的初始化函数初始化PWM频率为50,定位pwm_init()函数,看其代码:
ftm_init_struct.FTM_Ftmx = FTM0; //使能FTM0通道
02 ftm_init_struct.FTM_Mode = FTM_MODE_PWM; //使能PWM模式
03 ftm_init_struct.FTM_PwmFreq = 50; //PWM频率50Hz
04 LPLD_FTM_Init(ftm_init_struct);
05 LPLD_FTM_PWM_Enable(FTM0, //使用FTM0
06 FTM_Ch0, //使能Ch0通道
07 angle_to_period(0), //初始化角度0度
08 PTC1, //使用Ch0通道的PTC1引脚
09 ALIGN_LEFT //脉宽左对齐
10 );
Line 1:使能FTM0通道。
Line 2:配置FTM_Mode成员变量,使用FTM的PWM输出功能。
Line 3:配置PWM输出的频率为50Hz,你只要直接写频率的数值即可,至于刚才讲的CNTIN、MOD、SC寄存器的值,库函数会自动搞定。而且切记,每个FTMx只能产生一种频率,这个频率在初始化配置时就确定了,如果你想用第二种频率,就使能再初始化FTM1或FTM2了。
Line 4:调用FTM通用初始化函数初始化该模块。
Line 5:PWM通道输出使能函数,你光配置了FTM0的PWM输出功能还不够,还要决定用哪个PWM通道来输出波形哦!其中FTM0有8个通道,这里使能通道0 FTM_Ch0,每个通道又可能有不同的物理输出引脚,这里用CH0的PTC1引脚来输出PWM,还要配置占空比,这里我们用了自定义函数angle_to_period()来将舵机的角度值转化为函数需要的占空比值。最后一个参数是PWM脉宽的对其方式,默认是左对齐。关于此函数的参数的具体范围,请参考FTM模块的在线函数手册http://wiki.lpld.cn/index.php?title=HW_FTM
初始化完成后的代码如下所示:
delay(1000);
//初始化延时后改变角度为45度
LPLD_FTM_PWM_ChangeDuty(FTM0, FTM_Ch0, angle_to_period(45));
Line 1:在初始化完毕后,首先应该延时一段时间,以保证舵机可以有足够的时间归位。
Line 3:调用LPLD_FTM_PWM_ChangeDuty()函数来改变CH0通道的占空比,该函数和PWM通道使能函数的个别参数一样,使用时最好先参考在线函数手册。
K60的FTM的PWM、输入捕获、正交解码(未理解完)相关推荐
- stm32 PWM输入捕获
普通的输入捕获,可使用定时器的四个通道,一路捕获占用一个捕获寄存器. PWM输入,只能使用两个通道,通道1和通道2. 一路PWM输入占用两个捕获寄存器,一个捕获周期,一个捕获占空比. 这里,用通用定时 ...
- 【WB32库开发】第12章(上)TIM1高级定时器——PWM输入捕获
本章要学习的PWM输入捕获是定时器又一重要应用,使用PWM输入捕获可以测量输入PWM的频率和占空比. PWM输入只能使用定时器的两个通道:通道1和通道2,且一路PWM输入要占用两个捕获寄存器,一个用于 ...
- 单片机之PWM输入捕获
首先要明白什么是PWM输入捕获? 第一,PWM输入捕获是基于TIM实现的一个功能:输入捕获就是当连接到定时器的引脚上产生电平变化时对应的捕获装置会立即将当前计数值复制到另一个寄存器中.你可以开启捕获中 ...
- K60的FTM的PWM、输入捕获、正交解码
FTM是一个神奇的模块,他能输出PWM,能输入捕获,能输出比较还能正交解码.英文全称是FlexTimer Module,你可以理解为高级定时器模块.易用定时器模块等等.不仅仅在Kinetis 32位处 ...
- PWM输入捕获(只使用一路定时器通道)
前言 上一篇文章介绍了使用<STM32参考手册>上 PWM 输入模式捕获的 PWM 波,这种方法简单且准确,但是它占用的资源太多了,因为它使用定时器的两个通道,且这两个通道映射在一个通道上 ...
- 华大半导体HC32F4A0笔记(一),PWM输入捕获,使用TIM6
一.启动时钟 PWC_Fcg2PeriphClockCmd(PWC_FCG2_TMR6_x, Enable); TMR6对应FCG2,根据PWM输入引脚来确定是TMR6_x(本例为TMR6_2).运行 ...
- stm32时钟(2)输入捕获以及PWM输入捕获
输入捕获 过程 在输入捕获模式下,信号从TIx输入,一共有四个输入口,以TI1为例,经过滤波器和边沿检测器后输出TI1FPx两路信号,该信号可以直接从IC1从输入,也可以从IC2输入,此处以IC1 ...
- STM32遥控方法SONY PS2 、航模,STM32定时器PWM输入捕获航模接收机
PS2接线: 买家会给你程序和说明: 接线: GND接STM32 GND VCC接STM32 VCC DAT接 STM32 PB12 CMD接STM32 PB13 CS接 STM32 PB14 CLK ...
- STM32 输入捕获 测量频率 PWM占空比
看了网上关于STM32输入捕获的资料,有几篇介绍的很不错,但是内容上还有一点问题,稍加修改,大家可以参考一下. 重要概念理解(对于理解输入捕获功能很重要,特别看了数据手册CCR1\CCR2\CCR3\ ...
最新文章
- CMU 刘畅流:爱上人机交互源于科幻片,女性研究AI更感性、更哲学 | 妇女节特辑...
- 古城钟楼微博:葡萄城程序员演练技术的产物
- 清华本科生开发强化学习平台「天授」:千行代码实现,性能吊打国外成熟平台,刚刚开源...
- vue单选,多选,多选的内容显示在页面可删除
- JS里的onclick事件
- rocketmq 顺序消费_10 分钟看懂消息队列 RocketMQ
- gateway动态路由_无语!SpringCloud Gateway动态路由之Nacos,我已经讲得很清楚了
- hibernate使用二级缓存ehcahe的配置
- Why Not Specialize Function Templates?
- 2018北科大计算机学院复试方案,2018年北京交通大学考研复试及录取办法
- oracle HWM
- 一文入门RTCM协议及其Message Decode
- Java实现Excel数据导入数据库
- FastDFS文件上传
- 事实表和维度表(重点)
- 导数定义考法一网打尽
- 方志仅占古籍数量十分之一,在家谱编修中却举足轻重,方志凭什么
- 浏览器主页被hao123锁定解决办法
- 网页P2P加速视频解析dplayer播放器源码(带记忆播放功能)
- Linux系统操作(21):物理cpu数、cpu核数、逻辑cpu数、几路几核几线程、CPU信息详细查询方法