打印
[Kinetis]

关于MKE02Z输入捕获的精度问题(已解决)

[复制链接]
1807|10
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 FSL_TICS_A 于 2014-9-15 11:44 编辑

最近测试了MKE02Z的输入捕获功能,测试环境为:【Freescale】FRDM-KE02Z,脉冲源为函数发生器,芯片主频20MHZ。测试发现这款芯片的捕获精度达不到预期,比如脉冲频率为2.5k时,理论计数值为8000,但实际捕获的数值误差为4,如下图所示: ,最大误差为8,具体数据见附件。

不知道是不是芯片自身原因,还是我们的配置有问题?
相关代码如下:



测试数据.rar (7.38 KB)

projects.rar

3.04 KB, 阅读权限: 100

测试例程

相关帖子

沙发
FSL_TICS_Jeremy| | 2014-8-21 10:56 | 只看该作者
你好,楼主!
能简单介绍一下,程序设计的例程,你是使用中断来做的吗?

使用特权

评论回复
板凳
jiandan_w|  楼主 | 2014-8-21 13:50 | 只看该作者
是的,采用输入捕获,中断处理。

使用特权

评论回复
地板
FSL_TICS_Jeremy| | 2014-8-21 13:59 | 只看该作者
jiandan_w 发表于 2014-8-21 13:50
是的,采用输入捕获,中断处理。

能否将中断函数贴出来?

使用特权

评论回复
5
jiandan_w|  楼主 | 2014-8-21 14:11 | 只看该作者
c:\中断处理.bmp

处于保密原因,我省略了溢出次数部分的处理。

使用特权

评论回复
6
jiandan_w|  楼主 | 2014-8-21 14:13 | 只看该作者
void CaptureHandle(void)
{
        if( FTM_GetOverFlowFlag( FTM2 ))
        {
                FTM_ClrOverFlowFlag( FTM2 );  // Clear TOF Flag if it was set
                ++g_u32OverFlowCounts;
        }

        if( FTM_GetChannelFlag( FTM2, FTM_CHANNEL_CHANNEL0))
        {
                FTM_ClrChannelFlag( FTM2, FTM_CHANNEL_CHANNEL0 );  // Clear CH(n)F Flag
                g_u16CaptureValue = FTM2->CONTROLS[0].CnV;  // capture value
                if( g_bFirstEdge )
                {
                        g_bFirstEdge = FALSE;
                        g_u16FirstEdgeCountValue = g_u16CaptureValue;
                }
                else
                {
                        // Index of count buffer
                        g_u32CurCntIndex++;
                        if( g_u32CurCntIndex >= COUNT_NUM )
                        {
                                g_u32CurCntIndex = 0;
                        }
               
                        // Calc Count
                        g_n32CountBuffer[g_u32CurCntIndex] = g_u16CaptureValue + (g_u32OverFlowCounts<<16) - g_u16FirstEdgeCountValue;
                        g_u16FirstEdgeCountValue = g_u16CaptureValue;  // Treak it as the first edge of the next pulse
                }
        }
}

使用特权

评论回复
7
FSL_TICS_Jeremy| | 2014-8-22 10:37 | 只看该作者
jiandan_w 发表于 2014-8-21 14:13

从代码上看应该是没有问题的,我认为有偏差的原因:1方面来是FTM模块有误差,2.波形有毛刺或者其他干扰

使用特权

评论回复
8
jiandan_w|  楼主 | 2014-8-22 11:21 | 只看该作者
本帖最后由 jiandan_w 于 2014-8-22 11:24 编辑
FSL_TICS_Jeremy 发表于 2014-8-22 10:37
从代码上看应该是没有问题的,我认为有偏差的原因:1方面来是FTM模块有误差,2.波形有毛刺或者其他干扰 ...

您好,我们做过对比测试:AT80C51ED2上,当脉冲频率为15k时,捕获值只差1个 - 测试环境相同,方法类似。
我们用的是函数发生器,脉冲是很干净的,不会有毛刺和干扰的问题。

对于MKE02Z的捕获精度,我们一直觉得不应该差这么多,所以我们想确认这个问题,你们有没有这款芯片的出厂测试数据,能否帮我们确认下这个问题。非常感谢!!


使用特权

评论回复
9
FSL_TICS_Jeremy| | 2014-8-22 11:46 | 只看该作者
jiandan_w 发表于 2014-8-22 11:21
您好,我们做过对比测试:AT80C51ED2上,当脉冲频率为15k时,捕获值只差1个 - 测试环境相同,方法类似。
...

我也觉得不应该是这样,要不你把例程给我,我在FRDM-KE02上测试一下。

使用特权

评论回复
10
jiandan_w|  楼主 | 2014-8-26 09:49 | 只看该作者
FSL_TICS_Jeremy 发表于 2014-8-22 11:46
我也觉得不应该是这样,要不你把例程给我,我在FRDM-KE02上测试一下。

我整理了一下,已经上传。

由于整个工程超过1M,我只能上传projects文件夹,  工程的其他部分与 KEXX_DRIVERS_V1.2.1_DEVD\kexx_drv_lib\src 中的一致。

使用特权

评论回复
11
FSL_TICS_Robin| | 2014-9-3 10:15 | 只看该作者
楼主你好
建议你先测试非溢出情况下输入捕获是否准确

使用特权

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

本版积分规则

4

主题

16

帖子

0

粉丝