OpenEdv-开源电子网

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

定时器捕捉18M的脉冲信号,可以实现么

[复制链接]

19

主题

85

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
202
金钱
202
注册时间
2014-9-16
在线时间
11 小时
发表于 2014-11-12 10:09:29 | 显示全部楼层 |阅读模式
5金钱
因需要采用定时器捕捉功能,捕捉18M的脉冲,使用原子哥的大板可以实现么?
在原子哥的例程上修改,来捕捉信号源的脉冲,发现总有5us的误差,是怎么回事呢?
各位遇到过这么问题没?

要实现18M的脉冲捕捉,精度可以保证么,捕捉时钟可以到72M吧

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

使用道具 举报

17

主题

342

帖子

0

精华

高级会员

Rank: 4

积分
544
金钱
544
注册时间
2014-4-24
在线时间
20 小时
发表于 2014-11-12 10:18:58 | 显示全部楼层
18M不大现实啊,输入捕获改变有效极性有2us的延迟时间的,别说18M了,1M都困难。
回复

使用道具 举报

19

主题

85

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
202
金钱
202
注册时间
2014-9-16
在线时间
11 小时
 楼主| 发表于 2014-11-12 10:41:56 | 显示全部楼层
回复【2楼】STM32VBT6:
---------------------------------
不会吧,那它的捕捉精度岂不是很低,延时2us,精度至少只有2us以上了,再小就不可能了!
那我只能用CPLD或FPGA来做脉宽测量了。
STM32的捕捉精度这么低啊
回复

使用道具 举报

17

主题

342

帖子

0

精华

高级会员

Rank: 4

积分
544
金钱
544
注册时间
2014-4-24
在线时间
20 小时
发表于 2014-11-12 10:48:42 | 显示全部楼层
主要是你捕捉到上升沿后又得改变极性去捕捉下降沿,总要反应时间的啊。分辨率可达72M,但这个延迟时间无法避免的。
当然,如果波形为稳定的周期方波,你只测量频率而不测占空比的话,18M应该是没问题的。
回复

使用道具 举报

19

主题

85

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
202
金钱
202
注册时间
2014-9-16
在线时间
11 小时
 楼主| 发表于 2014-11-12 13:23:10 | 显示全部楼层
18M的脉冲,只测高电平脉,不测周期,理论上大于36M就可以了吧,就是需要中断产生太频繁了。 需要占用CPU时间

另外,我怀疑5us的误差是信号源产生的,不知道你们用原子大哥的板子和例程,从串口发出时的值是正常的么?
回复

使用道具 举报

19

主题

85

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
202
金钱
202
注册时间
2014-9-16
在线时间
11 小时
 楼主| 发表于 2014-11-12 19:24:01 | 显示全部楼层
晚上我用示波器看了一下,信号源没有问题,但是采集的脉宽还是不对,总有4-5us误差,怎么回事呢,
请教原子大哥,看了一天不知道哪的问题。

使用实验板的T3的PWM输出,通过杜邦线接T5的CH1口捕捉,PWM输出10KHz,脉宽50us。

extern u8  TIM5CH1_CAPTURE_STA; //输入捕获状态    
extern u16 TIM5CH1_CAPTURE_VAL; //输入捕获值
 int main(void)
 {
  u32 temp=0; 
delay_init();     //延时函数初始化  
NVIC_Configuration(); //设置NVIC中断分组2:2位抢占优先级,2位响应优先级
uart_init(9600); //串口初始化为9600
  LED_Init();     //LED端口初始化
 
  TIM3_PWM_Init(7199,0); //不分频。PWM频率=72000/(899+1)=80Khz
  TIM5_Cap_Init(0XFFFF,72-1); //以1Mhz的频率计数 
    while(1)
{
  delay_ms(10);
// TIM_SetCompare2(TIM3,TIM_GetCapture2(TIM3)+1);
// if(TIM_GetCapture2(TIM3)==300)TIM_SetCompare2(TIM3,0);

TIM_SetCompare2(TIM3,3599);
 
  if(TIM5CH1_CAPTURE_STA&0X80)//成功捕获到了一次上升沿
{
temp=TIM5CH1_CAPTURE_STA&0X3F;
temp*=65536;//溢出时间总和
temp+=TIM5CH1_CAPTURE_VAL;//得到总的高电平时间
printf("HIGH:%d us\r\n",temp);//打印总的高点平时间
TIM5CH1_CAPTURE_STA=0;//开启下一次捕获
}
}
 }
实测值为47
HIGH:47 us
HIGH:47 us
HIGH:47 us
HIGH:47 us
HIGH:47 us
HIGH:47 us
HIGH:47 us
HIGH:47 us
HIGH:47 us
HIGH:47 us
HIGH:47 us
HIGH:47 us
HIGH:47 us

原子大哥帮看看,谢谢
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2014-11-12 21:56:04 | 显示全部楼层
吧捕获计数频率设置高点,不要设置1Mz
另外,尽量精简中断服务函数的代码,越短越好。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

19

主题

85

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
202
金钱
202
注册时间
2014-9-16
在线时间
11 小时
 楼主| 发表于 2014-11-13 09:02:13 | 显示全部楼层
回复【7楼】正点原子:
---------------------------------
我采用us是为了读取方便,不用转换,我提高计数频率试过了,72M,36M,20M,10M不行,总是差一些,
我觉得你的中断程序已经很精简了,没有计算,没有转换,是不是2楼提的转换检测沿所要2us的稳定时间呢?
怎么验证呢?
F103没有这么弱吧,几微秒的捕捉误差。
原子大哥能帮验证一下么?
回复

使用道具 举报

19

主题

85

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
202
金钱
202
注册时间
2014-9-16
在线时间
11 小时
 楼主| 发表于 2014-11-13 09:34:25 | 显示全部楼层
网上查到的:
stm32的定时器有个特殊的功能,是利用定时器的输入捕获功能,将一个输入捕获引脚分配给定时器的两个捕获功能模块,配置为一个上升沿捕获,一个下降沿捕获,可以自动获得高电平的时间。
缺点是一个输入引脚要占用两组捕获比较单元,就是说一个定时器最多可以使用一半的捕获引脚了。
好像这样就不用中间转换检测沿了,是不是不会造成延时误差啊?原子哥觉得这个说法有道理么

我理解他的说法是不是这样的:


两个模块同时映射在一个定时器上,一个配置为上升沿,一个配置为下降沿,


在中断程序里判断中断标志位,确定是上升沿中断还是下降沿中断。
这样可行么?

回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2014-11-13 17:06:04 | 显示全部楼层
回复【9楼】laoguren1122:
---------------------------------
中断处理肯定要占一些时间,如果能实现自动处理,当然是最好的了。
你试试吧。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-29 04:49

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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