巧妙的利用软件编程,将X9241内部的四个64抽头数字电位器组成一个高分辨率低成本的数字电位器
数字电位器(DCP)是专为替代传统机械电位器、可变电阻器而设计的新型集成电路。其通过I2C、SPI以及CS,U/D,INC三线方式与MCU接口,可实现应用程控调节,也有按钮控制方式,从而实现与传统机械电位器或可变电阻器相同的电位、电阻调节功能的特殊集成电路。与传统机械电位器相比,数字电位器具有数字调节、长寿命、易于装配、节省空间、不受振动影响等突出优点,已被广泛应用于医用设备、仪器仪表、工业控制、计算机、家用电器、手机、数码产品等各个领域。
在有些应用中,如激光二极管的动态偏置调节,使用数字电位器或者微调DAC来控制电压,就受到了分辨率、接口、成本的限制。为了解决这类问题,我们将在这里介绍使用低分辨率(64抽头)、低成本的Intersil(Xicor)公司I2C总线控制数字电位器X9241组成一个高分辨率(8001抽头)的数字电位器的解决方法。
实现高分辨率的原理
我们假设有三个数字电位器,POT1和POT2为64抽头DCP,POT3为128抽头DCP,其中POT1和POT2用作POT3的VH和VL的设置,并且必须保证POT1和POT2始终为“1”个位置间隔,那么就有63种不同的电压间隔施加到POT3上。理论上,当POT3在特殊电压抽头127和下一个电压间隔的抽头0之间跳动时,应该还有一个多余的抽头位置,但是这些抽头不是多余的,它们的作用可以改善输出的线性度,因为在相邻的两个电压间隔中的抽头0和抽头127的电压是一样的。对于63个不同间隔的每一个,又借助127个不同的输出,就会有8001(63×127=8001)个不同的Vw输出可以在VH和VL之间获得。图1就是说明的这个概念。
如何使用X9241实现高分辨率(8001抽头)
Intersil(Xicor)公司的X9241把四个非易失性数字电位器集成在一个单片CMOS微电路中,它的功能框图如图2。X9241包含四个电阻阵列,每个阵列包含63个电阻单元。在每个单元之间和两个端点都有可以被滑动单元访问的抽头点。滑动单元在阵列中的位子由用户通过I2C总线控制。每个电阻阵列与一个滑动端计数寄存器(WCR)和四个8位数据寄存器联系在一起,四个数据寄存器和滑动端计数寄存可以由用户直接写入和读出。滑动端计数寄存器的内容控制滑动端在电阻阵列中的位置。数据寄存器的内容可以传输到滑动端计数寄存器以设置滑动端位置,当前滑动端的位置也可以传输到任何与之联系的数据寄存器中。滑动端计数寄存器是易失性的,器件上电时,滑动端计数寄存器自动的装入数据寄存器0(R0)中的值。四个数据寄存器是非易失性的,如果在应用中不需要对电位器有多种设置保存时,可以用作通用存储单元,用来保存系统参数或用户数据。
X9241内部有一个特殊的机制,可以把相邻的数字电位器逐个串联。允许多达253个不同抽头位置(当把全部DCP逐个串联的时候)。如图3所示,我们将POT1和POT2(X9241内部相邻的两个DCP)串连起来,用POT0为其提供VH(可以调节的),用POT3提供VL(可以调节的)。那么我们就得到了如前面所述原理一样的电路图。
POT0和POT3为POT1-2(POT1和POT2串连以后的叫法)设置端电压。也必须保证POT1和POT3始终为“1”个位置间隔,那么就有63种不同的电压间隔施加到POT1-2上。随着POT1-2的滑动端位置向上或者向下移动到端点时,POT0和POT3的位置也要在必要时进行调整。如果POT1-2的滑动端增加到超过127时,那么POT0和POT3将增加“1”,而POT1-2的滑动端将返回到抽头0。同样,POT1-2的滑动端减低到抽头0以下时,POT0和POT3的滑动端将减小“1”,并将POT1-2的抽头设置到127。这一点,请读者在理解后面所附的程序清单时注意。
X9241极适用于这个任务,因为其内部正好有四个独立的DCP,并且有相邻DCP串联的机制,而且其采用I2C总线控制接口,抽头位置可以在软件中直接改变而不需要通过每个中间位置转换。
图4是使用X9241U(49.37K、49.38K、49.32K、49.24K)器件对电路进行测试得到的相邻抽头之间的典型结果。大图表示每个抽头的滑动端电压占所加总电压的百分比,其中插图为相邻抽头之间的分辨率占所加总电压的百分比。
使用X9241实现高分辨率的软件代码
为了方便理解实现控制的细节,我们提供了C语言源代码(代码由Xicor公司提供,我们做了一定的修改)。用户只需要自己再编写适用于不同单片机的I2C硬件接口函数(函数名称同程序中介绍一致),在应用程序中加入我们提供的源代码,简单的调用程序中介绍的5个函数,就可以方便地实现DCP的高分辨率控制。
关于X9241实现高分辨率的软件源代码,工程师可到http://www.icbase. com/download/X9241.c去下载。