打印
[Kinetis]

K60的LPTMR脉冲计数对心率脉冲(0.9-3.3HZ频率)怎么计数?

[复制链接]
4692|23
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
沙发
FSL_TICS_Robin| | 2014-6-9 10:45 | 只看该作者
楼主你好
请问你是想把LPTMR用作计数or定时呢?
另外你是想在一定时间内测脉冲个数推算频率or测脉冲间隔时间推算频率呢?

使用特权

评论回复
板凳
huizhen110|  楼主 | 2014-6-9 22:14 | 只看该作者
FSL_TICS_Robin 发表于 2014-6-9 10:45
楼主你好
请问你是想把LPTMR用作计数or定时呢?
另外你是想在一定时间内测脉冲个数推算频率or测脉冲间隔时 ...

我把LPTMR用作计数了,我想在60s内计算脉冲个数,从而获取一分钟内的脉冲频率。对于0.9-3.3HZ的频率计数波动很大,不稳定,我现在上传一份代码请看一下
#define PIT_TIMER_PERIOD 60000000 //60s
void main (void)
{


  LPLD_PIT_Init(PIT0, PIT_TIMER_PERIOD, pit_isr0);//初始化,PIT0定时PIT_TIMER_PERIOD的us之后,响应pit_isr0中断

  LPLD_LPTMR_Init(MODE_PLACC, 0, LPTMR_ALT2, IRQ_DISABLE, NULL);//MODE_PLACC脉冲累加模式
  //LPTMR_ALT2的输入口为PTC5
  //禁用中断
  //无中断函数
  
  GetFreq=0;
  GetCnt=0;
  EnableInterrupts;

  while(1)
  {   
  }
}


void pit_isr0()
{
    static uint32_t temp=0;
   
    if(GetCnt>0)
    {
       GetFreq=temp/1;
       printf("GetFreq:%d\n",GetFreq);
       temp=0;
       GetCnt=0;
    }
    else
    {
       temp+=LPLD_LPTMR_GetPulseAcc();
       GetCnt++;
    }
   // printf("GetFreq:%d\n",GetFreq);
    LPLD_LPTMR_Reset();       //Reset LPTMR0  
    LPLD_LPTMR_Init(MODE_PLACC, 0, LPTMR_ALT2, IRQ_DISABLE, NULL);
}

信号发生器输入:3HZ方波,

输出如下:
Core Clock:96MHz!

Bus Clock:48000kHz!

Software Reset


K60-144pin      

This version of software doesn't recognize the revision code.Flash parameter version 0.0.8.0
Flash version ID 3.4.0.0
512 kBytes of P-flash

使用特权

评论回复
地板
huizhen110|  楼主 | 2014-6-9 22:16 | 只看该作者
FSL_TICS_Robin 发表于 2014-6-9 10:45
楼主你好
请问你是想把LPTMR用作计数or定时呢?
另外你是想在一定时间内测脉冲个数推算频率or测脉冲间隔时 ...

Core Clock:96MHz!
输出:
Bus Clock:48000kHz!

Software Reset


K60-144pin      

This version of software doesn't recognize the revision code.Flash parameter version 0.0.8.0
Flash version ID 3.4.0.0
512 kBytes of P-flash       
P-flash only
128 kBytes of RAM

GetFreq:12
GetFreq:4
GetFreq:5
GetFreq:7
GetFreq:6
GetFreq:5
GetFreq:6
GetFreq:6
GetFreq:5
GetFreq:6
GetFreq:4
GetFreq:4
GetFreq:5
GetFreq:4
GetFreq:6
GetFreq:10
GetFreq:6
GetFreq:5
GetFreq:3
GetFreq:5
GetFreq:5
GetFreq:6
GetFreq:5
GetFreq:5
GetFreq:5
GetFreq:3
GetFreq:7
GetFreq:5

使用特权

评论回复
5
huizhen110|  楼主 | 2014-6-9 22:19 | 只看该作者
上面的数据的是在#define PIT_TIMER_PERIOD 1000000 //1s
情况下测得的

使用特权

评论回复
6
FSL_TICS_Robin| | 2014-6-11 10:13 | 只看该作者
楼主你好
请问你的K60芯片具体型号是什么? 芯片正面刻的5位英文、数字组合的mask set号是多少?

使用特权

评论回复
7
FSL_TICS_Robin| | 2014-6-11 10:23 | 只看该作者
FSL_TICS_Robin 发表于 2014-6-11 10:13
楼主你好
请问你的K60芯片具体型号是什么? 芯片正面刻的5位英文、数字组合的mask set号是多少?
...

K60 100MHz的芯片曾经有过一次改版,硅版本Rev1和现在的Rev2。
关于如何判断自己K系列100MHz芯片的硅版本号,可以通过下载Kinetis系列产品常见问题总结
附件文档,查看K系列FAQ的综合问题部分。


使用特权

评论回复
8
FSL_TICS_Robin| | 2014-6-11 10:26 | 只看该作者
那个FAQ文档的8.2 Kinetis100MHz Rev1 to Rev2区别 有提到一篇应用手册AN4445 Kinetis 100 MHz Rev 1.x to Rev 2.x Migration Guide
这篇应用手册中就有提到LPTMR方面的改动:



使用特权

评论回复
9
huizhen110|  楼主 | 2014-6-12 21:29 | 只看该作者
FSL_TICS_Robin 发表于 2014-6-11 10:13
楼主你好
请问你的K60芯片具体型号是什么? 芯片正面刻的5位英文、数字组合的mask set号是多少?
...

我的mask set号为:4N30D,难道两个硅版本对LPTMR影响那么大,这个半导体工艺:funk:

使用特权

评论回复
10
huizhen110|  楼主 | 2014-6-12 21:56 | 只看该作者
FSL_TICS_Robin 发表于 2014-6-11 10:26
那个FAQ文档的8.2 Kinetis100MHz Rev1 to Rev2区别 有提到一篇应用手册AN4445 Kinetis 100 MHz Rev 1.x to  ...

也就是说在每次读取有效值之前先写入一个any value值,之后该寄存器值会重新被更新和同步?那我在LPLD_LPTMR_Reset();中对LPTMR_CNR进行一次write操作是不是就OK了?
void pit_isr0()
{
    static uint32_t temp=0;
   
    if(GetCnt>0)
    {
       GetFreq=temp/1;
       printf("GetFreq:%d\n",GetFreq);
       temp=0;
       GetCnt=0;
    }
    else
    {
       temp+=LPLD_LPTMR_GetPulseAcc();
       GetCnt++;
    }
   // printf("GetFreq:%d\n",GetFreq);
    LPLD_LPTMR_Reset();       //Reset LPTMR0  
    LPLD_LPTMR_Init(MODE_PLACC, 0, LPTMR_ALT2, IRQ_DISABLE, NULL);
}
其中

void LPLD_LPTMR_Reset(void)
{
  LPTMR0_CSR&=(~LPTMR_CSR_TEN_MASK);       //Reset LPTMR0
  LPTMR0_CNR=0;     //Write to LPTMR_CNR with anyvalue
}
等下回复实验结果

使用特权

评论回复
11
huizhen110|  楼主 | 2014-6-12 22:02 | 只看该作者
huizhen110 发表于 2014-6-12 21:56
也就是说在每次读取有效值之前先写入一个any value值,之后该寄存器值会重新被更新和同步?那我在LPLD_LP ...

不知道我理解的准确吗

使用特权

评论回复
12
huizhen110|  楼主 | 2014-6-12 22:19 | 只看该作者
当写入LPTMR0_CNR=0;时,输出如下:

GetFreq:5
GetFreq:3
GetFreq:5
GetFreq:3
GetFreq:4
GetFreq:5
GetFreq:4
GetFreq:5
GetFreq:3
GetFreq:4
GetFreq:4
GetFreq:5
GetFreq:3
GetFreq:5
GetFreq:6
GetFreq:4
GetFreq:6
GetFreq:6
当修改LPTMR0_CNR=3;时,输出如下:

GetFreq:3
GetFreq:4
GetFreq:5
GetFreq:6
GetFreq:3
GetFreq:5
GetFreq:4
GetFreq:3
GetFreq:6
GetFreq:5
GetFreq:3
GetFreq:7
GetFreq:4
GetFreq:5
GetFreq:5
GetFreq:5
GetFreq:6
GetFreq:5
GetFreq:5
GetFreq:3
GetFreq:3
GetFreq:5
GetFreq:4
GetFreq:8
问题依旧

使用特权

评论回复
13
huizhen110|  楼主 | 2014-6-12 22:26 | 只看该作者
FSL_TICS_Robin 发表于 2014-6-11 10:13
楼主你好
请问你的K60芯片具体型号是什么? 芯片正面刻的5位英文、数字组合的mask set号是多少?
...

MK60DN512ZVLQ10 4N30D

使用特权

评论回复
14
FSL_TICS_Robin| | 2014-6-13 09:49 | 只看该作者
huizhen110 发表于 2014-6-12 21:29
我的mask set号为:4N30D,难道两个硅版本对LPTMR影响那么大,这个半导体工艺 ...

你的芯片mask set号既然是4N30D,那么硅版本还是Rev1.x范围的。
这个AN4445是针对客户因为芯片从Rev1.x换到Rev2.x后,程序上需要考虑的一些东西。
你还是看Rev1的芯片参考手册K60P144M100SF2RM的41.4.5 LPTMR counter说明操作就行了。

使用特权

评论回复
15
huizhen110|  楼主 | 2014-6-13 16:44 | 只看该作者
FSL_TICS_Robin 发表于 2014-6-13 09:49
你的芯片mask set号既然是4N30D,那么硅版本还是Rev1.x范围的。
这个AN4445是针对客户因为芯片从Rev1.x换 ...

这是什么意思啊?

使用特权

评论回复
16
huizhen110|  楼主 | 2014-6-13 16:45 | 只看该作者
FSL_TICS_Robin 发表于 2014-6-13 09:49
你的芯片mask set号既然是4N30D,那么硅版本还是Rev1.x范围的。
这个AN4445是针对客户因为芯片从Rev1.x换 ...

问题是对50hz的信号没什么问题,为什么对1--3hz的信号却误差那么大?如果对于读的方法有问题的话,那对于50hz的问题也应该存在才对呢

使用特权

评论回复
17
FSL_TICS_Robin| | 2014-6-13 16:49 | 只看该作者
huizhen110 发表于 2014-6-13 16:45
问题是对50hz的信号没什么问题,为什么对1--3hz的信号却误差那么大?如果对于读的方法有问题的话,那对于 ...

凡是Rev1.x的芯片用户读LPTMR的CNR值需要连读2遍以确保读到的值准确。
红线划出来的就是Rev1.x手册上的。
当然你得确定你用的LPLD库是支持1.x的

这个只是对之前提到的Rev2.x那种先写后读的方式补充啦,因为你的Rev1.x所以可以无视之前提到的2.x操作方法

使用特权

评论回复
18
huizhen110|  楼主 | 2014-6-13 17:04 | 只看该作者
huizhen110 发表于 2014-6-13 16:45
问题是对50hz的信号没什么问题,为什么对1--3hz的信号却误差那么大?如果对于读的方法有问题的话,那对于 ...

连续读两遍的话还需软件验证两次读的值相同吗?

使用特权

评论回复
19
FSL_TICS_Robin| | 2014-6-13 17:04 | 只看该作者
:L不好意思,之前没注意你的PIT是1s一次中断看LPTMR的CNR值。
对于1HZ的信号,你PIT用1s就不怎么合适了。
心率不是按照60s统计跳动次数的吗? 你记个60s看LPTMR是否准确。

使用特权

评论回复
20
huizhen110|  楼主 | 2014-6-13 17:05 | 只看该作者
FSL_TICS_Robin 发表于 2014-6-13 17:04
不好意思,之前没注意你的PIT是1s一次中断看LPTMR的CNR值。
对于1HZ的信号,你PIT用1s就不怎么合适了。
...

试过了 依旧不准确

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2

主题

29

帖子

0

粉丝