引言
隨著現代電子技術的應用和發展,數字信號處理的內容日益復雜,而adc是實現從模擬到數字轉換的一個必然過程。針對這種情況,利用數字信號處理器和可編程邏輯器件提出了多路adc系統的設計方法,實現了對動態多路模擬輸入信號的采樣傳輸以及處理,簡化了電路設計,可編程邏輯器件使得系統的通用性和可移植性得到良好的擴展。系統框圖如圖1所示。
系統硬件設計
本設計所采用的adc器件是maxim公司的生產的低功耗16位模數轉換器(adc)max1162。max1162采用逐次逼近型adc結構,具有自動關斷、1.1μs快速喚醒和兼容于spi/qspi/microwire的高速接口,采用+5v單模擬電源,并且具有獨立的數字電源引腳,允許芯片直接和+2.7~+5.25v的數字邏輯接口。ref引腳接外部參考電壓,用于設定模擬輸入電壓范圍,與模擬地之間連接一個4.7μf的電解電容;avdd引腳是+5v電源供應輸入端,與模擬地之間接一個0.1μf的電容;agnd是模擬地;cs是片選輸入,低有效。當為高時,系統處于斷電模式,由高變低時,激活系統到正常運行模式,同時初始化一次轉換。本系統選擇作為ad的使能信號;sclk是串行時鐘輸入,驅動模數轉換進程;dout是串行數據輸出,數據狀態在sclk的下降沿改變;dgnd是數字地;dvdd是數字電壓供應,與數字地之間接一個0.1μf的電容;ain是模擬信號輸入端。
該adc系統的中央控制單元采用ti(德州儀器)公司的浮點數字信號處理器tms320vc33-150,tms320vc33的地址總線為24位,程序尋址范圍可達16m,數據總線為32位,內部具有34k×32bit的sram,可根據需要映射在程序或數據空間,擁有一路串行口,可以構成傳輸8、16、24、32位的數據,其傳輸模式可以設置為突發模式或者是連續模式。兩個32位的通用定時器,能夠用來按照規定的時間間隔與芯片內部通信或者是和外部通信。
使用x9241實現高分辨率的軟件代碼
為了方便理解實現控制的細節,我們提供了c語言源代碼(代碼由xicor公司提供,我們做了一定的修改)。用戶只需要自己再編寫適用于不同單片機的i2c硬件接口函數(函數名稱同程序中介紹一致),在應用程序中加入我們提供的源代碼,簡單的調用程序中介紹的5個函數,就可以方便地實現dcp的高分辨率控制。
關于x9241實現高分辨率的軟件源代碼,工程師可到http://www.icbase. com/download/x9241.c去下載。
本系統考慮到主要應用在adc中,所以就直接采用tms320vc33的數據總線和地址總線,沒有再附加額外的電路,使得adc的采樣速度和轉換精度得到良好的保證。同時還利用了int2和xf0引腳,作為dsp接收數據的中斷信號和adc的使能信號。int2是外部中斷引腳,由外部的數據輸入觸發中斷;xf0即外部標志輸出引腳,受軟件控制,可以用來向外部器件發送信號,該引腳的狀態由i/o標志寄存器決定,iof=0x22,即置xf0為通用目的輸出引腳,同時該引腳輸出0;若iof=0x26,則置xf0為通用目的輸出引腳,同時該引腳輸出為1。本系統利用軟件指令對xf0進行置高置低,控制adc的啟動轉換和停止。
emp7512ae基于eeprom技術,采用多電壓i/o接口技術,系統內核供應電壓為3.3v,而i/0引腳與2.5v、3.3v、5.0v邏輯電平相互兼容。epm7512ae有10 000個可用門、512個宏單元、32個邏輯陣列塊和212個用戶可用i/0引腳。cpld在系統中的主要功能是:給adc轉換提供時鐘信號,控制adc轉換的使能和復位,由于采用的adc芯片是串行輸出的,cpld還實現對串行數據的輸入轉為并行數據的輸出,然后直接和tms320vc33的數據總線相連接。同時cpld產生脈沖信號,在adc轉換完成后,數據暫存在cpld中,該脈沖向cpu申請中斷,提示有數據需要接收。另外,cpld的一個關鍵作用就是,實現路數的動態選擇,目前設計的該系統最多路數為8路。cpld和dsp及ad芯片的具體硬件連接圖如圖2所示。
使用x9241實現高分辨率的軟件代碼
為了方便理解實現控制的細節,我們提供了c語言源代碼(代碼由xicor公司提供,我們做了一定的修改)。用戶只需要自己再編寫適用于不同單片機的i2c硬件接口函數(函數名稱同程序中介紹一致),在應用程序中加入我們提供的源代碼,簡單的調用程序中介紹的5個函數,就可以方便地實現dcp的高分辨率控制。
關于x9241實現高分辨率的軟件源代碼,工程師可到http://www.icbase. com/download/x9241.c去下載。
下面給出vhdl語言的主要程序部分。
begin
adcs 《= synthesized_wire_12;
ada 《= synthesized_wire_2;
gdfx_temp_signal_1 《= (l & l & h & h & h & l);
gdfx_temp_signal_0 《= (h & l & h & h & l);
u1 : lpm_bustri_0----三態總線緩沖器,允許采樣的數據輸出到dsp的數據總線上
port map(enabledt =》 drd,
data =》 ado,
tridata =》 d);
u2 : lpm_counter_1----計數器,把數據總線寬度改為3位
port map(sload =》 synthesized_wire_0,
clock =》 synthesized_wire_1,
aload =》 xfa0,
data =》 cmd(2 downto 0),
q =》 synthesized_wire_2);
u3 : lpm_dff_1---d觸發器,數據總線寬度為8位,接收來自于dsp的數據
port map(clock =》 cmdck,
data =》 d(7 downto 0),
q =》 cmd);
u4 : lpm_compare_1---比較器,比較cmd(5..3)和cmd(2..0)的值,即輪詢采樣通道
port map(dataa =》 cmd(5 downto 3),
datab =》 synthesized_wire_2,
aeb =》 synthesized_wire_0);
synthesized_wire_1 《= not(aq(4));
nrw《= not rw;
cmdck《= not( not page3 and(not rw)and a6 and a5 and a4 and (not a3));
----通道控制地址編碼
drd 《= not page3 and rw and a6 and a5 and a4 and a3;----采樣地址編碼
clka 《= not(clk);
u5 : lpm_counter_2---產生計數脈沖
port map(sload =》 synthesized_wire_3,
clock =》 hfp(5),
data =》 gdfx_temp_signal_0,
eq =》 sq,
q =》 aq);
u5 : lpm_dff_5---緩沖器
port map(clock =》 synthesized_wire_12,
data =》 synthesized_wire_5,
q =》 ado);
synthesized_wire_12 《= sq(12) or 0 or xfa0;
synthesized_wire_3 《= xfa0 or sq(14);
aden 《= not(xfa0);
synthesized_wire_10 《= hfp(5) and hfp(4) and hfp(0) and synthesized_wire_6 and synthesized_wire_7 and synthesized_wire_8;
synthesized_wire_7 《= not(hfp(2));
synthesized_wire_6 《= not(hfp(3));
inta2 《= xfa0 or synthesized_wire_9;
u6 : lpm_shiftreg_1----串行數據輸入轉為并行數據輸出
port map(shiftin =》 adout,
clock =》 hfp(5),
q =》 synthesized_wire_5);
u7 : lpm_counter_3---產生時鐘信號
port map(sload =》 synthesized_wire_10,
clock =》 h1ck,
data =》 gdfx_temp_signal_1,
q =》 hfp);
synthesized_wire_8 《= not(hfp(1));
adsck 《= not(hfp(5));
synthesized_wire_9 《= not(synthesized_wire_12);
h 《= 1;
l 《= 0;
end;
把該vhdl程序寫入到epm7512ae芯片中的,對數據進行采樣編程就簡單了許多。在.cmd文件的memory段中加入adport :org=0x00c00070,len=9。然后通過自定義數據段把數組adport[8]映射到段adport中。下面給出用c編寫的采樣主要程序。
main()
{
……
iof = 0x26;/*置max1162數據輸出端為高阻態*/
adport[0] = 0x28;
/*采樣通道選擇:0通道~5通道,總共6路;若設adport[0]=0x38,則通道為:0通道~7通道,總共8路。同理可進行其他設置*/
ie = 4;/*中斷使能*/
iof = 0x22;/*啟動adc*/
/* adport[0]對應地址為0x00c00070,配置寄存器有6位,0、1、2位對應起始通道,3、4、5位對應結束通道。adport[8]對應地址為0x00c00078,是控制寄存器*/
……
}
在中斷服務子程序接收采樣的數據,程序如下。
c_int02()
{
ad[adi++] = adport[8];/*把采集的數據十六進制數據存入數組ad中*/
if(adi》0x7ff) /*存入的數據大小為2k×16bit,根據內存大小動態改變*/
adi &= ox7ff;
}
結論
經過實際驗證,本adc系統在低成本的情況下的采樣精度達到了13位,這在16位的adc芯片中達到很好的水平,并被應用到高精度的工業控制中。利用tms320vc33和epm7512ae,靈活方便地實現了對高精度模數轉換器max1162的控制和動態多通道采樣,簡化了系統設計的復雜性,同時使得dsp的編程處理變得非常高效簡潔。若應用在要求更加嚴格的場面,本系統有待做進一步的改進,把adc芯片更換為并行輸出,同時把cpld芯片更換為cycloneii fpga,dsp芯片用tms320c6713,同時加入噪聲抑制設計,這樣整個系統性能將會顯著提高。在一定的條件下,和adc模塊相類似,本系統可以經過擴充,實現更多路的信號采集。
-
dsp
+關注
關注
552文章
7962瀏覽量
348310 -
cpld
+關注
關注
32文章
1247瀏覽量
169226 -
信號采集
+關注
關注
6文章
227瀏覽量
67864
發布評論請先 登錄
相關推薦
評論