0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

兩種測量正弦波的頻率的方法分享

電子工程師 ? 作者:工程師陳翠 ? 2018-06-18 15:00 ? 次閱讀

最近一直嘗試各種方法測量一個正弦波的頻率,可是都不太理想,老差幾個hz,尤其中頻,現(xiàn)在先將自己的方法供大家研討。

第一種方法:

比較笨的方法,使用了回調(diào)函數(shù),但是要設(shè)一個變量判斷,是否符合條件。

#define F_CPU sysclk_get_main_hz()

#include

uint32_t frequence;

static void my_frq_test_callback(void)

{

if(frequence》100)

{

//如果想看結(jié)果的話,可以設(shè)置一個斷點(diǎn)

asm(“nop”);

PORTA.INT0MASK=~PIN1_bm;

PORTA.INTCTRL=PORT_INT0LVL_OFF_gc;

tc_write_clock_source(&TCC0,TC_CLKSEL_OFF_gc);

/*這里不用tc_disable(&TCC0),好像定時器也關(guān)掉了,再次使用時,必須使能定時器,tc_enable(&TCC0) ,然后再用tc_write_clock_source(&TCC0, TC_CLKSEL_DIV1_gc);啟動定時器就行了*/

frequence=0;

}

}

int main(void)

{

sysclk_init();

pmic_init();

//這里的IOPORT_PULL_UP加上后,不知道為什么會先產(chǎn)生個中斷,也請分析一下

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

//這里的定義不知道能否加到上面的定義中,請給點(diǎn)建議

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個定時器解決一下,第二個定時器一第一個定時器的溢出為時鐘信號,沒有用到回調(diào)函數(shù),簡單代碼如下:#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;

//設(shè)置及使能事件

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);

//因為系統(tǒng)時鐘用的是內(nèi)部2M的時鐘,除以50后,一個是好算事件,一個是最接近時鐘溢出的period,period不能超過65535,能有別的好方法 //也希望能指點(diǎn)一下

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;

//可以在這里設(shè)置一個斷點(diǎn)看結(jié)果,應(yīng)該在后面對frq置0,方便后面的程序調(diào)用,可是如果后面我把frq置0,此時就看到的值也為0,也希望給點(diǎn) //建議

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種測量方法的代碼,第二個方法比第一個要快。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 正弦波
    +關(guān)注

    關(guān)注

    11

    文章

    619

    瀏覽量

    54937
收藏 人收藏

    評論

    相關(guān)推薦

    stm32 怎樣測量正弦波頻率

    stm32 怎樣測量正弦波頻率?
    發(fā)表于 08-08 10:46

    如何用FPGA測量數(shù)字正弦波頻率?

    如何用FPGA測量數(shù)字正弦波頻率
    發(fā)表于 01-11 22:27

    利用stm32測量正弦波相位差

    利用stm32測量正弦波相位差,有三主要思路:路直接捕獲信號直接得到時間差:即將正弦波
    發(fā)表于 08-17 06:58

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

    基于滑??刂频?b class='flag-5'>正弦波逆變器 摘要:提出了一新的基于滑模控制的正弦波逆變器。該逆
    發(fā)表于 07-15 09:31 ?1244次閱讀
    一<b class='flag-5'>種</b>基于滑模控制的<b class='flag-5'>正弦波</b>逆變器

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

    正弦波振蕩器,正弦波振蕩器是什么意思 正弦波振蕩器:一不需外加信號作用,能夠輸出不同頻率正弦
    發(fā)表于 03-22 14:09 ?4601次閱讀

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

    正弦波是什么,正弦波簡介 正弦波是指將頻率成分最為單一的一信號,因這種
    發(fā)表于 04-15 17:35 ?2.4w次閱讀

    頻率和振幅穩(wěn)定的正弦波輸出電路

    頻率和振幅穩(wěn)定的正弦波輸出電路 電路的功能 要求振蕩頻率和輸出
    發(fā)表于 05-15 12:03 ?2661次閱讀
    <b class='flag-5'>頻率</b>和振幅穩(wěn)定的<b class='flag-5'>正弦波</b>輸出電路

    正弦波逆變器介紹_正弦波逆變器工作原理

    本文首先介紹了正弦波逆變器的使用及產(chǎn)品性能,其次介紹了正弦波逆變器結(jié)構(gòu)與工作原理,最后介紹了正弦波逆變器安裝方法。
    發(fā)表于 05-29 16:23 ?5w次閱讀
    <b class='flag-5'>正弦波</b>逆變器介紹_<b class='flag-5'>正弦波</b>逆變器工作原理

    正弦波發(fā)生電路原理

    首先介紹了產(chǎn)生正弦波的條件,其次介紹了正弦波發(fā)生電路組成,最后闡述了正弦波發(fā)生電路及工作原理。正弦波發(fā)生電路能產(chǎn)生正弦波輸出,它是在放大電路
    的頭像 發(fā)表于 09-13 17:54 ?3.8w次閱讀

    正弦波逆變器的判定方法_如何將正弦波變成方波

    可以利用示波器觀察逆變器電壓的圖像是正弦波還是方波。這是最直接的方法。還可以根據(jù)特點(diǎn)來判斷:正弦波逆變器輸出的是同我們?nèi)粘J褂玫碾娋W(wǎng)一樣甚至更好的正弦波交流電,因為它不存在電網(wǎng)中的電磁
    發(fā)表于 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類。其中方波有非差分和差分輸出的選擇;正弦波有準(zhǔn)正弦波和削峰
    的頭像 發(fā)表于 04-17 16:20 ?2302次閱讀

    正弦波逆變器和修正弦波逆變器的區(qū)別

    正弦波逆變器和修正弦波逆變器的區(qū)別 純正弦波逆變器和修正正弦波逆變器是兩種常見的逆變器類型,它們在輸出電流波形和電氣性能方面存在差異。下面
    的頭像 發(fā)表于 01-23 14:58 ?5373次閱讀

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

    正弦波和方波晶振能否互相替代? 正弦波和方波晶振是兩種不同的波形形態(tài),在某些情況下可以互相替代,但也存在一些區(qū)別和限制。下面是對正弦波和方波晶振進(jìn)行詳細(xì)的比較和分析,以幫助你理解它們之
    的頭像 發(fā)表于 01-31 09:11 ?848次閱讀

    正弦波逆變器和修正逆變器的區(qū)別

    正弦波逆變器和修正逆變器的區(qū)別? 正弦波逆變器和修正逆變器是兩種常見的逆變器類型,它們在工作原理、性能特點(diǎn)以及應(yīng)用領(lǐng)域上存在一些區(qū)別。
    的頭像 發(fā)表于 02-01 10:02 ?4397次閱讀

    如何選擇適合測量正弦波的示波器探頭?

    的特點(diǎn)。正弦波是一連續(xù)而光滑的波形,可以用幅值、頻率和相位來描述。幅值表示波峰和波谷的差值,頻率表示單位時間內(nèi)波形重復(fù)的次數(shù),相位表示波形在時間軸上的位置。 在
    的頭像 發(fā)表于 02-22 13:48 ?515次閱讀
    如何選擇適合<b class='flag-5'>測量</b><b class='flag-5'>正弦波</b>的示波器探頭?