零基礎學FPGA (二十六)頻、相可調,任意波形信號發生器系統設計

2020-12-12 電子產品世界

  最近接了一個項目吧,是我們學校物理院院長帶的研究生搞的,小墨有幸跟他們合作,負責FPGA方面的工作,完成後據說還會申請國家專利,具體到什麼時候完成,那可能就是猴年馬月了,或者說我已經不在學校了。從今天開始,小墨將開始接觸賽靈思公司的FPGA(老師提供的平臺),用到的當然是SOPC。其實做做項目也好,讓自己鍛鍊一下,我也好久沒有做大一點的項目了,對我來說也是一個機會吧。

本文引用地址:http://www.eepw.com.cn/article/284116.htm


  信號發生器這個東西相信大家都知道,關於基於DDS信號發生器的技術文檔網上也多的是,但是我還是想寫一下這部分的教學,因為從我自身的學習來看,這部分內容並不是很難,也很容易實現,代碼也就那幾行。但是,我發現我當時學這部分的時候,從網上找資料,大部分都是基於原理的講解,或者說只是做到仿真這一步,而且原理的講解太過書面化,初學者不怎麼好理解。我做了這麼一個教程,全方面的做一個這樣一個系統。其中包括信號發生器的原理部分,代碼實現,仿真,按鍵控制頻率、相位變換,包括正弦波、方波、鋸齒波、三角波的產生,以及D/A轉換晶片的操作,直到能夠在示波器上觀察到我們產生的波形,並通過按鍵控制為止。

  這個系統的設計大概花了我三四天的樣子,寫的也是蠻用心的,工程不是很大,但還是有些細節需要注意的,下面我們就一步步的開始做。

  一、整體框架

  關於原理部分,書上講的很多,但是總是感覺不盡人意,過於書面化的語言讓人看著很頭疼,下面就讓小墨來給大家解釋,希望給讀者帶來一種眼前一亮的感覺,讓你再回去看書,看代碼的時候覺得得心應手了。

  首先我們應該先明確要做什麼,我們要做的是一個頻率,相位可調,任意波形信號發生器,也就是我們常見的正弦波,方波,鋸齒波,三角波等。

  其次,我們需要知道我們需要哪些參數。比如,我們要生成一個正弦波,它的初始頻率是多少,相位是多少,步進頻率、相位是多少,怎麼計算這些參數?

  然後我們需要知道如何生成一種波形,怎麼樣通過按鍵實現波形與波形之間的轉換,例如我按下一個鍵生成正弦波,再按下一個鍵生成三角波,怎麼實現?

  再然後,我們需要把生成的數位訊號送入D/A轉換晶片,D/A轉換的接口怎麼寫?怎麼保證採集的數位訊號完全正確?

  最後,我們可以通過示波器觀察我們生成的波形信號,驗證我們的頻率,相位是否符合我們的設計要求

  下面是我簡單的做的一個框架圖


  下面我們先來解釋一下上面這張框架圖。

  首先,我們通過8位按鍵選擇輸出何種波形,這時候wave_select信號被賦予相應的值送給DDS模塊,DDS模塊由wave_select信號,從ROM中選擇合適的地址,地址每變化一次,也就是數據每變化一次,DDS模塊會告知DAC模塊數據發生變化了,讓它注意數據的採集,不要採錯了!同時可以通過按鍵控制模塊調節輸出信號的頻率,相位等,DAC模塊將採集到的數位訊號轉化成模擬信號,送到示波器上顯示。注意DAC晶片的採樣頻率,DDS信號的輸出頻率不能大於採集頻率,否則數據就會出錯。

  二、DDS信號發生器原理詳解

  關於發生器原理這樣部分有必要好好講講,很多人還是對某系問題不得其解,先來看這張圖


  DDS基本的結構組成,看圖就知道了,包括相位累加器,相位調製器,波形數據表,和DA轉換。我們還可以看到有兩個輸入,即頻率控制字輸入fword 和相位控制字輸入 pword,這兩個輸入就是我們用來控制輸出波形頻率和相位的

  1、相位累加器

  相位累加器的原理,我們先假設頻率控制字fword 為1。相位累加器的原理就是先將fword的值送到相位累加器,然後每來一個時鐘,相位累加器的輸出值,就跟相位累加器的新輸入值相加,之後再送入相位累加器,再來一個時鐘,再跟輸入值相加送進去,如此循環。例如剛開始fword = 1 ,那麼第一個時鐘周期相位累加器的輸出就是1,第二個時鐘周期輸出的就是2,第三個時鐘周期輸出的就是3。再例如,我們的頻率控制字fword 剛開始等於2,那麼相位累加器輸出的就依次是0,2,4.....也就是說頻率控制字fword 越大,相位累加器的輸出值間隔也就越大,那麼我們假設相位累加器的輸出是32位的,如果fword越大,那麼頻率控制字記完到2^32 的時間就越短。這樣的話,我們來算一下

  我們使用的是50M的晶振,周期為20ns,假設fword為1,相位累加器的輸出為N位的,那麼每20ns,相位累加器加1,要加到2^N,需要20ns x 2^N 時間,這個時間就是輸出一個完整信號的周期,那麼我們可以知道,輸出信號的頻率為 Fout = Fclk /2^N,其中,Fclk為我們的晶振頻率,再假如,fword = B 的時候,相位間隔提高 B 倍,因此計滿一個周期的時間縮小了 B 倍,頻率提高的 B 倍。綜上所述,我們得出了輸出信號的頻率計算公式


  有了這個公式,那麼,如果我們把2^N看成是一個周期波形的相位,也就是說把一個波形的相位平均分成2^N個,每一個相位對應一個數位訊號,將這些數位訊號送到DA轉換晶片,轉化成模擬信號,不就是我們的信號發生器了嗎?

  好,這裡我們假設N = 32 ,也就是把一個波形的相位分成了2^32個點,但是位數越多當然佔用的資源也就越多,不能取那麼多,怎麼辦呢,我們只取它的高8位即可


  即取fre_add[31:24] ,將這8位數送給ROM的地址。很多人不明白了,為什麼這樣取8位,這樣取8位不是把一個完整的信號給截斷了嗎?剛開始我也有這麼想過,但是仔細算一下才知道自己是多慮了。用計算器算一下知道,2^32 = 4.3x 10^9 左右,而2^24 = 16 x 10^6 左右,前後差了幾個數量級,所以,我們取fre_add[31:24],相當於把一個波形的相位分成了256個點,每個點對應一個數據。

  二、ROM

  上一部分說了,我們將一個波形分成了256個點,每個點對應一個數據,那麼我們怎麼實現呢,這裡就要用到我們的只讀存儲器ROM了,我們可以先把波形的數據送到ROM裡存起來,然後再從中取,取的地址就是我們的fre_add[31:24]這8位數,由此看來,fword越大,這256個地址取址的間隔就越大,相應的波形頻率也就越大了,當然,我們的ROM不光存儲一個波形,我們可以把ROM設大一點,裡面放多種波形,再通過按鍵進行相應的選址,從而輸出各種波形


  說到這裡有些人該問了,怎麼將數據送到ROM裡去呢?這個的話就設計到mif文件的製作,具體怎麼做大家還是自己回去補課了,不一一介紹了,但是我這裡有一個mif文件生成器,網上也有下載,可以生成各種波形,也可以進行相關參數的修改,注意保存的時候保存成.mif格式的文件即可,調用的時候在IP核 ROM的配置的時候調用就好了,但是要注意位寬。


  三 、相位調製器

  相位調製器部分就簡單了,就是相位累加器取好的的8位ROM地址,我們可以通過按鍵進行加加減減,從而控制ROM取址的不同,從而控制波形的相位


  四 、參數計算

  由上面的公式我們知道了輸出波形的頻率計算公式,當fword =1的時候我們算一下

  輸出頻率 Fout = 50_000000 / 2^32 = 0.01,就是個大約值了,也就是說,在fword =1的時候,我們的輸出波形的頻率為0.01HZ,假設我們讓波形初始化的時候輸出的是一個100HZ的正弦波,那麼,我們應該設定fword = 10000,相位的話可以隨便設置,我們就默認為0相位好了。如果要進行頻率,相位可調,我們只需要讓fword每次加100,就相當於頻率步進為1HZ了,當然,由於我們的地址是8位的,那麼,步進的相位就是 360 /256,大概等於1.4度吧。

  還有,既然頻率為100HZ,也就是周期為0.01s,ROM要在0.01s內要輸出256個數,那麼每輸出一個數的時間為0.01 /256 大概為 39us的樣子,因此,我們的DAC的採集頻率不能比ROM的輸出頻率小了,否則的話採集到的數據是不準確的

  綜上所述,我們總結一下

  輸出頻率: 100HZ

  輸出相位:0

  步進頻率:1HZ

  步進相位:1.4度

  DAC採集時間:小於39us

  當然在一般情況下 DAC的採集頻率是遠大於ROM的輸出頻率的,只要信號輸出頻率不是特別快,採集正確還是有保證的。為了保證採集的正確性,我特別加了一個數據變化檢測部分,一但數據發生變化,就告知DAC模塊,做相應處理


  一切準備就緒,我們可以做一下仿真,具體的仿真調試過程不做詳解,還是大家自己動手去做的過程


  五、DAC接口電路

  DA晶片我用的是TLC5620這塊晶片,這塊晶片是四路輸出,8位的的數模準換晶片,晶片的操作不是很難,我們還是先來看一下晶片的datasheet


  DA晶片有這幾個管腳需要用到,分別是

  dac_clk,用於產生DAC的工作時鐘,說明文檔上說時鐘最大為1M,而我們的晶振為50M因此我們需要做個分頻,我做了個64分頻,當然是為了穩定,如果可以大家也可以試試更高的頻率

  dac_data , 是串行輸入的接口,用來接收數位訊號

  dac_load ,將接收來的數位訊號開始轉化成模擬信號的使能端,低電平有效,要持續最低250ns

  dac_ldac , dac信號刷新控制端,當dac為低電平的時候一直有模擬信號輸出,否則不再刷新

  上面那個時序圖大體解釋一下,就是在load信號是高電平期間,每來一個DAC工作時鐘的下降沿,就將1位數據通過dac_data埠送到DAC晶片內部的移位寄存器中,寄存器是11位的,前兩位為輸出模擬信號的通道號,第三位是用來計算輸出電壓用的一個參數吧,低8位是輸入的數位訊號,當移位寄存器存滿之後,給一個load信號,工作時鐘處於不工作狀態,注意,這一點很重要,我當時就是不知道這一點,一直調不好,就是在轉換期間,讓工作時鐘處於非工作狀態,等待250ns之後,將load拉高,進行下一次採集。

  關於代碼的分析這裡也不做詳細分析了,大家還是自行消化,這裡只傳一部分,關於數據的發送部分的代碼


  每來一個時鐘,送一位數據給dac_data埠,送滿移位寄存器為止,當移位寄存器計滿的時候,load拉低,同時時鐘停止工作,bit_counter 清零,等待下一次採集。當然當數據發生變化的時候,也就是data_change 信號來的時候,bit_counter 也清零,重新採集,避免採集錯誤

  全部模塊編譯完成之後,我們就可以用示波器來檢測我們的結果了


  由示波器的結果我們可以看到,輸出電壓峰值為2.5V,當然這是由晶片決定的,輸出頻率為116HZ,大體符合我們的要求,畢竟我們很多參數做了近似,再通過按鍵進行波形的變換,發現各波形輸出正常,只有方波和鋸齒波,在電壓下降的時候變化有點緩慢,當然這也得考慮我們晶片的因素,畢竟電壓不能變化的那麼快,也屬於正常情況


  波形顯示正常,下面通過按鍵來調節波形的頻率和相位,可是實現實時顯示的功能,發現頻率,相位都有所改變


  當然,這個工程也有做的不好的地方,例如,再進行相位調節的時候,由於各種波形的地址在ROM裡面是挨在一起的,這樣進行相位調節會侵犯其他波形的地址,這一點我當時也考慮過了,短時間內沒有想出更好的辦法,可以用多個ROM,其他的辦法還請大家自己動腦子想一下吧,想出來了可以給我留言,大家一起交流嘛

  好了,這一次主要還是講了一下工程的全過程,沒有仔細講代碼編寫的具體過程,也沒有講仿真時候的操作流程,這些部分還是留給讀者慢慢去摸索,畢竟這也是一個學習的過程,今天就到這裡吧,由於小墨手上也有了項目,平時還要上課,更新速度方面應該不是很快!謝謝大家的支持~













相關焦點

  • 【博客大賽】零基礎學FPGA (二十八)頻、相可調,任意波形信號發生器系統設計
    經買好了去黃山的車票,這個季節的黃山應該很美吧,4月29號出發,又一次令人心潮澎湃的旅行~ 信號發生器這個東西相信大家都知道,關於基於DDS信號發生器的技術文檔網上也多的是,但是我還是想寫一下這部分的教學,因為從我自身的學習來看,這部 分內容並不是很難,也很容易實現,代碼也就那幾行。
  • 波形發生器設計,單片機、CPLD控制的任意波形發生器設計實例
    波形發生器有多種類型,任意波形發生器便是其中一種。對於任意波形發生器,小編曾帶來相關介紹,如高速任意波形發生器的設計等。本文中,講為大家講解採用單片機和CPLD控制的任意波形發生器的設計。如果你對本文即將要講解的內容存在一定興趣,不妨繼續往下閱讀哦。
  • 基於FPGA的m序列信號發生器設計
    1 m序列信號發生器的組成  基於FPGA的m序列信號發生器硬體結構極其簡單,僅需兩個獨立按鍵(一個是復位按鍵與另一個控制數據率切換按鍵)、一個48 MHz的用於提供系統時鐘有源晶振、系統電源、一塊配置晶片、幾個簡單的電阻與電容即可實現。
  • 什麼是信號發生器?
    混和信號源又可分為函數信號發生器和任意波形/函數發生器,其中函數信號發生器輸出標準波形,如正弦波、方波等,任意波/函數發生器輸出用戶自定義的任意波形;邏輯信號發生器又可分為脈衝信號發生器和碼型發生器,其中脈衝信號發生器驅動較小個數的的方波或脈衝波輸出,碼型發生器生成許多通道的數字碼型。如泰克生產的AFG3000系列就包括函數信號發生器、任意波形/函數信號發生器、脈衝信號發生器的功能。
  • 基於MSP430的信號發生系統設計
    通過研究DDS器件在技術實現中的具體應用,解決了傳統單片機(MCU)信號發生器輸出頻率精度差、頻率改變不夠靈活等缺點。該系統具有輸出頻率精確穩定、波形質量好和輸出頻率範圍寬等優點,同時還具有頻率計和數位訊號調製的功能。經過仿真和實驗,驗證了該系統的可行性。
  • 正弦波信號發生器基本原理與設計
    正弦信號發生器主要由兩部分組成:正弦波信號發生器和產生調幅、調頻、鍵控信號。正弦波信號發生器採用直接數字頻率合成DDS技術,在CPLD上實現正弦信號查找表和地址掃描,經D/A輸出可得到正弦信號。具有頻率穩定度高,頻率範圍寬,容易實現頻率步進100Hz。
  • 層出不窮的信號發生器可有效節省測試時間
    一種可能是為某種特殊應用建立自己的信號源,但這並非必需。  這是因為不管正在設計或等待測試的設備是何種類型,都可以用現成的信號發生器產生合適的輸入信號。信號發生器就象是工作檯上的示波器、萬用表和電源一樣普遍。
  • Spectrum儀器65系列PCIe任意波形發生器新增兩個新的8通道卡
    打開APP Spectrum儀器65系列PCIe任意波形發生器新增兩個新的8通道卡 發表於 2019-05-19 11:04:18
  • 3G系統中AGC的FPGA設計實現
    可變增益放大器是電控的,並且當接收機中使用衰減器時,他們通常都是由可變電壓控制的連續衰減器。控制應該是平滑的並且與輸入的信號能量通常成對數關係(線性分貝)。在大多數情況下,由於衰落,agc通常用來測量輸入解調器的信號電平,並且通過反饋控制電路把信號電平控制在要求的範同內。
  • 使用MATLAB和任意波形發生器創建高性能激勵測試系統
    測試工程師面臨的極具挑戰性的任務之一,是為測試PCB原型或矽轉生成激勵信號,或為RF技術定義複雜的高頻調製信號。儘管在工作檯上擺滿脈衝發生器、函數發生器、調製發生器和RF發生器也不失為一種方法,但使用任意波形發生器(AWG)直接合成生成信號提供了更高的靈活性、可重複性和測量精度。
  • 關於DG4系列函數/任意波形發生器的分析和應用
    為滿足市場對中高頻段函數/任意波形發生器的需求,豐富深受廣大用戶喜愛的DG4000系列函數/任意波形發生器產品線,RIGOL於2015年9月1日正式發布輸出頻率為200MHz的DG4202函數/任意波形發生器。
  • 國儀量子推出任意波形發生器AWG4100
    1開發背景在量子計算、量子精密測量、通信雷達、核磁共振光譜、半導體測試和納米技術等領域,任意波形發生器 (AWG)憑藉其出色的解析度和帶寬等性能有著非常普遍和廣泛的應用。為了更好地滿足客戶需求,任意波形發生器AWG4100設計有4個通道,每個通道可以獨立產生高達1.2 GSa/s採樣率、16位垂直解析度的單端波形輸出。每個通道還擁有最大512 MSa的存儲深度,同時提供獨立和組合播放兩種模式,能夠輕鬆應對各種不同場景的複雜波形需求。
  • 基於直接數字合成技術的信號發生器的設計
    基於直接數字合成技術的信號發生器的設計 電子設計 發表於 2018-12-18 08:01:00 1 引言 現代通信技術、雷達技術、電子測量以及一些光電應用領域都要求高精度
  • 如何選擇一款合適的信號發生器?
    函數/任意波形發生器是一種產生標準函數信號,並可以產生任意波形的儀器。函數/任意波形發生器的選型需要考慮幾個重要的參數,包括信號最高輸出頻率,採樣率,幅度範圍,準確度、信號質量、任意波長度等等。 以下為西安安泰分享信號發生器選擇的八個要素,希望能夠對大家有所幫助: 1、採樣速率 採樣率通常用每秒百萬樣點或每秒千兆樣點表示,指明了儀器可以運行的最大時鐘速率或採樣率。採樣率影響著主要輸出信號的頻率。一般來說,您應該選擇採樣頻率是生成的信號最高頻譜頻率成分兩倍的儀器,以保證準確地復現信號。最大採樣率還決定著可以用來創建波形的最小時間增量。
  • 基於單晶片數字波形發生器的頻率調節
    基於單晶片數字波形發生器的頻率調節 微波射頻網 發表於 2020-03-29 11:15:00 引言 當今許多工業和儀器儀表應用都涉及到傳感器測量技術
  • 波形發生器進階篇,在LabVIEW中控制Analog Discover波形發生器
    波形發生器的使用已司空見慣,而本文對于波形發生器的講解,在於介紹如何在LabVIEW中控制Analog Discovery波形發生器。步驟1:材料必備條件:您必須已完成上一個項目中的步驟2。必須遵循上一個項目的選件2.1(即安裝LabVIEW)。
  • 基於DSP和SOPC數位訊號發生器的設計
    CCS和DE2開發板實現正弦信號發生器。結果表明,採用SOPC技術設計的正弦信號發生器與使用DSP晶片實現相比,其高速的運算能力以及內部操作的靈活性,使得產生的波形具有控制方便,輸出相位連續,精度高,穩定性好等優點,具有很高的應用價值。
  • 2ASK數字頻帶傳輸系統的系統原理分析及設計方案
    以2ASK為調製方式的經濟型數字頻帶傳輸系統;分析了系統組成,電路工作原理;詳細闡述了系統各個模塊的設計方案。實驗結果驗證了該設計具有穩定性和合理性。    在現代數字通信系統中,頻帶傳輸系統的應用最為突出。將原始的數字基帶信號,經過頻譜搬移,變換為適合在頻帶上傳輸的頻帶信號,傳輸這個信號的系統就稱為頻帶傳輸系統。在頻帶傳輸系統中,根據數位訊號對載波不同參數的控制,形成不同的頻帶調製方法。
  • 信號發生器輸出功率不夠大怎麼辦?
    信號發生器用來產生確定性電信號,其特性隨時間推移而變化。如果這些信號表現為簡單的周期性波形,如正弦波、方波或三角波,那麼這種信號發生器就稱為函數發生器。它們通常用於檢查電路或PCBA的功能。將確定性信號加到被測電路的輸入端,將輸出端連接至相應的測量設備(例如示波器),用戶就可以對其進行評估。
  • 【學習筆記】基於STM32F429的音頻信號發生器
    1 總體設計  該音頻信號發生器採用模塊化設計,通過調用各個功能模塊,實現主控計算機可遠距離快速控制音頻信號發生器輸出信號的幅度、頻率值。該系統以ARM Cortex-M4為核心,系統總體框圖如圖1所示。