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 }