<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 基于51單片機(jī)、EDA技術(shù)的波形發(fā)生器的設(shè)計(jì)

          基于51單片機(jī)、EDA技術(shù)的波形發(fā)生器的設(shè)計(jì)

          作者: 時(shí)間:2011-12-21 來源:網(wǎng)絡(luò) 收藏

            該以單片機(jī)(MCS8031)為中心控制單元,由鍵盤輸入模塊、數(shù)碼管顯示模塊、D/A波形發(fā)生模塊、幅值調(diào)整模塊組成。采用DDFS技術(shù),先將要求的波形數(shù)據(jù)存儲(chǔ)于EEPROM中,這樣可以保證掉電以后波形數(shù)據(jù)不丟失。

            為了達(dá)到所要求的高速度,采用FPGA(ALTEAR 公司的 EPF10K10LC84-4, 晶振頻率可達(dá) 40MHz)來實(shí)現(xiàn)波形的發(fā)生,通過DDFS技術(shù)(直接數(shù)字頻率合成技術(shù))、VHDL語言和單片機(jī)匯編語言編程技術(shù)的完美結(jié)合實(shí)現(xiàn)了對(duì)正弦波、方波和三角波三種波形的頻率、幅值的設(shè)置和發(fā)生。

            隨著深亞微米半導(dǎo)體技術(shù)的進(jìn)步,可編程邏輯器件及的應(yīng)用已經(jīng)相當(dāng)普及?;诳删幊踢壿嬈骷母哳l性質(zhì)和單片機(jī)強(qiáng)大的數(shù)據(jù)處理功能,二者結(jié)合的技術(shù)也有相當(dāng)?shù)挠绊懥?。本設(shè)計(jì)中涉及到單片機(jī)匯編語言、VHDL語言的運(yùn)用,充分地利用了二者的優(yōu)點(diǎn),制作了一套波形發(fā)生系統(tǒng)。

            1 系統(tǒng)設(shè)計(jì)

            整體設(shè)計(jì)由三大模塊組成:?jiǎn)纹瑱C(jī)控制部分、可編程邏輯器件(FPGA)部分、模擬電路部分。其系統(tǒng)方框原理圖如下所示:

          波形發(fā)生采用DDS技術(shù),可以很方便地產(chǎn)生各種高質(zhì)量的波形,DDS的基本原理是:先將要產(chǎn)生的波形數(shù)據(jù)存入,然后通過改變參考脈沖的頻率,將波形數(shù)據(jù)傳送給D/A轉(zhuǎn)換器,濾波處理后便可以輸出光滑的合成波形。為了提高所產(chǎn)生的波形頻率,采用高頻率特性的FPGA(ALTERA公司的 EPF10K10LC84-4),后級(jí)電路采用有較高的轉(zhuǎn)換速度的DAC0832作為D/A轉(zhuǎn)換。

            1.1 單片機(jī)部分

            在設(shè)計(jì)中,采用MCS8031為處理器,P2.7作為8279的片選端,P2.6作為FPGA的片選端, P2.5為DAC0832(a)的片選端。P0口作為三者的低8位地址和數(shù)據(jù)線。單片機(jī)控制DAC0832(a),使其輸出為0~5V可變電壓,作為 DAC0832(b)的參考電壓,于是可控制輸出波形的幅值。由于采用7位數(shù)據(jù)控制,精度可達(dá)到0.039V。

            1.2 FPGA模塊

            設(shè)計(jì)中我使用了ALTRA公司的MAXPLUSⅡ 10.0系統(tǒng),采用原理圖和VHDL語言編程相結(jié)合的形式,充分地發(fā)揮了FPGA的高速和現(xiàn)場(chǎng)可編程的能力。

            在FPGA中通過編程片內(nèi)實(shí)現(xiàn)比例乘法器(cc14527),在單片機(jī)的控制下,F(xiàn)PGA接收單片機(jī)傳送過來的用戶要求的波形數(shù)據(jù)及其頻率數(shù)據(jù),并送到比例乘法器以產(chǎn)生所需要的輸出頻率值。頂層圖如下:

          其中:P20作為FPGA的片選端,低電平有效,高電平時(shí)保持現(xiàn)有狀態(tài),與單片機(jī)的P2.6相連。WR為FPGA的寫信號(hào),與單片機(jī)的寫端口相連。當(dāng)P20為低電平時(shí),單片機(jī)可向FPGA寫數(shù)據(jù),以達(dá)到傳送命令以及數(shù)據(jù)的目的。ALE為輸入信號(hào),與單片機(jī)的ALE信號(hào)相連,用于FPGA片內(nèi)鎖存地址,配合WR信號(hào)進(jìn)行單片機(jī)與FPGA的通訊。P0[7..0]共8條數(shù)據(jù)線,為單片機(jī)P0口的接口,用于地址和數(shù)據(jù)的傳送。CLK為FPGA的基準(zhǔn)頻率(16MHz)。WR0832用于控制DAC0832(b),與其WR端相連,在其下跳沿時(shí)DAC0832(b)可以取到存儲(chǔ)器中相應(yīng)給定地址的數(shù)據(jù)。 CE:用于控制EEPROM28C64,與其片選端CE相連。CE1用于控制DAC0832(b),與其片選端CE相連。ADDRESS[9..0]為 EEPROM28C64的地址信號(hào),用于取址。

            EEPROM28C64中存有波形數(shù)據(jù),單片機(jī)通過控制FPGA使其輸出的頻率為用戶所需頻率的128倍,用于控制EEPROM28C64的輸出值的頻率,于是DAC0832(b)的輸出波形頻率也相應(yīng)地改變。在FPGA內(nèi)主要完成比例乘法器的功能,用于頻率的控制。

            單片機(jī)與FPGA通訊接口原理如下圖所示:

          其中:SEL信號(hào),用于控制波形的形狀,共有三種波形(正弦波、方波、三角波)。Q0[3..0]~Q5[3..0]用于6級(jí)級(jí)聯(lián)比例乘法器的置數(shù)輸入。ST為級(jí)聯(lián)比例乘法器的片選端,低有效。

            FPGA片內(nèi)實(shí)現(xiàn)寄存器,可對(duì)單片機(jī)傳輸?shù)臄?shù)據(jù)和命令進(jìn)行寄存,具體如下:

           ?、琶罴拇嫫?/P>

            入口地址:FFH 命令字:FFH(ST有效),00H(ST無效)
          入口地址:00H 命令字:E0H(顯示正弦波,sel為00),E1H(顯示方波,sel為01),E2H(顯示三角波,sel為10)。

           ?、?數(shù)據(jù)寄存器

            入口地址:01H,02H,03H分別存儲(chǔ)單片機(jī)傳送的6位10進(jìn)制數(shù)。這些數(shù)據(jù)是用戶要求的頻率數(shù)通過單片機(jī)乘8處理后傳送過來的,為乘法器提供頻率數(shù)據(jù)。

            FPGA對(duì)DAC0832及EEPROM28C64控制接口如下圖所示:

          WR0832為DAC0832讀信號(hào),下跳沿讀取數(shù)據(jù)。CE、CE1分別為DAC0832、EEPROM28C64片選端。ADDRESS[9..0]為 EEPROM28C64地址信號(hào)。ADDRESS[9..0]的高兩位為SEL[1..0],時(shí)鐘信號(hào)CLK上升沿時(shí)ADDRESS[6..0]:自增 1,EEPROM28C64輸出相應(yīng)的波形數(shù)據(jù)。同時(shí)CLK下降沿時(shí),DAC0832讀取波形數(shù)據(jù)。


            3 模擬部分

            DAC0832與單片機(jī)采用單緩沖方式接口電路,由于DAC0832內(nèi)部含有鎖存器,具有鎖存功能,所以不必通過373鎖存。DAC0832的模擬電壓輸出電路如下:

          濾波部分采用帶通濾波,使低于1HZ的頻率信號(hào)和高于100KHZ的頻率信號(hào)被濾掉,增加波形的平滑度。



          評(píng)論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();