玖叶教程网

前端编程开发入门

R2R dac matlab model(R2R dac matlab model)

  1. 由纯电阻组成的dac结构简单,且对输出节点而言,时间常数与code无关,所以该电阻具有较好的“harmonic distortion”。
  2. 下面以4 bits dac matlab code 为例,输出R2R dac的dnl;
clear all;
clc;
N = 4;    %% bits of R2R dac
n = 0:2^N-1;  
nn = n+1;
vdd = 0.900;   %% supply of dac
var = 0.001;   %% mismatch of resistor

a = dec2bin(n);
sel = vdd*(double(a)-48);
Ru = 100;  %% res value 
mm = 1000;  %% number of monte-carlo

R1V = [2*Ru*(1+1/sqrt(2)*var*randn(1,mm));Ru*(1+var*randn(N-1,mm))];
R2V = 2*Ru*(1+1/sqrt(2)*var*randn(N,mm));

vi = 0;
R1E = repmat(R1V(1,:),length(n),1);

for jj = 1:N,
    vi = vi.*repmat(R2V(jj,:),length(n),1)./(repmat(R2V(jj,:),length(n),1) + R1E)+  repmat(sel(:,N+1-jj),1,mm).*R1E./(repmat(R2V(jj,:),length(n),1)+R1E);
    if(jj<N)
        R1E = repmat(R1V(jj+1,:),length(n),1) + repmat(R2V(jj,:),length(n),1).*R1E./(repmat(R2V(jj,:),length(n),1)+R1E);
    else
        break
    end
end
lsb = vi(end,:)/(2^N-1);
lsb_ideal = 0.9/2^N;
dnl = diff(vi)./lsb -1;
sig_dnl = std(dnl,0,2);
plot(sig_dnl)
dnl_max = max(sig_dnl)     %% the output of R2R dac in matlab code 
l_max_cal = sqrt(2)*var/4*(1-2^(-N))/lsb_ideal     %% theoretica output

code的输出结果:

dnl_max = 0.0068

dnl_max_cal = 0.0059

我们可以看出推导出的dnl偏小,是因为理论推导过程中进行了采用很多近似。

matlab输出结果图

理论推导过程【1】

参考文献

【1】Analog-Digital Converters for Industrial Applications Including an Introduction to Digital-Analog Converters

发表评论:

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言