零基礎(chǔ)學(xué)FPGA (二十六)頻、相可調(diào)任意波形信號發(fā)生器系統(tǒng)設(shè)計_第1頁
已閱讀5頁,還剩2頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、零基礎(chǔ)學(xué)fpga (二十六)頻、相可調(diào),任意波形信號發(fā)生器系統(tǒng)設(shè)計院長帶的討論生搞的,小墨有幸跟他們合作,負(fù)責(zé)方面的工作,完成后據(jù)說還會申請國家專利,詳細(xì)到什么時候完成,那可能就是猴年馬月了,或者說我已經(jīng)不在小學(xué)了。從此天開頭,小墨將開頭接觸公司的fpga(教師提供的平臺),用到的固然是sopc。其實(shí)做做項(xiàng)目也好,讓自己熬煉一下,我也好久沒有做大一點(diǎn)的項(xiàng)目了,對我來說也是一個機(jī)會吧。這個東西信任大家都知道,關(guān)于基于dds信號發(fā)生器的技術(shù)文檔網(wǎng)上也多的是,但是我還是想寫一下這部分的教學(xué),由于從我自身的學(xué)習(xí)來看,這部分內(nèi)容并不是很難,也很簡單實(shí)現(xiàn),代碼也就那幾行。但是,我發(fā)覺我當(dāng)初學(xué)這部分的時候,

2、從網(wǎng)上找資料,大部分都是基于原理的講解,或者說只是做到這一步,而且原理的講解太過書面化,初學(xué)者不怎么好理解。我做了這么一個教程,全方面的做一個這樣一個系統(tǒng)。其中包括信號發(fā)生器的原理部分,代碼實(shí)現(xiàn),仿真,按鍵控制頻率、相位變換,包括正弦波、方波、鋸齒波、三角波的產(chǎn)生,以及d/a轉(zhuǎn)換芯片的操作,直到能夠在上觀看到我們產(chǎn)生的波形,并通過按鍵控制為止。這個系統(tǒng)的設(shè)計也許花了我三四天的樣子,寫的也是蠻專心的,工程不是很大,但還是有些詳情需要注重的,下面我們就一步步的開頭做。一、整體框架關(guān)于原理部分,書上講的無數(shù),但是總是感覺不盡人意,過于書面化的語言讓人看著很頭疼,下面就讓小墨來給大家說明,希翼給讀者帶

3、來一種眼前一亮的感覺,讓你再回去看書,看代碼的時候覺得得心應(yīng)手了。首先我們應(yīng)當(dāng)先明確要做什么,我們要做的是一個頻率,相位可調(diào),隨意波形信號發(fā)生器,也就是我們頻繁的正弦波,方波,鋸齒波,三角波等。第二,我們需要知道我們需要哪些參數(shù)。比如,我們要生成一個正弦波,它的初始頻率是多少,相位是多少,步進(jìn)頻率、相位是多少,怎么計算這些參數(shù)?然后我們需要知道如何生成一種波形,怎么樣通過按鍵實(shí)現(xiàn)波形與波形之間的轉(zhuǎn)換,例如我按下一個鍵生成正弦波,再按下一個鍵生成三角波,怎么實(shí)現(xiàn)?再然后,我們需要把生成的數(shù)字信號送入d/a轉(zhuǎn)換芯片,d/a轉(zhuǎn)換的接口怎么寫?怎么保證采集的數(shù)字信號徹低正確?最后,我們可以通過示波器觀

4、看我們生成的波形信號,驗(yàn)證我們的頻率,相位是否符合我們的設(shè)計要求下面是我容易的做的一個框架圖下面我們先來說明一下上面這張框架圖。首先,我們通過8位按鍵挑選輸出何種波形,這時候wave_select信號被給予相應(yīng)的值送給dds模塊,dds模塊由wave_select信號,從rom中挑選合適的地址,地址每變幻一次,也就是數(shù)據(jù)每變幻一次,dds模塊會告訴模塊數(shù)據(jù)發(fā)生變幻了,讓它注重數(shù)據(jù)的采集,不要采錯了!同時可以通過按鍵控制模塊調(diào)整輸出信號的頻率,相位等,dac模塊將采集到的數(shù)字信號轉(zhuǎn)化成模擬信號,送到示波器上顯示。注重dac芯片的采樣頻率,dds信號的輸出頻率不能大于采集頻率,否則數(shù)據(jù)就會出錯。二

5、、dds信號發(fā)生器原理詳解關(guān)于發(fā)生器原理這樣部分有須要好好講講,無數(shù)人還是對某系問題不得其解,先來看這張圖dds基本的結(jié)構(gòu)組成,看圖就知道了,包括相位累加器,相位調(diào)制器,波形數(shù)據(jù)表,和da轉(zhuǎn)換。我們還可以看到有兩個輸入,即頻率控制字輸入fword 和相位控制字輸入 pword,這兩個輸入就是我們用來控制輸出波形頻率和相位的1、相位累加器相位累加器的原理,我們先假設(shè)頻率控制字fword 為1。相位累加器的原理就是先將fword的值送到相位累加器,然后每來一個時鐘,相位累加器的輸出值,就跟相位累加器的新輸入值相加,之后再送入相位累加器,再來一個時鐘,再跟輸入值相加送進(jìn)去,如此循環(huán)。例如剛開頭fwo

6、rd = 1 ,那么第一個時鐘周期相位累加器的輸出就是1,其次個時鐘周期輸出的就是2,第三個時鐘周期輸出的就是3。再例如,我們的頻率控制字fword 剛開頭等于2,那么相位累加器輸出的就依次是0,2,4.也就是說頻率控制字fword 越大,相位累加器的輸出值間隔也就越大,那么我們假設(shè)相位累加器的輸出是32位的,假如fword越大,那么頻率控制字記完到232 的時光就越短。這樣的話,我們來算一下我們用法的是50m的晶振,周期為20ns,假設(shè)fword為1,相位累加器的輸出為n位的,那么每20ns,相位累加器加1,要加到2n,需要20ns x 2n 時光,這個時光就是輸出一個完整信號的周期,那么我

7、們可以知道,輸出信號的頻率為 fout = fclk /2n,其中,fclk為我們的晶振頻率,再如果,fword = b 的時候,相位間隔提高 b 倍,因此計滿一個周期的時光縮小了 b 倍,頻率提高的 b 倍。綜上所述,我們得出了輸出信號的頻率計算公式有了這個公式,那么,假如我們把2n看成是一個周期波形的相位,也就是說把一個波形的相位平均分成2n個,每一個相位對應(yīng)一個數(shù)字信號,將這些數(shù)字信號送到da轉(zhuǎn)換芯片,轉(zhuǎn)化成模擬信號,不就是我們的信號發(fā)生器了嗎?好,這里我們假設(shè)n = 32 ,也就是把一個波形的相位分成了232個點(diǎn),但是位數(shù)越多固然占用的資源也就越多,不能取那么多,怎么辦呢,我們只取它的

8、高8位即可即取fre_add31:24 ,將這8位數(shù)送給rom的地址。無數(shù)人不明了了,為什么這樣取8位,這樣取8位不是把一個完整的信號給截斷了嗎?剛開頭我也有這么想過,但是認(rèn)真算一下才知道自己是多慮了。用計算器算一下知道,232 = 4.3x 109 左右,而224 = 16 x 106 左右,前后差了幾個數(shù)量級,所以,我們?nèi)re_add31:24,相當(dāng)于把一個波形的相位分成了256個點(diǎn),每個點(diǎn)對應(yīng)一個數(shù)據(jù)。二、rom上一部分說了,我們將一個波形分成了256個點(diǎn),每個點(diǎn)對應(yīng)一個數(shù)據(jù),那么我們怎么實(shí)現(xiàn)呢,這里就要用到我們的只讀存儲器rom了,我們可以先把波形的數(shù)據(jù)送到rom里存起來,然后再從中

9、取,取的地址就是我們的fre_add31:24這8位數(shù),由此看來,fword越大,這256個地址取址的間隔就越大,相應(yīng)的波形頻率也就越大了,固然,我們的rom不光存儲一個波形,我們可以把rom設(shè)大一點(diǎn),里面放多種波形,再通過按鍵舉行相應(yīng)的選址,從而輸出各種波形說到這里有些人該問了,怎么將數(shù)據(jù)送到rom里去呢?這個的話就設(shè)計到mif文件的制作,詳細(xì)怎么做大家還是自己回去補(bǔ)課了,不一一介紹了,但是我這里有一個mif文件生成器,網(wǎng)上也有下載,可以生成各種波形,也可以舉行相關(guān)參數(shù)的修改,注重保存的時候保存成.mif格式的文件即可,調(diào)用的時候在ip核 rom的配置的時候調(diào)用就好了,但是要注重位寬。三 、

10、相位調(diào)制器相位調(diào)制器部分就容易了,就是相位累加器取好的的8位rom地址,我們可以通過按鍵舉行加加減減,從而控制rom取址的不同,從而控制波形的相位四 、參數(shù)計算由上面的公式我們知道了輸出波形的頻率計算公式,當(dāng)fword =1的時候我們算一下輸出頻率 fout = 50_000000 / 232 = 0.01,就是個大約值了,也就是說,在fword =1的時候,我們的輸出波形的頻率為0.01hz,假設(shè)我們讓波形初始化的時候輸出的是一個100hz的正弦波,那么,我們應(yīng)當(dāng)設(shè)定fword = 10000,相位的話可以任憑設(shè)置,我們就默認(rèn)為0相位好了。假如要舉行頻率,相位可調(diào),我們只需要讓fword每次

11、加100,就相當(dāng)于頻率步進(jìn)為1hz了,固然,因?yàn)槲覀兊牡刂肥?位的,那么,步進(jìn)的相位就是 360 /256,也許等于1.4度吧。還有,既然頻率為100hz,也就是周期為0.01s,rom要在0.01s內(nèi)要輸出256個數(shù),那么每輸出一個數(shù)的時光為0.01 /256 也許為 39us的樣子,因此,我們的dac的采集頻率不能比rom的輸出頻率小了,否則的話采集到的數(shù)據(jù)是不精確的綜上所述,我們總結(jié)一下輸出頻率: 100hz輸出相位:0步進(jìn)頻率:1hz步進(jìn)相位:1.4度dac采集時光:小于39us固然在普通狀況下 dac的采集頻率是遠(yuǎn)大于rom的輸出頻率的,只要信號輸出頻率不是特殊快,采集正確還是有保證

12、的。為了保證采集的正確性,我特殊加了一個數(shù)據(jù)變幻檢測部分,一但數(shù)據(jù)發(fā)生變幻,就告訴dac模塊,做相應(yīng)處理一切預(yù)備就緒,我們可以做一下仿真,詳細(xì)的仿真調(diào)試過程不做詳解,還是大家自己動手去做的過程五、dac接口da芯片我用的是tlc5620這塊芯片,這塊芯片是四路輸出,8位的的數(shù)模準(zhǔn)換芯片,芯片的操作不是很難,我們還是先來看一下芯片的datasheetda芯片有這幾個管腳需要用到,分離是dac_clk,用于產(chǎn)生dac的工作時鐘,解釋文檔上說時鐘最大為1m,而我們的晶振為50m因此我們需要做個分頻,我做了個64分頻,固然是為了穩(wěn)定,假如可以大家也可以試試更高的頻率dac_data , 是串行輸入的接

13、口,用來接收數(shù)字信號dac_load ,將接收來的數(shù)字信號開頭轉(zhuǎn)化成模擬信號的使能端,低電平有效,要持續(xù)最低250nsdac_ldac , dac信號刷新控制端,當(dāng)dac為低電平的時候向來有模擬信號輸出,否則不再刷新上面那個時序圖大體說明一下,就是在load信號是高電平期間,每來一個dac工作時鐘的下降沿,就將1位數(shù)據(jù)通過dac_data端口送到dac芯片內(nèi)部的移位寄存器中,寄存器是11位的,前兩位為輸出模擬信號的通道號,第三位是用來計算輸出用的一個參數(shù)吧,低8位是輸入的數(shù)字信號,當(dāng)移位寄存器存滿之后,給一個load信號,工作時鐘處于不工作狀態(tài),注重,這一點(diǎn)很重要,我當(dāng)初就是不知道這一點(diǎn),向來

14、調(diào)不好,就是在轉(zhuǎn)換期間,讓工作時鐘處于非工作狀態(tài),等待250ns之后,將load拉高,舉行下一次采集。關(guān)于代碼的分析這里也不做具體分析了,大家還是自行消化,這里只傳一部分,關(guān)于數(shù)據(jù)的發(fā)送部分的代碼每來一個時鐘,送一位數(shù)據(jù)給dac_data端口,送滿移位寄存器為止,當(dāng)移位寄存器計滿的時候,load拉低,同時時鐘停止工作,bit_counter 清零,等待下一次采集。固然當(dāng)數(shù)據(jù)發(fā)生變幻的時候,也就是data_change 信號來的時候,bit_counter 也清零,重新采集,避開采集錯誤所有模塊編譯完成之后,我們就可以用示波器來檢測我們的結(jié)果了由示波器的結(jié)果我們可以看到,輸出電壓峰值為2.5v,固然這是由芯片打算的,輸出頻率為116hz,大體符合我們的要求,究竟我們無數(shù)參數(shù)做了近似,再通過按鍵舉行波形的變換,發(fā)覺各波形輸出正常,惟獨(dú)方波和鋸齒波,在電壓下降的時候變幻有點(diǎn)緩慢,固然這也得考慮我們芯片的因素,究竟電壓不能變幻的那么快,也屬于正常狀況波形顯示正常,下面通過按鍵來調(diào)整波形的頻率和相位,可是實(shí)現(xiàn)實(shí)時顯示的功能,發(fā)覺頻率,相位都有所轉(zhuǎn)變固然,這個工程也有做的不好的地方,例如,再舉行相位調(diào)整的時候,因?yàn)楦鞣N波形的地址在rom里面是挨在

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論