信號發生器又叫做函數信號發生器,其主要作用是用于實驗信號源。關鍵功能是用來產生各種各樣的頻率、波形和輸出電平信號。在電子電路領域的作用愈發重要,特別是在大型集成電路領域被廣泛應用的當下,信號發生器成了現如今很多電子電路實驗設計中最常用的儀器之一。 信號發生器又稱之為信號源或者振蕩器,在生產實踐和電子科技領域發揮著極其重要的作用。上世紀末,DDS技術出現,這種運用數字化方法經多種工作來產生所需頻率信號的電路設計方案,不僅能夠輸出各種各樣目標波形,還能產生各種可以任意調節的波形信號。在這種技術條件下設計的信號發生器具有以下幾個優點。例如:容易控制、高頻率分辨率、相位連續、切換速度十分迅速、輸出相位噪聲低和可以產生任意波形。 本課題設計的信號發生器首先介紹了直接數字頻率合成技術的發展歷史,分析了DDS技術的基本理論和FPGA的技術難點,采用AT89S52芯片來完成本次系統的設計。還介紹了信號發生器的整體設計,其中硬件模塊包括電源、人機交互、單片機控制、AT89S52信號發生模塊以及信號處理模塊等。軟件部分則包含了軟件的整體設計,AT89S52頻率控制字設計、按鍵掃描模塊以及顯示模塊。通過各個模塊的相互配合,最終能夠產生正弦波、矩形波、三角波、鋸齒波,輸出信號的頻率和幅度方便可調,頻率、幅值能夠用LCD予以顯示,能夠設置直流電平偏移量,具有TTL輸出功能,讓整個系統的設計達到預期效果,最后對整個論文進行總結修改。
目 錄
摘 要 I Abstract II 目 錄 III 1 緒論 - 1 - 1.1 選題背景 - 1 - 1.2 頻率合成技術發展過程 - 1 - 1.3 DDS技術的發展概述 - 2 - 1.4 本文所做的工作 - 3 - 2 信號發生器的方案設計 - 5 - 2.1 設計需求和方案的選擇 - 5 - 2.2 系統硬件選擇 - 6 - 2.2.1 單片機的選擇 - 6 - 2.2.2 FPGA的選型 - 7 - 2.2.3 數模轉換模型的選擇 - 8 - 2.3 AT89S52的功能和結構 - 9 - 2.4 系統軟件的總體設計 - 10 - 3 系統硬件設計 - 11 - 3.1 DDS的原理以及結構 - 11 - 3.1.1 DDS的原理 - 11 - 3.1.2 DDS的結構 - 12 - 3.2 FPGA的相關技術 - 13 - 3.2.1 FPGA的基本原理 - 13 - 3.2.2 FPGA的開發流程 - 14 - 3.2.3 原理圖設計輸入方法的介紹 - 15 - 3.2.4 開發工具介紹 - 16 - 3.3 DDS波形合成 - 18 - 3.3.1 時鐘模塊介紹 - 18 - 3.3.2 命令接收模塊介紹 - 22 - 3.3.3 相位累加器介紹 - 25 - 3.3.4 波形ROM模塊 - 26 - 3.3.5 DDS處理模塊 - 26 - 3.3.6 DA轉換電路設計 - 27 - 3.4 人機交互部分的硬件設計 - 29 - 4 系統軟件設計 - 32 - 4.1 C51簡介 - 32 - 4.2 控制軟件的設計 - 32 - 4.2.1總體控制模塊 - 32 - 4.2.2 鍵盤掃描和處理模塊 - 33 - 4.2.3 液晶顯示模塊 - 34 - 5 系統調試與性能測試 - 36 - 5.1電路調試 - 36 - 5.1.1 單片機調試 - 36 - 5.1.2 鍵盤和LCD的調試 - 36 - 5.1.3 FPGA的調試 - 36 - 5.1.4 D/A轉換模塊的調試 - 36 - 5.2 系統測試 - 37 - 5.2.1 輸出波形的測試 - 37 - 5.2.2 信號頻率的測量 - 38 - 5.2.3 信號幅度測量 - 39 - 5.2.4 頻率穩定度測量 - 40 - 5.3 誤差分析 - 40 - 結 論 - 42 - 致 謝 - 43 - 參 考 文 獻 - 44 -
1 緒論
1.1 選題背景基準信號通常把信號源運用于電子與通信系統中。函數信號發生器、脈沖信號發生器、任意波形發生器等都是信號源包括的種類。 信號源的技術指標可以在一定層面上決定系統性能的好壞,由于信號源的應用愈發廣泛,使得對高性能信號源的需求同樣越來越高,例如頻帶范圍寬,頻率切換速度快,與此同時對于成本、體積、信號源功率大小的要求也隨之增高。在DDS技術沒出來之前,采用的振蕩器的信號源產生的波形種類比較少,不僅準確度、靈活性差,而且精度也不高。 1.2 頻率合成技術發展過程二十世紀上葉,頻率合成技術誕生,迄今為止已經有近七十年的歷史。頻率合成器在電子設備領域扮演著十分重要的角色,可以說直接決定了系統性能的優良,頻率合成器在電子對抗和雷達通信,以及廣播電視等多個領域得到了極其廣泛的應用。頻率合成技術是把一個或幾個高精度、高密度的標注頻率經過一系列轉換,產生出穩定度,精度一致的離散頻率的電子技術。現如今電子技術發展迅速,以致于對頻率合成器的的各方面要求也隨著增高,尤其是以前的合成器頻率精度低、分辨低、帶寬窄、波形種類少,不能很好的達到設計要求,有需要就有提高,這也是該項技術發展速度快的原因之一。 頻率合成器是采用具備高精度、高穩定度、相位噪聲比較低的頻率源作為初始信息。采用電子技術領域上的混頻、倍頻或分頻等技術手段來處理頻率,再對它進行數學領域上的加、減、乘、除運算,進而產生所生成的每一種頻率都能有同樣的穩定性和準確性。 研究頻率合成理論的發展歷史及順序,可以將其大致分為三個主要階段,分別是直接模擬頻率合成技術,間接頻率合成技術和直接數字頻率合成技術。 直接模擬頻率合成技術是出現的比較早的一種頻率合成技術,該頻率合成的方法大致上是用單個或者多個標準頻率源,通過諧波發生器產生大量的諧波,然后在用混頻、分頻、倍頻及濾波等技術手段來處理離散的頻率。這種技術的優點是轉換時間短、相噪小。不過這種技術手段由于采用了大量混頻、分頻、倍頻和濾波等技術,就不可避免的讓合成器的結構變得復雜,除此還有體積大、成本大、功耗大等等缺點。 間接頻率合成技術又稱鎖相式頻率合成,是為了解決上述問題而產生的第二代頻率合成技術。把鎖相環直接固化到其中,不一樣的頻率是運用了鎖相環路的窄帶跟蹤特性而獲得的。最初出現的事模擬鎖相環,之后又出現了數字式鎖相環,和數模混合鎖相環。鎖相環路可以說是一個閉環的自動化控制系統,具有自動跟蹤輸入信號相位的功能。之所以其窄帶跟蹤特性優良,正是因為它把外部輸入的參考信號合理運用進而控制環路內部振蕩信號的頻率和相位。鎖相頻率合成的優點結構簡單以及集成簡單,不僅如此,頻譜也十分純凈,挑選需要的頻率信號相對是比較簡單的,而且可以抵制雜散、降低集成難度。但是也存在一些不好的地方,比如說:鎖定時間很長,進而導致了頻率轉換時間也較長,在高分辨率和快速轉換之間存在一定的相悖,所以所向頻率合成通常只用在步進大的頻率合成儀器里。 隨著這些年電子技術的向前推進,尤其是出現了大規模集成電路,以及數字信號處理領域技術的飛速提升。20世紀70年代,有人第一次發表了關于直接數字頻率合成的想法,這也成為了當下最尖端的頻率合成技術。之所以是最尖端的技術,是因為它不同以往,讓在它之前的兩種方法的限制徹徹底底的消失。該技術把計算機數字處理方面的知識滲透到頻率合成層面,成就了全新的數字處理方式,也預示著第三次頻率合成技術的革命。通過DDS技術生產的信號源能讓全數字化控制電路精確的控制DDS輸出波形的頻率、幅度相位等,這樣生成的系統十分穩定、可靠。正是因為這些優秀的特性使得該技術在近年間,發展的十分迅速,也被越來越普遍的應用于各個領域。但正是由于具有這些優點,也讓DDS技術的缺陷被暴露無遺,就像輸出的信號頻率不夠純凈,雜散大和帶寬較小等缺點。因此尋找新的發展方向成了DDS領域最緊要的任務。 1.3 DDS技術的發展概述上世紀中葉DDS技術的問世使得頻率合成技術的有了第二次大的飛躍,DDS技術實際上是用數字計算機配合數模轉換從而產生信號,此項技術的應運而生也掀開了頻率合成技術發展的新篇章,預示著頻率合成技術來到了第三代。DDS技術集成度高、芯片大小適中、穩定性還、分辨率高、價格實惠等優點讓其的受眾面變得越來越廣。但同時帶寬比較小,這使得在合成的過程中產生的一系列無法避免的誤差,讓信號的雜散比較大的缺點也被暴露無疑。但也有解決辦法,就是通過加大存儲器的字長來縮小相位截斷產生的誤差,進而能在一定程度上減小雜散。除此縮小字長之外,還可以通過加大D/A轉換器的精度來減小量化誤差。需要著重說明的一點,目前大部分芯片都使用14位D/A轉換器。 由于DDS輸出信號的頻率低,就出現了一些新的技術,比如可以采用DDS技術加上PLL相輔相成共同工作的手段,優點是能大幅度提升頻率分辨率,還能讓頻譜變得更加純凈。相比來說。另一種采用混頻濾波的方法使用率就不太高。 AD、摩托羅拉和美國國家半導體公司,富士通和飛利浦等公司公司都是生產DDS芯片的廠家。目前在售的DDS芯片種類不但非常而且十分齊全,其中 AD9850、AD9851芯片等都是當前使用率比較高的芯片,它們有共同的特點就是內部都包含頻率控制字、相位累加器、正弦查找表、數模轉換器等決定系統性能的關鍵器件。除了以上介紹的這些特點,在現在的技術條件下生產制造出的DDS芯片還具有輸出信號雜散比較小,輸出頻率范圍寬,售價便宜,高性價比高等多個優點,以致于單片DDS芯片在頻率合成領域被普遍認可并得到大規模應用。 在如此多的性能出色的DDS芯片中,AD公司的所制造的AD9854芯片的性能優越性就顯得格外突出。一方面,其相位累加器位數已經增加到48位量級,從而也使得它的頻率分辨率達到了9個數量級,進而頻率切換速度得到很大提升,達到了ns量級。另一方面,DDS芯片從以前只能單一輸出正弦信號到現在不但可以輸出正弦信號,還可以輸出多種信號。這樣一來,輸出信號種類單一的弱點也迎刃而解。操縱手段變得更加靈活,由串行控制與總線控制取代了之前的并行控制。不得不提,在DDS與數字信號處理技術結合使用之后,讓DDS芯產生出的信號源更加數字化、實用性更好。DDS技術除了在涉及雷達的領域實現多點調頻頻率源,也實現了多種多樣的數字調頻。可以看出,DDS技術的研究是一項十分有意義有發展前景的使命工作,有巨大的潛力,也會帶來巨大的經濟效益和社會效益。 盡管DDS技術的應用已經非常廣泛,市面上高性能的信號發生器也比較多,但是可供選擇的能產生多種信號輸出且價格便宜的信號發生器其實并不多。特別是在校電類專業學生平時實驗過程中,經常要用到信號發生器,傳統儀器難以滿足需求。所以,研發一款低成本、高性能的數字寬頻信號發生器就很有意義。正是如此,本文的主要內容就是如何合理地基于DDS技術研發出一款結構簡單、易操作、性能穩、價格低的信號發生器。 1.4 本文所做的工作本文主要介紹了DDS技術的基本原理和對直接數字頻率合成技術做了深入的研究,并在此技術上用單片機和FPGA設計并制作了一種結構簡單、實用的搞穩定度信號發生器,主要工作包括了以下內容: (1)總體方案設計: 對DDS信號發生器的信號的產生和控制部分,人機交互部分以及信號處理部分進行研究分析,分成三個部分進行設計。 (2)硬件部分設計: 完成硬件系統的總體設計,對實現電路進行分析測試以達到預期目標 (3)軟件部分設計 軟件系統的具體實現,對系統按功能模塊進行介紹 (4)系統測試 分別對系統進行功能測試、調試步驟和系統的具體操縱方法進行闡述,對不足之處進行解釋說明。
2 信號發生器的方案設計 2.1 設計需求和方案的選擇本課題為設計一款基于DDS技術的信號發生器,目的是通過系統的控制面板來實現讓其輸出正弦波、方波、三角波、鋸齒波等目標信號,同時實現對頻率和幅度的任意控制。而該款信號發生器的主要性能指標以及功能要求如下: 1. 頻率范圍:0.1HZ—20MHZ 2. 頻率分辨率:40mHz 3. 幅度范圍:20mV p-p—20V p-p(高阻,頻率<1MHz) 4. 偏移范圍:±10V(高阻) 分辨率:20mV 5. 幅值分辨率10 bit 6. 矩形波占空比調整范圍:0-100% 7. 輸出阻抗:50Ω 8. TTL輸出:方波,TTL兼容,低電平<0.3V 高電平>4V 9. 工作電源:AC220V/50HZ 10. 輸出目標波形:正弦波、方波、鋸齒波、三角波 根據系統要求,有兩個比較可行的方案可供選擇: 1. 采用已有的AD9850數字頻率合成芯片,讓其數據接口來實現頻率調節,其頻率的范圍和步進精度都比較高。由于受到芯片功能的限制使得它只能輸出特定的波形,在完成設計后,不能進一步擴展系統的功能,使用率也會變低。 2. 用單片機實現人機交互操作界面的同時,通過FPGA技術手段來做出DDS軟件系統。從理論知識方面上講這種方法的靈活性是毋庸置疑的,不但可以輸出和改變任意波形,而且你那個方便調節輸出頻率以及幅度,對之后產品的更新換代很有優勢。 由于本系統對信號精度要求較高,通過上面的分析,第二種方案更好,所以決定采用第二種方案。 頻率合成系統設計中的關鍵是DDS芯片的選擇,加之DDS芯片的性價比越來越高,本系統由單片機AT95S52、Xilinx公司的FPGA芯片為核心,來實現DDS數據處理,而任意波形的輸出由D/A轉換器完成。如下圖2.1所示: file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wps683E.tmp.jpg 圖2.1 系統硬件結構框
此系統由兩大部分組成分別為控制電路和數據處理電路。控制電路包括AD公司的AT98S52單片機以及一些外部的控制電路,單片機完成了對完整系統的統一調度和操控,再讓鍵盤來寫入初始信號的頻率、幅度以及最初的相位值,然后在經過單片機加工后轉變成控制字符在傳輸到FPGA芯片進行DDS波形的加工改造處理,先讓前面的D/A轉換器收入波形幅度參數,輸出信號變成了輸入參考電壓送入后一個D/A轉換器,從而完成對輸出波形的控制;完成上述工作流程后再將波形數據發送到后一個D/A轉換器,以實現任意波形的輸出。 2.2 系統硬件選擇2.2.1 單片機的選擇 通過之前的介紹可以看出,接收鍵盤輸入、發送數據以及將控制命令和參數發送給FPGA是單片機的主要工作,而且硬件電路相對簡單穩定。這些相對來說不太復雜的操作并不需要CPU具備優異的處理能力,所以選用一款大眾化,能實現基本功能的廉價CPU就可以完成系統設計任務。 Ateml公司研發的AT98S52單片機是一款能耗少、性能優異的8位微處理器,其中系統可編程Flash存儲器有8K,不僅價格低廉,而且性價比高,并且能與多種80C51產品引腳和指令集完全兼容。因為它的片上Flash允許程序存儲器在系統可編程,所以也就能夠為很多系統提供靈活多變且有效的解決辦法,同時也適用于許多普遍使用的編程器。 通過查閱資料發現AT89S52的功能有這幾點:8K字節Flash,256字節RAM,32位I/O口線,看門狗定時器,2個數據指針,三個16位定時器/計數器,一個6向量2級中斷結構,全雙工串行口,片內晶振及時終電路。尤其要特別指出的是,AT89S52可以降頻至0Hz靜態狀態運行,同時支持兩種軟件選擇所需要的節電模式。當芯片不承擔工作任務的時候,CPU暫停運行,允許RAM、定時器/計數器、串口中斷在CPU停止運行的狀態下繼續運行。 通過對其性能的全面分析,選擇AT89S52作為主控CPU。 2.2.2 FPGA的選型此次信號發生器設計的重點是DDS系統,DDS系統的性能優異與否直接決定著輸出信號的質量。DDS系統主要組成部分是多個數字電路的相互之間的配合,通過合理運用各種規模不一的通用數字電路來實現DDS在理論上的可能性。不過此手段除了結構錯綜,電路設計也有很大難度,同時伴隨著高頻干擾大,使得電磁兼容性問題很大,從而降低了性能,使之難以達到設計要求。 FPGA,即現場可編程門陣列,是近年來異軍突起快速成熟起來的一種新型數字器件,是在它之前多種可編程器件不斷進步演化出的產物,它的主要特點有以下幾項: (1)采用FPGA集成電路,不用投片生產,也能獲得理想芯片。 (2)內部有多種觸發器和I/O引腳。 (3)FPGA可做其他全定制或半定制集成電路的中試樣片。 (4)FPGA采用高速CMOS工藝,低功耗,可以和CMOS、TTL電平兼容。 (5)FPGA是集成電路設計中所需時間最短、資金投入少、安全性最高的器件之一。 如此看來,FPGA芯片是研發小型軟件實際提高系統性能的不二選擇。FPGA的出現極大的方便了集成電路的設計,縮短了電路設計周期以及所使用芯片的品種,而且它的靈活性和高穩定性,對于完成DDS系統數字電路部分有很大的幫助,這也是為什么現在絕大多DDS系統電路都是由FPGA完成的。 目前全球知名的FPGA制造廠家有Altera、Xilinx、Actel、Lattice、Atmel等,經幾代人不斷的努力,FPGA形成了種類多,型號全的從低端到高端等一整套完整的產業鏈。所以選擇FPGA器件是DDS系統電路設計之前首要面對的極其重要的一環,包括挑選廠家,產品型號和器件系列,我們的最佳選擇并不是功能最強、性能最好的器件。作為一個實際開發項目,除了性能是否優良,成本也是必須要考慮的問題,所以就要選擇價格便宜且能滿足設計要求的器件。除此,還有一個重要的因素是廠商的市場占有率,廠商的口碑關系到產品使用后的技術支持和售后問題。廠商提供的開發工具是否方便 Xilinx公司目前是全球頂級FPGA供應商,它們研發了一款只能用于自己公司研制的芯片的設計軟件,ISE。該軟件支持Xilinx FPGA所有熱銷產品。ISE使用可視化編程手段,融合了該公司發布的所有軟件包,具備所有電路開發功能,專用的的開發平臺為各類使用者提供了極大的方便。這還只是一部分,其多樣的線上幫助信息能及時輔助開發者應對設計中所遇到的各種問題。使用者只需要按照系統的提示和引導,就能利用該軟件提供的技術手段,快速、靈活地完成各種數字電路設計的開發。 綜上所述,本設計的DDS模塊決定采用來自Xilinx公司的FPGA器件Spartan 3E系列的XC3S250E,該產品集中體現了Xilinx公司低價產片的優良特性,其特點有以下幾點: (1)具有25萬個系統門; (2)采用90nm工藝; (3)包含12個專用乘法器和216kb塊RAM; (4)支持多達172個用戶I/O端口; (5)有4個專屬片上數字時鐘管理模塊 2.2.3 數模轉換模型的選擇由于數字信號存在不可直接輸出特性,所以從FPGA輸出的幅度控制參數和波形量化參數必須再由D/A轉換方可完成輸出。 下一級D/A轉換的參考電壓是幅度控制參數的D/A轉換輸出,此項參數只能到使用者確定了輸出幅度值時才發生改變,進而對轉換速率的要求不高,僅僅要求大于10Hz就可以。此次設計要求的電壓調節幅度是500mV-20V,電壓調節允許的誤差范圍是50mV,所以可以將整個調節范圍分為400個等級,把它轉換為2進制單位則只需要8位就滿足要求。本設計選擇TI公司生產的TLC7528,此器件是雙路8位數模轉換器,用于對幅度的控制足矣。 除此,根據奈奎斯特采樣定律,設計要求的最大輸出頻率是20MHz,這樣一來采樣頻率必須比40MHz大。但在實際操作的時候,信號的時鐘頻率是比50MHz大的,在一般情況下DDS的輸出頻率不會大于0.4f。一般輸出波形是否失真跟采樣頻率有很大的關系,采樣頻率越高,輸出波形的失真越小。由于這種反比關系的存在,故而將DDS系統時鐘設置成100MHz。同時選擇存儲位數為10bit的波形存儲器,使得輸出分辨率可達約5mV,讓輸出的波形變得細膩。通過上述分析,TI公司制造的DAC900基本符合本設計的要求,位數10bit,轉換速率高于100MHz。該芯片的性能特點介紹如下: (1)供電電壓范圍: 2.7V - 5V (2)最高轉換速率: 165MHz (3)轉換精度 : 10bit (4)3V供電時功耗為45mV : 5V供電時功耗為175mV (5)差分電流輸出: 滿刻度電流2mA到50mA 2.3 AT89S52的功能和結構AT89S52采用高密度非易失性存儲器技術制造,兼容51系列單片機指令和引腳,功耗低、性能好,具有8位微控制器,是目前性價比較高的控制器。可用常規編程器對片內Flash進行在系統編程。因此單片機芯片AT89S52被大量地應用在嵌入式控制系統中。 AT89S52的功能特性可以簡單的概括為以下幾點: (1)與MCS-51單片機產品兼容 (2)8K字節在系統可編程Flash存儲器 (3)1000次擦寫周期 (4)全靜態操作:0Hz-33MHz (5)三級加密程序存儲器 (6)32個可編程I/O口線 (7)三個16位定時器/計數器 (8)六個中斷源 (9)全雙工UART串行通道 (10)低功耗空閑和掉電模式 (11)掉電后中斷可喚醒 (12)看門狗定時器 (13)雙數據指針 (14)掉電標識符 AT89S52具有以下標準功能:8K字節Flash,256字節RAM,32位I/O口線,看門狗定時器,2個數據指針,三個16位定時器/計數器,一個6向量2級中斷結構,全雙工串行口,片內晶振及時終電路。尤其要特別指出的是,AT89S52可以降頻至0Hz靜態狀態運行,同時支持兩種軟件選擇所需要的節電模式。當芯片不承擔工作任務的時候,CPU暫停運行,允許RAM、定時器/計數器、串口中斷在CPU停止運行的狀態下繼續運行。
2.4 系統軟件的總體設計在本設計中,控制軟件的作用是通過接收具體的輸入數據計算出對應的波形數據,從而達到控制輸出波形的目的。LCD液晶顯示在此時也會更新,產生新的良好操作界面。其軟件主要由三大部分組成:顯示界面、控制參數計算、鍵盤輸入。總體機構框圖如下:file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wps684F.tmp.jpg
圖2.2 系統軟件控制框圖 3 系統硬件設計3.1 DDS的原理以及結構3.1.1 DDS的原理DDS(直接數字頻率合成)從相位著手,利用相位和幅度的相互之間的關系完成頻率合成。讓多個采樣點來取代目的波形,通過間隔的輸出取樣點的數值,其手段是再一次進行D/A變換從而得到輸出電平。這種采用插值取樣的方法是DDS技術最常用的。而擁有頻率分辨率、穩定性毒、相位連續、靈活性優秀,能輸出多種信號、頻率轉換速率快的等眾多優異性能的方法相當于采樣保持和D/A轉的逆過程。而頻率的連續可調則是通過控制兩個取樣點間的時間間隔以及相位增量來實現的。 舉例存在正弦信號S(x)頻率為f0,那么就有: S(x)=sin(2πfx) (2.1) 由{1}可知,用頻率f1=Mf0/K采樣,能得到一個離散的采樣序列: S(n)=sin(2πfn/f1)=sin(2nKπ/M) n=1,2,3,4... (2.2) 上述對應的相位序列為Φ(n)=2nKπ/M n=1,2,3,4... 通過分析上問所說的采樣序列,便可以發現,相鄰的兩個值之間的相位差是是一個不變的恒值,而且只跟K/M有關系,而K/M又是信號頻率,換句話說就是只跟信號頻率有關,所以得出相位增量: △Φ=2Kπ/M (2.3) 所以連續時間信號S(x)經過采樣頻率f1之后的離散時間序列可表達為: S=sin(n△Φ) n=1,2,3,4... (2.4) 由奈奎斯特采樣定理可知,當f1/f0=M/K>2時,經過低通濾波器平滑S(n)可重新回到S(t)。所以,當M不變時,一個變量K將對應一個單頻模擬正弦信號S(t) S(t)=sin(2πf1TK/M) (2.5)此信號的頻率為:f0=Kf1/M 一般情況下常取M=2′,得到 f0=Kf1/2′ (2.6)以上就是DDS的實際方程,不同的頻率可以輸出通過固定f1,經過轉換從而得出K,K也叫做頻率控制字。DDS的最低頻率,頻率分辨率輸出f為1/2′時K=1,就是DDS的最低頻率,。由此可見要達到需要的頻率分辨率和輸出頻率能夠用f1/2′為單位進行調解的話,就要N足夠大。 通過(2.3)可知,要得到一個采樣序列就要以采樣頻率f1=f02′對信號f0進行完整的周期采樣。序列中相鄰兩個值的相位差是常數△Φ=2π/2′,由此可得出結論:這2′個采樣的點的值可以預先計算出來并保存。在頻率輸出時,假如所需的輸出頻率是f=kf0,并且采樣頻率固定,這時兩個相鄰采樣點間的相位差就是△Φ=2kπ/2′。新的的采樣序列其實是從存儲的采樣序列中每k個值中隨即選出一個采樣值,再讓需要的信號f從這個新的采樣序列中重新恢復。 從上面的分析可以看出,要得到一個頻率f0=Kf1/2′的輸出信號,通過重新建立新系統,它保留了一個相位差△Φ=2π/2′的采樣序列以一個恒值頻率輸出一個相位差的采樣序列。
3.1.2 DDS的結構DDS系統的組成部分大致可以分為四個主要方面:低通濾波器、波形ROM、D/A轉換器、相位累加器,它的結構如下圖3.1所示:
file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wps6860.tmp.jpg
圖3.1 DDS系統結構 相位累加器結構,如圖3.2所示: file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wps6861.tmp.jpg 圖3.2 相位累加器 系統的工作過程: (1)寫入頻率控制字K。 (2)讓加法器的輸入端接收前一個時鐘的累加結果,使輸出相位每一個時鐘周期都增加K。 (3)單一離散相位相對的二進制數值就是波形ROM儲存的波形數據,把相位量化產生出的數據當做地址查詢波形ROM,這樣就可以得出其所對應的波形量化幅數據。 (4)D/A轉換器把ROM生成的幅度量化序列信息轉換成一對一的模擬量化信號嚴格意義上說并不是真正的連續可變信號,只算得上是階梯模擬信號,在此基礎上還需要通過低通濾波器的進一步處理方能輸出柔順細膩完美的模擬輸出波形。 3.2 FPGA的相關技術3.2.1 FPGA的基本原理近年來有一種新型可編程集成電路發展的極為迅速,稱作FPGA,就是我們所說的現場可編程門陣列。它是在上世紀問世的大部分可編程器件的基礎上經歷多年不斷演化發展的從而得到的產物,根據用戶的實際需求確定芯片的功能,以EEPROM、SRAM、Flash等等編程器件為基礎,FPGA的半制定性質使得它比起專用電路中定制電路具有較高的靈活性,比起常見的可編程器件中的數字門電路改善了門數有限的缺陷。不僅如此,FPGA規模大、集成資源豐富、速度快等其他芯片不具備的優勢也讓其在數字信號處理領域需求量更大。 經典FPGA通常由可編程輸入輸出單元、可配置邏輯塊、數字時鐘管理模塊、嵌入式塊RAM和豐富的布線資源組成,它的基本結構如下圖3.3所示:
file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wps6871.tmp.jpg 圖3.3 FPGA的基本結構
可編程邏輯是一個分布在整個芯片內的二維矩陣結構,它是FPGA的主要組成部分,通過使用者多樣的設計產生多樣的的邏輯功能,讓配置和聯接用不同方式連接即可。這些多樣化的邏輯性能,在不同條件下的輸入輸出則是通過芯片和外部電路之間的接口來完成的,這些模塊圍繞在每個單元陣列的周圍。各個邏輯功能模塊和輸入輸出模塊通過可編程內部互聯資源中長度不一的連線線段和種類不一達到鏈接開關連接,其構成的電路可以實現特定功能。而FPGA的靈活也體現在其內部還包括許多選擇靈活的模塊化工具,例如:內嵌存儲器、數字時鐘管理、算術運算、多電平標準兼容的I/O接口等單元部分,把不同單元的功能和連接關系通過編程修改就可以實現多樣化邏輯功能。 3.2.2 FPGA的開發流程 電路研發、輸入、功能仿真、綜合后仿真、實現、布線后仿真、下載調試等是一個完整的FPGA設計開發必不可少的部分,其流程圖3.4如下所示: file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wps6872.tmp.jpg 圖3.4 FPGA開發流程 在設計開發時,根據已確定的電路設計方案,把預期電路設計與輸入功能在EDA軟件中具體化。這其中原理圖設計輸入與硬件描述語言都是普遍采用的寫入手段。 3.2.3 原理圖設計輸入方法的介紹按照原有的設計規范要求,通過挑選合適的零件,畫出原理圖具體化整個輸入過程是原理圖設計輸入法最常見的手段,在FPGA誕生的早期是比較受歡迎的。原理圖是把已有的符號用連接線按照需求合理連接形成的,原理圖中的邏輯器件如與門、非門、或門、觸發器以及各種器件功能都可以是EDA軟件庫中提前設置的功能模塊。 其優勢在于元件庫資源多、易掌握、直觀,用戶不用再去花費時間了解新的知識,其使用過程易上手,對于非電氣專業的使用者來說難度都是很小的 。但是其缺點也在一些對系統要求比較高的的設計項目中暴露無遺,例如:電路功能原理理解困難,錯誤排查困難,后期設備維穩性也差就尤為明顯。除此之外最重要的一點就是當需要更換系統芯片時,需要大規模修改所有原理圖以適應新芯片。也是因為這些不可消除的缺點,所以HDL設計輸入法在高端設計的時候更受光大設計師的親賴。而影響力最廣泛的HDL語言是VHDL和Verilog HDL,兩者都采用模塊化設計方法,模塊的劃分和復用使得在器件使用時變得更加靈活,不用擔心更換芯片后的系統不兼容,實用且十分靈活。 在此之外,前仿真也是功能仿真的一種,就是把設計完畢的電路輸入后,再用專用的仿真軟件對系統進行功能仿真從而得出結論,確定電路是不是符合設計要求。仿真的作用在于它能及時發現設計中存在的不完善并加以合理的改善,相比人工操作,更能提高設計效率,加快設計進度。 HDL語言和系統原理圖還有等等一系列高級抽象化級別的寫入,是采用綜合進一步完善轉換成有或門、與門、非門、RAM、寄存器等基本邏輯模塊拼接而成的邏輯連接網表,再根據約束條件完善邏輯之間連接和輸出文件,綜合優化的用處也就體現在這里。而最終的門級電路還需要將綜合優化之后的邏輯網表經過布局布線器運用到FPGA芯片上。 開始綜合仿真流程之前還有一項十分重要的工作,就是對比綜合后結果與原設計預想是否產生了不一致。仿真時還要預設出門延造成的不好的影響,這就需要把綜合時出現的標準延時數據反標注到綜合仿真模型中。對比綜合器的綜合優化結果與設計意圖的不一致是綜合仿真的主要工作,一旦不能估計線延時,那么布線后產生的結果將會很有可能不是本設計需要的。 由與門、非門、或門、觸發器、RAM等基本邏輯單元組成的邏輯網表綜合時實現的結果嚴格來說并不是真實意義上的門級電路,跟芯片的實際配置情況還存在一定的不一致性,讓綜合得出的邏輯網表的硬件原始語言和底層單元配置到具體某一個FPGA上,并用芯片制造商提供的功能軟件完成整個流程,而這個流程就叫做實現。翻譯、映射、布局布線就是實現的一般構成部分。 在布局布線完成后,緊接著要做的就是時序仿真。通過把時序仿真中布局布線的時延文件反標注到系統中,來驗證是不是產生了時序不正確。時序仿真有門延時和延時信息。相比前面說到的各種仿真,時序仿真準確度更高。 設計開發FPGA的最后一個步驟是將所生成的配置信息編入進FPGA芯片來運行,檢查系統是否正常運行,進而完成測試。不論在調試過程的哪一步出錯,都能及時的對錯誤進行分析處理,然后返回到錯誤發生的環節進行修改或者重做。 3.2.4 開發工具介紹(1)綜合工具 把行為與功能級別所顯現的電子系統變換為低級別模塊的組合就稱之為綜合。在正常的情況下,綜合是相對于HDL語言來說的,在xilinx ISE中常用的綜合軟件有XST、和FPGA compilier 2 等等,這些綜合工具有一個共同之處,就是都是將讓與、或、非門還有RAM、寄存器等基本的邏輯單元組合的邏輯連接網表接收原理圖跟HDL語言等的設計輸入,因為本文中的系統采用的是xilinx的芯片,綜合工具本文采用的是Xilinx公司轉為自己產品研發出來的綜合工具,這樣一來同一廠商的硬件和軟件匹配性就比其他綜合工具要好很多。 (2)仿真工具 現如今最好的HDL語言仿真軟件之一是ModelSim,操作界面視覺效果好,直觀簡單。它所使用的直接優化編譯技術等使得編譯仿真的速度變快,精度也得到了提高。不僅如此該軟件編譯出的代碼跟所使用的平臺沒有直接任何聯系,這樣對于IP核來說那個得到很好的維護,還有非常新穎的操作界面和接口,強大的性能成了FPGA/ASID、C設計用戶的不二選擇。它有以下幾個方面的特點: (1)RTL和門級優化,并采用了本地便以結構,仿真速度極快。 (2)支持單內核VHDL和Verilog混合仿真。 (3)具有項目管理功能 (4)有C好和Tcl接口。 (5)綜合了波形分析比較、代碼覆蓋、數據流、模擬對象、信號條件斷點等等很多調試功能 對系統級描述語言有著最全面的支持。 激勵測試生成器其實就是根據電路設計輸入自動生成測試激勵文件的工具,激勵測試生成器。在產生所需要的激勵文件過程中,將VHDL和verilog任選一個作為源代碼跟原理圖等輸入到測試環境中,接下來把在圖形界面編輯的激勵波形變化成HDL格式,這么一來產生的激勵測試信息就能夠符合ISE中的集成仿真工具所需要的要求。不僅如此,還能得出測試激勵覆蓋率,協助使用者完成整個系統的測試調試。 三、 實現工具 把綜合輸出邏輯網表翻譯成選中芯片的底層模塊跟硬件語言,這就稱之為實現。把設計映射到每個具體的器件上。Xilinx ISE中的實現過程可以分成三個步驟,分別是翻譯,映射,布局布線。而這幾個過程都是自動執行的,當然也可以進行手動操作和單獨操作。而ISE的實現工具有很多,現對幾種主要的實現工具做具體介紹: (1)約束編輯器:顧名思義就是設計用戶約束文件。文件中有很豐富的資源,例如:管教位置、寄存器類型、延時特性、時鐘屬性、布局布線要求等。 (2)時序分析器:其作用是通過分析芯片的結構以及工作效率,分析關鍵路徑的延時信息,從而可以看出最后的結果是否滿足要求。 (3)芯片觀察窗:它的作用是為用戶提供一個圖像化的界面,以方便查看各種信號的輸入輸出、管腳鎖定和內部宏單元等各方面信息。 3.3 DDS波形合成 整個DDS信號發生器的最主要的方面是數字波形的合成。通過分析設計要求,加上不斷分析DDS的原理,再聯系上文,從而得到本設計所需的DDS數字波形合成的具體流程框圖,圖3.5如下所示:
file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wps6883.tmp.jpg 圖3.5 DDS數字波形合成實現框圖 3.3.1 時鐘模塊介紹 本系統設計要求輸出波形的最大頻率是20MHz,根據奈奎斯特定理,采樣頻率選成40MHz最為合適。低通濾波器的性能一般來說很難達到理想的狀態,而且輸出頻率還應該留一定的浮動值,因為它總是有一定的過渡帶的。實際操作時DDS的輸出頻率基本上是不可以大于0.4f,因此f必須高過50MHz。與此同時,獲得波形的質量是跟波形的采樣點數成正比的,采樣點越多越密集,輸出波形的質量就越優異。通過倍頻把本設計已經有了50MHz的晶振變為100MHz,就能產生100MHz的時鐘,這樣的話就能十分輕松的達到設計要求。 Xilinx的ISE軟件提供了數字時鐘管理模塊用于消除時鐘產生的延時、頻率合成、時鐘相位的調整等系統方面的功能,這些功能對于整個系統的完成有很大的幫助,數字時鐘管理模塊的優點主要由以下兩點: 時鐘能映射到PCB上,作用是來和外部芯片相配合,這樣一來對外部芯片的需求就會減小,使芯片的內外部的時鐘允許被控,便于系統設計。 (2)實現零偏移,還那個去掉時鐘分配時產生的延時,還能實現時鐘閉環操控。 DCM模塊參數中最重要的部分就是輸入時鐘頻率范圍、輸出時鐘頻率范圍、輸出輸入時鐘允許抖動的范圍等。根據系統提供的DCM IP核,開始生成時鐘模塊工作的時候,只需準確設置輸入、輸出,就可以產生所需要的時鐘。設置界面如下: file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wps6884.tmp.jpg 圖3.6 設置界面
各個信號端口的含義: (1)CLKFB:DCM的時鐘反饋信號 (2)RST:復位輸入信號,高電平有效 (3)CLKFB:DCM的時鐘反饋信號 (4)CLKIN:DCM的輸入時鐘的輸入信號 (5)CLK0/CLK90/CLK180/CLK270:CLKIN相位移動0°/90°/180°/270°的輸出信號 (6)CLK2X:2倍頻時鐘輸出信號 (7)CLK2X180:與CLK2X相位差180°的時鐘信號 (8)CLKFX:頻率合成時鐘輸出信號,是CLKIN經過頻率合成后的時鐘信號 (9)CLKDV:CLKIN的時鐘分頻輸出信號,分頻系數由CLKDV-DIVIDE決定 (10)CLKFX180:頻率合成時鐘相位移動180°的輸出信號,該信號與CLKFX有180°的相位差 (11)LOCKED:DCM鎖定輸出信號,顯示DCM是否鎖定CLKIN。LOCKED為高電平時,DCM的輸出信號有效 (12)STATUS:狀態信號,用于顯示DCM的工作狀態。 全局時鐘網絡不僅可以保證輸出的時鐘信號達到各個目標邏輯單元的時延基本一樣,而且能實現局部時鐘信號的輸出操控,以便于在接下來的設計中相位幅度轉換和D/A輸出。以下是時鐘模塊的實現代 Module my_dcm(CLKIN_IN, RST_IN, CLKFX_OUT, CLKIN_IBUFG_OUT, CLK0 OUT, LOCKED_OUT);
Input CLKIN_IN; Input RST_IN; Output CLKFX_OUT; Output CLKIN_IBUFG_OUT; Output CLK0_OUT; Output LOCKED_OUT;
Wire CLKFB_IN; Wire CLKFX_BUF; Wire CLKIN_IBUFG; Wire CLK0_BUF; Wire GND_BIT;
Assign GND_BIT=0; Assign CLKIN_IBUFG_OUT = CLKIN_IBUFG; Assign CLK0_OUT = CLKFB_IN; BUFG CLKFX_BUFG_INST (.I(CLKFX_BUF),.0(CLKFX_OUT)); IBUFG CLKFX_BUFG_INST (.I(CLKFX_BUF),.0(CLKFX_OUT)); BUFG CLK0_BUFG_INST (.CLKFB(CLKFB_IN),.CLKIN(CLKIN_IBUFG), .DSSEN(GND_BIT), .PSCLK(GND_BIT), .PSEN(GND_BIT), .PSINCDEC(GND_IT), .RST(RST_IN), .CLKDV( ),.CLKFX(CLKFX_BUF), .CLKFX1 80( ),.CLK0(CLK0_BUF), .CLK2X(), .CLK2X180(), .CLK90(), .CLK180(), .CLK270(), .LOCKED(LOCKED_OUT), .PSDONE(),.STATUS(); defparam DCM_SP_INST.CLK_FEEDBACK = “1”; defparam DCM_SP_INST.CLKDV_DIVIDE = 2.0; defparam DCM_SP_INST.CLKFX_DIVIDE = 1; defparam DCM_SP_INST.CLKFX_MULTIPLY = 2; defparam DCM_SP_INST.CLKIN_DIVIDE_BY_2 = “FALSE”; defparam DCM_SP_INST.CLKIN_PERIOD = 20.000; defparam DCM_SP_INST.CLKOUT_PHASE_SHIFT = “NONE”; defparam DCM_SP_INST.DESKEW_ADJUST = “SYSTEM_SYNCHRONOUS”; defparam DCM_SP_INST.DFS_FREQUENCY_MODE =”LOW”; defparam DCM_SP_INST.DLL_FREQUENCY_MODE =”LOW”; defparam DCM_SP_INST.DUTY_CYCLE_CORRECTION =”TRUE”; defparam DCM_SP_INST.FACTORY_IF = 16’hC080; defparam DCM_SP_INST.PHASE_SHIFT = 0; defparam DCM_SP_INST.STARTUP_WAIT = “FALSE”; END
3.3.2 命令接收模塊介紹
命令接收模塊的作用是將單片機輸出的頻率控制字、波形和幅度等數據進行接收。命令接收模塊的邏輯框圖如下圖3.7所示: file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wps6895.tmp.jpg 圖3.7 命令接收模塊邏輯框圖
輸入信號: Clk_R: 其作為工作時鐘的輸入端口,與51同步; En:其作為FPGA使能端口; Datain51:一共有8位(0~7),其作用是定義單片機輸入的參數端口; Sele:一共有3位(0~2),其作用是定義單片機輸入的參數的類別。 輸出信號: Ans: 其作用是應答信號輸出端口,給后續動作的響應。當接收數據結束的時候發出此信號,告訴在其之后的相位累加器該做怎樣的動作; doutF:一共有32位(0~31),其作用是輸出頻率控制字; doutA:一共有8位(0~7),其作用是輸出幅度控制字; waveform:一共有3位(0~2),其作用是輸出波形類型控制字; 此模塊VHDL語言描述: LIBRARY ieee; USE ieee.std_logic_1164.ALL; 包集 USE ieee.std_logic_unsigned.ALL; STD_LOGIC_unsigned包集 ENTITY receive IS PROT(clk_R: IN STD_LOGIC; Datain51: IN STD_LOGIC_VECTOR(7 DOWNTO O); En : IN STD_LOGIC; Sele: IN STD_LOGIC_VECTOR(3 DOWNTO O); doutF: OUT STD_LOGIC_VECTOR(31 DOWNTO O); doutA: OUT STD_LOGIC_VECTOR(7 DOWN 0); ans : OUT STD_LOGIC; waveform:OUT STD_LOGIC_VECTOR(2 DOWNTO O) ); END receive;
ARCHITECTURE bhv OF RECEIVE IS Signal FTEMP:std_logic_vector(31 downto 0); Signal ATEMP:std_logic_vector(15 downto 0);
BEGIN PROCESS(clk_R,en) BEGIN IF (clk_R’event and clk_R =’1’)then IF (en=’1’)THEN
IF SELE=”0001”THEN Waveform<=”000”; ELSIF SELE=”0010”THEN Waveform<=”001”; ELSIF SELE=”0011”THEN Waveform<=”010”; ELSIF SELE=”0100”THEN Waveform<=”011”;
ELSIF SELE=”1001”THEN FTEMP(7 DOWNTO O)<=DATAIN51(7 DOWNTO O); ELSIF SELE=”1010”THEN FTEMP(15 DOWNO 8)<=DATAIN51(7 DOWNO O); ELSIF SELE=”1011”THEN FTEMP(23 DOWN0 16)<=DATAIN51(7 DOWN O); ELSIF SELE=”1100”THEN FTEMP(31 DOWN0 24)<=DATAIN51(7 DOWN O); ELSIF SELE=”1101”THEN
ATEMP(7 DOWNTO O)<=DATAIN51(7 DOWNTO O); END IF DoutF <=FTEMP(31 DOWNTO O); DoutA<=ATEMP(7 DOWNTO O); Ans<=’1’; END IF; END IF; END PROCESS; END; 3.3.3 相位累加器介紹 DDS的性能是否優良取決于一個非常重要的因素就是相位累加器,它由一個n位寄存器和一個n位加法器級聯構成的,具體的結構圖如圖3.8所示: file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wps68A5.tmp.jpg 圖3.8 相位累加器機構圖
此次所設計的信號發生器產生出的標準波形的分辨率的是0.1Hz,DDS系統的時鐘是100MHz,也是因為這兩項數相位累加器的位數設置成30。根據fMIN=fC/2N=108/230=0.093Hz,不難知道選擇的相位累加器位數是符合設計要求的。相位累加器在時鐘的影響下不間斷的通過這種方式完成要求次數的循環累加。做完一個完整流程的動作的標志是當相位累加器發生了一次相位溢出時,相位累加器用目前所保存的值為基礎,繼續進行對相位累加器相位再一次進行相位相加求和。DDS頻率合成信號的周期說白了就是這樣的流程,而此時此刻該相位累加器的溢出頻率就成了DDS輸出信號的頻率。盡管該模塊能夠輸出30位的地址參數數據,但由于設計波形數據存儲器深度為1024點,存儲的容量十分有限,所以波形ROM的地址只能取高10位。 累加器實現代碼: Phase_add:process(clk) Begin If(clk’event and clk=’1’)then Phase_adder<=phase_adder+frq_reg; Rom_adder(9 DOWNTO 0)<= phase_adder(29 DOWNTO 20); End if; End prosess; 3.3.4 波形ROM模塊完成從相位到幅度的轉換技術手段有兩種,分別是計算法與查表法。查表法相對來說是一種比較普遍的相幅轉換手段,它是將相位對應的幅度值提前存在存儲器中,再按照相位進行查找。函數計算法是通過數學方面的算術運算方法,根據相位累加器輸出的相位值從而得到相應的理想幅度值。通過認真分析這兩種方法的區別不難發現,計算法所需要的邏輯資源較大對資源的要求也高,不僅如此,整個過程實現起來由于復雜,隨之速度也變得比較慢;查找表法則需要用到非常大的存儲資源,對邏輯資源的要求沒有計算法那么高,速度比較快。如此看來,查找表的相幅轉換方法更加適用于本系統。 3.3.5 DDS處理模塊DDS處理模塊其實就是把上文所述的模塊綜合起來,從而實現DDS總體功能,而實現代碼主要是用到上述的幾個模塊。將各個模塊按照設計要求進行連接,寫入既定程序,再輸出測試代碼進行調試,就可以構成符合實驗要求的DDS處理模塊。 Inst_datal:romsinl PORT MAP(addr=)address, clk=>CLK,dout=>rom_outsinl); Inst_data2:romsqua PORT MAP(addr=)address, clk=>CLK,dout=>rom_outsqua); Inst_data3:romtri PORT MAP(addr=)address, clk=>CLK,dout=>rom_outtri); Inst_data4:romsawth PORT MAP(addr=)address, clk=>CLK,dout=>rom_outsawth); Judgewav:process(clk) Begin If(clk’event and clk=’1’)then If A=”000”then Rom_out<=rom_outsinl; Elsif A=”001” then Rom_out<=rom_outsqua; Elsif A=”010”then Rom_out<=rom_outtri; Elsif A=”011”then Rom_out<=rom_outsawth; End if; End if; End process; 3.3.6 DA轉換電路設計從波形ROM中讀出的幅度量化數據和從命令接收模塊輸出的幅度控制數據都只是一個數字信號,唯一的辦法是通過數模轉換器轉換轉換之后就能夠生成最后的輸出信號。第一點,將幅度控制參數信息轉變成電壓信號來用于波形D/A轉換器的參考電壓輸入到D/A轉換器中;第二點,在波形ROM之后再想辦法設計增加一個D/A轉換電路,把波形采樣參數信息轉換為模擬輸出信號。再一個由于D/A轉換芯片的品種相當多,而且要根據相當多因素來挑選D/A轉換器,在眾多因素當中,其中字長和轉換速度是最主要的。波形幅度控制字只是在設定信號幅值的時候才發生變化,字長是8位,所以對于幅值控制A/D轉換器本系統決定采用TI公司的TLC7528。不過,因為任意波形生成器的系統時鐘已經被設計固定成為100MHz,所以必須得要選定出一個轉換速率大于100MHz的D/A轉換器。結合上文分析,本系統選用ADC900來做輸出波形的D/A轉換的工作。 TLC7528是一塊工作電源為5~15V,功耗小于15mw的雙路8位數模轉換器。現對它的特點做如下介紹: (1)片內數據鎖存 (2)易于與微處理器接口 (3)可與模擬器件AD7528互換 (4)在每個A/D轉換范圍內具有單調性 (5)適用包括與TMS320接口的數字信號處理應用的快速控制信號 TLC7528的接口電路圖如下圖3.9所示: file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wps68A6.tmp.jpg 圖3.9 TLC7528接口電路
圖中,DAC900的參考電壓由第一路工作方式為單一極性的OUT-A控制。由于DAC900的外部參考電壓范圍是0.1V~1.25V,為了將參考電壓范圍控制在設計目標理想值,現加入了一個反向比例衰減電路。TI公司的ADC900是10位高速數模轉換芯片,它的特點如下: (1)工作電壓:2.7V~5.5V (2)輸出更新速率165MSPS (3)低功耗 (4)無假信號動態范圍 (5)低毛刺 (6)可選的外部參考;可任意調節的全程范圍 因為電流型輸出型器件需要外接運算放大器將電流信號轉換成電壓信號,所以DAC900的外圍接口電路圖如3.10所示: file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wps68B7.tmp.jpg 圖3.10 ADC900接口電路
3.4 人機交互部分的硬件設計人機交互由輸出和輸入兩個部分組成,在用戶和設備之間信息交換的時候起著媒介的作用。輸出部分的作用是顯示操作界面和測量結果,輸入部分的作用是寫入具體的某一指令以及參數。在整個DDS系統中,輸入模塊使用鍵盤掃描的方法,輸出部分采用了LCD屏顯示。通過鍵盤輸入來選擇人機交互的工作模式,波形參數值通過LCD顯示。整體用戶界面以51單片機為主,鍵盤掃描,顯示刷新,鍵盤輸入為輔,共同進行處理工作。 具體的LCD顯示界面如下圖3.11所示: file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wps68B8.tmp.jpg 圖3.11 系統顯示界面 鍵盤布局如下圖: file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wps68B9.tmp.jpg 圖3.12 鍵盤布局圖 隨便按一下鍵盤上的鍵,LCD便可以顯示出系統菜單。如系統顯示界面圖,將鼠標懸在“波形”上,可以運用上下箭頭選擇新的菜單,按下“確認”后方能進入所對應的項目。進入菜單之后,再按上下箭頭選擇需要的項目,而在“波形”菜單中來挑選所需要的波形,也可以在頻率菜單中選擇頻率刪除菜單用來刪除已輸入的數據參數,返回鍵用來返回上一級菜單。
4 系統軟件設計 4.1 C51簡介Keil C51是為51系列兼容單片機C語言軟件專門研發出來的的針對軟件,整個界面都是微軟系統,來極大的方便用戶操作使用,還配備了種類多樣的庫函數和功能十分強勁的集成開發測試工具。相比于匯編語言,C語言在功能性、結構性,可讀性、維護性等等影響系統性能等十分重要的性能方面具有無法比擬的優勢,后期調試維護起來省時省力,而且學習起來比較容易,掌握起來也比較容易。 為方便使用,8051微控制器系列專門研發了Keil C51編譯器,在遵循ANSI標準的同時在語言上進行了大規模的擴展,這也讓使用者能夠享用系統中的所有資源。C51編譯器提供多種數據類型,以及專門針對8051單片機的多種存儲器類型,加之運用合理的方式自動分配變量地址,sfr和sbit兩個關鍵字提供特殊功能寄存器SFR 的存取,這是使得C51編譯器可以對8051系列所有資源進行充分的利用。在C51中,用關鍵字來定義可重入功能。C51提供了許許多多靈活且高效的指針用來針對不同的存儲類型,這樣就可以在8051的任何存儲區內存取出想要的任意變量。特殊指針發出聲明的同時就已經計劃出了某一特定的存儲區域的存儲器類型,因為地址需要的字節存儲特別少,所以指針的存儲操作速度非常快。大型軟件開發時使用C語言的優勢在于絕大多數語句都能夠生成非常緊湊的匯編代碼,這使得產生出目標代碼的效率相當高。 4.2 控制軟件的設計4.2.1總體控制模塊此次設計采用以鍵盤為主的操作輸入結構,軟件部分的設計手段采用模塊化程序。用C51編寫主要分為主程序模塊、初始化模塊、顯示模塊、鍵盤掃描模塊、參數設計模塊等,各個功能模塊的函數如下所示: Void mian( )主模塊 Void init( )系統初始化模塊 Uchar keyscan( )鍵盤掃描模塊 Void menudisplay( )菜單模塊 Void disp( )顯示更新模塊 主模塊最重要的工作是循環調用鍵盤處理和顯示處理兩個模塊,與此同時主模塊還有一項不可忽視的作用就是還用來調用各子模塊和執行系統的主控流程,讓系統按照預設方案工作。以下是主模塊的完整源代碼: 主模塊最重要的工作是循環調用鍵盤處理和顯示處理兩個模塊,與此同時主模塊還有一項不可忽視的作用就是還用來調用各子模塊和執行系統的主控流程,讓系統按照預設方案工作。以下是主模塊的完整源代碼: Main() { Uchar key_temp Uint i,j; Init(); //系統初始化 Cls(): //清屏 Main_paly(); //顯示開機畫面 For(j=10;j>0;j--) //延時 { For(i=60000;i>0:i--); } Menudispaly(); //顯示主菜單 While(1) //通過鍵盤掃描來執行程序 { Key_temp=keyscan(); Keyhandle(key_temp); Dis(); //顯示更新 } }
4.2.2 鍵盤掃描和處理模塊本系統的鍵盤采用4×4的矩陣式排列,16個按鍵。確認是否有按鍵輸入,送行碼,讀列碼等任務是單片機使用掃描手段來完成的。此模塊的流程圖如下圖4.1所示:
file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wps68C9.tmp.jpg 圖4.1 鍵盤掃描程序流程
4.2.3 液晶顯示模塊液晶顯示模塊的具體工作任務有兩方面,就是顯示系統菜單以及用戶輸入的數值,一旦鍵盤接收到新的輸入的時候,都是用液晶顯示模塊來更新顯示。液晶顯示模塊的工作流程如圖3.14所示:
file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wps68CA.tmp.jpg
圖3.14 液晶顯示流程
5 系統調試與性能測試在整個系統的硬件設計部分和軟件設計部分完成后,為了確保設計中是否還存在一定的不完善,和后期實際操作時是否到達語氣效果,就需要對系統進行全面仔細的測試。只要是人工加工的產品都存在一定的誤差,所以例如電路板的焊接存在虛焊等問題,都會破壞整個設計的完整性 。所以系統調試分析對于系統十分重要。 5.1電路調試 5.1.1 單片機調試一個完整系統能夠正常運行的核心在于AT89S52單片機,除此之外其他所有模塊的工作都由它來調度協調分配。在進行單片機調試工作之前,需要仔細核查芯片內部電源和接地有沒有正常連接,以及復位電路是否正常。在嚴格按照規定完成一系列檢查工作之后才可以接通電源,然后用示波器查看晶振有沒有按照設計方案正常運轉。 單片機本身的驗證其實相對簡單,只需要編寫一個簡單的波形輸出程序,再檢查示波器的輸出波形是否與輸入程序一致,如果輸出波形與輸入的程序一致則單片機工作正常。反之,則不正常。 5.1.2 鍵盤和LCD的調試鍵盤屬于硬件設備,檢查起來就比較方便,也比較簡單。可以用萬用便檢查鍵盤各個部分是否正常通電,有無短路或斷路即可。 因為有專用的LCD調試程序,所以當調試LCD時只需要輸入專用程序,再查看屏幕上是否出現相應字符即可。 5.1.3 FPGA的調試FPGA正常運行與否在整個波形生成流程中起著決定性作用,我們那個夠用ISE編寫一組全新的檢驗代碼,來檢查FPGA器件能不能正常工作,讓引腳50接高電平,引腳60接地。然后用下載電路下載,查看示波器就可以看出兩個引腳的電平是不是正常,從而也就能分析出FPGA是不是正常運轉 5.1.4 D/A轉換模塊的調試數模轉換控制由兩部分組成,分別是:幅值控制、波形輸出。 DAC900是一個采用差分電流輸出的10位高速數模轉換器,因為它的電流不能被直接測量,所以需要將電流轉換成電壓在進行測量。具體方法是在DAC900的輸出端和地之間接一個50歐姆的電阻進行調試,如此一來就不存在電流不能被直接測量的問題了。 5.2 系統測試在硬件部分和軟件部分的調試都完成之后,那么接下來就需要進行系統的組裝調試,通過看系統完成聯機后的性能表現來判斷系統是否正常工作。通過分析系統要求的各項功能與性能指標,決定選用一個雙蹤示波器和一個頻率計作為測試設備。 5.2.1 輸出波形的測試通過給以多樣化的工作命令,讓信號發生器遵循指令的要求分別產生出正弦波、方波、三角波、鋸齒波,在信號發生器輸出波形的同時將示波器接到函數發生器的BNC上,這樣產生的波形就能一目了然,如下圖5.1所示: file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wps68DB.tmp.jpg 圖5.1 正弦波
file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wps68DC.tmp.jpg 圖5.2方波
file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wps68ED.tmp.jpg 圖5.3 三角波
file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wps68EE.tmp.jpg 圖5-4 鋸齒波 5.2.2 信號頻率的測量進行頻率測量工作的時候,通過信號發生器的面板將輸出頻率分別設置成10Hz、1KHz、1MHz、10MHz、20MHz的各種波形參數,使用頻率計對其進行測量,就可以進行跟設定值的對比。具體測量結果如表5-1所示。 由于本次設計要求的頻率分辨率是0.1Hz,選取任意兩個相差0.1Hz的頻率,比如取在10Hz與10.1Hz,然后使用頻率計測量各種波形的輸出,結果如表5-2所示。
表5.1 輸出頻率測試結果
從表5-1可以看出,本系統能夠產生所有設計之初要求的所有波形,而且每個波形的最高和最低要求都能輸出,符合設計要求。
表5.2 頻率穩定度測試結果
5.2.3 信號幅度測量在測試信號幅度的時候,用鍵盤把設置f=1KHz作為信號發生器的輸出頻率,其輸出的正弦波、三角波、方波、鋸齒波的幅值分別是500mV、1V、5V。在用示波器測量各個幅度,測量結果如下表所示: 表5.3 輸出幅度測試結果
從上表能夠看出,輸出的各個波形的最高最低幅度電壓滿足電壓輸出幅度的要求。 5.2.4 頻率穩定度測量因為類比性,選擇具有代表性的正弦波來測試系統的頻率穩定度,具體結果如下表所示: 表5.4 頻率穩定度測量結果
從表中能夠看出,由于被測的信號中難免會混入噪聲,噪聲信號疊加在被測信號上似的在不同的時間所測得的頻率值并不完全相等,這也是頻率測量結果出現偏差的原因。 5.3 誤差分析 DSS系統需要滿足以下幾個條件才能得到想要符合要求的輸出頻譜: (1)波形ROM中存儲的波形幅度值用無限長度的二進制數來表示。 (2)累加器的輸出都用來進行ROM尋址。 (3)D/A轉換器不僅具備十分理想的數模轉換特質,而且分辨率無上限。 不過在實際操作當中,這幾個條件基本上都很難滿足。所以我們對可能會產生誤差的幾個方面進行進一步的研究。 為了使產生的波形具有比較高的頻率分辨率,對相位控制字的位數一般都會取的比較大,根據△f=fc/2N可得出結論,N值和頻率分辨率是成正比的,N值越大頻率分辨率就越高,本設計中相位累加器的寬度取N=30。想要N位都用于尋址ROM,就要用到很大很大的存儲容量,而如此之大的ROM表容量很難在實際中實現。正因為這樣,所以通常人們不采用低的N-M位,而選擇高M位來尋址。在本設計中,尋址方法并沒有采用低20位,而是偏偏選用了高10位,這樣一來不好的地方是,會無法避免的產生相位截斷誤差。所以DDS輸出雜散其中一個原因就是相位在低20位變換的時候輸出都完全相同。 再通過二進制整數方式傳給DDS,輸出頻率的偏差就是在這樣的計算過程中產生的。 用一系列的離散采樣點來表示波形存儲表,本設計中用10位的二進制數來表示信號幅度,顯而易見的是這樣表示方法肯定存在幅度量化誤差。一般情況下ROM表的寬度與其存儲的數值是成正比的。除此之外,波形存儲表中的相位是以整數形式表示的一系列有限的離散采樣點,這樣的話就無法避免的產生了相位量化誤差,不過可以通過增加采樣點的數目來減小誤差 兩個輸出電平間的暫態相應大小就是DAC的毛刺,通常情況下數據位間的時滯和器件內部邏輯電路的傳輸造成了這種暫態相應,也就使得短暫的中間態出現在DAC輸出信號中。 不光存在以上因素,引起雜散的原因還有系統參考時鐘泄露、電源引起的噪聲干擾、外來電磁干擾等。不過好的一方面是這些引起雜散的原因都可以通過合理的電路設計來進行進一步的優化。 雖然上文中有很多無法避免的誤差,但可以通過各種手段來減少誤差,比如:選擇更加合理的量化值,擴大存儲區容量和數據位數,選用高質量的電源,合適的D/A轉換器,再加上低通濾波器進行輸出平滑,盡可能的減小輸出波形可能存在的誤差。
結 論
近二十年之間,直接數字頻率合成技術發展的極為迅速,漸漸成為了最先進的頻率合成技術。它的頻率分辨率高和切換速度快以及相位變化連續等等優勢,使得對它的應用也是愈發廣泛。在性能方面,因為采用了數字合成技術,所以性能相比之前一般的頻率合成有了極大的提升。 本文從信號發生器的原理理論等各個方面,聯系實際,對DDS技術進行了十分全面的分析研究。在設計中,不僅對DDS輸出信號的頻譜對了分析,結合理論分析,最后用FPGA實現了基于DDS的波形信號發生器。在整個設計完成后,最系統的軟件和硬件部分都進行了全面的測試,對實驗結果進行分析,表明此次設計達到了最初的設計要求。 在完成本次信號發生器設計工作之后,再一次分析這個過程中遇到的難題,能夠清晰的發現自己在理論知識方面還有很大的欠缺,并且在實際操作與理論知識相結合時還是不能游刃有余。在某種意義上來講,本次設計也為自己確立了以后的發展方向,
|