歡迎您光臨本站 登入註冊首頁

基於CPLD的多波形信號發生器設計

admin @ 2014-03-26 , reply:0

概述

   在教學實驗和教學研究中,信號發生器作為提供測試用電信號的儀器必不可少。目前通用的信號發生器一般只能輸出常用的波形信號,不能滿足某些特殊的需要,例如在電子測量教學中,……

    在教學實驗和教學研究中,信號發生器作為提供測試用電信號的儀器必不可少。目前通用的信號發生器一般只能輸出常用的波形信號,不能滿足某些特殊的需要,例如在電子測量教學中,通過用示波器測量晶體管的輸出特性曲線實驗,讓學生理解晶體管測試儀的測量原理,就需要階梯波信號。又如研究計數法測周期時,雜訊信號引起的觸發誤差所需的某種雜訊信號。鑒於教學實驗和教學研究的需要,筆者設計了一種基於可編程邏輯器件CPLD的多波形信號發生器,此設計採用Max+Plus II開發平台,VHDL編程實現,整個系統除晶體振蕩器和A/D轉換外,全部集成在一片美國Altera公司生產的EPM7256SR208-15的晶元上。他除了輸出常用的正弦波、三角波、方波以外,專門設計了一個任意波形模塊(在本設計中為階梯波波形數據),以及兩種波形線性組合共10種波形。任意波形模塊可由用戶自行編輯所需波形數據,經下載在不改變整個系統硬體連接的情況下,輸出用戶所需的特殊波形。該信號發生器輸出波形的頻率可數控選擇,其範圍為100 Hz~30 kHz。幅度調節範圍為0~5 V。

1 設計原理
    根據設計要求,多波形信號發生器由3部分組成,即時鐘信號發生器、波形數據產生器和數/模轉換電路。晶體振蕩器產生穩定度很高的時鐘信號,在時鐘信號的作用下,波形數據產生器生成頻率可變的波形數據數字信號,經數/模轉換電路最終輸出所需波形信號。幅度的調節可通過改變A/D轉換晶元電阻網路的基準電壓實現。基於CPLD的波形數據產生器頂層電路如圖1所示。
 
圖1 波形數據產生器頂層電路圖
    圖中DFR為數控分頻器,根據儀器面板8位數字量開關產生的預置數據D輸出不同頻率的時鐘,以改變輸出信號的頻率。在時鐘的作用下,DELTA,SIA,SQUARE,AT_WILL模塊分別產生三角波、正弦波、方波和任意波形的波形數據。SELECTOR(數據選擇器)在面板上的波形選擇開關CORTROL的控制下,選擇輸出不同的波形數據,送至A/D轉換電路。A/D轉換採用8位的DAC0832晶元。

2 各模塊電路設計
2.1 數控分頻器設計
    數控分頻器的功能是在輸入端輸入不同數據時,對輸入時鐘產生不同的分頻比,輸出不同頻率的時鐘,以改變輸出信號的頻率。本設計中利用并行預置數的減法計數器實現,他的工作原理是:減法計數器在并行預置數的基礎上,在時鐘的作用下進行減計數,當計數值為零時產生溢出信號,載入預置數據,並且將溢出信號作為分頻器的輸出信號,實現N分頻信號輸出。其分頻係數N為N = D+1。D為預置數的值。為了得到占空比為50%的矩形時鐘信號,將輸出再進行二分頻。由此,該分頻器的總分頻係數為2N。本設計中一個波形周期由64個時鐘信號組成,則輸出信號頻率為:
 
   時鐘頻率為4 MHz。數控分頻器如程序1。
[程序1]
--略去申明部分
entity dfr is
port(clk:in std_logic;d:in integer range 0 to 255;fout:out std_logic);
end dfr;
architecture one of dfr is
signal full:std_logic; //定義內部溢出標誌信號
begin
process(clk)
variable cnt9:integer range 0 to 312;
//內部變數,位寬同預置數據端
begin
if clk'event and clk='1' then
if cnt9= 0 then cnt9:=d; //計數值為0時,產生溢出信號
full<='1'; //同時,同步載入預置數據d
else cnt9:=cnt9=1;full<='0';//否則,進行減1計數
end if;
end if;
end process;
--略去二分頻進程
end one;

2.2 三角波波形數據產生模塊設計
    該模塊可設計一個可逆計數器實現。設計時設置一變數作為工作狀態標誌,在此變數為全0時,當檢測到時鐘的上升沿時進行加同一個數操作,為全1時,進行減同一個數操作。由於A/D轉換採用8位的DAC0832晶元,且設64個時鐘為一個三角波周期,則輸出Q每次加/減8。

2.3 正弦波波形數據產生模塊設計
    用加法計數器和解碼電路完成。首先對幅度為1的正弦波的一個周期分為64個採樣點,根據正弦波的函數關係計算得到每一點對應的幅度值,然後量化為8位二進位數據,最大值為255,最小值為0,以此得到正弦波波表。加法計數器生成解碼電路的64個輸入值,解碼電路查波表輸出。如程序2。
[程序2]
--略去申明和實體部分
architecture one of sia is
begin
process(clk,clr)
variable tmp:integer range 0 to 63;
begin
if clr='0' then q<=0;
elsif clk'event and clk='1' then
if tmp=63 then tmp:=0;
else tmp:=tmp+ 1;
end if;
case tmp is
--查表輸出部分程序
when 00=> q<=0;when 01=> q<=1;when 02=> q<=4;
……
when 29=> q<=252;when 30=> q<= 254;when 31=> q<=255;
……
when 61=> q<=4;when 62=> q<=1 when 63=> q<=0;when others=> null;
end case;
end if;
end process;
end one;

2.4 方波波形數據產生模塊設計
    通過交替送出全0和全1,並給以32個時鐘延時實現,64個時鐘為一個周期。

2.5 任意波波形數據產生模塊設計
    設計原理同正弦波。解碼器查表輸出設計方法可以使用戶編輯任意波形時,依據所需波表數據,修改CASE語句中條件賦值語句的賦值源數據即可。

2.6 數據選擇器設計
    用CASE語句設計完成。在CORTROL的控制下選擇輸出一種波形數據輸出,同時完成兩種波形的線性組合。波形組合是將波形每一時刻的數值相加,為了不超出DAC0832的輸出範圍,做相應的除2操作 。如程序3。
[程序3]
--略去申明和實體部分
architecture one of selector is begin
process(delta,sia,square,at_will,cortrol)
variable a:std_logic_vector(9 downto 0);
begin
case cortrol is
when "1000"=> q<= delta;when "0100"=> q<= sia;
when "0010"=> q<= square;when "0001"=> q<=at_will;
when "1100"=> a:="00"& delta+sia;q<=a(8 downto 1);
when "1010"=> a:="00"& delta+square;q<=a(8 downto 1);
when "1001"=> a:="00"& delta+at_will;q<= a (8 downto 1);
when "0110"=> a:="00"& sia+square;q<=a(8 downto 1);
when "0101"=> a:="00"& sia+at_will;q<=a(8 downto 1);
when "0011"=> a:="00"& square+at_will;q<=a(8 downto 1);
when others= > null:
end case;
end process;
end one;

    以上各模塊電路在Max+Plus II開發平台上經編譯、模擬符合設計要求后,用原理圖輸入法完成頂層電路的設計、綜合,最後下載至型號為EPM7256SR208-15的CPLD晶元中,最終完成硬體電路連接。經測試符合設計要求。用Multisim模擬器模擬波形如圖2所示。
 
    圖2中左圖為正弦波+方波的輸出波形,右圖為三角波波形。從對輸出10種波形的測試結果看:在整個頻率範圍內,頻率誤差最大為設計值的0.8%,最小為0.2%,低於傳統的函數信號發生器的頻率誤差。

3 結語
    實驗表明,基於CPLD的多波形信號發生器實現了各種波形的產生,尤其是實現了傳統的函數信號發生器不具有的一些波形的產生。輸出波形頻率按設計要求可調,並達到一定的精度。滿足了教學實驗和開發新的實驗項目對特殊波形的要求。整個設計採用VHDL編程實現,其
設計過程簡單,極易修改,可移植性強。另外由於CPLD具有可編程重置特性,因而可以方便地更換波形數據,且簡單易行,所以為教學帶來極大的方便。


[admin via 研發互助社區 ] 基於CPLD的多波形信號發生器設計已經有2781次圍觀

http://cocdig.com/docs/show-post-43146.html