在教學實驗和教學研究中,信號發生器作為提供測試用電信號的儀器必不可少。目前通用的信號發生器一般只能輸出常用的波形信號,不能滿足某些特殊的需要,例如在電子測量教學中,通過用示波器測量晶體管的輸出特性曲線實驗,讓學生理解晶體管測試儀的測量原理,就需要階梯波信號。又如研究計數法測周期時,噪聲信號引起的觸發誤差所需的某種噪聲信號。鑒于教學實驗和教學研究的需要,筆者設計了一種基于可編程邏輯器件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具有可編程重置特性,因而可以方便地更換波形數據,且簡單易行,所以為教學帶來極大的方便。
-
cpld
+關注
關注
32文章
1257瀏覽量
170952 -
仿真器
+關注
關注
14文章
1033瀏覽量
84908 -
信號發生器
+關注
關注
28文章
1551瀏覽量
110142
發布評論請先 登錄
簡易多波形信號發生器電路設計

基于CPLD的三相多波形函數發生器
射頻信號源和函數/任意波形發生器之間的區別分析

評論