k60-脉冲采集

本文介绍了K60芯片在智能车应用中进行脉冲计数采集的方法,包括FTM模块的正交解码、LPTMR的脉冲累计模式以及DMA脉冲计数。FTM模块的正交解码适合高频脉冲,LPTMR精度最高但仅支持单路,DMA则可扩展多路但可能影响精度。
摘要由CSDN通过智能技术生成

K60-脉冲计数采集

之前在做智能车的时候需要对LC振荡电路进行频率采集(其实如果频率变化率比较大,直接选择去掉整流电路采集电压的变化也可行),研究了一段时间的K60脉冲计数。K60本身的配置和功能就不多说了,就直接切入正题吧。(以下的所有代码都是基于LPLD库实现的,野火或者山外的就自己去论坛找找,有相应的实现代码)

FTM脉冲计数

FTM模块是一个多功能定时器模块,主要功能有PWM输出、输入捕捉、输出比较、定时中断、脉冲加减计数、脉冲周期脉宽测量。K60中包含有3个互相独立的FTM模块:FTM0、FTM1、FTM2,其中MK60F系列还含有额外的FTM3模块。FTM模块最常用的功能是实现PWM输出,但是只有FTM1、FTM2模块具备正交解码功能,而正交解码功能正是我们实现脉冲计数采集所需要的。

PS:实际上FTM的输入捕获也是可以实现脉冲计数的,但是一方面考虑到是通过软件中断,本身程序中已经有设置了一个中断进行K60控制,担心会影响主要程序的运行,另一方面,输入捕捉在频率较高的情况下采集精度不高,不适合对脉冲数进行处理。

正交解码听起来挺厉害的,但是实际上实现起来恨简单(反正都是调用库函数),正交解码最常用的是用来采集编码器的正反信号,那个就是采集的脉冲信号,如果我们只考虑编码器的正转的话就完全可以等效为脉冲计数采集,同时及时在较高频率的情况下也能保证精度。

下面就给出具体的代码:

//初始化FTM的正交解码模块,其中通道0为需要采集的脉冲端口,通道1接地
void Qd_Init(void)
{
  FTM_InitTypeDef ftm_init_struct;
  ftm_init_struct.FTM_Ftmx = FTM2;                      //只有FTM1和FTM2有正交解码功能
  ftm_init_struct.FTM_Mode = FTM_MODE_QD;               //正交解码功能
  ftm_init_struct.FTM_QdMode = QD_MODE_CNTDIR;          //计数和方向解码模式 
  ftm_init_struct.FTM_ClkDiv = FTM_CLK_DIV64;           //128分频

  LPLD_FTM_Init(ftm_init_struct);                       //初始化FTM
}

//获取脉冲数
short int pulseCount = LPLD_FTM_GetCounter(FTM2);       //获取计数器中采集到脉冲数
LPLD_FTM_ClearCounter(FTM2);                            //每次采集之后都要对FTM计数器清零

PS:如果出现采集的数据一直是65535之类的,很有可能是数据类型出错了,尝试一下其他的整数类型

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值