一、前言


数字电位器又叫可编程电阻器,是一种替代传统机械电位器的新型CMOS数字、模拟混合信号处理集成电路,不需要搭建复杂的电路环境即可简单的通过CPU数字通讯实现电路调节,数字电位器也不能完全替代传统的机械电位器,在很多场合电流,电压,电阻精度等参数大大限制了数字电位器的选择,下面举例一些常用的数字电位器ic使用电路及性能参数。

选择数字电位器芯片应考虑的方面很多,电位器的个数,滑片的数目即有多少级,电阻的阻值,有没有缓冲触头,能否记忆掉电时的位置,封装等。相似于3386电位器的封装及特点,总的来说数字电位器芯片选型主要还是从以下三点进行考虑。
1、数字电位器抽头的变化形式: 系统重新通电时,阻值能够恢复上一次掉电时的阻值,则要选择非易失性的数字电位
2、数字电位器电压:带缓冲器输出的电位器,输出是一个电压值,而不是一个电阻值,这时应该选择不带缓冲器的。
3、数字电位器分辨率:如果系统对分辨率要求比较高,可选择滑片数目多一些的电位器,或者使用两个数字电位器串联达到其目的。

由于数字电位器可代替机械式电位器,所以二者在原理上有相似之处。数字电位器属于集成化的三端可变电阻器件其等效电路,如图1所示。当数字电位器用作分压器时,其高端、低端、滑动端分别用VH、VL、VW表示;而用作可调电阻器时,分别用RH、RL和RW表示。


图2所示为数字电位器的内部简化电路,将n个阻值相同的电阻串联,每只电阻的两端经过一个由MOS管构成的模拟开关相连,作为数字电位器的抽头。这种模拟开关等效于单刀单掷开关,且在数字信号的控制下每次只能有一个模拟开关闭合,从而将串联电阻的每一个节点连接到滑动端。
  


  数字电位器的数字控制部分包括加减计数器、译码电路、保存和恢复控制电路和不挥发存储器等4个数字电路模块。利用串入、并出的加/减计数器在输入脉冲和控制信号的控制下可实现加/减计数,计数器把累计的数据直接提供给译码电路控制开关阵列,同时也将数据传送给内部存储器保存。当外部计数脉冲信号停止或片选信号无效后,译码电路的输出端只有一个有效,于是只选择一个MOS管导通。
  数字控制部分的存储器是一种掉电不挥发存储器,当电路掉电后再次上电时,数字电位器中仍保存着原有的控制数据,其中间抽头到两端点之间的电阻值仍是上一次的调整结果。因此,数字电位器和机械式电位器的使用效果基本相同。但是由于开关的工作采用“先连接后断开”的方式,所以在输入计数有效期间,数字电位器的电阻值和期望值可能会有一定的差别,只有在调整结束后才能达到期望值。
  从图2可以看出,数字电位器和机械式电位器有2个重要区别:
  1)调整过程中,数字电位器的电阻值不是连续变化的,而是在调整结束后才具有所希望的输出。这是因为数字电位器采用MOS管作为开关电路,并且采用“先开后关”的控制方法:
  2)数字电位器无法实现电阻的连续调整,而只能按数字电位器中电阻网络上的最小电阻值进行调整。

二、环境

精度要求不是很精确场合

三、正文

1.MAX5432/5433

MAX5432/5433是美国美信公司推出的具有32个可选抽头的非易失、线性变化数字电位器,芯片采用I2C串行总线接口,通过最高400kbps的数据通信速率,进行片选和电位器抽头位置选择。电可擦除的可编程只读存储器(EEPROM),可在上电时将滑动端恢复到上次停电时存储的位置。
芯片制作时工厂已为每个器件提供四个预设的12c地址之一。每块芯片的地址共有7位,其中高6位已固化在芯片中,最低位A。可由用户设定。
MAX5432/5433的端到端电阻分别为50kΩ及100kΩ,端到端的电阻温度系数标称值为35ppm/℃,比例温度系数只有5ppm/℃,可应用于需要低温度系数可变电阻的电路中,例如低漂移、可编程增益放大器电路。芯片采用8引脚TDFN封装,具有一个散热功能的接地焊接点EP,将该点焊接在具有适当面积的印板铜皮上,使芯片可工作在-40℃:至+85℃扩展级温度范围.2.7V~5.5V单电源工作,每 POT 分接头:32


应用场景:LCD背光调节、低偏差可编程增益放大器、替代机械电位器、音量控制


max5432
型号: MAX5432LETA+T
系列: MAX5432
电阻: 50 kOhms
温度系数: 35 PPM / C
容差: 25 %
POT 数量: Single
每 POT 分接头: 32
弧刷存储器: Non Volatile
数字接口: Parallel (2-Wire)
工作电源电压: 2.7 V to 5.25 V
工作电源电流: 2 uA
最小工作温度: - 40 C
最大工作温度: + 85 C
封装 / 箱体: TQFN-8
电源类型: Single
电源电压-最大: 5.25 V
电源电压-最小: 2.7 V
零件号别名: MAX5432

max5434
型号: MAX5434MEZT+T
封装: TSOT-23-6
系列: MAX5434
电阻: 50 kOhms
POT 数量: Single
每 POT 分接头: 32
弧刷存储器: Non Volatile
数字接口: Serial (2-Wire, I2C)
工作电源电压: 5 V
工作电源电流: 2 uA
最小工作温度: - 40 C
最大工作温度: + 85 C
封装 / 箱体: TSOT-23-6
电源电压-最大: 5.25 V
电源电压-最小: 2.7 V
零件号别名: MAX5434

max5435
型号: MAX5435MEZT
封装: SOP/DIP
最小工作温度: -30C
最大工作温度: 90C
最小电源电压: 3V
最大电源电压: 6V

2.MAX5438

MAX5438是MAXIM公司生产的7位128阶数字电位器100 k。它由1个7位移位寄存器,1个7位数据锁存器,模块,电位器和控制时钟逻辑组成。MAX5438的控制信号包括3个输入信号: 芯片选择(CS),数据输入(DIN)和行时钟(SCLK),数字逻辑由一个2.7V~5.25V的电压驱动。其内部电阻两端的电压由外部通过VDD及VSS提供,VDD与VSS之间的电压必须大于9V小于31.5V。这使得MAX5838在输入电压的选择上具有很大的灵活性。同时,MAX5438的外部电路非常简单,几乎不需要任何外接元件就可实现对输入电压的调节输出。


下降,然后在SCLK引脚上模拟时钟信号,在每个时钟的上升沿,一位数据就从DIN引脚被读入串行移位寄存器,8位数据需要8个时钟脉冲来完成输入。需要注意的是,数据位D7是没意义的,所以,在第二个脉冲的上升沿才读入真正的MSB。所有数据位输入完后,应从低变高,这时数据被锁存到电位器控制寄存器,通过*电路使电阻滑片W的位置随输入数据而改变。
  用MAX5438S实现负压可调的硬件电路如图所示。固定负偏压由MAX202芯片提供,单片机的3个I/O引脚与MAX5438的3个控制信号相连。
  由于MAX5438内部没有EPROM,无法记录滑片的位置,所以在程序的开始就要先写入一个数据给它作为以后调节的起始值。这可以通过电路的实际情况选择一个对所用液晶比较合适的值来作为起始值,这样可以大大降低对比度的调节次数。起始值的范围在00至7F之间,这两个值分别对应输出的最小和最大电压。在如图2的实际电路中,MAX5438的输入电压是MAX202提供的-12V,输出电压的范围是-9V~0V由于具有128阶的调节能力,输出电压变化的最小值为9/128即约0.1V。对大部分液晶来说,负偏压在-8V~-9V时显示效果较好,所以起始值在02至06之间比较合适。进入对比度调节菜单后,通过按键来增加或减少初始值,每按一次键,就把新值送入MAX5438来改变其输出电压。
  每 POT 分接头:128


引用文章
型号: MAX5438EUB+
系列: MAX5438
电阻: 100 kOhms
温度系数: 35 PPM / C
容差: 25 %
POT 数量: Single
每 POT 分接头: 128
弧刷存储器: Volatile
数字接口: Serial (3-Wire, SPI)
工作电源电压: 2.7 V to 5.25 V
工作电源电流: 60 uA
最小工作温度: - 40 C
最大工作温度: + 85 C
电源电压-最大: 5.25 V
电源电压-最小: 2.7 V
零件号别名: MAX5438

3.X9511

文章链接
每 POT 分接头:32
电阻10k
最大5v电源电压

4.MCP454X/456X/464X/466X

mcp4541
型号: MCP4541T-103E/MS
封装: MSOP-8
系列: MCP4541
电阻: 10 kOhms
POT 数量: Single
每 POT 分接头: 128
弧刷存储器: Non Volatile
数字接口: Serial (2-Wire, I2C)
工作电源电压: 2.5 V, 3.3 V, 5 V
工作电源电流: 2.5 uA
最小工作温度: - 40 C
最大工作温度: + 125 C
封装 / 箱体: MSOP-8
电源类型: Single
宽度: 3 mm
电源电压-最大: 5.5 V
电源电压-最小: 1.8 V

mcp4561
型号: MCP4561-104E/MS
封装: MSOP-8
系列: MCP4561
电阻: 100 kOhms
POT 数量: Single
每 POT 分接头: 256
弧刷存储器: Non Volatile
数字接口: Serial (2-Wire, I2C)
工作电源电压: 2.5 V, 3.3 V, 5 V
工作电源电流: 2.5 uA
最小工作温度: - 40 C
最大工作温度: + 125 C
封装 / 箱体: MSOP-8
电源类型: Single
宽度: 3 mm
电源电压-最大: 5.5 V
电源电压-最小: 1.8 V

mcp4641
型号: MCP4641-503E/ST
封装: TSSOP14
电阻: 50 kOhms
POT 数量: Dual
每 POT 分接头: 128
弧刷存储器: Non Volatile
数字接口: Serial (2-Wire, I2C)
工作电源电压: 2.5 V, 3.3 V, 5 V
工作电源电流: 2.5 uA
最小工作温度: - 40 C
最大工作温度: + 125 C
封装 / 箱体: TSSOP-14
电源类型: Single
宽度: 4.4 mm
电源电压-最大: 5.5 V
电源电压-最小: 1.8 V

mcp4661
型号: MCP4661-502E/ST
封装: TSSOP-14
系列: MCP4661
电阻: 5 kOhms
POT 数量: Dual
每 POT 分接头: 256
弧刷存储器: Non Volatile
数字接口: Serial (2-Wire, I2C)
工作电源电压: 2.5 V, 3.3 V, 5 V
工作电源电流: 2.5 uA
最小工作温度: - 40 C
最大工作温度: + 125 C
封装 / 箱体: TSSOP-14
电源类型: Single
电源电压-最大: 5.5 V
电源电压-最小: 1.8 V

5.X9C102/103/104

数字电位器X9C102/103/104模块是一款宽电压(3V-5V)供电,1K/10K/100K满量程电位器。下面以10k说明。
电位器中间抽头在0-10k间滑动共100级(电位器滑动端典型阻抗40欧)数字电位器VL和VH端口分别对应滑动变阻器的低端和高端,允许输入电压范围-5V到+5V。


封装: SOP-8
系列: X9C10
电阻: 1 kOhms
POT 数量: Single
每 POT 分接头: 100
弧刷存储器: Non Volatile
数字接口: 3-Wire
工作电源电压: 5 V
工作电源电流: 750 uA
最小工作温度: - 40 C
最大工作温度: + 70 C
安装风格: PCB Mount
端接类型: SMD/SMT
电源类型: Single
电源电压-最大: 5 V
电源电压-最小: 4.5 V

6.AD7376

AD7376是市场上少有的几款高压、高性能数字电位计**之一。这款器件可以用作可编程电阻或电阻分压器。它可实现与机械电位计、可变电阻及调整器相同的电子调整功能,而且具有增强的分辨率、固态可靠性和可编程能力。这款器件采用数字控制而不是手动控制,允许灵活布局,并能进行闭环动态控制。
AD7376在关断情况下具有睡眠模式编程能力,可以用来在器件启动之前通过编程预设,从而能够替代高成本的EEPROM解决方案。
AD7376提供14引脚TSSOP和16引脚宽体SOIC两种封装,以及10 kΩ、50 kΩ和100 kΩ三种选项。所有器件的保证工作温度范围均为−40°C至+85°C扩展工业温度范围。
应用场景:
高压DAC
可编程电源
可编程增益和失调电压调整
可编程滤波器、延迟
执行器控制
音量控制
机械电位计的替代产品


型号: AD7376ARUZ10
系列: AD7376
电阻: 10 kOhms
温度系数: 35 PPM / C
容差: 30 %
POT 数量: Single
每 POT 分接头: 128
弧刷存储器: Volatile
数字接口: SPI
工作电源电压: 5.5 V
工作电源电流: 12 uA
最小工作温度: - 40 C
最大工作温度: + 85 C
封装 / 箱体: TSSOP-14

7.AD8400/AD8402/AD8403

AD8400
电阻: 1 kOhms
温度系数: 500 PPM / C
容差: 20 %
POT 数量: Single
每 POT 分接头: 256
弧刷存储器: Volatile
数字接口: SPI
工作电源电压: 5.5 V
工作电源电流: 10 nA
最小工作温度: - 40 C
最大工作温度: + 125 C
安装风格: PCB Mount
端接类型: SMD/SMT
封装 / 箱体: SOIC-8
电源电压-最大: 5.5 V
电源电压-最小: 2.7 V

AD8402
型号: AD8402ARZ1
封装: SOIC-14
系列: AD8402
电阻: 1 kOhms
温度系数: 500 PPM / C
容差: 20 %
POT 数量: Dual 2路
每 POT 分接头: 256
弧刷存储器: Volatile
数字接口: SPI
工作电源电压: 3 V, 5 V
工作电源电流: 10 nA
最小工作温度: - 40 C
最大工作温度: + 125 C
封装 / 箱体: SOIC-14
电源类型: Single
宽度: 4 mm
电源电压-最大: 5.5 V
电源电压-最小: 2.7 V

AD8403
型号: AD8403AR1
电路数: 4
抽头数: 256
电阻(欧姆): 1k
接口: SPI
存储器类型: 易失
电压 - 电源: 2.7V ~ 5.5V
特性: 级联销
容差: ±33%
温度系数(典型值): 700ppm/°C
封装/外壳: 24-SOIC(0.295",7.50mm 宽)
工作温度: -40°C ~ 125°C
电阻 - 游标(欧姆)(典型值): 200

AD8400/AD8402/AD8403分别是单通道/双通道/四通道、256位、数字控制可变电阻(VR)器件,可实现与机械电位计或可变电阻相同的电子调整功能。AD8400内置一个可变电阻,采用紧凑的SOIC-8封装。AD8402内置两个独立的可变电阻,采用节省空间的SOIC-14表面贴装封装。AD8403内置四个独立的可变电阻,提供24引脚PDIP、
SOIC和TSSOP三种封装。各器件均内置一个带游标触点的固定电阻,该游标触点在载入控制串行输入寄存器的数字码所确定的数字码分接该固定电阻值。游标与固定电阻任一端点之间的电阻值,随传输至VR锁存器中的数字码呈线性变化。在A端与游标或B端与游标之间,各可变电阻提供一个完全可编程电阻值。A至B固定端接电阻(1 kΩ、10 kΩ、50 kΩ或100 kΩ)的通道间匹配容差为±1%,标称温度系数为500 ppm/°C。借助独特的开关电路,可将传统开关电阻设计中固有的高脉冲干扰降至最低,从而避免任何先合后开或先开后合操作。


每个VR均有各自的VR锁存器,用来保存其编程电阻值。这些VR锁存器由一个SPI兼容型串行至并行移位寄存器更新,该移位寄存器从一个标准三线式串行输入数字接口加载数据。由10个数据位构成的数据字传输至串行输入寄存器。该数据字经过解码,前2位确定需要载入的VR锁存器地址,后8位是数据。利用串行寄存器相对端的串行数据输出引脚,就可以简单的菊花链形式将多个VR连接,而无需额外的外部解码逻辑。


单通道芯片阻值与型号如上图,多通道的单独查询手册查看型号。
20230213更新调试AD8403AR1记录
写完帖子画完pcb出了个差,回来发现pcb与买的芯片封装不对,天啊撸,在淘宝买芯片静想着便宜省钱了,忽略了封装匹配问题,纠结了半小时决定飞线吧,就这样开启了飞线之旅


改板后


就这样在使用跳线连接手里的落灰了几年的开发板,开始了久违的看手册写逻辑之旅,因为这个芯片用的不多,网上也没有什么开源的资料和例程,这回就有了。
下面放上核心代码,也可以花积分下载源码和手册和硬件原理图pcb,不建议哈,既然能搜到这肯定都是有耐心的大佬了,核心代码已经很完整了。下载链接

void AD8403_Init(void)
{
 GPIO_InitTypeDef  GPIO_InitStructure;
 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOD, ENABLE);
 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15;			
 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; 		 //推挽输出
 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;		 //IO口速度为50MHz
 GPIO_Init(GPIOB, &GPIO_InitStructure);					
 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11|GPIO_Pin_13;	    		
 GPIO_Init(GPIOD, &GPIO_InitStructure);	  				 //推挽输出 ,IO口速度为50MHz
	SHDN=1;//为0时,所有电阻A端开路,W连接到B,关闭SDO输出晶体管
	RS=1;//上升沿将所有RDAC锁存器锁存为80H,所有W输出为AB之间的总电阻一半
	delay_us(1);
	RS=0;
	delay_us(1);
	RS=1;
}
void AD8403_W(int CH, int w)
{
     int i = 0;
     int channal = CH;
     int send_data = w;
     CS=0;
	 delay_us(10);
     for(i = 0; i < 2; i ++){
				 if((channal & 0x02) == 0x02)
						SDI=1;
				 else
						SDI=0;
				 delay_us(1);
				 CLK=1;             //Set SPI_SCK to High voltage
				 delay_us(1);
				 CLK=0;            //Set SPI_SCK to low voltage
				 channal = channal << 1;
		 }
     //后八个bit  指定阻值
     for(i = 0; i < 8; i ++) {
				 if ((send_data & 0x80) == 0x80)
						SDI=1;
				 else
						SDI=0;
				 delay_us(1);
				 CLK=1;             //Set SPI_SCK to High voltage
				 delay_us(1);
				 CLK=0;            //Set SPI_SCK to low voltage
				 send_data = send_data << 1;
		 }
     CS=1;
}

主函数代码

		LCD_ShowString(30,90,300,16,24,"AD8403A1 Test Rab:1300R");
		
		sprintf((char*)lcd_id,"Level set:%03d/255",res);
 		LCD_ShowString(30,130,300,16,24,lcd_id);		
		
		Rwb=res*1250/256+50;
		sprintf((char*)lcd_id,"Rwb:%04d",Rwb);
 		LCD_ShowString(30,170,300,16,24,lcd_id);		

其中res为0-255抽头,我是使用B端和W端,A端空着或者与W端短接均可以,Rab我这个芯片测量是1300R,减去默认的50R(我实际Rwb短接是42R)Rab就设置为1250R,其实每一个芯片都是不同的,Rab和短接的Rsb应该有个地方单独标定,方式也有很多种哈。
按照公式Rwb=res1250/256+50;计算Rwb,其中1250和50可以按标定更改。


最后就是调用设置函数了AD8403_W(0,res);
这里有两个参数,第一个参数是通道,AD8403是4通道的,0-3对应1-4通道,第二个参数是抽头数值,以B为起始端W端移动,0-255抽头Rwb会依次增大。
下面就放上我的实际测量结果:




其中有两个可调功能引脚,RS引脚拉低,W至于AB中间点,SHDN引脚拉低,WB短接,A端浮空
精度感觉256抽头已经算是很多的了,目前找的芯片发现有1024抽头的,但是都是10K网上,精细下来每个抽头10R电阻,1K电阻最高找到这个256抽头的,正常来说1个抽头对应3.9R,没想到总量成1K变成了1.3K,每个抽头也就基本是5R左右,整体精度都能保持在10R之内,相当于10/1300
100=0.769%,小于1%

四、结语

后续有新型号好用的,在此贴继续完善更新