12位串行AD轉換器TLC2543與單片機的接口設計與編程

第一次做光學儀器的小項目中的一部分是數據採集後經過模數轉換,把採集到的電壓用數字量輸入到單片機中進行處理。此處總結下TLC2543的相關資料和與單片機接口方面的編程。主要的參考資料是TLC2543的datasheet,其中的電路是自己做的項目中的接口電路,部分程序是參考網上和自己的實際情況改的。

先介紹下TLC2543芯片的一些基本資料。(1)12位分辨率,10us轉換時間 (2)11路模擬輸入通道,3路內置自測模式 (3)固有取樣和保持功能,線性誤差最大爲1LSB(4)片上系統時鐘,轉換結束(EOC)輸出(5)單級或雙極輸出操作 (6)可設計的輸出數據最高位或最低位在前,可設計的電源中斷,可設計輸出數據長度。TLC2543的引腳如下圖所示


其中(1)AIN0~AIN10:11路模擬輸入引腳(2)CS:片選引腳(3)DATA INPUT:串行數據輸入引腳(4)DATA OUT:串行輸出引腳(5)EOC:爲轉換結束引腳(6)I/O CLOCK:時鐘引腳(7)REF+:基準電壓正引腳,通常爲VCC(8)REF-:基準電壓負引腳,通常爲GND (9)VCC:正電源引腳(10)GND:地信號引腳。

TLC2543的轉換操作分爲I/O週期和實際轉換週期兩個步驟。

(1)I/O週期:

I/O週期由外部提供的I/O CLOCK來定義,延續8,12或16個時鐘週期,主要取決於被選擇的數據長度。在I/O週期內,下列兩種操作同時進行。

在CLK時鐘的前8個脈衝的上升沿,以MSB前導方式從串行數據輸入引腳讀取8位數據到輸入寄存器,其中前4位爲模擬通道地址,控制14路模擬多路器從11個模擬輸入通道和3個內部自測通道中選通一路連接到採樣保持器,該電路從第4個CLK時鐘脈衝的下降沿開始,對所選通路的信號進行採樣,知道最後一個CLK脈衝下降沿。I/O週期的時鐘脈衝個數與輸出數據長度(位數)有關,輸出數據長度由D3,D2位選擇爲8,12,16位,當TLC2543處於12或16位工作狀態時,在前8個時鐘脈衝之後,DATA INPUT引腳的電平無效。

在DATA OUT引腳上串行輸出8,12,16位數據,當CS引腳保持低電平時,第一位數據出現在EOC的上升沿;若轉換由CS引腳控制,則第一個輸出數據發生在CS引腳電平的下降沿,此數據爲前一次轉換的結果(很重要,值得注意)。在第一個輸出數據位後每一位均由後續的CLK脈衝下降沿輸出。

(2)實際轉換週期:

TLC2543進入轉換週期工作方式之後在I/O週期最後一個CLK脈衝的下降沿來到之後EOC變爲低電平,採樣值保持不變,轉換週期開始;片內的轉換模塊對採樣值進行逐次逼近式A/D轉換,其工作由與CLK同步的內部時鐘控制。當轉換結束之後EOC引腳變高,轉換結果被鎖存在輸出數據寄存器中,等待在下一個I/O週期輸出(此處注意)。

TLC2543的I/O週期和轉換週期交替進行,從而可以減少外部的數字噪聲對轉換精度的影響。其工作時序如下圖所示:


每次進行A/D轉換時都必須向TLC2543寫入命令字以便確定其工作狀態,命令字格式:D7~D4:輸入通道地址選擇,D3~D2:輸出數據長度選擇,D1:輸出數據順序選擇,D0:輸出數據格式選擇。

(1)輸入通道地址選擇位:用於選擇TLC2543的輸入通道,二進制數0000~1010是11個模擬量AIN0-AIN10的通道地址,1011~1101分別是自測試電壓和掉電的通道地址。地址1011,1100和1101所選擇的的自測電壓分別是(VREF(+)-VREF(-))/2、VREF(-)、VREF(+)。當選擇掉電後TLC2543處於休眠狀態,此時耗電電流小於20uA。

(2)輸出數據長度選擇位:用於選擇A/D轉換結果的位數,當D3~D2爲“x0”,A/D轉換的結果爲12位輸出;當D3~D2爲“01”,A/D轉換的結果爲8位輸出;當D3~D2爲“11”,A/D轉換的結果爲16位輸出。

(3)輸出數據順序選擇位:用於選擇數據輸出的順序,如果D1=0,則高位在前;否則低位在前。

(4)輸出數據格式選擇位:用於選擇輸出數據的屬性,如果D0=0,採樣數據是無符號數,否則是有符號數。

編寫的程序如下:

各引腳的定義:

sbit ADEOC = P0^6;    //AD轉換芯片的引腳
sbit ADCLK = P0^5;
sbit ADDATAIN = P0^4;
sbit ADDATAOUT = P0^3;
sbit ADCS = P0^2;

讀TLC2543數據的程序:

uint Get_ADData(uchar CHN) //讀取AD值
{
uchar i, temp;
uint read_ad_data = 0;
ADDATAOUT = 1;
CHN = CHN<<4;   //12位格式,選擇高位在前,單極性. 注:CHN爲通道數,並非DATAIN控制字。0~13:0x00~0x0d。所以前四位捨棄,左移的後四位表示通道數
ADCLK = 0;
ADCS = 1;
ADCS = 0;


temp = CHN;


for(i = 0; i<12; i++)
{
read_ad_data = read_ad_data <<1;
if((temp&0x80) != 0)
{
ADDATAIN = 1;
}
else 
{
ADDATAIN = 0;
}
if(ADDATAOUT)
{
read_ad_data = read_ad_data + 1;
}
_nop_();
_nop_();
ADCLK = 1;
_nop_();
_nop_();
ADCLK = 0;
_nop_();
_nop_();
temp = temp <<1;
}
ADCS = 1;
_nop_();
_nop_();
read_ad_data = read_ad_data & 0X0FFF;
return (read_ad_data);

}


發佈了6 篇原創文章 · 獲贊 26 · 訪問量 9萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章