0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

两种测量正弦波的频率的方法分享

电子工程师 作者:工程师陈翠 2018-06-18 15:00 次阅读

最近一直尝试各种方法测量一个正弦波的频率,可是都不太理想,老差几个hz,尤其中频,现在先将自己的方法供大家研讨。

第一种方法:

比较笨的方法,使用了回调函数,但是要设一个变量判断,是否符合条件。

#define F_CPU sysclk_get_main_hz()

#include

uint32_t frequence;

static void my_frq_test_callback(void)

{

if(frequence》100)

{

//如果想看结果的话,可以设置一个断点

asm(“nop”);

PORTA.INT0MASK=~PIN1_bm;

PORTA.INTCTRL=PORT_INT0LVL_OFF_gc;

tc_write_clock_source(&TCC0,TC_CLKSEL_OFF_gc);

/*这里不用tc_disable(&TCC0),好像定时器也关掉了,再次使用时,必须使能定时器,tc_enable(&TCC0) ,然后再用tc_write_clock_source(&TCC0, TC_CLKSEL_DIV1_gc);启动定时器就行了*/

frequence=0;

}

}

int main(void)

{

sysclk_init();

pmic_init();

//这里的IOPORT_PULL_UP加上后,不知道为什么会先产生个中断,也请分析一下

ioport_configure_pin(IOPORT_CREATE_PIN(PORTA,1),IOPORT_DIR_INPUT|IOPORT_BOTHEDGES|IOPORT_PULL_UP);

//这里的定义不知道能否加到上面的定义中,请给点建议

PORTA.INT0MASK=PIN1_bm;

PORTA.INTCTRL=PORT_INT0LVL_MED_gc;

tc_enable(&TCC0);

tc_set_wgm(&TCC0, TC_WG_NORMAL);

tc_write_period(&TCC0,40000);

tc_set_overflow_interrupt_callback(&TCC0, my_frq_test_callback);

tc_set_overflow_interrupt_level(&TCC0, TC_INT_LVL_LO);

cpu_irq_enable();

do

{}while(1);

}

ISR(PORTA_INT0_vect)

{

if(frequence==0)

{

tc_write_clock_source(&TCC0, TC_CLKSEL_DIV1_gc);

}

else

{

frequence++;

}

}

第二种方法:

用2个定时器,因为定时器的period的值是uint16_t的,如果超限,会引起程序工作不正常,所以用2个定时器解决一下,第二个定时器一第一个定时器的溢出为时钟信号,没有用到回调函数,简单代码如下:#define F_CPU sysclk_get_main_hz()

#include

uint32_t frq;

int main (void)

{

/* Insert system clock initialization code here (sysclk_init())。 */

board_init();

pmic_init();

sysclk_init();

//定义管脚中断

PORTA.DIRCLR=PIN1_bm;

PORTA.PIN1CTRL=PORT_ISC_BOTHEDGES_gc;//|PORT_OPC_PULLUP_gc 此处还是不知道用不用上拉

PORTA.INT0MASK=PIN1_bm;

PORTA.INTCTRL=PORT_INT0LVL_MED_gc;

//设置及使能事件

sysclk_enable_module(SYSCLK_PORT_GEN, SYSCLK_EVSYS);

EVSYS.CH0MUX = EVSYS_CHMUX_TCC0_OVF_gc;

//TCC0为第一个定时器,它的溢出提供给TCD0做为事件时钟

tc_enable(&TCC0);

tc_enable(&TCD0);

tc_set_wgm(&TCD0,TC_WG_NORMAL);

tc_set_wgm(&TCC0,TC_WG_NORMAL);

//因为系统时钟用的是内部2M的时钟,除以50后,一个是好算事件,一个是最接近时钟溢出的period,period不能超过65535,能有别的好方法 //也希望能指点一下

tc_write_period(&TCC0,sysclk_get_main_hz()/50);

tc_write_period(&TCD0,1000);

tc_set_overflow_interrupt_level(&TCC0,TC_INT_LVL_LO);

tc_enable_delay(&TCD1);

tc_write_clock_source(&TCD0,TC_CLKSEL_EVCH0_gc) ;

cpu_irq_enable();

do

{

} while (tc_is_overflow(&TCD0)==0);

frq/=4;

//可以在这里设置一个断点看结果,应该在后面对frq置0,方便后面的程序调用,可是如果后面我把frq置0,此时就看到的值也为0,也希望给点 //建议

asm(“nop”);

/* Insert application code here, after the board has been initialized. */

do

{

} while (1);

}

ISR(PORTA_INT0_vect)

{

asm(“nop”);

if(frq==0)

{

tc_write_clock_source(&TCC0,TC_CLKSEL_DIV1_gc);

}

frq++;

}

以上就是2种测量方法的代码,第二个方法比第一个要快。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 正弦波
    +关注

    关注

    11

    文章

    649

    浏览量

    55681
收藏 人收藏

    评论

    相关推荐

    stm32 怎样测量正弦波频率

    stm32 怎样测量正弦波频率?
    发表于 08-08 10:46

    如何用FPGA测量数字正弦波频率

    如何用FPGA测量数字正弦波频率
    发表于 01-11 22:27

    利用stm32测量正弦波相位差

    利用stm32测量正弦波相位差,有三主要思路:路直接捕获信号直接得到时间差:即将正弦波
    发表于 08-17 06:58

    基于滑模控制的正弦波逆变器

    基于滑模控制的正弦波逆变器 摘要:提出了一新的基于滑模控制的正弦波逆变器。该逆
    发表于 07-15 09:31 1294次阅读
    一<b class='flag-5'>种</b>基于滑模控制的<b class='flag-5'>正弦波</b>逆变器

    正弦波振荡器,正弦波振荡器是什么意思

    正弦波振荡器,正弦波振荡器是什么意思 正弦波振荡器:一不需外加信号作用,能够输出不同频率正弦
    发表于 03-22 14:09 4769次阅读

    正弦波是什么,正弦波简介

    正弦波是什么,正弦波简介 正弦波是指将频率成分最为单一的一信号,因这种
    发表于 04-15 17:35 2.5w次阅读

    频率和振幅稳定的正弦波输出电路

    频率和振幅稳定的正弦波输出电路 电路的功能 要求振荡频率和输出
    发表于 05-15 12:03 2761次阅读
    <b class='flag-5'>频率</b>和振幅稳定的<b class='flag-5'>正弦波</b>输出电路

    正弦波逆变器介绍_正弦波逆变器工作原理

    本文首先介绍了正弦波逆变器的使用及产品性能,其次介绍了正弦波逆变器结构与工作原理,最后介绍了正弦波逆变器安装方法
    发表于 05-29 16:23 5.1w次阅读
    <b class='flag-5'>正弦波</b>逆变器介绍_<b class='flag-5'>正弦波</b>逆变器工作原理

    正弦波发生电路原理

    首先介绍了产生正弦波的条件,其次介绍了正弦波发生电路组成,最后阐述了正弦波发生电路及工作原理。正弦波发生电路能产生正弦波输出,它是在放大电路
    的头像 发表于 09-13 17:54 3.9w次阅读

    正弦波逆变器的判定方法_如何将正弦波变成方波

    可以利用示波器观察逆变器电压的图像是正弦波还是方波。这是最直接的方法。还可以根据特点来判断:正弦波逆变器输出的是同我们日常使用的电网一样甚至更好的正弦波交流电,因为它不存在电网中的电磁
    发表于 12-08 15:18 1.6w次阅读
    <b class='flag-5'>正弦波</b>逆变器的判定<b class='flag-5'>方法</b>_如何将<b class='flag-5'>正弦波</b>变成方波

    有源晶振的波形是正弦波吗?怎么测量

    KOAN晶振中的输出波形普遍分为方波Square Wave和正弦波Sine Wave类。其中方波有非差分和差分输出的选择;正弦波有准正弦波和削峰
    的头像 发表于 04-17 16:20 2791次阅读

    正弦波逆变器和修正弦波逆变器的区别

    正弦波逆变器和修正弦波逆变器的区别 纯正弦波逆变器和修正正弦波逆变器是两种常见的逆变器类型,它们在输出电流波形和电气性能方面存在差异。下面
    的头像 发表于 01-23 14:58 8247次阅读

    正弦波和方波晶振能否互相替代?

    正弦波和方波晶振能否互相替代? 正弦波和方波晶振是两种不同的波形形态,在某些情况下可以互相替代,但也存在一些区别和限制。下面是对正弦波和方波晶振进行详细的比较和分析,以帮助你理解它们之
    的头像 发表于 01-31 09:11 1367次阅读

    正弦波逆变器和修正逆变器的区别

    正弦波逆变器和修正逆变器的区别  正弦波逆变器和修正逆变器是两种常见的逆变器类型,它们在工作原理、性能特点以及应用领域上存在一些区别。
    的头像 发表于 02-01 10:02 6350次阅读

    如何选择适合测量正弦波的示波器探头?

    的特点。正弦波是一连续而光滑的波形,可以用幅值、频率和相位来描述。幅值表示波峰和波谷的差值,频率表示单位时间内波形重复的次数,相位表示波形在时间轴上的位置。 在
    的头像 发表于 02-22 13:48 772次阅读
    如何选择适合<b class='flag-5'>测量</b><b class='flag-5'>正弦波</b>的示波器探头?