摘要:目錄簡介使用說明編程說明實驗說明完整的參考程序致謝感謝宮同學(xué)為本次實驗提供器件和意見。簡介是公司出品的數(shù)字電位器,同時帶有非易失性存儲器,其使用通信。
AD5252/1是ADI公司出品的數(shù)字電位器,同時帶有非易失性存儲器(NVM),其使用i2c通信。這個系列的芯片有兩個型號:
AD5251只支持50 k?。 AD5252有1 k?, 10 k?, 50 k?, 100 k?可選。
AD5252/1:
單電源供電: 2.7 V to 5.5 V 。
雙電源供電: ±2.25 V to ±2.75 V。
使用環(huán)境: –40°C to +105°C。
芯片的內(nèi)部結(jié)構(gòu)圖:
芯片引腳圖:
引腳編號 | 引腳名稱 | 功能 |
---|---|---|
3 | wp | 寫入保護(hù),高電平有效 |
2,11 | AD0,AD1 | 設(shè)置芯片地址 |
4,5,6 | W1,B1,A1 | 電位器1 |
12,13,14 | W3,B3,A3 | 電位器3 |
7,9 | SDA,SCL | i2c接口 |
1 | VDD | 電源 |
10,8 | DGND,VSS | 數(shù)字地,模擬地,一般把它連到一起 |
在使用時最需要注意的是AD5252系列的芯片需要在SDA,SCL接上拉電阻才可以正常通信,我使用的測試電路圖如下:
SDA,SCL接Arduino uno 的i2c接口,wp接13腳,A0,A1,接對應(yīng)的A0,A1引腳。
首先設(shè)置ad5252的地址:
AD0,AD1設(shè)置地址,HIGH對應(yīng)1.LOW對應(yīng)0。在這兩個引腳懸空時的默認(rèn)地址為0x2D。
在執(zhí)行寫入操作時,wp要置高。
寫操作指令:
讀操作指令:
主要API
void res_set(int date, int chal); //設(shè)置電阻值unsigned int red_res(int chal); //讀取設(shè)置電阻值unsigned int red_eem(int chal); //讀寄存器void set_eem(int date, int chal); //寫寄存器
實驗采用1K的AD5252
這個程序可以通過串口設(shè)置電阻值,將串口設(shè)置的值同時賦值給兩個電位器,同時將設(shè)置值寫入EEMEM4(對應(yīng)程序的1)。
res_1是讀取的設(shè)置值,resl_read是通過AD采樣計算的電阻,相當(dāng)于實際測的電阻。設(shè)置值和真實值大約會有75歐的差值,這個差值是滑片的電阻,這里差了60歐。
#include #define Addr 0x2D //AD5252默認(rèn)地址#define wp 13 //寫入接保護(hù)引腳#define AD5252_EE_RDAC (1 << 5) //讀寫emm輔助計算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);void setup(){ //i2c接口初始化 Wire.begin(); //串口初始化,波特率9600 Serial.begin(9600); res_set(0, 1); delay(100); res_set(0, 2); set_eem(128, 1); set_eem(64, 11);}void loop(){ if (Serial.available() > 0) { int value = Serial.parseInt(); //獲取串口輸入的整數(shù) if ( value > 0 && value < 256) { Serial.print("set value: ");Serial.println(value); res_set(value, 1); delay(100); res_set(value, 2); set_eem(value, 1); } else { if(value != 0) Serial.println("設(shè)置值錯誤,設(shè)置的值大于0小于256"); } } float res_1 = (red_res(1) / 256.0 ); float res_2 = (red_res(2) / 256.0 ); unsigned int res1_read=analogRead(A0); unsigned int res2_read=analogRead(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) ; //計算電阻 // Output data to serial monitor unsigned int red_eem1 = red_eem(1); unsigned int red_eem11 = red_eem(11); Serial.print("eem1: ");Serial.println(red_eem1); Serial.print("eem11: ");Serial.println(red_eem11); 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"); delay(1000);}/*功能: ad5252電阻設(shè)置函數(shù)輸出參數(shù): date設(shè)置的電阻值 0 -- 255 chal = 1 --> RDAC1 chal = 2 --> RDAC3*/void res_set(int date, int chal) { int channel; if (chal == 1) { channel = 0x01; } if (chal == 2) { channel = 0x03; } digitalWrite(wp,HIGH); //pin2 always low delay(100); // 開始i2c傳輸 Wire.beginTransmission(Addr); // 設(shè)置通道 Wire.write(channel); // Input resistance value, 0x80(128) Wire.write(date); // 停止i2c傳輸 Wire.endTransmission(); delay(100); digitalWrite(wp,LOW); }/*功能: ad5252電阻設(shè)置值讀取函數(shù)輸出參數(shù): chal = 1 --> RDAC1 chal = 2 --> RDAC3*/unsigned int red_res(int chal){ unsigned int data; int channel; if (chal == 1) { channel = 0x01; } if (chal == 2) { channel = 0x03; } //開始i2c傳輸 Wire.beginTransmission(Addr); //選擇寄存器 Wire.write(channel); //停止i2c通信 Wire.endTransmission(); //傳輸1位讀命令 Wire.requestFrom(Addr, 1); // Read 1 byte of data if (Wire.available() == 1) { data = Wire.read(); } return data; }/*功能: 寫入數(shù)據(jù)到寄存器輸出參數(shù): date ——> 數(shù)據(jù) chal 1到11 對應(yīng) eem4到eem15*/void set_eem(int date, int chal) { int channel; switch(chal) { case 1: channel = 0x04;break; case 2: channel = 0x05;break; case 3: channel = 0x06;break; case 4: channel = 0x07;break; case 5: channel = 0x08;break; case 6: channel = 0x0A;break; case 7: channel = 0x0B;break; case 8: channel = 0x0C;break; case 9: channel = 0x0D;break; case 10: channel = 0x0E;break; case 11: channel = 0x0F; } digitalWrite(wp,HIGH); //pin2 always low delay(100); //開始i2c傳輸 Wire.beginTransmission(Addr); //設(shè)置寄存器 Wire.write(AD5252_EE_RDAC|channel); Wire.write(date); //停止i2c delay(100); Wire.endTransmission(); delay(100); digitalWrite(wp,LOW); }/*功能: 讀寄存器數(shù)據(jù)輸出參數(shù): chal 1到11 對應(yīng) eem4到eem15*/unsigned int red_eem(int chal){ unsigned int data; int channel; switch(chal) { case 1: channel = 0x04;break; case 2: channel = 0x05;break; case 3: channel = 0x06;break; case 4: channel = 0x07;break; case 5: channel = 0x08;break; case 6: channel = 0x0A;break; case 7: channel = 0x0B;break; case 8: channel = 0x0C;break; case 9: channel = 0x0D;break; case 10: channel = 0x0E;break; case 11: channel = 0x0F; } //開始i2c Wire.beginTransmission(Addr); //選擇寄存器 Wire.write(AD5252_EE_RDAC|channel); //停止i2c通信 Wire.endTransmission(); Wire.requestFrom(Addr, 1); if (Wire.available() == 1) { data = Wire.read(); } return data; }
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/124047.html
摘要:開關(guān)旋鈕電位器的實驗視頻已經(jīng)購買開發(fā)版的同學(xué)開始上課來一場緊張刺激的之旅吧前言開發(fā)工具的下載安裝使用都很簡單我這里就不贅述了附上官方的說明跟著步驟來十分鐘搞定相關(guān)連接下載官方為什么成為開發(fā)函數(shù) ...
摘要:綜合諸多考慮與相應(yīng)調(diào)研,我們希望能夠制作出一款宿舍升降機(jī)為同學(xué)們提供更方便安全的上下床方式。摘要本設(shè)計采用開發(fā)板作為主控,結(jié)合壓力傳感器紅外避障傳感器電機(jī)驅(qū)動模塊實現(xiàn)了一個可以自動升降自動停止自動調(diào)速的宿舍升降機(jī)模型系統(tǒng)。 (第一次寫博客,記錄下自己大一時做的一個課設(shè),如有不妥之處,還望多...
摘要:這部分就是我之前分享過很多的單片機(jī)部分,具體可以參考專欄物聯(lián)網(wǎng)設(shè)備的控制單元核心就是,也就是常說的單片機(jī)。對于物聯(lián)網(wǎng)設(shè)備,根據(jù)開發(fā)環(huán)境想制造的設(shè)備以及經(jīng)驗的不同,選擇不同的控制芯片也就至關(guān)重要。 這部分就是我之前分享過很多的單片機(jī)部分,具體可以參考專欄 https://blog.csdn.n...
摘要:單片機(jī)入門指南本文基于常神文章基礎(chǔ)上將單片機(jī)入門部分進(jìn)行細(xì)化盡可能細(xì)節(jié)做到可實施性先引用一下常神的文章首先假設(shè)大家已經(jīng)對高中物理的電路部分有所了解。單片機(jī),如,是一種根據(jù)程序控制引腳高低電平的可編程器件,有些場合又將這種行為稱作嵌入式。 ...
閱讀 1412·2021-11-22 09:34
閱讀 2609·2021-11-12 10:36
閱讀 1147·2021-11-11 16:55
閱讀 2360·2020-06-22 14:43
閱讀 1490·2019-08-30 15:55
閱讀 2007·2019-08-30 15:53
閱讀 1788·2019-08-30 10:50
閱讀 1246·2019-08-29 12:15