1.芯片简介
根据使用说明书,与AD5272芯片通信需要使用IIC接口。
通过IIC控制芯片输出电阻。
2.芯片使用手册解读
2.1 引脚配置和功能描述(PIN CONFIGURATION AND FUNCTION DESCRIPTIONS)
这里涉及到接线需要注意的几点为:
1.reset引脚需要接VDD
2.SDA引脚需要连接上拉电阻
3.ADDR引脚有三种连接方式(下面会介绍):接GND,接VDD,NC什么都不接。
3 工作原理(THEORY OF OPERATION)
大意就是:使用IIC更改RDAC寄存器的内容,RDAC寄存器的内容又决定了电阻游标位置,更改以后将RDAC寄存器的内容存储到50-TP寄存器中。这样就能够实现不同电阻值的输出。
3.1 串行数据接口(SERIAL DATA INTERFACE)
讲述了AD5272支持标准IIC和快速IIC。并且寻址是7位寻址。
ADDR引脚连接线的不同,AD5272的地址也不同。因为有三种方式,所以一个总线上最多挂载三个AD5272芯片。
3.2 移位寄存器(SHIFT REGISTER)
AD5272芯片移位寄存器16位宽,组成分别为: 00 + C3C2C1C0+D9……D0。一共16位两个字节。其中C3……C0为控制位,D9……D0为RDAC数据位。控制位是固定的,手册中有给出,我们需要改变的是D9……D0的值。
3.3 写操作(WRITE OPERATION)
SCL为高,SDA为低的时候,表示开始写。
最先发送的是7位地址 + 1位读写位 (注意:一般函数都会封装读写位,即调用读函数,会自动补全1,调用写函数,会自动补全0,所以只要传递前7位地址就行),将前八个字节发送后,AD5272会回复一个ACK,代码寻址成功。(可用逻辑分析仪等抓波);
其次再发送八字节 00 + C3…C0 + D9 + D8, AD5272会回复一个ACK;
再次再发送八字节D7……D0, AD5272会回复一个ACK;
最后SCL,SDA都拉高,表示停止。
这是一次写操作的全过程。
3.4 读操作(READ OPERATION)
读操作需要注意的是分为两步:
第一步执行的是写,第八位读写位为0;
第二步执行的是读,第八位读写位是1;
(这里第一步用的控制命令与之前单纯的写不同,下面介绍。)
3.5 寄存器介绍
3.5.1 RDAC寄存器(RDAC REGISTER)
使用IIC直接更改其值,其值改变后游标位置变动。
3.5.2 50-TP寄存器(50-TP MEMORY BLOCK)
存储RDAC寄存器中的值
3.5.3 控制寄存器——写保护(WRITE PROTECTION)
因为芯片有写保护,所以需要先解除写保护,通过更改控制寄存器的值来解决。
所以大致流程就是使用IIC先跟控制寄存器通信,解除写保护,然后与RDAC通信,改变游标位置,最后将RDAC的值写入50-TP寄存器。
4.写/读 RDAC和50-TP寄存器示例(Write and Read to RDAC and 50-TP memory)
看的时候有点懵,为什么有0x1c、0x14这种指令,其实,按照00 + C3C2C1C0+D9……D0,这个格式来计算就能得到:
第一条指令 :0x1C03 (0x1C, 0x03):意思是使用命令7,写0x03,因为命令7的介绍是写控制寄存器,所以需要找到这个表:
0x03对应:0011,所以表示:1 = enable device for 50-TP program 和 1 = allow update of wiper position through a digital interface。
这条指令将写保护给打开。
第二条指令:0x0500 (0x05, 0x00),后面介绍意思是将0x100写入RDAC寄存器;游标移到¼满量程位置。为什么这样,
首先将(0x05, 0x00)转换为二进制 00000101 00000000, 按照16位寄存器格式: 00 + 0001 + 0100000000, 就是用0x01指令写0x100。【上面表格只有指令1的D9、D8位不是XX,而XX的意思是不需要考虑置为0就行。所以只有指令1值是在变化的】
第三条指令:0x0800,这个是读数据指令,按照上面的读操作显示,需要将此指令写一遍,然后再去读返回的两字节。
第四条指令:0x0C00,用于将上一步我们写的RDAC数据写入50-TP寄存器中。
第五条指令:0x1800,也是一个读指令,用于读取50-TP寄存器的值。
在我调试的过程中,执行到这里,就能够实现AD5272输出不同的电阻值,后面的指令使用逻辑分析仪抓取一直返回的是NAK,有知道的小伙伴可以评论下。(以上如果有问题,可以随时评论,共同讨论)。
5 .电阻值计算
按照第四章节的列子,我们将0x100写入到了RDAC寄存器,0x100十进制为256,如果使用50K的RD5272,则计算过程与结果为:256/1024 * 50 = 12.5k ;此时使用万用表测量AW两端的电阻,发现电阻确实为12.5k左右。