DAC0832是8分辨率的D/A轉換集成芯片。與微處理器完全兼容。這個DA芯片以其價格低廉、接口簡單、轉換控制容易等優點,在單片機應用系統中得到廣泛的應用。D/A轉換器由8位輸入鎖存器、8位DAC寄存器、8位D/A轉換電路及轉換控制電路構成。
單極性輸出:
由運算放大器進行電流→電壓轉換,使用內部反饋電阻。輸出電壓值VOUT和輸入數字量D的關系:
VOUT = - VREF ×D/256
D = 0~255, VOUT = 0 ~ - VREF ×255/256
比如:
VREF = -5V, VOUT =0~5×(255/256)V
VREF = +5V, VOUT = 0 ~ -5×(255/256)V;
雙極性輸出:
如果實際應用系統中要求輸出模擬電壓為雙極性,則需要用轉換電路實現。
如圖雙極性電壓輸出電路
其中 R2=R3=2R1
VOUT= 2×VREF×D/256 -VREF= (2D/256-1)VREF
比如:
D = 0, VOUT= -VREF;
D = 128, VOUT= 0;
D = 255, VOUT= (2×255/256-1)×VREF= (254/255)VREF
即:輸入數字為0~255時,輸出電壓在- VREF ~+ VREF之間變化。
DAC0832 芯片:
相關仿真電路圖:
按照單極性計算公式如下:
VOUT = - VREF ×D/256
D = 0~255, VOUT = 0 ~ - VREF ×255/256
D7---D0 為 0010 1001 =0x29=41 , Vout= - (+2.5)*41/256=-0.400390625 也就是 -0.40 ,實驗正確
參考代碼
1 #include<reg52.h> 2 #define uchar8 unsigned char 3 #define uint16 unsigned int 4 #define out P1 5 sbit DAC_cs = P2^0; 6 sbit DAC_wr = P2^1; 7 void main(void) 8 { 9 uchar8 temp; 10 uint16 i=200; 11 while(1) 12 { 13 14 15 out=temp; 16 DAC_cs=0; // 選中芯片,低電平有效 17 DAC_wr=0; // 數據鎖存器寫選通輸入線, 向 DAC0832芯片寫入轉換的數字量 18 19 DAC_cs=1; // 為什么要關閉呢,當然換做我寫,好像也會關閉 20 DAC_wr=1; // 我也會關閉,先鎖存起來 21 temp++; // 數字量加1 ,當然也可以 加 其他的,比如2 ,那么 電壓一次就會跳 2*256/2.5=0.02 A 22 while(--i); // 延時吧,有用,不然跳的太快 23 24 } 25 26 }