OpenEdv-开源电子网

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

请问无论如何我是用ETR还是TI来定时器外部计数都会有个误差,那怎么解决呢?

[复制链接]

104

主题

313

帖子

0

精华

高级会员

Rank: 4

积分
893
金钱
893
注册时间
2014-11-13
在线时间
53 小时
发表于 2014-11-24 00:10:26 | 显示全部楼层 |阅读模式
5金钱
请问无论如何我是用ETR还是TI来定时器外部计数都会有个误差,那怎么解决呢?误差为百分之0.5左右。就是50khz一般是49731这样。
//////           定时器3中断服务程序           //////

void TIM3_IRQHandler(void)   //TIM3中断
{
if (TIM_GetITStatus(TIM3, TIM_IT_Update) != RESET)  //检查TIM3更新中断发生与否
{
    TIM_ClearITPendingBit(TIM3, TIM_IT_Update  );  //清除TIMx更新中断标志 

     TIM_Cmd(TIM2,DISABLE);  
     printf("%d\n",TIM2->CNT);
     TIM2->CNT = 0;
     TIM_Cmd(TIM2,ENABLE);  

}

}

最佳答案

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

回复【6楼】正点原子: --------------------------------- 问题解决了,但是最大只能20mhz,再大不知道是不是因为整数类型已经最大的关系,我用的是unsigned long int。误差率是五万分之一。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

104

主题

313

帖子

0

精华

高级会员

Rank: 4

积分
893
金钱
893
注册时间
2014-11-13
在线时间
53 小时
 楼主| 发表于 2014-11-24 00:10:27 | 显示全部楼层
回复【6楼】正点原子:
---------------------------------
问题解决了,但是最大只能20mhz,再大不知道是不是因为整数类型已经最大的关系,我用的是unsigned long int。误差率是五万分之一。
回复

使用道具 举报

104

主题

313

帖子

0

精华

高级会员

Rank: 4

积分
893
金钱
893
注册时间
2014-11-13
在线时间
53 小时
 楼主| 发表于 2014-11-24 00:10:42 | 显示全部楼层
自顶一个自顶一个
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2014-11-24 00:13:57 | 显示全部楼层
可能是定时时间的问题。
比如你统计10秒钟,再求一下。20秒钟,求一下,或者更长,看看准确度是否更高?
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

104

主题

313

帖子

0

精华

高级会员

Rank: 4

积分
893
金钱
893
注册时间
2014-11-13
在线时间
53 小时
 楼主| 发表于 2014-11-24 00:25:14 | 显示全部楼层
TIMER3_Init(9999,7199);这样子没错吧
回复

使用道具 举报

104

主题

313

帖子

0

精华

高级会员

Rank: 4

积分
893
金钱
893
注册时间
2014-11-13
在线时间
53 小时
 楼主| 发表于 2014-11-24 00:25:53 | 显示全部楼层
1s回复【3楼】正点原子:
---------------------------------
回复【3楼】正点原子:
---------------------------------
TIMER3_Init(9999,7199);这样子没错吧1s
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2014-11-25 00:43:34 | 显示全部楼层
回复【5楼】long7qazzaq:
---------------------------------
是的。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2014-11-25 16:44:35 | 显示全部楼层
回复【7楼】long7qazzaq:
---------------------------------
恭喜,20Mhz已经比较高了
方便的话,可以和坛友分享下经验。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

2

主题

9

帖子

0

精华

初级会员

Rank: 2

积分
72
金钱
72
注册时间
2019-7-16
在线时间
23 小时
发表于 2019-10-20 13:55:23 | 显示全部楼层
有配置程序吗?可以发给我看看吗?我刚从51转过来的萌新,被卡在外部计数了
回复

使用道具 举报

51

主题

2166

帖子

2

精华

论坛元老

Rank: 8Rank: 8

积分
10653
金钱
10653
注册时间
2017-4-14
在线时间
2780 小时
发表于 2019-10-20 17:20:24 | 显示全部楼层
漂流 发表于 2019-10-20 13:55
有配置程序吗?可以发给我看看吗?我刚从51转过来的萌新,被卡在外部计数了

http://www.openedv.com/forum.php ... d=104491&extra=   TIM 计数模式.rar (3.28 MB, 下载次数: 1176)
回复

使用道具 举报

0

主题

15

帖子

0

精华

新手入门

积分
19
金钱
19
注册时间
2020-7-15
在线时间
7 小时
发表于 2020-11-12 09:26:06 | 显示全部楼层
顶一个
回复

使用道具 举报

1

主题

18

帖子

0

精华

初级会员

Rank: 2

积分
77
金钱
77
注册时间
2017-9-18
在线时间
20 小时
发表于 2020-11-13 17:05:04 | 显示全部楼层
nashui_sx 发表于 2019-10-20 17:20
http://www.openedv.com/forum.php?mod=viewthread&tid=104491&extra=   TIM 计数模式.rar (3.28 MB, 下 ...

你好我想请问一下,定时用的定时器会在固定的时间读取外部计数的定时器的计数值,那我起始停止应该怎么判断呢,有点没明白外部计数测频率的计算方式
回复

使用道具 举报

51

主题

2166

帖子

2

精华

论坛元老

Rank: 8Rank: 8

积分
10653
金钱
10653
注册时间
2017-4-14
在线时间
2780 小时
发表于 2020-11-13 17:22:17 | 显示全部楼层
啦啦啦啦啦 发表于 2020-11-13 17:05
你好我想请问一下,定时用的定时器会在固定的时间读取外部计数的定时器的计数值,那我起始停止应该怎么判 ...

单位时间内的脉冲数量就是频率呀
回复

使用道具 举报

1

主题

18

帖子

0

精华

初级会员

Rank: 2

积分
77
金钱
77
注册时间
2017-9-18
在线时间
20 小时
发表于 2020-11-14 15:45:13 | 显示全部楼层
nashui_sx 发表于 2020-11-13 17:22
单位时间内的脉冲数量就是频率呀

我想捋一下,假设a用作外部计数(也就是用来计时的计数器),b用作定时器在单位时间读数,当输入通道出现上升沿,a计数清零,假设b每定时5ms去读取a计数器的数值然后将a计数器清零,等到第二个上升沿a又清零但是b能及时知道一个周期结束了嘛
回复

使用道具 举报

1

主题

18

帖子

0

精华

初级会员

Rank: 2

积分
77
金钱
77
注册时间
2017-9-18
在线时间
20 小时
发表于 2020-11-14 21:59:36 | 显示全部楼层
nashui_sx 发表于 2020-11-13 17:22
单位时间内的脉冲数量就是频率呀

#if 1
void TIM2_IRQHandler(void)   
{
      if (TIM_GetITStatus(TIM2, TIM_IT_Update) != RESET)
        {
                TIM_ClearITPendingBit(TIM2, TIM_IT_Update);
                           CAPTURE1=(u32)TIM_GetCounter(TIM3);
                //CAPTURE2=(u32)TIM_GetCounter(TIM4);                                        
                                }
                                                sum+=CAPTURE1;
                                                count++;
                                                if(count==4)
                                                {
                                                        Frequency1=sum/4/0.25;
                                                        sum=0;
                                                        count=0;
            }
                         TIM_SetCounter(TIM3,0);                                                       
}
#endif
就是这段判断count为4有点没想明白是怎么得到的频率值
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-22 07:16

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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