关注分享主机优惠活动
国内外VPS云服务器

使用arduino--数字电位计AD5252/1 (Arduino数字电位计)

目录介绍、使用说明、编程说明、实验说明和完整的参考程序。感谢龚为本次实验提供装置和意见。介绍是公司生产的数字电位器,有非易失性存储器,使用通讯。

目录1。1简介。AD5252 2。使用说明。编程指令4。实验说明5。完整的参考方案感谢:感谢龚为本次实验提供设备和意见。

1.ad5252简介AD5252/1是ADI公司生产的一款数字电位计,内置非易失性存储器(NVM),采用i2c通信。该系列芯片有两种型号:

AD5251:双电位计,64位。AD5252:双电位计,256位。AD5251仅支持50 k,AD5252提供1k、10k、50k和100k四种型号。AD5252/1:单电源:2.7 V至5.5 V双电源:2.25 V至2.75 V工作环境:–40°c至+105°c芯片内部结构图:芯片引脚图;

管脚号,管脚名功能,3wp写保护,高电平有源2,11AD0,AD1设置芯片地址4,5,6W1,B1,A1电位器112,13,14W3,B3,A3电位器37,9SDA,SCLi2c接口1VDD电源10,8DGD,VSS数字地,模拟地,一般把它们连在一起。2.使用说明使用时最需要注意的是,AD5252系列芯片需要在SDA和SCL上连接拉电阻才能正常通信。我用的测试电路图如下:SDA和SCL接Arduino uno的i2c接口,wp接13脚A0和A1,接对应的A0和A1脚。

3.编程指令首先设置ad5252的地址:

AD0、AD1设置地址,高电平对应1。低对应于0。这两个引脚悬空时的默认地址是0x2D。写的时候wp要设高。写操作指令:读操作指令:主API

void res_set(int date,int chal);//设置电阻值unsigned int red _ RES(int chal);//读取设定电阻值unsigned int red _ EEM(int chal);//读取寄存器void set_eem(int date,int chal);//写入寄存器4。实验表明,实验中使用的是1K的程序AD5252,可以通过串口设置电阻值,将串口设置的值同时赋给两个电位器,并将设置值写入EEMEM4(对应程序的1)。Res_1是读取的设定值,resl_read是ad采样计算的电阻,相当于实际测量的电阻。设定值和真实值会有75欧姆左右的差异,也就是滑块的电阻,这里有60欧姆的差异。

5.完整参考程序# include # define addr 0x2d//ad 5252默认地址#define wp 13 //写保护引脚# define ad5252 _ ee _ rdac (1 if(串行。可用()> 0) {int value = serial。parse int();//获取整数if (value > 0 && value if(value!= 0) Serial.println("设定值错误,设定值大于0小于256 ");} } float RES _ 1 =(red _ RES(1)/256.0);float RES _ 2 =(red _ RES(2)/256.0);unsigned int res1 _ read = analog read(A0);unsigned int res2 _ read = analog read(A1);double b1 = 0.0049 * res1 _ read//实测电压double res1 _ real = 3.2-(11/B1);//计算电阻double b2 = 0.0049 * res2 _ read//实测电压double res2 _ real = 3.2-(11/B2);//计算电阻//输出数据到串行监视器unsigned int red _ ee m1 = red _ EEM(1);无符号int red _ EEM 11 = red _ EEM(11);serial . print(" ee m1:");serial . println(red _ ee m1);serial . print(" EEM 11:");serial . println(red _ EEM 11);serial . print(" RES _ 1:");serial . print(RES _ 1);serial . print(" K;);serial . print(" res1 _ read:");serial . print(res1 _ real);serial . println(" K ");serial . print(" RES _ 2:");serial . print(RES _ 2);serial . print(" K;);serial . print(" res1 _ read:");serial . print(res2 _ real);serial . println(" K ");延时(1000);}/*函数:ad5252电阻设置函数输出参数:date设置的电阻值为0 --255 chal = 1 --> RDA C1 chal = 2 --> RDA C3 */void RES _ set(int date,int chal){ int channel;if(chal = = 1){ channel = 0x 01;} if(chal = = 2){ channel = 0x 03;} digitalWrite(wp,高);//pin2总是低延迟(100);//启动i2c传输wire . begin transmission(Addr);//设置通道Wire.write(通道);//输入电阻值,0x80(128) Wire.write(日期);//停止i2c传输wire . end transmission();延迟(100);digitalWrite(wp,低);}/*函数:ad5252电阻设定值读取函数输出参数:chal = 1--> RDA C1 chal = 2--> RDA C3 */unsigned int red _ RES(int chal){ unsigned int data;int通道;if(chal = = 1){ channel = 0x 01;} if(chal = = 2){ channel = 0x 03;}//启动i2c传输wire . begin transmission(Addr);//选择寄存器Wire.write(通道);//停止i2c通信wire . end transmission();//发送1位读命令Wire.requestFrom(Addr,1);//读取1字节数据if(wire . available()= = 1){ data = wire . Read();}返回数据;}/*函数:将数据写入寄存器并输出参数:date —— > data chal 1到11对应eem4到eem15 */void set _ eem (int date,int chal){ int channel;开关(chal) {情况1:通道= 0x04打破;情况二:通道= 0x05打破;情况三:通道= 0x06打破;情况4:通道= 0x07打破;情况5:通道= 0x08打破;情况6:通道= 0x0A打破;情况7:通道= 0x0B打破;情况8:通道= 0x0C打破;情况9:通道= 0x0D打破;情况10:通道= 0x0E打破;情况11:通道= 0x0F} digitalWrite(wp,高);//pin2总是低延迟(100);//启动i2c传输wire . begin transmission(Addr);//设置寄存器wire . write(ad 5252 _ ee _ rdac | channel);(日期);//停止i2c延迟(100);wire . end transmission();延迟(100);digitalWrite(wp,低);}/*函数:读取寄存器数据输出参数:chal 1到11对应eem4到ee M15 */unsigned int red _ EEM(int chal){ unsigned int data;int通道;开关(chal) {情况1:通道= 0x04打破;情况二:通道= 0x05打破;情况三:通道= 0x06打破;情况4:通道= 0x07打破;情况5:通道= 0x08打破;情况6:通道= 0x0A打破;情况7:通道= 0x0B打破;情况8:通道= 0x0C打破;情况9:通道= 0x0D打破;情况10:通道= 0x0E打破;情况11:通道= 0x0F}//启动I2C wire . begin transmission(Addr);//选择寄存器wire . write(ad 5252 _ ee _ rdac | channel);//停止i2c通信wire . end transmission();Wire.requestFrom(Addr,1);if(wire . available()= = 1){ data = wire . read();}返回数据;}

未经允许不得转载:主机频道 » 使用arduino--数字电位计AD5252/1 (Arduino数字电位计)

评论 抢沙发

评论前必须登录!