Adafruit Si5351時(shí)鐘發(fā)生器開發(fā)板:設(shè)計(jì)與使用指南
在電子設(shè)計(jì)領(lǐng)域,時(shí)鐘發(fā)生器是一個(gè)關(guān)鍵組件,它為各種電路提供穩(wěn)定的時(shí)鐘信號。今天,我們來深入了解一下Adafruit Si5351時(shí)鐘發(fā)生器開發(fā)板,看看它能為我們的設(shè)計(jì)帶來哪些便利。
文件下載:2045.pdf
一、概述
Adafruit Si5351時(shí)鐘發(fā)生器開發(fā)板是一款非常實(shí)用的工具,它讓我們告別了四處尋找晶體的煩惱。這款芯片內(nèi)置一個(gè)精確的25MHz晶體參考源,以及內(nèi)部鎖相環(huán)(PLL)和分頻器,能夠生成從小于8KHz到150+MHz的任意頻率。
它是一款基于I2C控制的時(shí)鐘發(fā)生器,通過I2C指令利用板載精確時(shí)鐘驅(qū)動多個(gè)PLL和時(shí)鐘分頻器。通過設(shè)置PLL和分頻器,我們可以創(chuàng)建精確且任意的頻率。該開發(fā)板有三個(gè)獨(dú)立的輸出,每個(gè)輸出都可以有不同的頻率。輸出信號為3Vpp,可以通過適合面包板的引腳頭輸出,也可以通過可選的SMA連接器用于射頻工作。
開發(fā)板上集成了3.3V LDO穩(wěn)壓器,可使用3 - 5VDC電源供電。同時(shí),I2C線路上還配備了電平轉(zhuǎn)換電路,確保該芯片可以安全地與3V或5V邏輯電路一起使用。此外,Adafruit還提供了詳細(xì)的教程和庫,方便我們快速上手。
二、引腳說明
(一)電源引腳
開發(fā)板上的時(shí)鐘發(fā)生器需要3V電源。考慮到很多用戶使用像Arduino這樣的5V微控制器,開發(fā)板上集成了一個(gè)3.3V穩(wěn)壓器,它具有超低壓降特性,因此可以使用3.3V - 5V電源供電。
- Vin:電源引腳。由于芯片使用3VDC,板上的穩(wěn)壓器會將3 - 5VDC安全地轉(zhuǎn)換為所需電壓。為開發(fā)板供電時(shí),應(yīng)使用與微控制器邏輯電平相同的電源,例如對于像Arduino這樣的5V微控制器,使用5V電源。
- GND:電源和邏輯的公共接地引腳。
(二)I2C引腳
- SCL:I2C時(shí)鐘引腳,連接到微控制器的I2C時(shí)鐘線。該引腳進(jìn)行了電平轉(zhuǎn)換,可使用3 - 5V邏輯,并且有一個(gè)10K上拉電阻。
- SDA:I2C數(shù)據(jù)引腳,連接到微控制器的I2C數(shù)據(jù)線。同樣進(jìn)行了電平轉(zhuǎn)換,可使用3 - 5V邏輯,也有一個(gè)10K上拉電阻。
(三)時(shí)鐘輸出引腳
- 0、1和2:這是三個(gè)獨(dú)立的時(shí)鐘輸出引腳,輸出0 - 3V的方波信號。這些引腳也引出到PCB另一側(cè)的SMA邊緣發(fā)射連接器上。如果需要將信號傳輸?shù)缴漕l電纜,可以購買并焊接一些邊緣發(fā)射SMA連接器。
三、組裝步驟
如果你使用的是面包板版本的傳感器,需要焊接一些引腳頭,以便在面包板上使用。
- 準(zhǔn)備引腳頭:如有必要,將引腳頭裁剪到合適的長度。將引腳頭插入面包板,長引腳朝下,這樣焊接會更容易。
- 安裝開發(fā)板:將開發(fā)板放在引腳頭上,使短引腳穿過開發(fā)板的焊盤。
- 焊接:確保焊接所有引腳,以實(shí)現(xiàn)可靠的電氣連接。先焊接較長的電源/數(shù)據(jù)線引腳。如果你需要焊接技巧方面的幫助,可以查看Adafruit的《優(yōu)秀焊接指南》。焊接完成后,檢查焊點(diǎn),然后繼續(xù)下一步。
四、Arduino代碼使用
(一)接線
可以輕松地將開發(fā)板連接到任何微控制器,這里以Arduino為例。對于其他類型的微控制器,只要確保其具有I2C功能,然后移植代碼即可。
- Vin:連接到3 - 5V電源,使用與微控制器邏輯電平相同的電壓。對于大多數(shù)Arduino,使用5V。
- GND:連接到公共電源/數(shù)據(jù)接地。
- SCL:連接到Arduino的I2C時(shí)鐘SCL引腳。在基于UNO和'328的Arduino上,該引腳也稱為A5;在Mega上,稱為數(shù)字21;在Leonardo/Micro上,稱為數(shù)字3。
- SDA:連接到Arduino的I2C數(shù)據(jù)SDA引腳。在基于UNO和'328的Arduino上,該引腳也稱為A4;在Mega上,稱為數(shù)字20;在Leonardo/Micro上,稱為數(shù)字2。
(二)下載Adafruit_Si5351庫
要開始讀取傳感器數(shù)據(jù),需要從Arduino庫管理器中下載Adafruit Si5351庫。打開Arduino庫管理器,搜索Adafruit Si5351庫并安裝。如果你需要關(guān)于Arduino庫安裝的詳細(xì)教程,可以訪問Adafruit的相關(guān)指南。
(三)加載示例草圖
打開File -> Examples -> Adafruit_Si5351 -> Si5351,將其上傳到連接了傳感器的Arduino。然后以9600波特率打開串口監(jiān)視器,檢查輸出。你可以使用示波器探測0、1和2輸出引腳,但根據(jù)示波器的型號,可能無法驗(yàn)證112.5MHz的輸出頻率。
(四)庫參考
Adafruit提供的庫簡單易用??梢允褂靡韵麓a創(chuàng)建Adafruit_Si5351對象:
Adafruit_SI5351 clockgen = Adafruit_SI5351();
I2C引腳在硬件上是固定的。初始化芯片時(shí),調(diào)用clockgen.begin(),該函數(shù)會檢查是否能找到芯片,并返回true或false。建議使用一個(gè)語句來檢查芯片是否被檢測到:
if (clockgen.begin() != ERROR_NONE) {
Serial.print("Ooops, no Si5351 detected ... Check your wiring or I2C ADDR!");
while(1);
}
(五)設(shè)置PLL
芯片使用兩個(gè)部分來生成時(shí)鐘輸出。首先,將25MHz參考時(shí)鐘乘以某個(gè)值(設(shè)置PLL),然后將新時(shí)鐘除以另一個(gè)值(設(shè)置時(shí)鐘分頻器)。通過調(diào)整乘數(shù)和分頻器,可以生成幾乎任何時(shí)鐘頻率。有兩個(gè)PLL乘數(shù)(A和B),如果需要三個(gè)輸出,其中兩個(gè)輸出必須共享一個(gè)PLL。
- 整數(shù)模式設(shè)置PLL:最簡潔的方法是進(jìn)行直接的整數(shù)乘法:
clockgen.setupPLLInt(SI5351_PLL_A or SI5351_PLL_B, m);這將PLL_A或PLL_B設(shè)置為25MHz * m,m(整數(shù)乘數(shù))的范圍為15到90。
- 分?jǐn)?shù)模式設(shè)置PLL:這種模式允許使用分?jǐn)?shù)乘數(shù)進(jìn)行更靈活的PLL設(shè)置,但輸出可能會有輕微的抖動。
clockgen.setupPLLInt(SI5351_PLL_A or SI5351_PLL_B, m, n, d);這將PLL_A或PLL_B設(shè)置為25MHz * (m + n/d),其中m的范圍為15到90,n的范圍為0到1,048,575,d的范圍為1到1,048,575。
(六)設(shè)置時(shí)鐘分頻器
設(shè)置好PLL后,可以將高頻時(shí)鐘分頻以獲得所需的輸出頻率。每個(gè)輸出都有自己的分頻器??梢允褂酶啙嵉恼麛?shù)分頻器:
clockgen.setupMultisynthInt(output, SI5351_PLL_x, SI5351_MULTISYNTH_DIV_x);
其中,output使用0、1或2,PLL輸入使用SI5351_PLL_A或SI5351_PLL_B,分頻器可以選擇SI5351_MULTISYNTH_DIV_4、SI5351_MULTISYNTH_DIV_6或SI5351_MULTISYNTH_DIV_8。整數(shù)輸出將提供最干凈的時(shí)鐘。如果需要更多靈活性,可以使用分?jǐn)?shù)發(fā)生器/分頻器:
clockgen.setupMultisynth(output, SI5351_PLL_x, div, n, d);
其中,output使用0、1或2,PLL輸入使用SI5351_PLL_A或SI5351_PLL_B,最終頻率等于PLL / (div + n/d),div的范圍為4到900,n的范圍為0到1,048,575,d的范圍為1到1,048,575。
(七)額外的R分頻器
如果需要進(jìn)一步分頻以獲得低于100KHz的頻率,可以使用額外的R分頻器,它會將輸出再除以一個(gè)固定的數(shù)字:
clockgen.setupRdiv(output, SI5351_R_DIV_x);
output是時(shí)鐘輸出編號,R分頻器可以是SI5351_R_DIV_1、SI5351_R_DIV_2、SI5351_R_DIV_4、SI5351_R_DIV_8、SI5351_R_DIV_16、SI5351_R_DIV_32、SI5351_R_DIV_64或SI5351_R_DIV_128。
(八)軟件輔助
確定PLL乘數(shù)和分頻器的最佳選擇可能比較麻煩。SiLabs有一個(gè)名為ClockBuilder的桌面應(yīng)用程序(https://adafru.it/dPj),可以幫助我們計(jì)算PLL分頻器/乘數(shù)。該應(yīng)用程序僅適用于Windows,但我們只需要使用它進(jìn)行一次計(jì)算。安裝并運(yùn)行該應(yīng)用程序,選擇具有3個(gè)輸出的Si5351A,不連接到EVB,啟用所需的輸出,并設(shè)置頻率為浮點(diǎn)數(shù)或分?jǐn)?shù),將晶體設(shè)置為25MHz(默認(rèn)值為27MHz),然后點(diǎn)擊“Create Frequency Plan”查看PLL和分頻器設(shè)置。需要注意的是,早期版本的芯片只接受900或更小的分頻器,Adafruit的庫也不允許選擇大于900的整數(shù)分頻。如果從計(jì)算器中得到較高的值,可能需要進(jìn)行調(diào)整。
五、CircuitPython代碼使用
(一)接線
1. CircuitPython微控制器接線
將Si5351連接到電路板,使用I2C連接,具體接線方式與Arduino相同。例如,將Feather M0與傳感器通過I2C連接時(shí):
- Board 3V:連接到傳感器的VIN。
- Board GND:連接到傳感器的GND。
- Board SCL:連接到傳感器的SCL。
- Board SDA:連接到傳感器的SDA。
2. Python計(jì)算機(jī)接線
以Raspberry Pi為例,其I2C接線方式如下:
- Pi 3V3:連接到傳感器的VIN。
- Pi GND:連接到傳感器的GND。
- Pi SCL:連接到傳感器的SCL。
- Pi SDA:連接到傳感器的SDA。對于其他平臺,可以訪問CircuitPython on Linux指南,查看是否支持。
(二)安裝庫
1. CircuitPython安裝SI5351庫
首先,確保運(yùn)行的是適用于電路板的最新版本的Adafruit CircuitPython。然后,從Adafruit的CircuitPython庫捆綁包中安裝必要的庫。對于非Express板,需要手動從捆綁包中安裝adafruit_si5351.mpy和adafruit_bus_device。在繼續(xù)之前,確保電路板的lib文件夾或根文件系統(tǒng)中復(fù)制了這些文件和文件夾。最后,連接到電路板的串行REPL,進(jìn)入CircuitPython提示符。
2. Python安裝SI5351庫
需要安裝Adafruit_Blinka庫,該庫為Python提供CircuitPython支持。這可能還需要在平臺上啟用I2C,并驗(yàn)證運(yùn)行的是Python 3。由于每個(gè)平臺有所不同,且Linux經(jīng)常更新,請?jiān)L問CircuitPython on Linux指南,使計(jì)算機(jī)做好準(zhǔn)備。完成后,從命令行運(yùn)行以下命令:
sudo pip3 install adafruit-circuitpython-si5351
如果默認(rèn)Python是版本3,可能需要運(yùn)行pip。請確保不要在Python 2.x上使用CircuitPython,因?yàn)樗恢С帧?/p>
(三)使用示例
以下是一個(gè)簡單的示例,演示如何使用傳感器并控制時(shí)鐘輸出:
import board
import busio
import adafruit_si5351
i2c = busio.I2C(board.SCL, board.SDA)
si5351 = adafruit_si5351.SI5351(i2c)
# 配置PLL
si5351.pll_a.configure_integer(20) # 設(shè)置PLL A為500 MHz
print('PLL A: {0} MHz'.format(si5351.pll_a.frequency/1000000))
si5351.pll_b.configure_fractional(20, 1, 2) # 設(shè)置PLL B為512.5 MHz
print('PLL B: {0} MHz'.format(si5351.pll_b.frequency/1000000))
# 配置時(shí)鐘輸出
si5351.clock_0.configure_integer(si5351.pll_a, 4) # 設(shè)置時(shí)鐘0為125 MHz
print('Clock 0: {0:0.3f} MHz'.format(si5351.clock_0.frequency/1000000))
si5351.clock_1.configure_fractional(si5351.pll_b, 4, 1, 2) # 設(shè)置時(shí)鐘1為113.889 MHz
print('Clock 1: {0:0.3f} MHz'.format(si5351.clock_1.frequency/1000000))
# 啟用輸出
si5351.outputs_enabled = True
(四)完整示例代碼
# SPDX-FileCopyrightText: 2021 ladyada for Adafruit Industries
# SPDX-License-Identifier: MIT
import board
import busio
import adafruit_si5351
# 初始化I2C總線
i2c = busio.I2C(board.SCL, board.SDA)
si5351 = adafruit_si5351.SI5351(i2c)
# 配置PLLs
si5351.pll_a.configure_integer(36) # 設(shè)置PLL A為900 MHz
print("PLL A frequency: {0}mhz".format(si5351.pll_a.frequency / 1000000))
si5351.pll_b.configure_fractional(24, 2, 3) # 設(shè)置PLL B為616.6667 MHz
print("PLL B frequency: {0}mhz".format(si5351.pll_b.frequency / 1000000))
# 配置時(shí)鐘輸出
si5351.clock_0.configure_integer(si5351.pll_a, 8) # 設(shè)置時(shí)鐘0為112.5 MHz
print("Clock 0: {0}mhz".format(si5351.clock_0.frequency / 1000000))
si5351.clock_1.configure_fractional(si5351.pll_b, 45, 1, 2) # 設(shè)置時(shí)鐘1為13.5531 MHz
print("Clock 1: {0}mhz".format(si5351.clock_1.frequency / 1000000))
si5351.clock_2.configure_integer(si5351.pll_b, 900) # 設(shè)置時(shí)鐘2的初步分頻
si5351.clock_2.r_divider = adafruit_si5351.R_DIV_64 # 設(shè)置時(shí)鐘2的R分頻器
print("Clock 2: {0}khz".format(si5351.clock_2.frequency / 1000))
# 啟用輸出
si5351.outputs_enabled = True
六、下載資源
- 軟件:SiLabs的ClockBuilder桌面應(yīng)用程序(https://adafru.it/dPj),可幫助計(jì)算PLL分頻器/乘數(shù)。
- 數(shù)據(jù)手冊:Si5351數(shù)據(jù)手冊(https://adafru.it/dPk)。
- Fritzing對象:Adafruit Fritzing庫中的Fritzing對象(https://adafru.it/aP3)。
- EagleCAD PCB文件:GitHub上的EagleCAD PCB文件(https://adafru.it/pBD)。
通過以上介紹,相信大家對Adafruit Si5351時(shí)鐘發(fā)生器開發(fā)板有了更深入的了解。在實(shí)際應(yīng)用中,你是否遇到過時(shí)鐘信號不穩(wěn)定的問題?你會嘗試使用這款開發(fā)板來解決這些問題嗎?歡迎在評論區(qū)分享你的經(jīng)驗(yàn)和想法。
-
時(shí)鐘發(fā)生器
+關(guān)注
關(guān)注
1文章
359瀏覽量
70177 -
開發(fā)板
+關(guān)注
關(guān)注
26文章
6446瀏覽量
121253
發(fā)布評論請先 登錄
Adafruit 1-Wire GPIO Breakout - DS2413 開發(fā)板使用指南
深入解析ADF4360 - 9時(shí)鐘發(fā)生器PLL:設(shè)計(jì)與應(yīng)用的全面指南
AD9574以太網(wǎng)時(shí)鐘發(fā)生器:設(shè)計(jì)指南與應(yīng)用解析
AD9524:高性能時(shí)鐘發(fā)生器的深度剖析與應(yīng)用指南
AD9522-1:高性能時(shí)鐘發(fā)生器的深度剖析與應(yīng)用指南
AD9522-3:高性能時(shí)鐘發(fā)生器的技術(shù)剖析與應(yīng)用指南
AD9520-3:高性能時(shí)鐘發(fā)生器的深度解析與應(yīng)用指南
AD9520-4:高性能時(shí)鐘發(fā)生器的深度解析與應(yīng)用指南
AD9518-1:高性能時(shí)鐘發(fā)生器的深度剖析與應(yīng)用指南
AD9520-0:高性能時(shí)鐘發(fā)生器的深度解析與應(yīng)用指南
LMK03806:超低抖動時(shí)鐘發(fā)生器的技術(shù)解析與應(yīng)用指南
I2C的時(shí)鐘發(fā)生器
串行時(shí)鐘發(fā)生器的計(jì)算公式
探索時(shí)鐘發(fā)生器的競爭優(yōu)勢
基于STM32F103驅(qū)動SI5351 3通道時(shí)鐘信號發(fā)生器輸出不同頻率信號
Adafruit Si5351時(shí)鐘發(fā)生器開發(fā)板:設(shè)計(jì)與使用指南
評論