Xilinx-ZYNQ7000系列-學習筆記(1):用XADC測外部溫度值
Xilinx-ZYNQ7000系列-學習筆記(1):用XADC測外部溫度值
一、XADC簡介
Zynq器件XADC模組包括2個12位元1 MIPS的模數轉換器和相關的片上感測器,內建溫度感測器和功耗感測器,可實時監測片內結溫、各路電壓資料,並可輸出告警訊號。
XADC模擬輸入包括專用模擬輸入VP/VN和16組複用模擬訊號輸入VAUX(15:0);XADC轉換結果可以透過動態重配介面(DRP)或者JTAG介面輸出;告警訊號可透過ALM(7:0)輸出,並有專用的溫度告警訊號OT。
XADC還包括幾個支援測量晶片上電源電壓和模具溫度的片上感測器。ADC轉換資料儲存在稱為狀態暫存器的專用暫存器中。這些暫存器可以透過FPGA互連訪問,使用一個16位同步讀寫埠,稱為動態重新配置埠(DRP)。ADC轉換資料也可以透過JTAG TAP訪問,可以在配置之前(預配置),也可以在配置之後訪問。對於JTAG TAP,使用者不需要例項化XADC,因為它是一個專用介面,使用現有的FPGA JTAG基礎結構。正如後面所討論的,如果XADC沒有在設計中例項化,則裝置以預定義的模式(稱為預設模式)執行,該模式監視晶片上的溫度和電源電壓。
具體的參考手冊如下:
ug480:7Series_XADC.pdf
xapp795:driving-xadc.pdf
xapp554:xadc-layout-guidelines.pdf
xapp1203:post-proc-ip-zynq-xadc.pdf
xapp1183:zynq-xadc-axi.pdf
xapp1182:zynq_axi_xadc_mon.pdf
xapp1172:zynq_ps_xadc.pdf
pg019:axi_xadc.pdf
pg091:xadc-wiz.pdf
ug953:vivado-7series-libraries.pdf
ug585:Zynq-7000-TRM.pdf
二、XADC的配置方法
本文采用vivado編譯環境對XADC進行配置。
在對XADC進行暫存器配置之前,首先要在vivado中進行硬體電路的搭建,這部分內容可以透過建立block塊完成,具體配置方法請參考
https://blog.csdn.net/taowei1314520/article/details/83656386。本文藉助外部VPVN測量埠,透過搭建惠斯頓電橋進行溫度的測量(具體方法後面會詳細介紹到),所以需要在搭建硬體電路時引出VPVN和配置XDC管腳約束。
2.1 配置暫存器
在配置暫存器之前,首先要對兩種暫存器進行解釋說明。
控制暫存器:用於控制和確定處理器的操作模式以及當前執行任務的特性。
狀態暫存器:用來存放兩類資訊,一類是體現當前指令執行結果的各種狀態資訊,另一類是存放控制資訊。
1.配置控制暫存器
Configuration register 0
透過寫入C_BASEADDR + 0x300(基地址+偏移量)來定位到該暫存器的位置,下圖為該暫存器的bit位對照圖。
CAVG:這個位元位用於禁用計算校驗係數的平均,使能為0,使能為1(平均固定在16個樣本)。
AVG1、AVG0:這些位用於在單通道和序列模式下設定所選通道上的樣本平均量。
MUX:這個位元位為外部多路複用,設定1即啟動外部多路複用功能。(本文所採用的的VP/VN位專用PL端引腳,所以這裡不進行多路複用)。
BU:這個位元位是進行單雙極性的選擇,雙極性為1,單極性為0。本文采用的是模擬差分的輸入方式,因為差分輸入能夠有效地降低干擾,實現資料更加穩定地傳輸。
EC:這個位元位用於為XADC取樣模式,1為event-driven sampling mode,0為continuous sampling mode。
event-driven sampling mode:該工作模式下,取樣瞬間和隨後的轉換過程由一個稱謂轉換開關的觸發訊號啟動,當需要對取樣的時刻進行精確控制時,採用該模式。在該模式下,DCLK必須始終存在。
continuous sampling mode:該工作模式下,ADC在當前轉換週期結束時自動啟動新的轉換,adc持續對選定的模擬輸入進行轉換,模數轉換過程由採集階段和轉換階段兩部分組成。
ACQ:在使用單通道模式時,該位用於將連續取樣模式下的外部模擬輸入的可用時間增加6次ADCCLK週期,如果沒有設定ACQ位,則在收購的最後階段允許使用4個ADCCLKs或150個ns。透過將此位設定為邏輯1,可以增加獲取時間。
CH4~CH0:在單通道模式或外部多路複用模式下工作時,這些位用於選擇ADC輸入通道。
2. 配置控制暫存器
Configuration register 1
透過寫入C_BASEADDR + 0x304(基地址+偏移量)來定位到該暫存器的位置,下圖為該暫存器的bit位對照圖。
SEQ3~SEQ0:這些位元位用來使能通道序列。
Default mode:在這種操作模式下,XADC自動監控晶片上的感測器,並將結果儲存在狀態暫存器中。這兩種adc都是在這種模式下校準的,所有感測器都使用平均16個樣本。XADC在此模式下獨立於任何其他控制暫存器設定操作。
Single Pass Mode:在這種操作模式下,序列操作一次透過序列通道暫存器,然後停止。
Continuous sequence mode:該模式相當於single pass mode的自動版,在一次操作結束後又會自動重新開始。
Simultaneous Sampling Mode:在該模式下,測序器透過8對輔助模擬輸入通道自動進行同步取樣和轉換,這在需要保留兩個訊號之間的相位關係的應用程式中非常有用,大部分用於多路複用情況下。
Auxiliary analog channels 0 to 7 are assigned to ADC A and are nominated as A channels.
Auxiliary analog channels 8 to 15 are assigned to ADC B and are nominated as B channels
Independent ADC Mode:通常用於報警模式和監測模式,在這種模式下,警報輸出使能,並且使用者必須正確地配置報警閾值。與預設的測序模式一樣,平均值固定在16個取樣點。
ALM6~ALM0:這些位用於禁用溫度的單個警報輸出,1為禁用報警輸出。
CAL3~CAL0:這些位使校準係數應用於ADC和片上供應感測器測量,1為使能校準,0位不使能。
OT:這個位用於禁用溫度過高訊號。透過將此位設定為邏輯1來禁用警報。
3. 配置控制暫存器
Configuration register 2
透過寫入C_BASEADDR + 0x308(基地址+偏移量)來定位到該暫存器的位置,下圖為該暫存器的bit位對照圖。
CD7~CD0:這些位用於選擇ADC的DRP時鐘(DCLK)和低頻率ADC時鐘(ADCCLK)之間的分頻比。
DRP:動態配置埠,可直接透過PL部分訪問,也可以透過高階介面單元。
所有XADC計時同步到DRP時鐘(DCLK)。ADCCLK是透過將DCLK在配置暫存器2中分頻得到的。
PD1、PD0:XADC的中斷位。透過設定PD1 = PD0 = 1,可以永久關閉整個XADC塊。
4. 配置序列暫存器Sequence Register 0:首先寫入C_BASEADDR + 0x320(基地址+偏移量)來定位到該暫存器的位置,再透過寫bit位來選擇序列通道,本文采用VPVN序列通道,所以給第12位置1(0000_1000_0000_0000),具體對應表如下。
5. 配置輸出暫存器:透過寫入C_BASEADDR + 0x20C(基地址+偏移量)來定位到該暫存器的位置,在專用模擬輸入通道(Vp/Vn)上A/D轉換的12位MSB驗證結果儲存在此暫存器中。
2.2 結果換算
定義和一些計算所應用到的資料位數為16位(unsigned short),而我們所用到的只有12位,所以需要將資料進行右移4位來保證12位MSB驗證結果能夠完整的儲存到暫存器中。
將ADC的外部模擬輸入通道配置為雙極時,它們可以容納真正的差分和雙極模擬訊號型別。雙極模式下ADC的輸出編碼是雙極模式下的補碼,用來表示VP上輸入訊號相對於VN的符號。設計程式碼轉換髮生在連續整數LSB值,也就是說,一個LSB、兩個LSB、三個LSB等。伏特的LSB大小即1個資料位等於244uV。
2.3 溫度採集 xinyang/
本文采用PT100熱電阻作為外部溫度測量器件,透過搭建惠斯頓電橋,實現溫度的採集。
1、將XADC在PL端的VPVN引腳直接接在電橋上,利用Pt100在不同溫度下電阻值發生變化的原理,實現VP/VN電壓差的改變,根據公式計算得出溫度值,下圖為惠斯頓電橋。
計算公式:
V
=
V
P
0
−
V
N
0
R
p
t
=
(
1
3
2
0
0
+
2
9
0
0
0
V
)
/
(
4
1
2
.
5
−
1
4
5
V
)
2、Pt100 是電阻式溫度感測器,測溫的本質其實是測量感測器的電阻,通常是將電阻的變化轉換成電壓或電流等模擬訊號,再將模擬訊號轉換成數字訊號,再由處理器換算出相應溫度。
透過查詢表或公式計算的方法,將電阻值轉換為對應的溫度值,以下給出“PT100溫度-電壓”對照表和各種型別的接線法。
a.二線制接法:如圖4(a)所示,這種接法不考慮Pt100 電纜的導線電阻,將A/D 取樣端與電流源的正極輸出端接在一起,這種接法由於沒有考慮測溫電纜的電阻,因此只能適用於測溫距離較近的場合。
b.三線制接法:如圖4(b)所示,這種接法增加了用於A/D 取樣的補償線,三線制接法消除了連線導線電阻引起的測量誤差,這種接法適用於中等測溫距離的場合。
c.四線制接法:如圖4©所示,這種接法不僅增加了A/D 取樣補償線,還加了一條A/D對地的補償線,這樣可以近一步的減小測量誤差,可以用於測溫距離較遠的場合。如果只從精度上考慮,採用四線制接法效果最好。
三、下載與除錯
除錯完成後,接下來就是將程式固化到板子中,我大致介紹一下程式固化方法和啟動流程。
3.1 程式的固化方法
一般在除錯程式的過程中FPGA用的是JTAG模式,不需要片外配置晶片,是直接將我們編寫的程式下載到FPGA的片內RAM中,掉電不保留資料。而固化的目的是使板卡掉電不丟失程式,通常在除錯階段需要多次啟動,每次上電都重新下載程式是一件很麻煩的事情,所以將程式固化進去會方便很多,下面是固化程式的參考流程。
如果大家覺得步驟很複雜的話,我用框圖的形式總結了一下,可能會清楚點。
3.2 程式的啟動流程
- ZYNQ7000 SOC晶片可以從FLASH啟動,也可以從SD卡里啟動。ZYNQ7000 SOC晶片上電後,先執行的是ARM系統(PS端)。然後透過ARM系統軟體部分載入FPGA的位元流檔案.bit至FPGA(PL端),啟動FPGA邏輯功能。
- BOOT ROM:開發板上電,Z7000會先執行片內BOOT ROM 程式碼,BOOT ROM程式碼讀取BOOT mode暫存器決定哪一種啟動方式 (SD card/QSPI flash/JTAG)。
- 確定好啟動方式後,BOOT ROM從相應的啟動裝置中(SD card/QSPI flash)載入到First Stage Bootloader (FSBL)到On Chip Memory(OCM)RAM,並將執行權交給FSBL。
- FSBL:(a)初始化CPU,初始化串列埠。(b)PS一些控制器初始化。(c)禁止L1 Data Cache。(d)註冊ARM中斷向量。(e)透過Boot mode暫存器判斷啟動方式。
3.3 程式的測試
透過UART串列埠輸出,藉助串列埠除錯助手可以看到實時的溫度數值,完成測試。
四、總結 puyang/
大致歸納一下XADC用到的基本知識(僅針對個人的學習筆記總結)。
1、輪詢模式:CPU重複檢查裝置的狀態暫存器,直到暫存器的值表明I/O操作已經完成。
2、多路複用器mux:能夠接收多個訊號,按每個訊號可恢復方式合成單個輸出訊號。
3、XADC也需要參考電壓,參考電壓由晶片內部或外部決定。
4、VP/VN在多路複用通道外(XADC有17個通道),即PL引腳複用。
5、XADC模組的引腳封裝均在BANK0中。
6、用VP/VN能夠有效減小干擾,噪聲相減則抵消。
7、VP-VN的電壓輸出範圍是-0.5V ~ +0.5V,VP與VN相對於GNDADC電壓必須大於0。
8、模擬訊號通道在管腳配置時不需要加電壓,數字訊號通道在管腳配置時需要加電壓,電壓相當於一個標準(FPGA有1.8V 2.5V 3.3V),例如3.3V控制時,達到3.3V就相當於邏輯1,0V就相當於邏輯0。
9、掩碼:是一串二進位制程式碼對目標欄位進行位與運算,遮蔽當前的輸入位。
10、狀態暫存器只能檢視工作狀態(read only),控制暫存器可以配置(read and write)。
11、沒有JTAG一般用Anolog-Input Mode(4Ch and 4Dh)配置。
透過實現利用XADC對溫度的採集,我學習到了如何配置暫存器(直接用地址寫暫存器的方式),學習到了什麼是固化程式以及如何將程式固化到FPGA板卡中,這同時用到了vivado和sdk編譯環境,理解了溫度感測器的工作原理,最重要的是能夠系統地對一項工程進行梳理,這對於學習FPGA有很大的幫助,希望以後能夠透過學習和寫部落格的這種方式慢慢進步。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/30239065/viewspace-2734314/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Xilinx-ZYNQ7000系列-學習筆記(3):系統復位與啟動筆記
- Xilinx-ZYNQ7000系列-學習筆記(2):私有看門狗(AWDT)的使用筆記
- 韓語學習筆記(1-5)溫習總結筆記
- CUUG 外部表學習筆記筆記
- 學習筆記1筆記
- 學習筆記-1筆記
- jQuery 學習系列筆記jQuery筆記
- 筆記本cpu溫度多少正常 筆記本cpu溫度過高怎麼解決筆記
- JavaScript學習筆記---數值JavaScript筆記
- kafka學習筆記1:測試環境搭建Kafka筆記
- swift學習筆記《1》Swift筆記
- Vue學習筆記1Vue筆記
- Numpy學習筆記 1筆記
- HTML學習筆記1HTML筆記
- flex:1學習筆記Flex筆記
- Numpy學習筆記(1)筆記
- SLAM學習筆記(1)SLAM筆記
- Oracle學習筆記1Oracle筆記
- mysql學習筆記-1MySql筆記
- Zynq學習筆記(1)筆記
- scapy學習筆記(1)筆記
- Git—學習筆記1Git筆記
- perl學習筆記1筆記
- Oracle學習筆記-1Oracle筆記
- git學習筆記 1Git筆記
- HTML學習筆記(1)HTML筆記
- git學習筆記1Git筆記
- golang 學習筆記1Golang筆記
- Java學習筆記系列-反射Java筆記反射
- jQuery學習系列筆記(二)jQuery筆記
- 強化學習-學習筆記2 | 價值學習強化學習筆記
- android開發學習筆記系列(1)-android起航Android筆記
- Scrapy 框架 (學習筆記-1)框架筆記
- React學習筆記1—起步React筆記
- webpack1學習筆記Web筆記
- hibernate學習筆記(1)筆記
- python學習筆記(1Python筆記
- ADworld學習筆記(1)筆記