DAC0832是8分辨率的D/A轉(zhuǎn)換集成芯片。與微處理器完全兼容。這個DA芯片以其價格低廉、接口簡單、轉(zhuǎn)換控制容易等優(yōu)點(diǎn),在單片機(jī)應(yīng)用系統(tǒng)中得到廣泛的應(yīng)用。D/A轉(zhuǎn)換器由8位輸入鎖存器、8位DAC寄存器、8位D/A轉(zhuǎn)換電路及轉(zhuǎn)換控制電路構(gòu)成。
DAC0832的主要參數(shù)有分辨率為8位;電流穩(wěn)定時間1us;可單緩沖、雙緩沖或直接數(shù)字輸入;只需在滿量程下調(diào)整其線性度;單一電源供電(+5V~+15V);低功耗,20mW。
DAC0832特性
1)分辨率分辨率它反映了輸出模擬電壓的最小變化值。定義為輸出滿刻度電壓與2n的比值,其中n為DAC的位數(shù)。分辨率與輸入數(shù)字量的位數(shù)有確定的關(guān)系。對于5V的滿量程,采用8位的DAC時,分辨率為5V/256=19.5mV;當(dāng)采用10位的DAC時,分辨率則為5V/1024=4.88mV。顯然,位數(shù)越多分辨率就越高。
2)建立時間建立時間是描述DAC轉(zhuǎn)換速度快慢的參數(shù)。定義為從輸入數(shù)字量變化到輸出達(dá)到終值誤差±1/2 LSB(最低有效位)所需的時間。
3)接口形式接口形式是DAC輸入/輸出特性之一。包括輸入數(shù)字量的形式:十六進(jìn)制或BCD,輸入是否帶有鎖存器等。DAC0832是使用非常普遍的8位D/A轉(zhuǎn)換器,由于其片內(nèi)有輸入數(shù)據(jù)寄存器,故可以直接與單片機(jī)接口。DAC0832以電流形式輸出,當(dāng)需要轉(zhuǎn)換為電壓輸出時,可外接運(yùn)算放大器。屬于該系列的芯片還有DAC0830、DAC0831,它們可以相互代換。
DAC0832的工作方式
DAC0832進(jìn)行D/A轉(zhuǎn)換,可以采用兩種方法對數(shù)據(jù)進(jìn)行鎖存。
第一種方法是使輸入寄存器工作在鎖存狀態(tài),而DAC寄存器工作在直通狀態(tài)。具體地說,就是使 和 都為低電平,DAC寄存器的鎖存選通端得不到有效電平而直通;此外,使輸入寄存器的控制信號ILE處于高電平、 處于低電平,這樣,當(dāng) 端來一個負(fù)脈沖時,就可以完成1次轉(zhuǎn)換。
第二種方法是使輸入寄存器工作在直通狀態(tài),而DAC寄存器工作在鎖存狀態(tài)。就是使 和 為低電平,ILE為高電平,這樣,輸入寄存器的鎖存選通信號處于無效狀態(tài)而直通;當(dāng)WR2 和XFER 端輸入1個負(fù)脈沖時,使得DAC寄存器工作在鎖存狀態(tài),提供鎖存數(shù)據(jù)進(jìn)行轉(zhuǎn)換。
根據(jù)上述對DAC0832的輸入寄存器和DAC寄存器不同的控制方法,DAC0832有如下3種工作方式:
?、艈尉彌_方式。單緩沖方式是控制輸入寄存器和DAC寄存器同時接收資料,或者只用輸入寄存器而把DAC寄存器接成直通方式。此方式適用只有一路模擬量輸出或幾路模擬量異步輸出的情形。
⑵雙緩沖方式。雙緩沖方式是先使輸入寄存器接收資料,再控制輸入寄存器的輸出資料到DAC寄存器,即分兩次鎖存輸入資料。此方式適用于多個D/A轉(zhuǎn)換同步輸出的情節(jié)。
?、侵蓖ǚ绞?。直通方式是資料不經(jīng)兩級鎖存器鎖存,即 CS*,XFER* ,WR1* ,WR2* 均接地,ILE接高電平。此方式適用于連續(xù)反饋控制線路和不帶微機(jī)的控制系統(tǒng),不過在使用時,必須通過另加I/O接口與CPU連接,以匹配CPU與D/A轉(zhuǎn)換。
DAC0832程序
#pragma db oe sb
#i nclude
#i nclude
#define DAC0832 XBYTE[0x7fff] /* 定義端口地址 */
#define uchar unsigned char
void delay(uchar t) { /* 延時函數(shù) */
while(t--);
}
void saw(void) { /* 鋸齒波發(fā)生函數(shù) */
uchar i;
for (i=0;i《255;i++) {
DAC0832=i;
}
}
void square(void) { /* 方波發(fā)生函數(shù) */
DAC0832=0x00;
delay(0x10);
DAC0832=0xff;
delay(0x10);
}
void main(void) { /* DAC0832主程序*/
uchar i,j;
i=j=0xff;
while(i--) {
saw(); /* 產(chǎn)生一段鋸齒波 */
}
while(j--) {
square(); /* 產(chǎn)生一段方波 */
}
}
評論
查看更多