通過ROC-RK3568-PC的官方資料,可以了解到,這塊板子,本身帶有ADC接口,具體信息如下:
![81c7bc12-66dd-11ed-8abf-dac502259ad0.png](https://file1.elecfans.com//web2/M00/97/BB/wKgZomTnQG2AdWg2AAI0ghj0jZc837.png)
不過也了解到,板子本身提供的ADC接口,最大檢測電壓范圍是1.8V,所以在實際使用中,會有所局限。
剛好,我手頭有一個ADS1115 ADC模塊,相當的不錯,某寶某店家介紹如下:
![81c7bc12-66dd-11ed-8abf-dac502259ad0.png](https://file1.elecfans.com//web2/M00/97/BB/wKgZomTnQG2AdWg2AAI0ghj0jZc837.png)
![81f380e0-66dd-11ed-8abf-dac502259ad0.png](https://file1.elecfans.com//web2/M00/97/BB/wKgZomTnQG2ATA0yAADFddRL0zw216.png)
不吹不擂,這個ADS1115 ADC模塊,那是相當的好用。
一共提供了4個輸入通道,16bit的,精細度很高。
既然好用,那就要上咱們ROC-RK3568-PC開發板試一試。
一、硬件連線
ADS1115 ADC模塊是一個I2C模塊,根據開發板的資料,找到具體的I2C在GPIO擴展接口上的位置:
![81fcbdea-66dd-11ed-8abf-dac502259ad0.png](https://file1.elecfans.com//web2/M00/97/BB/wKgZomTnQG6AXD7rACTSKNXPe_M728.png)
板子上,GPIO擴展接口提供了多組I2C接口,選用I2C1即可。
![826dd642-66dd-11ed-8abf-dac502259ad0.png](https://file1.elecfans.com//web2/M00/97/BB/wKgZomTnQG6AGilVAA-aAg71lUU736.png)
ADS1115模塊接線如下:
![834c424c-66dd-11ed-8abf-dac502259ad0.jpg](https://file1.elecfans.com//web2/M00/97/BB/wKgZomTnQG6AFQTvAAGa8n6NgI4476.jpg)
最終實物連線后如下:
![835ab1ce-66dd-11ed-8abf-dac502259ad0.jpg](https://file1.elecfans.com//web2/M00/97/BB/wKgZomTnQG6AMgZIAAIU6eShOug342.jpg)
在上圖中,使用了一塊迷你 IoT電源,用于提供不同的電壓,方便進行實際測試。電源要和開發板共地,然后,+連接到ADS1115的AIN0~3任一接口,上述圖中接在AIN0。
二、檢測I2C連接是否正常
使用sudo i2cdetect -r -y 1命令檢查連接:
![839a444c-66dd-11ed-8abf-dac502259ad0.png](https://file1.elecfans.com//web2/M00/97/BB/wKgZomTnQG6AForwAAEQZiV3Fdc355.png)
上圖中,48即為ADS1115的I2C地址0x48。如果沒有出現,仔細檢查接線是否正確。因為GPIO擴展接口是2.0的,我手頭的線都是2.54的,所以5V和GND接到了別的位置,免得擠得太緊。
三、編寫程序
Adafruit為ADS1115提供了開發庫:adafruit/Adafruit_ADS1X15: Driver for TI's ADS1015: 12-bit Differential or Single-Ended ADC with PGA and Comparator (github.com)
不過,該擴展庫,主要是給Arduino提供的,在咱們板子上,不能直接使用。
于是fork后,添加了Linux環境支持,已經發布到github:HonestQiao/Adafruit_ADS1X15: Driver for TI's ADS1015: 12-bit Differential or Single-Ended ADC with PGA and Comparator (github.com)
另外,還有Python版本的,是給CircuitPython提供的,有時間我也會fork一下,再提供Linux支持。
上面我修改后的庫,下載后,結構如下:
![83b21d24-66dd-11ed-8abf-dac502259ad0.png](https://file1.elecfans.com//web2/M00/97/BB/wKgZomTnQG-AL_oEAAF1z961T6M486.png)
測試代碼具體如下:
Adafruit_ADS1115 ads(); /* Use this for the 16-bit version */
// Adafruit_ADS1015 ads; /* Use this for the 12-bit version */
void setup(void) {
printf("Getting single-ended readings from AIN0..3");
printf("ADC Range: +/- 6.144V (1 bit = 3mV/ADS1015, 0.1875mV/ADS1115)");
if (!ads.begin(0x48, 1)) {
// Serial.println("Failed to initialize ADS.");
printf("Failed to initialize ADS.");
while (1)
;
}
}
void loop(void) {
int16_t adc0, adc1, adc2, adc3;
float volts0, volts1, volts2, volts3;
adc0 = ads.readADC_SingleEnded(0);
adc1 = ads.readADC_SingleEnded(1);
adc2 = ads.readADC_SingleEnded(2);
adc3 = ads.readADC_SingleEnded(3);
volts0 = ads.computeVolts(adc0);
volts1 = ads.computeVolts(adc1);
volts2 = ads.computeVolts(adc2);
volts3 = ads.computeVolts(adc3);
printf("-----------------------------------------------------------
");
printf("AIN0: %d %f V
", adc0, volts0);
printf("AIN0: %d %f V
", adc1, volts1);
printf("AIN0: %d %f V
", adc2, volts2);
printf("AIN0: %d %f V
", adc3, volts3);
delay(1000);
}
int main(int argc, char *argv[]) {
setup();
while (true) {
loop();
}
}
(左右移動查看全部內容)
上述代碼中,關鍵調用如下:
-
實例化ADS1115對象:Adafruit_ADS1115 ads* 開啟設備I2C通信:ads.begin(0x48, 1),兩個參數,一個為ADS1115的地址0x48,一個為/dec/i2c-1的序號1
-
讀取數據:ads.readADC_SingleEnded(0),表示讀取通道0的數據,也就是A0;可用通道為0~3
-
電壓轉換:ads.computeVolts(adc0);表示轉換adc0的數據到實際的電壓值
四、編譯運行
編寫好代碼,保存后,使用下面的步驟編譯運行:
# 編譯
gcc -o singleended singleended.cpp ../../Adafruit_ADS1X15.cpp
# 查看編譯結果:aarch64
file singleended
singleended: ELF 64-bit LSB shared object, ARM aarch64, version 1 (SYSV), dynamically linked, interpreter /lib/ld-linux-aarch64.so.1, BuildID[sha1]=be3e02ae2223c4431de1bdb70c6f942f9016d8fa, for GNU/Linux 3.7.0, not stripped
# 運行編譯后的程序
./singleended
(左右移動查看全部內容)
五、實際運行結果
當IoT電源沒有輸出的時候,結果如下:
![83c111c6-66dd-11ed-8abf-dac502259ad0.jpg](https://file1.elecfans.com//web2/M00/97/BB/wKgZomTnQG-ACG6DAAGKirv00vI669.jpg)
![83cf7428-66dd-11ed-8abf-dac502259ad0.png](https://file1.elecfans.com//web2/M00/97/BB/wKgZomTnQG-AJ5RqAAJhPbZdlu8764.png)
打開IoT電源輸出,設定為4.2V,結果如下:
![83e12402-66dd-11ed-8abf-dac502259ad0.jpg](https://file1.elecfans.com//web2/M00/97/BB/wKgZomTnQG-AGeTgAAGqPdooD38224.jpg)
![83f375e4-66dd-11ed-8abf-dac502259ad0.png](https://file1.elecfans.com//web2/M00/97/BB/wKgZomTnQHCAI4UwAAHmadChqlw872.png)
![84065ff6-66dd-11ed-8abf-dac502259ad0.png](https://file1.elecfans.com//web2/M00/97/BB/wKgZomTnQHCAEZkMAABlbbxlG0I832.png)
可以看出,電壓的測量,精度還是很高的。
六、總結
使用ADS1115模塊,可以很方便的為 ROC-RK3568-PC開發板 擴展ADC功能,后續不管是接入按鍵,還是其他的模擬傳感器等,都會非常的方便。
更多熱點文章閱讀
- 玩嗨OpenHarmony:基于OpenHarmony的智能助老服務機器人
- 玩嗨OpenHarmony:基于OpenHarmony的智慧農業環境監控系統
- HarmonyOS 3.1版本發布,全面進入聲明式開發
- OpenHarmony開發之MQTT講解
- OpenHarmony集成OCR三方庫實現文字提取
提示:本文由電子發燒友社區發布,轉載請注明以上來源。如需社區合作及入群交流,請添加微信EEFans0806,或者發郵箱liuyong@huaqiu.com。
原文標題:使用ADS1115擴展ROC-RK3568-PC開發板ADC功能
文章出處:【微信公眾號:電子發燒友開源社區】歡迎添加關注!文章轉載請注明出處。
-
電子發燒友
+關注
關注
33文章
556瀏覽量
33101 -
開源社區
+關注
關注
0文章
94瀏覽量
483
原文標題:使用ADS1115擴展ROC-RK3568-PC開發板ADC功能
文章出處:【微信號:HarmonyOS_Community,微信公眾號:電子發燒友開源社區】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
RK3568內置MCU開發介紹之一
![<b class='flag-5'>RK3568</b>內置MCU<b class='flag-5'>開發</b>介紹之一](https://file1.elecfans.com/web3/M00/00/A2/wKgZPGdLMg-AFkS0AAA5BGKqG3E264.png)
迅為RK3568開發板定制擴展分區SDK源碼編譯-獲取Linux-定制擴展分區源碼包
國產核心板全面進攻-RK3568開發板評測
![國產核心<b class='flag-5'>板</b>全面進攻-<b class='flag-5'>RK3568</b><b class='flag-5'>開發板</b>評測](https://file.elecfans.com/web2/M00/08/64/pYYBAGDwFEGADIPWAAFlJOlmLxg664.jpg)
鴻蒙OpenHarmony南向:【RK3568開發板介紹】
![鴻蒙OpenHarmony南向:【<b class='flag-5'>RK3568</b><b class='flag-5'>開發板</b>介紹】](https://file1.elecfans.com/web2/M00/D8/1F/wKgZomYpEAGALxyGABBtbKfhj8Q460.jpg)
鴻蒙OpenHarmony【標準系統編譯】 (基于RK3568開發板)
![鴻蒙OpenHarmony【標準系統編譯】 (基于<b class='flag-5'>RK3568</b><b class='flag-5'>開發板</b>)](https://file1.elecfans.com/web2/M00/C5/D1/wKgZomYChGOAUaiiAADe1d8SeRY102.jpg)
評論