日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

EFR32MG21(Series 2)定时器作为频率信号发生器

發布時間:2023/12/15 综合教程 47 生活家
生活随笔 收集整理的這篇文章主要介紹了 EFR32MG21(Series 2)定时器作为频率信号发生器 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

EFR32MG21(Series 2)定時器作為頻率信號發生器

關鍵詞:

ZigBee, EmberZnet, TIMER, Frequency, 頻率,定時器,MG21, EFR32, ONE-SHOT, PWM

在我司項目研發中,偶然發現EFR32MG21(本文稱為MG21)這款ZigBee芯片的性能和配置都特別好,而我們項目剛好用到定時器來進行電機控制,燈光調色等,于是認真的去了解這個芯片定時器的功能,發現有30個多工作模式可以用,經過仔細了解,對于我們會使用到的工作方式作一個說明。也歡迎同行進行開發交流。由于這個定時器工作方式實在太多,我們僅僅會將用到的功能單獨成文。這里先介紹的是定時器作為信號發生器。

MG21的定時器功能特別強大和復雜,也可以用來給其他設備提供時鐘,為了降低設備對時鐘晶振和芯片的需要,也可以直接使用它給其他設備提供時鐘。一個稍為復雜的設備可能會用到多個時鐘,如果對時鐘的要求不是十分嚴格,則可參考本法。

頻率范圍

首先要說明的是時鐘的頻率是有限制的,而且不會十分的精準,我們在使用zigbee協議之后,MG21的高頻時鐘也就是38.4MHZ的晶振,本文的時鐘信號發生器也會是在這個時鐘基礎上進行分頻所得。

MG21定時器頻率計算公式為:

[ ftimer = fclk / (2^(perscale+1) x (top + 1)) ]

因此在不改變分頻數prescale的條件下,可以配置的頻率為 292.96Hz~19.2Mhz。每個定時器還可以通過對時鐘進行最高1024次分頻,從面得到頻率0.2861Hz的信號,這相當于一個周期的時間為3.495秒的信號。這里是用于時鐘信號,因此可以認為理論都是50%占空比的方波,但實際上會略有偏差,實測也有可能會是52%。

測試工具和方法

經過理論上的計算之后,我們可以對開發板進行編碼測試,測試時可以使用示波器,也可以使用夢源制作的USB邏輯分析儀(型號DSLogic Plus)。用它可以進行測試信號,然后在電腦軟件上可以直接顯示出信號的數字波型。 它的最大采樣速率為400MHz,所以也滿足了這次的測量的要求。

為了能夠測試結果是否可行,我還們還要讓EFR32MG21輸出信號,使用一個開發板,在任何一個Zigbee工程當中,增加代碼讓他輸出信號到指定的引腳,(注意避開協議棧默認會占用的引腳),將邏輯分析儀的表筆接到開發板對應引腳上,即可開始測量。開發板可以選擇官方的SLWSTK6006A或者我們公司新一信息的NEWBIT-ZDK-2。以官方的為例,接線如下:

圖2 邏輯分析與ZigBee開發板的連接方法

測量的結果

下載程序并測量信號,所目標設置為1M時,得到的圖3的波形。結果顯示是1.01MHz, 計算其誤差在1%。對寄存器進行修改,經過測試大致得到如下的規律:

表1

TOP值

0

1

10

100

65535

輸出頻率

19.05MHz

9.52Mhz

1.75Mhz

190.11KHz

292.93Hz

上表反映的測量的讀數,與理論值并沒有完全相符,但差別非常小,對于時鐘精準度要求不那么高的話,可以直接使用。

圖3 定時器輸出設置為1MHz的輸出波形

測試的代碼

定時器的代碼不多,而且也不需要Simplicity studio v4進行配置,為方便大家的測試和使用,我們將所用的代碼開源于https://gitee.com/newbitcode/efr32mg_peri。部分代碼如下:

// timer configuration

void nb_timer_init(void)

{

uint32_t timerFreq = 0;

// Initialize the timer

TIMER_Init_TypeDef timerInit = TIMER_INIT_DEFAULT;

// Configure TIMER0 Compare/Capture for output compare

TIMER_InitCC_TypeDef timerCCInit = TIMER_INITCC_DEFAULT;

timerInit.prescale = timerPrescale1;

timerInit.enable = false;

timerCCInit.mode = timerCCModeCompare;

timerCCInit.cmoa = timerOutputActionToggle;

// configure, but do not start timer

TIMER_Init(TIMER0, &timerInit);

// Route Timer0 CC0 output to PC3

GPIO->TIMERROUTE[0].ROUTEEN = GPIO_TIMER_ROUTEEN_CC0PEN;

GPIO->TIMERROUTE[0].CC0ROUTE = (TIMER0_GPIO_PORT << _GPIO_TIMER_CC0ROUTE_PORT_SHIFT)

| (TIMER0_GPIO_PIN << _GPIO_TIMER_CC0ROUTE_PIN_SHIFT);

TIMER_InitCC(TIMER0, 0, &timerCCInit);

// Set Top value

// Note each overflow event constitutes 1/2 the signal period

timerFreq = CMU_ClockFreqGet(cmuClock_TIMER0)/(timerInit.prescale + 1);

int topValue = timerFreq / (2*OUT_FREQ) - 1;

TIMER_TopSet (TIMER0, topValue);

/* Start the timer */

TIMER_Enable(TIMER0, true);

}

有關Simplicity Studio軟件安裝請進頁面,搭建EFR32 ZigBee開發環境>>

。在開發和測試的過程中,感謝世強元件的工程師給予的支持。

總結

以上是生活随笔為你收集整理的EFR32MG21(Series 2)定时器作为频率信号发生器的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。