打印
[STM32F1]

关于精确测频率

[复制链接]
1531|15
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
王七七|  楼主 | 2014-10-28 15:12 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
hz, RS, ST, IDT, mx
用捕获方式测频率 但是不能测到hz,测出来单位就直接是Khz了 求解,或者有没有更好的方法呀


部分代码 关键是数据处理

main()
{

void TIMx_EXTERN_CLK_INIT(void)
{
        //初始化定时器时钟
//         RCC->APB1RSTR |= 1 << (x-2);
//         RCC->APB1RSTR &= ~(1<<(x-2));
//         RCC->APB1ENR |= 1 << (x-2);
       
        RCC->APB1RSTR |= 1 << 0;//定时器2复位
        RCC->APB1RSTR &= ~(1<<0);//无作用?

        RCC->APB1ENR |= 1 << 0;//定时器2时钟开启
        //*********************

        TIMx_PIN_INIT();//PA1引脚初始化

        TIMx->CCMR1 |= 1 << 8;                                //第8位置1 CC2S[1:0] == 01 CC2通道被配置为输入
        //无滤波器
        TIMx->CCER |= 0 << 5;                                //极性为高电平计数   
        TIMx->SMCR |= 1 << 0 | 1 << 1 | 1 << 2;                        //选择外部时钟模式1-选中的触发输入的上升沿驱动计数器。
        TIMx->SMCR |= 1 << 6 | 1 << 5;                                          //选择T2作为触发源  110:滤波后的定时器输入2(TI2FP2)

        TIM2->DIER |= 1 << 0;                 //中断使能
        MY_NVIC_Init(1, 1, TIM2_IRQChannel, 2);//设置中断优先级
      TIMx->CR1 |= 1 << 0;                                //开始计数

~~~~~~~
  while(1)
        {
                TIM2->CR1 |= 1 << 0;//使能定时器
                delay_ms(1000);//延时1s
                CLOSE_CNT();//停止计数
                fre = Cnt*65535+TIM2->CNT;//计算频率
                dis(fre);//显示频率
                Cnt=0;
                TIM2->CNT=0;
    }
}


void TIM2_IRQHandler(void)//中断处理
{
        if (TIM2->SR & (1 << 0))
        {
                Cnt++;
                TIM2->SR &= ~(1 << 0);
        }
}


沙发
王七七|  楼主 | 2014-10-28 15:13 | 只看该作者
自己先顶一个 好困

使用特权

评论回复
板凳
dirtwillfly| | 2014-10-28 16:24 | 只看该作者
又改玩stm32了?

使用特权

评论回复
地板
bobde163| | 2014-10-28 17:20 | 只看该作者
很好奇,KHz级别测出来精确吗?

使用特权

评论回复
5
huzi2099| | 2014-10-28 17:29 | 只看该作者
延时一秒自然计不到HZ咯

使用特权

评论回复
6
coody| | 2014-10-28 21:58 | 只看该作者
捕捉N个脉冲的时间t(通常接近1秒,0.1us),就可以计算了,这就是等精度测量。
比如捕捉到56个脉冲的时间是0.9823457s,则频率 = 56/0.9823457=57.0064HZ

使用特权

评论回复
7
wallace_tsou| | 2014-10-29 10:00 | 只看该作者
測Hz的話,用計次  /  時間。時間用另一個TIMx。

使用特权

评论回复
8
mmuuss586| | 2014-10-30 08:30 | 只看该作者
捕获时钟源时钟设低点看看;

使用特权

评论回复
9
王七七|  楼主 | 2014-10-31 19:58 | 只看该作者
dirtwillfly 发表于 2014-10-28 16:24
又改玩stm32了?

我一直都在多方面发展。。。32,K60,XS128,。。。。

使用特权

评论回复
10
王七七|  楼主 | 2014-10-31 19:58 | 只看该作者
bobde163 发表于 2014-10-28 17:20
很好奇,KHz级别测出来精确吗?

精确的

使用特权

评论回复
11
王七七|  楼主 | 2014-10-31 20:00 | 只看该作者
huzi2099 发表于 2014-10-28 17:29
延时一秒自然计不到HZ咯

和延时好像没关系样诶

使用特权

评论回复
12
dirtwillfly| | 2014-10-31 21:58 | 只看该作者
王七七 发表于 2014-10-31 19:58
我一直都在多方面发展。。。32,K60,XS128,。。。。


强啊!

使用特权

评论回复
13
bobde163| | 2014-11-1 20:03 | 只看该作者
王七七 发表于 2014-10-31 19:58
精确的

这样的话,感觉像是你用于计量被测信号周期的定时器溢出了,才会出现现在KHz的情况,你可以把该定时器的时钟频率设置得低一些,保证一个信号周期内不会溢出看能不能解决

使用特权

评论回复
14
王七七|  楼主 | 2014-11-1 20:13 | 只看该作者
dirtwillfly 发表于 2014-10-31 21:58
强啊!

时刻像群主看齐

使用特权

评论回复
15
王七七|  楼主 | 2014-11-1 20:14 | 只看该作者
bobde163 发表于 2014-11-1 20:03
这样的话,感觉像是你用于计量被测信号周期的定时器溢出了,才会出现现在KHz的情况,你可以把该定时器的 ...

嗯嗯 我试试谢谢了

使用特权

评论回复
16
bobde163| | 2014-11-1 22:03 | 只看该作者
王七七 发表于 2014-11-1 20:14
嗯嗯 我试试谢谢了

调试的时候加相应的断点,确定一下看看

使用特权

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

本版积分规则

个人签名:21ic TI技术&感情交流2群 311421422 欢迎到同僚|校友|老乡会和新老朋友叙叙旧,传送门在此,一触即达~

46

主题

2167

帖子

35

粉丝