在教學(xué)實(shí)驗(yàn)和教學(xué)研究中,信號發(fā)生器作為提供測試用電信號的儀器必不可少。目前通用的信號發(fā)生器一般只能輸出常用的波形信號,不能滿足某些特殊的需要,例如在電子測量教學(xué)中,通過用示波器測量晶體管的輸出特性曲線實(shí)驗(yàn),讓學(xué)生理解晶體管測試儀的測量原理,就需要階梯波信號。又如研究計(jì)數(shù)法測周期時(shí),噪聲信號引起的觸發(fā)誤差所需的某種噪聲信號。鑒于教學(xué)實(shí)驗(yàn)和教學(xué)研究的需要,筆者設(shè)計(jì)了一種基于可編程邏輯器件CPLD的多波形信號發(fā)生器,此設(shè)計(jì)采用Max Plus II開發(fā)平臺(tái),VHDL編程實(shí)現(xiàn),整個(gè)系統(tǒng)除晶體振蕩器和A/D轉(zhuǎn)換外,全部集成在一片美國Altera公司生產(chǎn)的EPM7256SR208-15的芯片上。他除了輸出常用的正弦波、三角波、方波以外,專門設(shè)計(jì)了一個(gè)任意波形模塊(在本設(shè)計(jì)中為階梯波波形數(shù)據(jù)),以及兩種波形線性組合共10種波形。任意波形模塊可由用戶自行編輯所需波形數(shù)據(jù),經(jīng)下載在不改變整個(gè)系統(tǒng)硬件連接的情況下,輸出用戶所需的特殊波形。該信號發(fā)生器輸出波形的頻率可數(shù)控選擇,其范圍為100 Hz~30 kHz。幅度調(diào)節(jié)范圍為0~5 V。
1 設(shè)計(jì)原理
根據(jù)設(shè)計(jì)要求,多波形信號發(fā)生器由3部分組成,即時(shí)鐘信號發(fā)生器、波形數(shù)據(jù)產(chǎn)生器和數(shù)/模轉(zhuǎn)換電路。晶體振蕩器產(chǎn)生穩(wěn)定度很高的時(shí)鐘信號,在時(shí)鐘信號的作用下,波形數(shù)據(jù)產(chǎn)生器生成頻率可變的波形數(shù)據(jù)數(shù)字信號,經(jīng)數(shù)/模轉(zhuǎn)換電路最終輸出所需波形信號。幅度的調(diào)節(jié)可通過改變A/D轉(zhuǎn)換芯片電阻網(wǎng)絡(luò)的基準(zhǔn)電壓實(shí)現(xiàn)?;贑PLD的波形數(shù)據(jù)產(chǎn)生器頂層電路如圖1所示。
圖1 波形數(shù)據(jù)產(chǎn)生器頂層電路圖
圖中DFR為數(shù)控分頻器,根據(jù)儀器面板8位數(shù)字量開關(guān)產(chǎn)生的預(yù)置數(shù)據(jù)D輸出不同頻率的時(shí)鐘,以改變輸出信號的頻率。在時(shí)鐘的作用下,DELTA,SIA,SQUARE,AT_WILL模塊分別產(chǎn)生三角波、正弦波、方波和任意波形的波形數(shù)據(jù)。SELECTOR(數(shù)據(jù)選擇器)在面板上的波形選擇開關(guān)CORTROL的控制下,選擇輸出不同的波形數(shù)據(jù),送至A/D轉(zhuǎn)換電路。A/D轉(zhuǎn)換采用8位的DAC0832芯片。
2 各模塊電路設(shè)計(jì)
2.1 數(shù)控分頻器設(shè)計(jì)
數(shù)控分頻器的功能是在輸入端輸入不同數(shù)據(jù)時(shí),對輸入時(shí)鐘產(chǎn)生不同的分頻比,輸出不同頻率的時(shí)鐘,以改變輸出信號的頻率。本設(shè)計(jì)中利用并行預(yù)置數(shù)的減法計(jì)數(shù)器實(shí)現(xiàn),他的工作原理是:減法計(jì)數(shù)器在并行預(yù)置數(shù)的基礎(chǔ)上,在時(shí)鐘的作用下進(jìn)行減計(jì)數(shù),當(dāng)計(jì)數(shù)值為零時(shí)產(chǎn)生溢出信號,加載預(yù)置數(shù)據(jù),并且將溢出信號作為分頻器的輸出信號,實(shí)現(xiàn)N分頻信號輸出。其分頻系數(shù)N為N = D 1。D為預(yù)置數(shù)的值。為了得到占空比為50%的矩形時(shí)鐘信號,將輸出再進(jìn)行二分頻。由此,該分頻器的總分頻系數(shù)為2N。本設(shè)計(jì)中一個(gè)波形周期由64個(gè)時(shí)鐘信號組成,則輸出信號頻率為:
時(shí)鐘頻率為4 MHz。數(shù)控分頻器如程序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; //定義內(nèi)部溢出標(biāo)志信號
begin
process(clk)
variable cnt9:integer range 0 to 312;
//內(nèi)部變量,位寬同預(yù)置數(shù)據(jù)端
begin
if clk‘event and clk=’1‘ then
if cnt9= 0 then cnt9:=d; //計(jì)數(shù)值為0時(shí),產(chǎn)生溢出信號
full《=’1‘; //同時(shí),同步加載預(yù)置數(shù)據(jù)d
else cnt9:=cnt9=1;full《=’0‘;//否則,進(jìn)行減1計(jì)數(shù)
end if;
end if;
end process;
--略去二分頻進(jìn)程
end one;
2.2 三角波波形數(shù)據(jù)產(chǎn)生模塊設(shè)計(jì)
該模塊可設(shè)計(jì)一個(gè)可逆計(jì)數(shù)器實(shí)現(xiàn)。設(shè)計(jì)時(shí)設(shè)置一變量作為工作狀態(tài)標(biāo)志,在此變量為全0時(shí),當(dāng)檢測到時(shí)鐘的上升沿時(shí)進(jìn)行加同一個(gè)數(shù)操作,為全1時(shí),進(jìn)行減同一個(gè)數(shù)操作。由于A/D轉(zhuǎn)換采用8位的DAC0832芯片,且設(shè)64個(gè)時(shí)鐘為一個(gè)三角波周期,則輸出Q每次加/減8。
2.3 正弦波波形數(shù)據(jù)產(chǎn)生模塊設(shè)計(jì)
用加法計(jì)數(shù)器和譯碼電路完成。首先對幅度為1的正弦波的一個(gè)周期分為64個(gè)采樣點(diǎn),根據(jù)正弦波的函數(shù)關(guān)系計(jì)算得到每一點(diǎn)對應(yīng)的幅度值,然后量化為8位二進(jìn)制數(shù)據(jù),最大值為255,最小值為0,以此得到正弦波波表。加法計(jì)數(shù)器生成譯碼電路的64個(gè)輸入值,譯碼電路查波表輸出。如程序2。
[程序2]
--略去申明和實(shí)體部分
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 方波波形數(shù)據(jù)產(chǎn)生模塊設(shè)計(jì)
通過交替送出全0和全1,并給以32個(gè)時(shí)鐘延時(shí)實(shí)現(xiàn),64個(gè)時(shí)鐘為一個(gè)周期。
2.5 任意波波形數(shù)據(jù)產(chǎn)生模塊設(shè)計(jì)
設(shè)計(jì)原理同正弦波。譯碼器查表輸出設(shè)計(jì)方法可以使用戶編輯任意波形時(shí),依據(jù)所需波表數(shù)據(jù),修改CASE語句中條件賦值語句的賦值源數(shù)據(jù)即可。
2.6 數(shù)據(jù)選擇器設(shè)計(jì)
用CASE語句設(shè)計(jì)完成。在CORTROL的控制下選擇輸出一種波形數(shù)據(jù)輸出,同時(shí)完成兩種波形的線性組合。波形組合是將波形每一時(shí)刻的數(shù)值相加,為了不超出DAC0832的輸出范圍,做相應(yīng)的除2操作 。如程序3。
[程序3]
--略去申明和實(shí)體部分
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開發(fā)平臺(tái)上經(jīng)編譯、仿真符合設(shè)計(jì)要求后,用原理圖輸入法完成頂層電路的設(shè)計(jì)、綜合,最后下載至型號為EPM7256SR208-15的CPLD芯片中,最終完成硬件電路連接。經(jīng)測試符合設(shè)計(jì)要求。用Multisim仿真器仿真波形如圖2所示。
圖2中左圖為正弦波 方波的輸出波形,右圖為三角波波形。從對輸出10種波形的測試結(jié)果看:在整個(gè)頻率范圍內(nèi),頻率誤差最大為設(shè)計(jì)值的0.8%,最小為0.2%,低于傳統(tǒng)的函數(shù)信號發(fā)生器的頻率誤差。
3 結(jié)語
實(shí)驗(yàn)表明,基于CPLD的多波形信號發(fā)生器實(shí)現(xiàn)了各種波形的產(chǎn)生,尤其是實(shí)現(xiàn)了傳統(tǒng)的函數(shù)信號發(fā)生器不具有的一些波形的產(chǎn)生。輸出波形頻率按設(shè)計(jì)要求可調(diào),并達(dá)到一定的精度。滿足了教學(xué)實(shí)驗(yàn)和開發(fā)新的實(shí)驗(yàn)項(xiàng)目對特殊波形的要求。整個(gè)設(shè)計(jì)采用VHDL編程實(shí)現(xiàn),其
設(shè)計(jì)過程簡單,極易修改,可移植性強(qiáng)。另外由于CPLD具有可編程重置特性,因而可以方便地更換波形數(shù)據(jù),且簡單易行,所以為教學(xué)帶來極大的方便。
-
cpld
+關(guān)注
關(guān)注
32文章
1248瀏覽量
169367 -
仿真器
+關(guān)注
關(guān)注
14文章
1018瀏覽量
83746 -
信號發(fā)生器
+關(guān)注
關(guān)注
28文章
1474瀏覽量
108764
發(fā)布評論請先 登錄
相關(guān)推薦
評論