【正文】
2,向零歸整法的誤差卻是對應(yīng)的整個量階,因而本設(shè)計中除法器采用了四舍五入的除法取值方案。由于系統(tǒng)輸出采用雙DAC0832串聯(lián)的方式,系統(tǒng)輸出波的幅度可通過按鍵來調(diào)節(jié)。DAC0832的分辨率是8位,只調(diào)節(jié)DAC0832的基準(zhǔn)電壓誤差是一個最小量階——5/255≈,而輸出為方時,調(diào)節(jié)誤差僅為5/(255*255)= V。對應(yīng)幅度的顯示是本模塊設(shè)計的重點: 輸出方波時,波形幅度值為n*N/(255e2)≈n*N*,應(yīng)用FPGA直接進(jìn)行如此高精度的運算所耗資源相當(dāng)大,本設(shè)計采用近似算法實現(xiàn)了幅值的轉(zhuǎn)換顯示,: 通過簡化,上式結(jié)果可表示為769*n*N*10e7,以最高階數(shù)255代入n,N可得Vmax=50004225*10e7,ΔVmax=(50004225*10e7)=*10e3 (V).由于要求幅度只顯示4位,即精確到毫伏(MV)級,因此此種近似帶來的誤差可忽略。*10e3/≈%。所謂DDFS技術(shù)就是用數(shù)字量直接合成模擬量。圖中數(shù)字量以階梯波的形式表征了模擬正弦波的周期、幅度等特性參數(shù),用低通濾波將高頻成分去掉,就可看到比較平滑的正弦波。本模塊設(shè)計思路是將RAM中的波形數(shù)據(jù)以一定的時間為間隔輸出,通過改變間隔的時間來調(diào)節(jié)輸出波的頻率。DAC0832的數(shù)模轉(zhuǎn)換周期為1μS,用單片機(jī)每向DAC0832傳送一個數(shù)據(jù)最少要用兩條指令: MOV DPTR,ADDR_0832MOVX DPTR, A 。用FPGA作的DAC芯片驅(qū)動電路其數(shù)據(jù)輸出頻率可以做到很高,輸出一個數(shù)據(jù)的最短時間是1/≈,可見用FPGA驅(qū)動DAC0832,使其最大限度工作綽綽有余。前者產(chǎn)生方式類似于正弦波,通過選擇64個采樣點中不同的點作為0~1切換點,就可達(dá)到調(diào)節(jié)占空比的目的。4D/A轉(zhuǎn)換模塊該模塊的主要工作是將FPGA輸出的數(shù)字量轉(zhuǎn)換為模擬量。該模塊主要由兩片DAC0832組成,一片用于接收FPGA傳來的波形數(shù)據(jù),將其轉(zhuǎn)化為模擬量輸出;另一片接收來自FPGA的波形幅度數(shù)據(jù),用以產(chǎn)生相應(yīng)的幅度電壓,將其作為基準(zhǔn)電壓輸入到上一片DAC0832的基準(zhǔn)電壓(Vref)輸入端口,實現(xiàn)輸出波的幅度可調(diào)。電壓輸出即可是單極性的,也可是雙極性的。三、 軟件實現(xiàn)BCD碼~二進(jìn)制數(shù)轉(zhuǎn)換模塊 該模塊應(yīng)用計數(shù)的方法完成BCD碼到二進(jìn)制數(shù)的轉(zhuǎn)換,仿真圖如下: 圖31. BCD碼~二進(jìn)制數(shù)轉(zhuǎn)換仿真圖 圖31中,A、B、C分別為三位十進(jìn)制數(shù)的BCD碼輸入:A為百位BCD碼,B為十位BCD碼,C為個位BCD碼輸入。波形發(fā)生模塊圖中DATA為設(shè)定輸出相鄰采樣點間隔的脈沖數(shù)。 四、 系統(tǒng)測試 系統(tǒng)測試儀器系統(tǒng)測試采用TeKtronix公司生產(chǎn)的TDS3032型數(shù)字式雙通道熒光示波器,該示波器帶寬300兆赫,支持方波占空比的測量。 2.、測試指標(biāo)本系統(tǒng)測試主要針對正弦波、三角波、方波A(占空比可調(diào)方波)、鋸齒波的頻率的精確性,方波B(占空比不可調(diào)方波)的頻率精度,方波(A 或 B)的幅度精度等。 設(shè)定幅度測得幅度測量誤差值5MV%10MV%20MV%50MV%100MV%200MV196MV%500MV498MV%%%%C. 方波B的頻率測量方波B是固定占空比(1/2)的方波,因而其輸出頻率較高,下表中頻率測量點偏高。經(jīng)測試以上幾個指標(biāo)均達(dá)到設(shè)計要求。系統(tǒng)基本功能全部實現(xiàn),支持幅度精確的毫伏級信號發(fā)生,且精度較高。六、 參考文獻(xiàn)[1].高天光 主編.《 模數(shù)轉(zhuǎn)換器應(yīng)用技術(shù) 》:科學(xué)出版社. 2001 [2].劉明業(yè) 等編.《 VHDL語言100例詳解 》第一版。編程日期: library ieee。use 。entity mine4 isport(clk : in std_logic。 各個波形特征的調(diào)節(jié)觸發(fā)信號 posting : in std_logic。 ss : in std_logic_vector( 3 downto 0 )。 波形選擇信號 data3, data2, data1,data0 : in std_logic_vector(3 downto 0)。 預(yù)留接口 lcd : out std_logic_vector(7 downto 0)。 位碼輸出 dd, a : out std_logic_vector( 7 downto 0))。architecture behav of mine4 issubtype word is std_logic_vector( 7 downto 0 )。signal ram : unit。signal qq : integer range 0 to 78125000。signal coun : integer range 0 to 78125000。signal b : integer range 0 to 78125000。signal z, con : integer range 0 to 63。signal amp, amp0, d : std_logic_vector(7 downto 0)。signal bcd01,bcd11,bcd21,bcd31 : integer range 0 to 9。signal y : integer range 0 to 9。signal over : std_logic。qqq= 5000000 when ss=1000 else 50000000 when ss=0100 else 500000000 when ss=0010 else 500000。variable count : integer range 0 to 78125000。variable count1 : integer range 0 to 12500000。variable ddd : std_logic_vector(9 downto 0)。variable adr : integer range 0 to 63。139。 adr:=conv_integer(data3)*10+conv_integer(data2)。139。 if adradrr then adrr=adr。 elsif clr=39。 then adrr=0。039。 end loop。 end if。 end if。139。 coun=0。 coun0=0。z=31。 amp=01111111。 else if tmp0 then if sw=39。 then if counqq then coun=coun+tmp。 else if count=b then count:=0。 if sss=00010 then con=0。 elsif sss=10000 then dd=d。00。00。 addr=addr+1。 addr=0。 else if sss(1)=39。 then if con=z then dd0:=conv_integer(amp0)。 else con=con+1。 end if。 if sss(4)=39。 then dd1:=conv_integer(d)。 if sss(2)=39。 then dd2:=conv_integer(f(5 downto 0)amp。 end if。139。00)。00)。 end if。139。 addr=addr+1。 addr=0。 end if。 dd=ddd(9 downto 2)