D/A转换器可分为:并行D/A转换器和串行D/A转换器。
并行D/A转换器 —— 转换器的位数与输入数码的位数相同,对应数码的每一位都有输入端,用以控制相应的模拟切换开关把基准电压$U_{REF}$接到电阻网络。
$U_0=U_{REF}D=U_{REF}(a_12^{-1}+a_22^{-2}+\ldots \ldots +a_n2^{-n})=U_{REF}\sum_{i=1}^{n}a_i2^{-i}$
并行$D/A$转换器的转换速度快,只要在输入端加入数字信号,输出端立即有相应的模拟电压。
并行$D/A$转换器的转换速度与模拟开关的通断速度、电阻网络的寄生电抗和运算放大器的输出频率有关。
串行D/A转换器 —— 串行二进制数码在时钟同步下控制$D/A$转换器一位接一位工作。因此,转换一个$n$位输入数码需要$n$个时钟周期。
$D_S$为串行输入的二进制数码。当$D_S$在时钟脉冲的$T_C$周期为$1$($a_i$的值)时,$S_1$开关导通,$U_{REF}$与存储在电容上的电压$U_{Ci}$相加并除以$2$,当为逻辑$0$时,仅$U_{Ci}$单独接入。因此,$T_C$周期后,电容器上的存储电压为:
$$U_{C(i+1)}=\frac{1}{2}(U_{Ci}+a_iU_{REF})$$
在串行二进制脉冲最后一位$i=n$(即最高位)参与转换后,电容器上的电压为$U_{Cn}$。如果将其减去初始电容电压$U_{C0}$的$\frac{1}{2^n}$倍,则余下的电压即为串行$D/A$转换器最终的模拟电压输出$U_0$,则$U_0=U_{Cn}-U_{C0}\frac{1}{2^n}$
串行$D/A$转换器的转换速度比并行$D/A$转换器慢得多。
串行$D/A$转换器的输出是在串行码的最高位一个字的短时间间隔内得到,因此,如果想要得到稳定的直流电压输出,必须加采样/保持器。
1. 电阻网络
转换的精度直接与电阻的精度有关。但在某些$D/A$转换网络中,转换精度只取决于电阻的比值,与电阻的绝对值关系不大。
2. 基准电压
基准电压的精度直接影响$D/A$转换器的精度。如果要求$D/A$转换器精度到满量程的$±0.05%$,则基准电源的精度至少满足$±0.01%$。
3. 模拟切换开关
要求断开时电阻无限大,导通时电阻非常小,即要求很高的电阻断通比值。减小开关的饱和压降、漏电流以及导通电阻对网络的影响。
4. 运算放大器
$D/A$转换器的输出端都有运算放大器,其作用有两个:
如果要求$D/A$转换器精度到满量程的$±0.05%$,则要求放大器的电压输出至少稳定在满量程的$±0.01%$以内。例如放大器满量程输出为$±10V$,则要求其输出稳定在$±1mV$范围内。
1. 分辨率
分辨率 —— 最小输出电压(数字量最低位1)与最大输出电压(数字量全为1)之比。
设$D/A$转换器的位数为$n$,则分辨率为:$分辨率=\frac{1}{2^n-1}$
分辨率只与位数有关,位数越多分辨率越高。所以间接用$n$来代表分辨率。
2. 精度
绝对精度 —— 输入满量程数字量时,$D/A$转换器实际输出值与理论输出值之差。
绝对误差一般在$\pm \frac{1}{2}LSB$范围内。
相对精度 —— 绝对精度与额度满量程的比值。
$$相对精度=\frac{绝对精度}{FSR}\times 100%$$
3. 线性误差
线性误差 —— 指$D/A$转换芯片的转换特性曲线与理想特性之间的最大误差。
4. 建立时间
建立时间 —— 指$D/A$转换器的输入数码满量程变化时(全0变成全1),其输出模拟量达到$\pm \frac{1}{2}LSB$范围所需的时间。
==建立时间的长短取决于所采用的电路和使用的元件==。例如:电阻网络中电阻阻值越大,其寄生电容也越大,就会产生较大的延时。还有开关电路的延时等。
根据建立时间可以计算出$D/A$转换器每秒最大转换次数。
不同型号的$D/A$转换器,其建立时间一般从几十纳秒到几微秒 。输出形式为电压,建立时间主要取决于运算放大器的响应时间。
例如: $AD7641$的建立时间为:当其输出达到满量程值差的$0.01%$时,建立时间$\leq 1\mu s$。
5. 单调性
单调性 —— 当输入数码增加时,$D/A$转换器输出模拟量也增加或至少保持不变。
6. 温度系数
温度系数 —— 在满量程输出条件下,温度每升高$1℃$,输出变化的百分数。
7. 电源抑制比
电源抑制比 —— 满量程电压变化的百分数与电源电压变化的百分数之比。
开关电路及运算放大器所用的电源电压发生变化时,对$D/A$转换器的输出电压应影响极小。
权电阻$D/A$转换器实现的方法,是先把输入的数字量转换为对应的模拟电流量,然后再把模拟电流转换为模拟电压输出。
模拟开关受二进制数字量各位状态控制,$0$时开关接地,1时开关接基准电压。运算放大器对各位电流求和,然后转换成模拟输出电压$U_0$。
设输入的数字量(十进制)为$D$,采用定点二进制小数编码时,$D$可表示为:
$$D=a_12^{-1}+a_22^{-2}+\ldots\ldots a_n2^{-i}=\sum_{i=1}^{n}a_i2^{-i}$$
式中$a_i$是$0$或$1$,随$D$相应位的数值而定,$a_i$为$1$时,开关接基准电压,为$0$时接地。
流入放大器负极的总电流为:
$$I=a_1I_1+a_2I_2+a_3I_3+a_4I_4$$
$$=a_1\frac{U_{REF}}{2^0R}+a_2\frac{U_{REF}}{2^1R}+a_3\frac{U_{REF}}{2^2R}+a_4\frac{U_{REF}}{2^3R}$$
$$=\frac{2U_{REF}}{R}(a_12^{-1}+a_22^{-2}+a_32^{-3}+a_42^{-4})$$
放大器的开环输入阻抗极高,可认为$I_A=0$,因此$I_f=I$,则$D/A$转换器输出模拟电压为:
$$U_0=-IR_f=-\frac{2U_{REF}}{R}(a_12^{-1}+a_22^{-2}+a_32^{-3}+a_42^{-4})$$
因此实现了从数字量到模拟量的转换。从原理上讲,只要数字量位数足够多,输出电压可达到很高的精度。
但权电阻网络中各个电阻的阻值相差太大,而为了保证输出电压的精度,又要求电阻值很精确,这给制造芯片带来了困难,为了便于制造单片集成$A/D$转换器,通常采用下面介绍的$T$型解码网络。
$T$型电阻网络是由相同的电路环节组成,每一个环节有两个电阻和一个模拟电子开关,相当于二进制的一位,开关是由该位的数字代码控制。电阻网络中仅用了$R$和$2R$两种阻值的电阻,因而克服了权电阻$D/A$转换器电阻阻值相差很大带来的问题。
模拟开关受二进制数字量各位状态控制,$0$时开关接地,$1$时开关接运算放大器虚地。因此开关无论合向哪一点,各支路的电流是不变的。电流$I$向右每经过一个节点就进行一次对等分流。等效电路如图所示:
$ a、b、c、d $四点的电位分别为:
$U_A=U_{REF}$
$U_B=\frac{1}{2}U_A=\frac{1}{2}U_{REF}$
$U_C=\frac{1}{2}U_B=\frac{1}{2^2}U_{REF}$
$U_D=\frac{1}{2}U_C=\frac{1}{2^3}U_{REF}$
四个支路电流$ I_1、I_2、I_3、I_4 $分别为:
流入放大器负极的总电流为:
$$I=a_1I_1+a_2I_2+a_3I_3+a_4I_4$$
$$=a_1\frac{U_{REF}}{2^1R}+a_2\frac{U_{REF}}{2^2R}+a_3\frac{U_{REF}}{2^3R}+a_4\frac{U_{REF}}{2^4R}$$
$$=\frac{U_{REF}}{R}(a_12^{-1}+a_22^{-2}+a_32^{-3}+a_42^{-4})$$
放大器的开环输入阻抗极高,可认为$I_A=0$,因此$I_f=I$,则$D/A$转换器输出模拟电压为:
$U_0=-IR_f=-\frac{U_{REF}R_f}{R}(a_12^{-1}+a_22^{-2}+a_32^{-3}+a_42^{-4})$
如果是$n$位上述形式的$T$型网络,则输出的模拟电压为:
$U_0=-\frac{U_{REF}R_f}{R}(a_12^{-1}+a_22^{-2}+\ldots \ldots+a_n2^{-n})$
即输出的模拟电压正比于数字量的有效位数。
$T$型电阻网络$D/A$转换器的优点是克服了权电阻$D/A$转换器电阻阻值相差很大带来的问题,且转换速度比较快,在动态过程中的尖峰脉冲很小,使得$T$型电阻网络$D/A$转换器成为目前$D/A$转换器中速度最快的一种。
有些场合需要$D/A$转换器输出电压是双极性的,那么计算机应以==补码==形式输出具有正负值的数字量。
现以$D/A$转换器输入数字量是三位二进制补码为例,说明其转换原理。三位二进制补码可以表示$+3$ ~ $-4$中间的任何一个整数,它们与十进制数的对应关系以及要求得到的输出模拟电压如下表所示。
为了得到双极性输出的模拟电压,可采用如下的电路,双极性输出在$D/A$转换器中增设一个$R_f$和$U_f$组成的==偏移电路==实现。如果把输入的三位二进制代码全部视为无符号数,即都表示为正数,则输入$111$,输出电压为$7V$,输入$000$,输出电压为$0V$。将输出电压同时偏移$-4V$,那么输出电压在$+3V$ ~ $-4V$之间变化。
为了保证输入$100$时,输出电压为$0V$,应按下式选择偏移电压和电阻:
$$-\frac{U_{REF}}{R}=\frac{U_f}{R_f}$$
目前,$D/A$转换器芯片的品种很多,既有转换速度快慢之分,又有位数为$8$位、$10$位、$12$位、$14$位、$16$位之分,还有数字量并行输入与串行输入之分。
两级缓冲寄存器都是直通锁存器
$LE=1$,直通(输出等于输入)
$LE=0$,锁存(输出保持不变)
1. DAC0832的工作方式:直通方式
2. DAC0832的工作方式:单缓冲方式
3. DAC0832的工作方式:双缓冲方式
$U_{OUT}=-I_{OUT1}R_{fb}=-(D/2^8)U_{REF}$
例子:
设$U_{REF}=-5V$
$I_1=\frac{U_{REF}}{R_2}+\frac{U_{OUT2}}{R_3}$
$I_2=\frac{U_{OUT1}}{R_1}$
取$R_2=R_3=2R_1$
得$U_{OUT2}=-(2U_{OUT1}+U_{REF})$
因$U_{OUT1}=-(D/2^8)U_{REF}$
故$U_{OUT2}=[(D-2^7)/2^7]U_{REF}$
例子:
设$U_{REF}=5V$
$DAC$芯片相当于一个”输出设备“,至少需要一级锁存器作为接口电路。
要考虑到有些$DAC$芯片的数据位数大于主机数据总线宽度,所以分两种情况:
1. D/A转换器的位数与数据总线位数相同
在这种情况下,需要一个位数与数据总线相同的锁存器,配以相应的译码选通电路。
2. D/A转换器的位数高于数据总线位数
两级锁存电路:
简化的两级锁存电路:
==利用专用I/O接口器件与微机相连==
具有输入锁存器的$D/A$转换器可以和微机接口直接相连,但$D/A$转换器有两种方式:
1. 单级缓冲D/A转换器与微机的接口
(1)具有$8$位单级锁存器的D/A转换器与$8$位数据总线的接口
==直接与数据总线相连==
(2)具有$12$位单级锁存器的D/A转换器与$8$位数据总线的接口
==低$8$位直接与数据总线相连,高$4$位经锁存器与数据总线相连==
2. 双级缓冲D/A转换器与微机的接口
(1)$DAC0832$与微机总线的接口
==直接与数据总线相连==
(2)$DAC1210$与微机总线的接口
==低$4$位与高$8$位直接与数据总线相连,先写高$8$,后写低$4$位==