查看: 2010|回复: 4

[求助] k60四路输入捕捉求教

[复制链接]

该用户从未签到

1

主题

11

帖子

0

注册会员

Rank: 2

积分
67
最后登录
2015-4-2
发表于 2015-1-21 20:15:01 | 显示全部楼层 |阅读模式
采用FTM1 CH0 CH1 ,FTM2 CH0 CH1 ,测量四路脉冲高电平时间,不知为什么经常采集错误,PIT中断是2.5ms,如下是我的代码,

  1. void FTM1_IRQHandler()
  2. {
  3.     u8 s = FTM1_STATUS;             //读取捕捉和比较状态  All CHnF bits can be checked using only one read of STATUS.
  4.     u8 CHn;
  5.     FTM1_STATUS = 0x00;             //清中断标志位

  6.     CHn = 0;
  7.     if( s & (1 << CHn) )
  8.     {
  9.      //    FTM_IRQ_DIS(FTM1, 1);     //禁止输入捕捉中断

  10.         if(GPIO_Get(PORTB, 0)==1)
  11.          {
  12.            Rise[0]=PIT_CVAL_REG(PIT_BASE_PTR,PIT0);      //说明发生上升沿中断,记录此时的时刻 Rise[0]
  13.         
  14.          }
  15.           else
  16.           {

  17.           Drop[0]=PIT_CVAL_REG(PIT_BASE_PTR,PIT0);     //说明发生下升沿中断,记录此时的时刻  Drop[0]


  18.            if(Rise[0]>Drop[0])
  19.            Rc_Data.YAW =(Rise[0]  -  Drop[0])/50 ;     //  |Rise[0]  -  Drop[0]|差值的绝对值等于高电平的时间
  20.           else        
  21.           Rc_Data.YAW = (125000- Drop[0]+ Rise[0])/50; // 计时器从125000开始递减计数,共2.5ms ,捕捉的通道频率为400K
  22.        //    Rc_Data.YAW = FTM1_CNT ;
  23.         //  FTM_IRQ_EN(FTM1, 1); //开启输入捕捉中断
  24.         }

  25.     }

  26.    CHn = 1;
  27.    if( s & (1 << CHn) )
  28.     {
  29.       //
  30.         if(GPIO_Get(PORTB, 1)==1)
  31.          {

  32.            Rise[1]=PIT_CVAL_REG(PIT_BASE_PTR,PIT0);         //说明发生上升沿中断,记录此时的时刻 Rise[1]
  33.              FTM1_CNT=0;
  34.          }
  35.           else
  36.           {

  37.             Drop[1]=PIT_CVAL_REG(PIT_BASE_PTR,PIT0);         //说明发生上升沿中断,记录此时的时刻 Rise[1]


  38.            if(Rise[1]>Drop[1])
  39.            Rc_Data.THROTTLE =(Rise[1]  -  Drop[1])/50 ;     //  |Rise[1]  -  Drop[1]|差值的绝对值等于高电平的时间
  40.              else        
  41.             Rc_Data.THROTTLE= (125000- Drop[1]+ Rise[1])/50;   // 计时器从125000开始递减计数,共2.5ms ,捕捉的通道频率为400KZ
  42.          //    Rc_Data.THROTTLE= FTM1_CNT ;
  43.          //   FTM_IRQ_EN(FTM1, 0); //开启输入捕捉中断
  44.           }
  45.     }

  46. }
  47. /*************************************************************************
  48. *               湖北工业大学力创实验室
  49. *
  50. *  函数名称:FTM2_IRQHandler
  51. *  功能说明:FTM1输入捕捉中断服务函数
  52. *  参数说明:无
  53. *  函数返回:无
  54. *  修改时间:2015-1-12
  55. *  备    注:引脚号需要根据自己初始化来修改,参考现有的代码添加自己的功能
  56. *************************************************************************/
  57. void FTM2_IRQHandler()
  58. {
  59.     u8 s = FTM2_STATUS;             //读取捕捉和比较状态  All CHnF bits can be checked using only one read of STATUS.
  60.     u8 CHn;
  61.     FTM2_STATUS = 0x00;             //清中断标志位

  62.     CHn = 0;
  63.     if( s & (1 << CHn) )
  64.     {
  65.         if(GPIO_Get(PORTB, 18)==1)
  66.          {
  67.            Rise[2]=PIT_CVAL_REG(PIT_BASE_PTR,PIT0);        //说明发生上升沿中断,记录此时的时刻 Rise[2]
  68.          }
  69.           else
  70.           {

  71.            Drop[2]=PIT_CVAL_REG(PIT_BASE_PTR,PIT0);       //说明发生上升沿中断,记录此时的时刻 Rise[2]

  72.              if(Rise[2]>Drop[2])
  73.              Rc_Data.PITCH =(Rise[2]  -  Drop[2])/50 ;    //  |Rise[2]  -  Drop[2]|差值的绝对值等于高电平的时间
  74.              else        
  75.             Rc_Data.PITCH = (125000- Drop[2]+ Rise[2])/50;   // 计时器从125000开始递减计数,共2.5ms ,捕捉的通道频率为400KZ

  76.           }
  77.     }


  78.     CHn = 1;
  79.     if( s & (1 << CHn) )
  80.     {
  81.       if(GPIO_Get(PORTB, 19)==1)
  82.          {

  83.            Rise[3]=PIT_CVAL_REG(PIT_BASE_PTR,PIT0);       //说明发生上升沿中断,记录此时的时刻 Rise[3]

  84.          }
  85.        else
  86.         {
  87.           Drop[3]=PIT_CVAL_REG(PIT_BASE_PTR,PIT0);       //说明发生上升沿中断,记录此时的时刻 Rise[3]

  88.           if(Rise[3]>Drop[3])
  89.            Rc_Data.ROLL =(Rise[3]  -  Drop[3])/50 ;        //  |Rise[3]  -  Drop[3]|差值的绝对值等于高电平的时间
  90.           else        
  91.            Rc_Data.ROLL = (125000- Drop[3]+ Rise[3])/50;  // 计时器从125000开始递减计数,共2.5ms ,捕捉的通道频率为400KZ

  92.           }

  93.     }

  94. }
复制代码
不知哪位能有比较好的方法,能够同时测量四路脉冲高电平时间啊
我知道答案 目前已有4人回答
回复

使用道具 举报

该用户从未签到

1

主题

11

帖子

0

注册会员

Rank: 2

积分
67
最后登录
2015-4-2
 楼主| 发表于 2015-1-22 09:36:35 | 显示全部楼层
求救啊
回复

使用道具 举报

该用户从未签到

11

主题

835

帖子

0

金牌会员

Rank: 6Rank: 6

积分
1795
最后登录
2016-4-2
发表于 2015-1-31 22:23:50 | 显示全部楼层
本帖最后由 柳叶刀 于 2015-2-2 11:08 编辑

Rc_Data.PITCH = (125000- Drop[2]+ Rise[2])/50;  
回复 支持 反对

使用道具 举报

该用户从未签到

1

主题

825

帖子

0

金牌会员

Rank: 6Rank: 6

积分
1687
最后登录
2015-2-10
发表于 2015-1-31 22:23:51 | 显示全部楼层
楼主头像好吓人
回复 支持 反对

使用道具 举报

该用户从未签到

1

主题

35

帖子

0

注册会员

Rank: 2

积分
83
最后登录
2015-2-6
发表于 2015-1-31 22:23:52 | 显示全部楼层
小瞎包,帮顶
回复 支持 反对

使用道具 举报

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

本版积分规则

关闭

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

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

GMT+8, 2025-7-17 17:44 , Processed in 0.094930 second(s), 25 queries , MemCache On.

Powered by Discuz! X3.4

Copyright © 2001-2024, Tencent Cloud.

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