一、tlc549中文資料匯總-tlc549介紹
TLC549是8位串行A/D轉換器芯片,可與通用微處理器、控制器通過CLK、CS、DATAOUT三條口線進行串行接口。具有4MHz片內系統時鐘和軟、硬件控制電路,轉換時間最長17μs,TLC549為40000次/s。總失調誤差最大為±0.5LSB,典型功耗值為6mW。采用差分參考電壓高阻輸入,抗干擾,可按比例量程校準轉換范圍,VREF-接地,VREF+-VREF-≥1V,可用于較小信號的采樣。
TLC549主要特征
?、?位分辨率A/D轉換器,總不可調整誤差≤±0.5LSB。
?、诓捎萌€串行方式與微處理器接口。
?、燮瑑忍峁?MHz內部系統時鐘,并于操作控制用的外部I/OCLOCK相互獨立。
?、苡衅瑑炔蓸颖3蛛娐?,轉換時間≤17us,包括存取與轉換時間、轉換速率達40000次/秒。
?、莶罘指咦杩够鶞孰妷狠斎耄浞秶牵?V≤差分基準電壓≤Vcc+0.2V。
⑥寬電源范圍:3V~6.5V,低功耗,當片選信號/CS為低,芯片選中處于工作狀態。
二、tlc549中文資料匯總-tlc549引腳圖及其功能
1、TLC549的管腳圖
2、TLC549管腳功能
REF+:正基準電壓輸入2.5V≤REF+≤Vcc+0.1。
REF-:負基準電壓輸入端,-0.1V≤REF-≤2.5V。且要求:(REF+)-(REF-)≥1V。
VCC:系統電源3V≤Vcc≤6V。
GND:接地端。
/CS:芯片選擇輸入端,要求輸入高電平VIN≥2V,輸入低電平VIN≤0.8V。
DATAOUT:轉換結果數據串行輸出端,與TTL電平兼容,輸出時高位在前,低位在后。
ANALOGIN:模擬信號輸入端,0≤ANALOGIN≤Vcc,當ANALOGIN≥REF+電壓時,轉換結果為全“1”(0FFH),ANALOGIN≤REF-電壓時,轉換結果為全“0”(00H)。
I/OCLOCK:外接輸入/輸出時鐘輸入端,同于同步芯片的輸入輸出操作,無需與芯片內部系統時鐘同步。
三、tlc549中文資料匯總-tlc549工作原理
TLC549均有片內系統時鐘,該時鐘與I/OCLOCK是獨立工作的,無須特殊的速度或相位匹配。其工作時序如圖所示。
當CS為高時,數據輸出(DATAOUT)端處于高阻狀態,此時I/OCLOCK不起作用。這種CS控制作用允許在同時使用多片TLC549時,共用I/OCLOCK,以減少多路(片)A/D并用時的I/O控制端口。
一組通常的控制時序為:
(1)將CS置低。內部電路在測得CS下降沿后,再等待兩個內部時鐘上升沿和一個下降沿后,然后確認這一變化,最后自動將前一次轉換結果的最高位(D7)位輸出到DATAOUT端上。
(2)前四個I/OCLOCK周期的下降沿依次移出第2、3、4和第5個位(D6、D5、D4、D3),片上采樣保持電路在第4個I/OCLOCK下降沿開始采樣模擬輸入。
?。?)接下來的3個I/OCLOCK周期的下降沿移出第6、7、8(D2、D1、D0)個轉換位,
?。?)片上采樣保持電路在第8個I/OCLOCK周期的下降沿將移出第6、7、8(D2、D1、D0)個轉換位。保持功能將持續4個內部時鐘周期,然后開始進行32個內部時鐘周期的A/D轉換。第8個I/OCLOCK后,CS必須為高,或I/OCLOCK保持低電平,這種狀態需要維持36個內部系統時鐘周期以等待保持和轉換工作的完成。如果CS為低時I/OCLOCK上出現一個有效干擾脈沖,則微處理器/控制器將與器件的I/O時序失去同步;若CS為高時出現一次有效低電平,
若要在特定的時刻采樣模擬信號,應使第8個I/OCLOCK時鐘的下降沿與該時刻對應,因為芯片雖在第4個I/OCLOCK時鐘下降沿開始采樣,卻在第8個I/OCLOCK的下降沿開始保存。
四、tlc549中文資料匯總-tlc549特性參數
TLC549的極限參數如下:
●電源電壓:6.5V;
●輸入,出電壓范圍:0.3V~VCC+0.3V;
●峰值輸入電流(任一輸入端):±10mA;
●總峰值輸入電流(所有輸入端):±30mA;
●工作溫度:TLC549C:0℃~70℃
TLC549I:-40℃~85℃
TLC549M:-55℃~125℃
五、tlc549中文資料匯總-tlc549應用接口及采樣程序
TLC549可方便地與具有串行外圍接口(SPI)的單片機或微處理器配合使用,也可與51系列通用單片機連接使用。與51系列單片機的接口如圖3所示。其采樣程序框圖如圖4所示
圖3?與51系列單片機的接口圖
圖4 ?采樣程序框圖
#include
#define N 8
unsigned char count;//濾波函數的計數值
/*unsigned char bdata dat; //dat是可位尋址的變量
sbit dat7=dat^7;
sbit dat6=dat^6;
sbit dat5=dat^5;
sbit dat4=dat^4;
sbit dat3=dat^3;
sbit dat2=dat^2;
sbit dat1=dat^1;
sbit dat0=dat^0; //取出dat的各個位*/
//------------------------------------------------------------------------
unsigned char TLC549_ReadByte(void)
{ //讀一個字節函數
unsigned char value=0,i=0;
TLC549_DOUT=1;//51單片機讀數據時得先把管腳置1
for(i=0;i<8;i++)
{
if(TLC549_DOUT==1)
value|=(0x80>>i);//獲取數據線的位放到相應位上
????//(有1時寫1,無1時保持0)
TLC549_CLK=1;
TLC549_CLK=0;
delayus(50);//根據datasheet,下降沿產生后,
?//400ns后新的位被寫到數據線上,所以這里進行延時
}
?????return value;
}
unsigned char TLC549_GetValue(void)
{
unsigned char ConvertValue;
TLC549_CS=0; ?//打開片選
ConvertValue=TLC549_ReadByte(); //讀取轉換后的8位AD值
TLC549_CS=1; ?//關閉片選
delayus(50); ??//等待轉換結束 最長17us
????return ConvertValue; //返回轉換結果
}
unsigned char TLC549_Filter() //濾波函數
{
char count,i,j;
unsigned char value_buf[N],temp;
int sum=0;
for (count=0;count
value_buf[count] = TLC549_GetValue();
delayus(300);
}
for (j=0;j
for (i=0;i
??? if ( value_buf[j]>value_buf[i+j] )
??? {
temp = value_buf[j];
value_buf[j] = value_buf[i+j];
value_buf[i+j] = temp;
??? }
}
}
for(count=1;count
return (unsigned char)(sum/(N-2));?
???????}
unsigned char AD_Convert(void)
{
unsigned char AD_Value;
AD_Value=TLC549_Filter();
return AD_Value;
}/*
unsigned char TLC549_Filter(void)
{
unsigned int sum=0;
for(count=0;count
sum+=TLC549_GetValue();
delayus(300);
}
return (unsigned char)(sum>>3);//求平均值,左移三位相當于除以8
} ? ?*/
評論