打印
[STM8]

STM8能捕获的最高频率

[复制链接]
12236|24
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本人新手。
自己在做捕获的小实验,发现输入频率1M就不行了,512K是可以的。
用的内置振荡器,16M,8个周期更新一次。
1M信号输入,连捕获的中断都进不去了。
是不是捕获本身执行就需要一些时间啊,比如说us级的。
沙发
win2000_li| | 2010-3-26 15:04 | 只看该作者
还是要看你定时器设置吧??分辨率?

使用特权

评论回复
板凳
amonghappy|  楼主 | 2010-3-26 15:26 | 只看该作者
16bit timer 无分频,也就是说定时器是按照16M计数的。分辨率已经最高了。

使用特权

评论回复
地板
香水城| | 2010-3-26 15:49 | 只看该作者
捕获本身不需要时间,否则无法保证精确性。

请检查你的程序是否正确。

使用特权

评论回复
5
amonghappy|  楼主 | 2010-3-26 16:29 | 只看该作者
因为程序没有改变,只是输入频率变化引起了结果的差异,所以才想到了这点。
我再仔细看看。捕获应该是硬件执行,时间非常短。谢谢。

使用特权

评论回复
6
zhaoxinzxzx| | 2010-3-29 14:27 | 只看该作者
中断的执行是us级的

使用特权

评论回复
7
amonghappy|  楼主 | 2010-3-29 23:22 | 只看该作者
我把程序简化了,就单独测这个功能,还是不能捕获到1M的信号。
是不是我捕获进入中断后,中断处理时间长了呢?
中断处理就只是清标志位而已。要测一个信号的周期需要捕获两次的。
但是现在是输入1M的话,连中断都进不去了。:(

使用特权

评论回复
8
香水城| | 2010-3-30 09:35 | 只看该作者
你用的是什么型号?

使用特权

评论回复
9
amonghappy|  楼主 | 2010-3-30 21:12 | 只看该作者
STM8S208MB,用的STM8的评估板。我把内部16M的RC分频到1M输出到CCO管脚,然后输入到芯片的TIM捕捉。如果分到512k,没问题的。麻烦香主了。 :)

使用特权

评论回复
10
香水城| | 2010-3-31 10:00 | 只看该作者
请问你是如何配置、如何操作的?

如果输入信号频率较高,使用2个通道同时捕获比较好,如下图:

STM8_Input_PWM.GIF (7.81 KB )

STM8_Input_PWM.GIF

使用特权

评论回复
11
amonghappy|  楼主 | 2010-4-1 15:16 | 只看该作者
香主,谢谢你的帮助。
对捕获的配置如下,
TIM3_ICInit(TIM3_CHANNEL_1, TIM3_ICPOLARITY_RISING, TIM3_ICSELECTION_DIRECTTI, TIM3_ICPSC_DIV8, 0);  //8个事件触发一次捕获中断,Channel1,上升沿。
TIM3_ITConfig(TIM3_IT_CC1, ENABLE);          //捕获功能使能。
TIM3_Cmd(ENABLE);   //使能TIM3计数
key=0;
while(1)
{
;
}

中断部分程序如下:
@near @interrupt @svlreg void TIM3_CAP_COM_IRQHandler (void)
{
        if ( TIM3_GetFlagStatus(TIM3_FLAG_CC1) == SET )
        {
        switch (key)
        {
        case 0: firstcapture = TIM3_GetCapture1();
        key=1;
        break;
               
        case 1: lastcapture = TIM3_GetCapture1();
        key=2;
        break;
       
        default:TIM3_ITConfig(TIM3_IT_CC1, DISABLE);
        break;       
        }
        TIM3_ClearITPendingBit(TIM3_IT_CC1);
        TIM3_ClearFlag(TIM3_FLAG_CC1);
  }
        return;
}

用PD2脚捕获,捕获的话应该不需要对IO配置的吧。

另外PD2最高输出频率为2M,不知道对输入有没有限制呢。
O3 = Fast/slow programmability with slow as default state after reset
PD2特性。

谢谢。

使用特权

评论回复
12
zwll| | 2010-4-1 15:19 | 只看该作者
对输入应该有限制

使用特权

评论回复
13
香水城| | 2010-4-1 15:48 | 只看该作者
可能你还是没有理解我的意思。

你应该使用2个通道按照我在10楼给出的图中所示,把输入信号同时送入2个通道,然后一个通道捕获上升沿,另一个通道捕获下降沿;这样就可以准确地测量输入的脉冲宽度,在输入信号的占空比为50%时,可以方便地转换为频率。如果输入信号的占空比不是50%,则在捕获中断中应能读到捕获上升沿的那个通道的再次捕获值,2次捕获值之差就是输入信号的频率。

使用特权

评论回复
14
amonghappy|  楼主 | 2010-4-1 17:02 | 只看该作者
香主,我按你的方法试了一下,频率到1M还是不行,中断能进去,读出来为0。
过捕获置1了。TIM3_SR1, TIM3_SR2 寄存器值变成0x06.  :(
按道理,值已经被捕捉了,但是确是0.

请知悉。

使用特权

评论回复
15
香水城| | 2010-4-1 17:37 | 只看该作者
如果中断中读出的捕获值为0,则可以肯定这不是真正的捕获值,可能是设置上还有问题。

使用特权

评论回复
16
xsgy123| | 2010-4-1 21:26 | 只看该作者
先确定512K捕获值是对的,不要只看有没值

使用特权

评论回复
17
amonghappy|  楼主 | 2010-4-2 13:43 | 只看该作者
512k, 抓下来就是256,准确。
8*16M/512k=256。
谢谢。

使用特权

评论回复
18
amonghappy|  楼主 | 2010-4-18 23:22 | 只看该作者
问题有新的进展,不用中断程序,可以最高捕捉2M速度的信号。
具体原因我会在这周做进一步的分析。谢谢大家。

使用特权

评论回复
19
行不改名| | 2010-4-19 11:18 | 只看该作者
期待你的进一步的分析:lol

使用特权

评论回复
20
06082314| | 2010-5-2 16:04 | 只看该作者
期待楼主的分析结果,哈哈~~

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

5

主题

69

帖子

0

粉丝