OpenEdv-开源电子网

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

关于输入捕获中遇到的问题,请路过的坛友帮忙看看分析一下

[复制链接]

16

主题

111

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1242
金钱
1242
注册时间
2017-3-18
在线时间
312 小时
发表于 2018-7-3 16:26:40 | 显示全部楼层 |阅读模式
50金钱
如图所示,PA0和PA6连接在一起,分别开启定时器TIM3和TIM5,并且用于捕获同一路信号(分别作用于两种场合,同一时间只开启一个定时器,另外一路处于关闭状态)。在使用TIM3的时候,在150kHz范围内,计算频率值精确度可达小数点后6位,绝大部分情况下没有问题。
原理也很简单,在捕获到第一个上升沿时记录当前时间值m0,记录第三个上升沿时间值为m1, 时间差m=(m1-m0),单位为us。已知上升沿脉冲数和时间,套用公式即可计算出频率。


目前碰到一个问题,很不经意的时候,计算出的频率值会变成3906.25Hz,实际情况频率值绝对不是这个,只有几十hz左右。
原本认为是干扰问题,后分析频率值只会跳动为3906.25,不会变成其他数据,并且通过3906.25算出时间差m=512,这个数值大家应该很敏感,很整。另一方面排除干扰的原因:TIM3和TIM5是连接在一起的,只在TIM3捕获这个过程里会出现这个情况,TIM5里从未出现。

有路过的坛友帮忙看看,这个问题出现的可能原因。谢谢!!!
因为这个情况在设备现场调试起来很困难,接线都成问题,所以单步调试这种情况确实不太好用。

现在把TIM3的源码贴上,有软件问题或者可能存在的硬件问题请指教。硬件使用的是F767
321.png
123.png

最佳答案

查看完整内容[请看2#楼]

如果是固定的话,你可以设置个if,当等于你这个特殊值的时候,把相关参数全部打印出来,分析下。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165524
金钱
165524
注册时间
2010-12-1
在线时间
2116 小时
发表于 2018-7-3 16:26:41 | 显示全部楼层
如果是固定的话,你可以设置个if,当等于你这个特殊值的时候,把相关参数全部打印出来,分析下。
回复

使用道具 举报

16

主题

111

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1242
金钱
1242
注册时间
2017-3-18
在线时间
312 小时
 楼主| 发表于 2018-7-3 16:40:19 | 显示全部楼层
出现的概率说小于万分之一,因为突然这个频率升高,会使我的设备处于保护状态立即关停,所以才看到有这个频率的变化。另外解释一下,软件上的Fpclk为晶振频率,1000000hz。StandSignNum为接收到的上升沿脉冲数量,3个上升沿表示中间有2个脉冲宽度。
回复

使用道具 举报

16

主题

111

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1242
金钱
1242
注册时间
2017-3-18
在线时间
312 小时
 楼主| 发表于 2018-7-4 09:55:12 | 显示全部楼层
正点原子 发表于 2018-7-4 02:28
如果是固定的话,你可以设置个if,当等于你这个特殊值的时候,把相关参数全部打印出来,分析下。

这个也是目前检测的方向,也没有更好的方法了。
回复

使用道具 举报

16

主题

111

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1242
金钱
1242
注册时间
2017-3-18
在线时间
312 小时
 楼主| 发表于 2018-7-4 10:08:37 | 显示全部楼层
纠正上面说明的一个错误,晶振频率1M怎么够 1M是定时器的计时频率。另外补充一点,出现的频率也不仅仅为3906.25,也出现1302.08这样的数据,计算出的时间差m=1536=2^10+2^9。
目前猜测可能的原因:
1、计算时产生数据溢出。此猜测基本排除,因为TIM5上的计算方法是一样的,并且数据量大很多,没有出现这种情况。
2、参数定义和计算方法有问题。
查看定义: unsigned long long  m0=0,m1=0;  float  m=0;u32                StandSignNum=0;
查看计算方式
m0=TIM3->CCR1+(TIM3CH1_CAPTURE_STA<<16);
m1=TIM3->CCR1+(TIM3CH1_CAPTURE_STA<<16);
m=(m1-m0);   
addr_data2[4]=(Fpclk/m)*(StandSignNum-1);
这样的定义和计算方法可行吗?请路过看到的坛友解答
2、TIM3和TIM5连接在一起,TIM3开启TIM5中断关闭状态,TIM5所对应的引脚给发出了如上频率的脉冲。如果是这个情况如何去确认呢?
回复

使用道具 举报

16

主题

111

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1242
金钱
1242
注册时间
2017-3-18
在线时间
312 小时
 楼主| 发表于 2018-7-26 11:30:06 | 显示全部楼层
暂未发现原因,先结帖。后续有发现持续更新。
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-1 02:18

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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