• <li id="00i08"><input id="00i08"></input></li>
  • <sup id="00i08"><tbody id="00i08"></tbody></sup>
    <abbr id="00i08"></abbr>
  • 新聞中心

    EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > 基于FPGA與單片機的波形發(fā)生器設(shè)計

    基于FPGA與單片機的波形發(fā)生器設(shè)計

    作者: 時間:2012-01-07 來源:網(wǎng)絡(luò) 收藏

    1 引言

    可編程邏輯器件(PLD)及EDA技術(shù)的應(yīng)用成為電子系統(tǒng)設(shè)計的潮流。是一種新興的可編程邏輯器件(PLD),與其它PLD相比,具有更高的密度、更快的工作速度和更大的編程靈活性。以其體積小、功能齊全、價格低廉、可靠性高等方面所具有的獨特優(yōu)點,長期以來被廣泛的應(yīng)用在各領(lǐng)域。

    基于的高密度、高速度、現(xiàn)場可編程的能力和強大的數(shù)據(jù)處理功能,制作了波形發(fā)生系統(tǒng),用于產(chǎn)生頻率為10Hz~20kHz的正弦波,鋸齒波,三角波和四路分別占空比0~100%可調(diào)的PWM波。

    2 系統(tǒng)設(shè)計

    整體設(shè)計由四個部分組成:上位機部分,部分,部分,模擬電路部分。

    波形發(fā)生器以單片機(MCS8031)為中心控制單元,由上位機控制界面,波形發(fā)生模塊和D/A轉(zhuǎn)換模塊組成,采用(直接數(shù)字頻率合成)技術(shù),將要求的波形數(shù)據(jù)存儲于FPGA內(nèi)構(gòu)建的ROM當(dāng)中,單片機跟據(jù)上位機的命令輸出查表地址等信息至FPGA,F(xiàn)PGA產(chǎn)生相應(yīng)得波形數(shù)據(jù)經(jīng)D/A轉(zhuǎn)換器輸出。其系統(tǒng)原理框圖如下:

    圖1 系統(tǒng)原理框圖

    2.1 單片機部分

    在設(shè)計中采用MCS8031為處理器,選擇P1.0,P1.1作為波形選擇信號,P1.2作為FPGA的復(fù)位信號,P2.5作為DACO832的片選端,P0口作為低8位地址和數(shù)據(jù)線。單片機接收來自上位機的命令信息后將相應(yīng)的波形設(shè)置信息輸出到FPGA,并控制DAC0832的使能。

    單片機接收并處理來自上位機的數(shù)據(jù)信息流程圖如圖2所示:

    圖2 單片機接收并處理上位機數(shù)據(jù)流程圖

    2.2 FPGA部分及模擬電路部分

    波形發(fā)生采用技術(shù)可以很方便地產(chǎn)生各種高質(zhì)量的波形。技術(shù)是從相位概念出發(fā)之結(jié)合成所需要波形的一種頻率合成技術(shù)。以正弦波為例,首先要按照一定的采樣點數(shù)將正弦波形一個周期的數(shù)據(jù)信息存于ROM表中,表中包含著一個周期正弦波的數(shù)字幅度信息,每個地址對應(yīng)正弦波中0到360度范圍內(nèi)的一個相位點的幅度值,查找表時即是把輸入的地址相位信息映射成正弦波幅度的數(shù)字量信號,以驅(qū)動D/A轉(zhuǎn)換電路。DDS方法通過查找表輸出信號的頻率可由下式給出:

    Fout=(x*[Fclk])/Y; Y為2的N次冪;

    其中頻率控制字與輸出信號的頻率成正比,因此可以通過改變尋址的步長來改變輸出信號的頻率,因為在確定了累加器的位寬N和尋址位寬M,以及系統(tǒng)時鐘Fclk后,隨著步長X的增加,在每次累加器循環(huán)的一個周期中,輸出的M為查找表的地址個數(shù)就會減少,相應(yīng)輸出一個中期波形的時間也就會減少,輸出信號的頻率相應(yīng)增加,這就是DDS的方法。

    需要注意的是,隨著步長和輸出頻率的增加,輸出信號的采樣點數(shù)會減少,會降低產(chǎn)生波形的精度和平滑度,因此也限制了輸出信號的最高頻率,而且由采樣定理可知,所產(chǎn)生的信號頻率不能超過時鐘頻率的一半,在實際應(yīng)用中,為了保證信號的輸出質(zhì)量,輸出的頻率不要高于時鐘頻率的33%,以避免混疊或諧波落入有用輸出頻帶內(nèi)。

    為了提高所產(chǎn)生的波形頻率,采用高頻率特性的FPGA(ALTERA EPF10K10LC84-4)。后級電路采用有較高的轉(zhuǎn)換速度的DAC0832作為D/A轉(zhuǎn)換。

    在FPGA內(nèi)實現(xiàn)ROM表的資源是有限的,并且ROM表的大小隨著地址位數(shù)和數(shù)據(jù)位數(shù)的增加成指數(shù)遞增關(guān)系,因此在滿足采樣信號性能的前提條件下,如何減少資源的開銷就是一個重要的問題。在實際設(shè)計時,充分利用了正弦波信號周期內(nèi)的對稱性和算術(shù)關(guān)系來減少ROM表資源的開銷,因此通過一個正弦表的前1/4周期就可以通過相位變換得到其整個波形周期的采樣值,這樣就節(jié)省了將近3/4的資源。

    對于PWM波部分,采用分頻器,累加器與比較器結(jié)合的方式實現(xiàn),對于各個部分采用模塊化設(shè)計分別實現(xiàn),并在頂層文件中連接在一起可以方便進行修改,擴展和移植。

    正弦波,三角波,鋸齒波的部分源程序如下:

    p_rom:process(clk,reset)

    begin

    if clk'event and clk='1' then

    clk_rom=clk_rom + frq_data;

    case p1 is

    when "00"=>rom_address=clk_rom( 19 downto 13)+"000000000";

    when "01"=>rom_address=clk_rom( 19 downto 13)+"010000000";

    when "10"=>rom_address=clk_rom( 19 downto 13)+"011111111";

    when others=>null;

    end case;

    end if;

    end process p_rom;

    2.3 上位機部分

    利用Windows系統(tǒng)中提供的串行通訊功能完備的ActiveX控件即MSComm控件實現(xiàn)與單片機的通信。MSComm控件具有編程容易實現(xiàn),簡捷方便等優(yōu)點,但僅在對話框中使用。根據(jù)波形發(fā)生器的特點和要求,MSComm控件可以完全實現(xiàn)要求。

    像其他控件一樣,通信空間也是用一系列的屬性和用戶接口,控件提供了許多屬性,大部分屬性僅和Modem有關(guān),下面將常用的屬性做一下簡要說明:

    CommPort:設(shè)置并返回通信口號,缺省值為COM1。

    Settings:設(shè)置并返回波特率、奇偶校驗、數(shù)據(jù)位、停止位的字符串。其中波特率的范圍為300b/s到19200b/s。

    PortOpcn:設(shè)置并返回通信口的狀態(tài),同時用來打開和關(guān)閉通信口。

    InputLen:決定每次Input讀入的字符個數(shù),缺省為0,表示讀取接收緩沖區(qū)的全部內(nèi)容。

    Input:讀入并清除接收緩沖區(qū)的字符。

    InBuferCount:返回接收緩沖區(qū)已接收的字符數(shù),通過置0可清除接收緩沖區(qū)。

    -!wuyou dianzi kaifawang-->

    Output:將發(fā)送的字符串或數(shù)組寫到發(fā)送緩沖區(qū)。

    InputMode:定義Inpput屬性獲得數(shù)據(jù)的方式。

    Rthreshold:設(shè)置、返回在通信控件置ComEvRecieve并激發(fā)OnComm事件前要接收的字符數(shù)。

    SThreshold:設(shè)置、返回通信控件置ComEvSend并激發(fā)OnComm事件前發(fā)送緩沖區(qū)中的最少字符數(shù)。

    另外,由于在VC界面中出現(xiàn)的是10到20k的整型數(shù)據(jù),因此需要將此頻率數(shù)據(jù)轉(zhuǎn)換成16位的頻率控制字送給單片機,轉(zhuǎn)換程序如下:

    void CWaveDlg::CalculateFreq(unsigned int unFreq)

    {

    double m;

    m=unFreq*0.0001024;

    m=m*1024;

    CommandMCU.uchLowData= (unsigned char) m%256;

    CommandMCU.uchHighData=m/256;

    return;

    }

    3 結(jié)束語

    本文作者創(chuàng)新點:采用了直接數(shù)字頻率合成(DDS)技術(shù),經(jīng)過仿真,電路測試,輸出波形上完全達到了設(shè)計的要求。與以往的采取波形存儲和波形復(fù)現(xiàn)方式的波形發(fā)生器相比,基于DDS的波形發(fā)生器可以很方便的實現(xiàn)頻率的調(diào)制功能,產(chǎn)生的波形可以達到很高的頻率分辨率,輸出頻率的轉(zhuǎn)換速度快,而且在頻率轉(zhuǎn)換時,DDS輸出波形的相位是連續(xù)的。

    參考文獻:

    1.王鳳臣,李慶瑞等.基于DDS的波形發(fā)生器在HIRFL-CSR電源控制系統(tǒng)中的應(yīng)用[J].微計算機信息,2006,22:3-5

    2.段傳華.直接數(shù)字頻率合成器的原理及應(yīng)用[J].電訊技術(shù),1995年10月,35(5).

    3.侯博亨等.硬件描述語言與數(shù)字邏輯電路設(shè)計.成都電子科技大學(xué)出版社.1997.

    4.徐志軍等.CPLD/FPGA的開發(fā)與應(yīng)用.北京:電子工業(yè)出版社.2002

    分頻器相關(guān)文章:分頻器原理


    關(guān)鍵詞: FPGA 單片機 VHDL DDS

    評論


    相關(guān)推薦

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

    關(guān)閉
    主站蜘蛛池模板: 紫金县| 马龙县| 天祝| 伊吾县| 兰坪| 新化县| 兴业县| 石家庄市| 金乡县| 平陆县| 乌苏市| 岳阳市| 常山县| 调兵山市| 如皋市| 新巴尔虎左旗| 伊宁县| 嘉祥县| 日喀则市| 常州市| 神池县| 凌海市| 凤阳县| 溧水县| 祁东县| 鄯善县| 邹平县| 双鸭山市| 南康市| 阳高县| 林西县| 峨眉山市| 天长市| 施秉县| 任丘市| 临桂县| 岳普湖县| 调兵山市| 万年县| 永兴县| 于田县|