OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 4790|回复: 7

使用定时器的捕捉功能捕捉随机的出现的正、负脉冲

[复制链接]

19

主题

85

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
202
金钱
202
注册时间
2014-9-16
在线时间
11 小时
发表于 2014-11-10 20:02:59 | 显示全部楼层 |阅读模式
5金钱
如题,使用STM32的定时器T4捕捉随机出现的正负脉冲,因为不知道开始出现的是正还是负脉冲,而且也不知道后面出现的是什么脉冲,
这样就没法确定先上升沿触发还是下降沿触发。打算采用双边沿触发的方式。

采用原子哥的程序进行验证!
采用双边触发方式,中间不更换触发方式,直接把中断程序中的转换触发方式的语句注释掉,
但得出的结果好像不对,什么原因呢?

1.初始化程序,采用双边触发方式
TIM4_ICInitStructure.TIM_Channel = TIM_Channel_1;  //  CC1S=01 选择输入端 IC1映射到TI1上
 // TIM4_ICInitStructure.TIM_ICPolarity = TIM_ICPolarity_Rising; //上升沿捕获
  TIM4_ICInitStructure.TIM_ICPolarity = TIM_ICPolarity_BothEdge;
  TIM4_ICInitStructure.TIM_ICSelection = TIM_ICSelection_DirectTI; //映射到TI1上
  TIM4_ICInitStructure.TIM_ICPrescaler = TIM_ICPSC_DIV1; //配置输入分频,不分频 
  TIM4_ICInitStructure.TIM_ICFilter = 0x00;//IC1F=0000 配置输入滤波器 不滤波
  TIM_ICInit(TIM4, &TIM4_ICInitStructure);

2.中断处理程序里,直接注释掉触发程序,其他不变,还是原子哥的
void TIM4_IRQHandler(void)

  if((TIM4CH1_CAPTURE_STA&0X80)==0)//还未成功捕获
{  
if (TIM_GetITStatus(TIM4, TIM_IT_Update) != RESET)
{    
if(TIM4CH1_CAPTURE_STA&0X40)//已经捕获到高电平了
{
if((TIM4CH1_CAPTURE_STA&0X3F)==0X3F)//高电平太长了
{
TIM4CH1_CAPTURE_STA|=0X80;//标记成功捕获了一次
TIM4CH1_CAPTURE_VAL=0XFFFF;
}else TIM4CH1_CAPTURE_STA++;
}  
}
if (TIM_GetITStatus(TIM4, TIM_IT_CC1) != RESET)//捕获1发生捕获事件
{
if(TIM4CH1_CAPTURE_STA&0X40) //捕获到一个下降沿
{  
TIM4CH1_CAPTURE_STA|=0X80; //标记成功捕获到一次上升沿
TIM4CH1_CAPTURE_VAL=TIM_GetCapture1(TIM4);
  // TIM_OC1PolarityConfig(TIM4,TIM_ICPolarity_Rising); //CC1P=0 设置为上升沿捕获
}else   //还未开始,第一次捕获上升沿
{
TIM4CH1_CAPTURE_STA=0; //清空
TIM4CH1_CAPTURE_VAL=0;
TIM_SetCounter(TIM4,0);
TIM4CH1_CAPTURE_STA|=0X40; //标记捕获到了上升沿
  // TIM_OC1PolarityConfig(TIM4,TIM_ICPolarity_Falling); //CC1P=1 设置为下降沿捕获
}    
}           
  }
 
    TIM_ClearITPendingBit(TIM4, TIM_IT_CC1|TIM_IT_Update); //清除中断标志位
 
}

3.捕捉按键时间,明显偏长很多,有问题。
原子程序正常:
HIGH4:137997 us
HIGH4:146206 us
HIGH4:137640 us
HIGH4:114909 us
HIGH4:121974 us
双边捕捉非正常:
HIGH4:434366 us
HIGH4:378154 us
HIGH4:320067 us
HIGH4:465998 us
HIGH4:123394 us
HIGH4:1322349 us
HIGH4:1096060 us
HIGH4:511339 us

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2014-11-10 22:12:32 | 显示全部楼层
有负脉冲的话,输入STM32有可能烧坏单片机哦。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

19

主题

85

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
202
金钱
202
注册时间
2014-9-16
在线时间
11 小时
 楼主| 发表于 2014-11-11 09:59:25 | 显示全部楼层
不好意思没说明白, 不是负电压,是那种的以1.5为基准,正脉冲为3V,负脉冲为0V的这种脉冲。
网上查到的好像双边检测是检测一个上升和一个下降沿,才开始触发是吧,
不是我们正常理解的上升沿触发一次下降沿触发一次。

而且从相关寄存器里没有看到双边触发的设置啊,请指点?
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2014-11-11 15:30:09 | 显示全部楼层
回复【3楼】laoguren1122:
---------------------------------
双边触发就是高低电平都可以了,设置很简单啊。
看CCER寄存器。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

19

主题

85

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
202
金钱
202
注册时间
2014-9-16
在线时间
11 小时
 楼主| 发表于 2014-11-12 09:42:44 | 显示全部楼层
回复【4楼】正点原子:
---------------------------------
原子哥,高低电平这个搞清楚了,现在有个新问题,我用你的程序进行高电平脉冲捕捉。通过串口发出来,发现总是少5us。
例如:
设置输入脉冲周期为100us,高电平宽度为50us,实测的值为45或46us
设置输入脉冲周期为20us,高电平宽度为10us,实测的值为5或6us
设置输入脉冲周期为10us,高电平宽度为5us,实测的值为135,出现捕捉错误

表明中断捕捉处理时间需要5us左右,可以这么理解么。但是STM32的72M时钟不至于需要花费5us完成一个中断任务吧,
里面也没什么计算和耗时的程序,实在搞不懂了。

实际上我想完成的捕捉15M的脉冲,捕捉定时器的最大频率只能到36M,是不是根本不能实现啊!

(原子哥能私信一下你的联系方式给我么?还有问题求指教)
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2014-11-12 23:01:18 | 显示全部楼层
回复【5楼】laoguren1122:
---------------------------------
中断需要多久,这个你可以测试下,然后排出这部分问题干扰。
另外,计数频率1Mhz最高精度就是1us了,所以你提高计数频率,再试试。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

19

主题

85

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
202
金钱
202
注册时间
2014-9-16
在线时间
11 小时
 楼主| 发表于 2014-11-13 09:17:06 | 显示全部楼层
回复【6楼】正点原子:
---------------------------------
我试过其他计数频率72M,36M,20M,10M,总是有偏差,而且算下来也是4-5us,用1M是为了方便读取
原子哥之前验证过捕捉的最短脉宽没?能帮忙验证一下么
我实在找不出问题在哪,用信号源测过,板子自己输出PWM信号也测过,结果一样。
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2014-11-13 16:36:59 | 显示全部楼层
回复【7楼】laoguren1122:
---------------------------------
这个没试过,建议你测试下STM32的中断响应速度。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-29 05:08

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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