查看: 1673|回复: 2

[已解决] 关于K10测量占空比的问题(已解决)

[复制链接]

该用户从未签到

10

主题

63

帖子

0

注册会员

Rank: 2

积分
194
最后登录
2018-3-31
发表于 2014-10-13 19:28:00 | 显示全部楼层 |阅读模式
本帖最后由 tovax 于 2014-10-14 08:12 编辑

前两天,热心的FAE提供了“Dual Edge Capture Mode”测量脉冲周期和占空比的资料,介绍的挺好的。
但是对比发现,我的板子不能用这种模式,因为两路输入信号是接在“FTM1_CH0”和"FTM1_CH1"的。
这样的情况,如果要捕获两路信号,是不能用"Dual Edge Capture Mode"的,于是决定采用“Input Capture Mode”,如下图所示配置。
配置为"Capture On Rising or Falling Edge",这样在信号的上升沿和下降沿都可以触发中断。
//++++++++++++++++++++++++++++++++++++++++++++++++
在中断服务程序中进行如下处理:
void FTM1_Handler(void)
{
    if(STATUS.CH0F)    //CH0部分,CH1与CH0的处理一样
    {
        STATUS.CH0F = 0;    //清零中断标志,即STATUS寄存器的CH0F位
        if(高电平)    //上升沿
        {
            buf1 = FTM1_C0V;
        }
        else    //下降沿
        {
            buf2 = FTM1_C0V;
        }
    }
    if(STATUS.CH1F)    //CH1部分
    {
    ……
    ……
    ……
    }
}
//++++++++++++++++++++++++++++++++++++++++++++++++
在主程序中按如下思路测试:
if(buf1 < buf2)
{
    signal = buf2 - buf1;
}
else
{
    signal = (65536 -  buf1) + buf2;
}
//++++++++++++++++++++++++++++++++++++++++++++++++

按以上的方法,测出的signal大部分数据是对的,但是还时不时跳出很异常的数据。
比如测量1500us的脉宽,打印出来的数据基本也都在1500us,但是偶尔会跳出200us这样的数据。
改变1500us,错误的数据也会跟着改变。

请问以上的处理方法哪里不合适了?
我知道答案 目前已有2人回答
inputcapture.jpg
回复

使用道具 举报

该用户从未签到

10

主题

63

帖子

0

注册会员

Rank: 2

积分
194
最后登录
2018-3-31
 楼主| 发表于 2014-10-14 08:11:52 | 显示全部楼层
问题点已经找到:在主程序中计算signal时,数据受中断影响。
回复 支持 反对

使用道具 举报

该用户从未签到

124

主题

3600

帖子

0

金牌会员

Rank: 6Rank: 6

积分
5781
最后登录
1970-1-1
发表于 2014-10-14 08:55:10 | 显示全部楼层
tovax 发表于 2014-10-14 08:11
问题点已经找到:在主程序中计算signal时,数据受中断影响。

楼主,真是高效率,
恩,以后有关于飞思卡尔MCU的问题,欢迎来论坛中交流!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 注册/登录

本版积分规则

关闭

站长推荐上一条 /3 下一条

Archiver|手机版|小黑屋|恩智浦技术社区

GMT+8, 2025-9-8 03:25 , Processed in 0.097682 second(s), 24 queries , MemCache On.

Powered by Discuz! X3.4

Copyright © 2001-2024, Tencent Cloud.

快速回复 返回顶部 返回列表