马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?注册
x
本帖最后由 jiangst 于 2024-8-15 20:23 编辑
C.C.Liu在2010年在ISSCC上发布了经典论文“A 10b 100MS/s 1.13mW SAR ADC with Binary-ScaledError Compensation”,可以说是设计SAR ADC必读的一篇论文。其中提出了含冗余码的13位转10位数字码的方法,在他的博士学位论文里描述如下:The bit weights of the 13-bit redundant codes are 512,256, 128, 128, 64, 32, 16, 16, 8, 4, 2, 2, 1. The digital output can beexpressed as – (64+8+1) + (512×B1+256×B2+128×B3+128×B3C+…)。很多人都对为什么要减去0.5×冗余码感到不解,我搜索资料也没找到一个合理的解释,只是有些人提出了这种计算方法计算数字码好像有误,我仔细研究了一番,发现这种方法确实存在限制。
首先为了简化问题,我们设置一个单端的3bit的权重为[4C,2C,2C,1C,1C]的电容阵列,其中添加了一个2C的冗余电容和1C的哑电容。因为有一个冗余电容,所以需要将4bit的比较结果转为3bit的实际数字码输出。这里,电容阵列的总电容大小为10C,为了方便计算,我们假设ADC量程为80V,10C的电容(其中单位电容为1C)相当于11根刻度线,把80V划分成了10份,所以步长为8V。而我们要转换为3位的数字码,也就是[0,0,0]…[1,1,1],相当于9根刻度线,把80V划分成了8份,所以步长为10V。看图1画的草图,4位的转换码一共有[0,0,0,0]…[1,1,1,1] 16组数字码,理论上有17根刻度线,但因为这4位转换码的权重分别位4,2,2,1,不是二进制码,所以有几组转换码对应同一根刻度线,比如[1,0,0,0]和[0,1,1,0]。
现在问题来了,因为刻度线都是离散的,那么假设你输入65V,ADC量化出来的4位数字码对应的结果只能是64V这根刻度线,然后64V这根刻度线对应的4位数字码该怎么转换成3位数字码所对应的刻度线?是不是只有60V([1,1,0])这跟刻度线,因为这根线离56V最近。所以4位数字码转为3位数字码只能按图1的里画的箭头所示的方式转换才是正确的。 图1
那么把上述整理成表格,X是4位数字码,Y是将X按图1规则转换出的3位数字码。在Liu的论文里说:The amplitude of the input signal swing isVref×(C1to9/Ctotal),所以Liu规定了输入信号范围,这个信号范围量化出的四位数字码如橙色高亮所示,然后最左列是按照Liu的方法计算的结果,将其与Y对照,可以发现黄色高亮的转换结果才是正确的。那么Liu规定ADC的最大输入电压就是因为他的数字码转换方法在高位的时候不适用,所以人为限制了输入摆幅,但其实以论文里的架构,输入摆幅是可以到Vref的,只要数字码转换方法正确就行了。但是在低位的时候,数字码转换方法其实也是有误的。
那么正确的数字码准换方式是什么呢?如下式所示,[]表示四舍五入。 仍然以权重为[4C,2C,2C,1C,1C]为例,totweight=10C,redundancy=2C,如果X=6,那么Y=[4.8]=5,与表格一致,图1箭头“跃迁”其实就代表了四舍五入的过程。 至于如何用电路实现上述方法,期望能有大佬解答,但毫无疑问电路规模要比Liu的大,Liu用了取巧的方法,但也牺牲了输入摆幅。 所以这也显示出了这种冗余位的弊端。如果加入了冗余电容而使总的电容权重不为2的倍数的话,就会有如图1所示的刻度线对不齐的问题,这就需要四舍五入的方法,导致数字码的转换方式变得异常复杂。 所以Liu在2015年提出的方法,将MSB的电容拆分了并分给低位,这样总的电容权重仍为2的倍数,也有冗余的功能。
Liu的论文放下面了,大家可以看一下。
|