找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 11046|回复: 2
收起左侧

ADS1115+Arduino AC高斯电流侦测

[复制链接]
ID:399412 发表于 2018-9-18 11:21 | 显示全部楼层 |阅读模式
ADS1115是一块由 TI 开发、基于 I2C 协议的ADC,可以将电压转换成16bits的数字信号,与 Arduino内置的ADC相比,分辨率提高数十倍,而且内置了 PGA (可程序设计增益放大器),可以设置测量范围(±0.256V ~ 6.144V),无需参考电压,因此精度相当之高,可达 7.8125uV(即:0.0078125mV),可以应用于精密电压测量、 示波器中。而且ADS1115 供了4组模拟输入,解决了 Arduino UNO 模拟埠被 I2C 占用后不够用的问题。
所有原理圖及 arduino 源成碼, 均在附件中.

传感器: 可使用 input (AC) 20A/40A, output(DC) 0V-5V 范围之线性感应线圈.

Input: (AC) 20/40A
Output: (DC) 0V – 5V.

电流计算方式:
(范例)
量测值: 0.25V
目标量测电流:  Y

Y = 20 x 0.25 / 5.0  (20A感应线圈)

Or

Y = 40 x 0.25 / 5.0 (40A感应线圈)

对于电流侦测, 网网让人产生困扰, 原因其实很简单, 就是在线操作中的机器,
电源线不可能让你乱改或破坏, 这时候如果需要测试电流稳定, 必须提供高斯电 流侦测器, 此装置, 无需破坏原装置电源接线, 也无需供电,可有效达成电流量 测目的.

ADS1115的设置比较复杂,可以先看看其 DataSheet 第 25 页,有 5 个表格说明了如何 使用该模块。但别慌,Arduino 作为成为最流行的开源平台之一,优势在于有丰富的库。 TI 开发的 ADS1XXX 系列芯片的库已经有不少,只要简单的设置,即可使 用。

现在,我们需要先理解这块芯片的具体性能:

首先,ADS1115 内置的 PGA 可以设置测量范围,最高为 ±6.144V,但千万不要以为它 可以测量 6.144V 的电压,实际上,它最高耐压不能超过 VDD 0.3V(VDD 为 5V, 实际测量范围< 5.3 V),必须切记,否则可能会损坏芯片。



±6.144V / (2∧16 – 1) = ±6.144V / 32767 = ±0.1875 mV
与 Arduino UNO 内置的 10bits ADC,每步 4.85mV 相比,精度提高了 25 倍。如果

PGA 设为 1x 增益,即测量范围降至 4.096V,精度为 ±0.125mV,如果 PGA 设为 16x 增益,测量范围降至 ±0.256V,精度可达 ±0.0078125mV。简单来说,PGA 增益越大, 测量范围越小,精度越高。默认值为 ±6.144V。

ADS1115 的地址可以通过 ADDR 与 SDA、SCL、GND 或 VDD 短接,实现修改。不 设置的话,默认值为 0x48,如下图:

现在,我们将 VDD 连接 Arduino 的 5V 埠,然后,用 ADS1115 的 A0 测量 Arduino的 3.3V 埠,但千万不要反过来,因为测量电压不能超过 VDD 的 0.3V!


  1. #include <Wire.h>

  2. #include <LiquidCrystal_I2C.h> LiquidCrystal_I2C lcd(0x27, 16, 2);
  3. #include <Adafruit_ADS1015.h> Adafruit_ADS1115 ads;
  4. void setup(void)

  5. {

  6. lcd.begin();
  7. // 切记,测量电压不能超过 VDD 的 0.3V (5V + 0.3V = 5.3V) !
  8. // PGA 默认值为 2/3 增益

  9. // ads.setGain(GAIN_TWOTHIRDS);              // 2/3x gain +/- 6.144V              1 bit = 3mV

  10. 0.1875mV (default)

  11. // ads.setGain(GAIN_ONE);              // 1x gain              +/- 4.096V              1 bit = 2mV

  12. 0.125mV

  13. // ads.setGain(GAIN_TWO);              // 2x gain              +/- 2.048V              1 bit = 1mV

  14. 0.0625mV

  15. // ads.setGain(GAIN_FOUR);              // 4x gain              +/- 1.024V              1 bit = 0.5mV

  16. 0.03125mV

  17. // ads.setGain(GAIN_EIGHT);              // 8x gain              +/- 0.512V              1 bit = 0.25mV

  18. 0.015625mV

  19. // ads.setGain(GAIN_SIXTEEN);              // 16x gain              +/- 0.256V              1 bit = 0.125mV

  20. 0.0078125mV

  21. ads.begin();


  22. }


  23. void loop(void)

  24. {

  25. double adc0;

  26. adc0 = ads.readADC_SingleEnded(0);

  27. lcd.setCursor(0,0);

  28. lcd.print("AIN0: "); lcd.print(adc0 * 0.1875 / 1000);
  29. delay(100); //刷新率有上限,具体请参考 DataSheet


  30. }
复制代码



规格书上面写的好像是 2.048v 才是默认值
ADS111X 系列有三种型号,1113,1114 和 1115。只有 1113 是 2.048V。请见TI Datasheep,17 页

0.png

全部资料51hei下载地址:
ADS1115 16bit ADC Arduino 教學.docx (625.25 KB, 下载次数: 70)

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

回复

使用道具 举报

ID:529492 发表于 2019-5-8 20:44 | 显示全部楼层
garyxiang_ag 发表于 2018-11-19 22:29
请问 为啥我的读数一直是-1呢,我是直接按 Adafruit_ADS1015 里面的例子singleended来做的。

你好 你那个读数一直是-1的问题怎么解决呢
回复

使用道具 举报

ID:429552 发表于 2018-11-19 22:29 | 显示全部楼层
请问 为啥我的读数一直是-1呢,我是直接按 Adafruit_ADS1015 里面的例子singleended来做的。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表