I2C转模拟电流模块

简介

这一个I2C通讯的0~25mA DAC模块。经过两点校准后,能得到精确的4-20mA电流值。该模块可通过Arduino编程驱动市场上的4-20mA控制的设备。如电机,变频器, 阀门、水泵等。

特性

  • I2C信号输入,线性转换成0-25mA的模拟电流输出。
  • Gravity接口,支持Arduino库,可用于程序自动化控制。
  • 支持将电流设定值掉电保存在芯片内,下次启动依然是保存的值。

应用场景

  • 智能函数信号发生器。
  • 灯光或者喷泉自动控制器。
  • 小型设备的自动化快速改造。
  • 机电设备自动调试器。
  • 小型测试设备的改造。

参数规格

  • 芯片型号:GP8302
  • 输入信号范围:12Bit,0x000-0xFFF(0-25mA)
  • 输入I2C信号高电平: 2.7V-5V
  • 电源电压:18V-24V (建议电压24V)
  • 精度:未校准前0.5%,校准后0.2%
  • 功耗:<5mA
  • 启动时间:<2ms
  • 工作温度:-40°C to 125°C
  • 负载电阻:18V供电最大450Ω负载能力,24V供电最大750Ω。
  • 输出电流:0-25mA
  • I2C地址:0x58

尺寸图

功能指示图

DFR0972功能指示图

使用教程

软硬件准备

  • 硬件
    • Arduino UNO主板 ×1
    • DFR0972_I2C转4-20mA模拟电流模块 x1
    • 万用表 ×1
    • 220Ω~650Ω之间电阻(大于1/8瓦) ×1
    • 实验电源 ×1
    • 连接线 若干
  • 软件

如何安装库?

硬件连接

第一步:将万用表表笔插到电流插孔,并拨直流电流档,如图所示:

第二步:将实验电源的电压调节到24V,如图所示:

第四步:将UNO主板、实验电源、电流模块、负载电阻、万用表按图连接:

我们实际测试过使用负载仪作为负载电阻,但是结果是不准确的,因为负载仪不是纯电阻负载,会导致输出电压不准确。

程序编写

编写并下载以下代码到UNO主板中,功能是让电流模块输出一个10mA的电流值,并将电流值记忆在模块中。你可以尝试改变 “module.output(10)” 函数中的值,即可改变输出的电流,值的范围为0-25,分别对应0-25mA。


#include "DFRobot_GP8302.h"

DFRobot_GP8302 module;

void setup(){
  Serial.begin(115200);
  
  while(!Serial){
   
  }
  Serial.print("I2C to 0-25 mA analog current moudle initialization ... ");
  uint8_t status = module.begin(); // 默认使用MCU硬件I2C Wire对象所使用的引脚

  if(status != 0){
    Serial.print("failed. Error code: ");
    Serial.println(status);
    Serial.println("Error Code: ");
    Serial.println("\t1: _scl or _sda pin is invaild.");
    Serial.println("\t2: Device not found, please check if the device is connected.");
    while(1) yield();
  }
  Serial.println("done!");
  
  uint16_t dac = module.output(10); //让转换模块输出10mA的电流,并返回10mA电流所对应的dac值
  Serial.print("DAC value: 0x"); Serial.println(dac, HEX);
  module.store(); Serial.println("Save current configuration."); //将保存上述电流配置,掉电后该配置不丢失
}

void loop(){
  
}

结果

结果如图所示,万用表上显示输出电流为10.05mA。误差0.05mA。误差为千分之五。由于万用表的精度原因,以及未经过校准的原因。

校准并获取准确的4-20mA电流

模块本身支持输出0-25mA范围的电流值。通过4mA和20mA的两点校准,即可获得准确的4-20mA范围的电流值。我们的Arduino库提供了用于校准的函数,可方便的进行电流校准。

校准的原理是输入精确的4mA对应的DAC值和20mA对应的DAC值。然后输出4mA的电流,查看电流表上实际输出的值。查看实际输出的4mA电流误差,再调整DAC值,直到实际输出刚好4mA。再输出20mA的电流值,查看电流表上实际输出的值。查看实际输出的20mA电流误差,再调整DAC值,直到实际输出刚好20mA。就达到了校准4-20mA之间的值了。

校准步骤:

  • 按上面的接线图连接好线路。
  • 编写如下代码:
       #include "DFRobot_GP8302.h"
        
        DFRobot_GP8302 module;
        
        void setup(){
          Serial.begin(115200);
          
          while(!Serial){
            //Wait for USB serial port to connect. Needed for native USB port only
          }
        
          Serial.print("I2C to 0-25 mA analog current moudle initialization ... ");
		  
		  uint8_t status = module.begin(); // 默认使用MCU硬件I2C Wire对象所使用的引脚
          
          if(status != 0){
            Serial.print("failed. Error code: ");
            Serial.println(status);
            Serial.println("Error Code: ");
            Serial.println("\t1: _scl or _sda pin is invaild.");
            Serial.println("\t2: Device not found, please check if the device is connected.");
            while(1) yield();
          }
          Serial.println("done!");

          module.calibration4_20mA(/*dac_4 =*/652, /*dac_20 =*/3265);
        
          uint16_t dac = module.output(/*current_mA =*/4); 
        }
        
        void loop(){
          
        }

4mA端校准:

  • 将校准代码该语句中的参数设置为4,输出4mA电流:uint16_t dac = module.output(/*current_mA =*/4);
  • 下载程序,查看电流表的实际输出值。
  • 假如实际输出电流为4.05mA,那么将程序语句中4mA对应的DAC值652适当降低,如修改为645:module.calibration4_20mA(/*dac_4 =*/652, /*dac_20 =*/3265);
  • 重新下载程序,查看实际电流值。反复修改DAC值,直到实际测到的电流刚好为4mA。
  • 4mA端校准完成。

20mA端校准:

  • 将该语句中的参数设置为20,输出20mA电流:uint16_t dac = module.output(/*current_mA =*/20);
  • 下载程序,查看电流表的实际输出值。
  • 假如实际输出电流为20.05mA,那么将程序语句中4mA对应的DAC值3265适当降低,如修改为3260:module.calibration4_20mA(/*dac_4 =*/652, /*dac_20 =*/3265);
  • 重新下载程序,查看实际电流值。反复修改DAC值,直到实际测到的电流刚好为20mA。
  • 20mA端校准完成。

至此,4-20mA范围校准完成。使用这条语句就可以输出4-20mA范围内经过校准后的电流值:uint16_t dac = module.output(/*current_mA =*/10);

函数库定义

函数原型:uint8_t begin(int scl = -1, int sda = -1)
函数说明:初始化电流模块。并配置I2C引脚。
参数:scl 主控的IO口引脚 sda 主控的IO口引脚; scl,sda使用默认形参的时候,scl和sda为主控硬件I2C所对应的引脚
返回值:0 初始化成功 1 I2C转电流DAC模块所连接的MCU的I2C引脚无效  2 设备未找到,请检查连线是否正确

函数原型:float output_mA(uint16_t dac)
函数说明:按DAC方式设置输出的电流。范围为0~0xFFF,对应输出0~25mA,DAC值转实际电流公式:Iout=(DAC/0xFFF)*25mA 
参数:0~0xFFF的DAC数值
返回值:实际电流,单位mA

函数原型:uint16_t output(float current_mA)
函数说明:按电流值方式设置输出的电流。范围为0-25,对应输出0~25mA。
参数:0-25的电流值
返回值:输出电流值所对应的16进制DAC值 范围为0~0~0xFFF

函数原型:void store()
函数说明:保存当前电流配置,保存成功后,模块掉电重启后,将启用此配置。
参数:无
返回值:无

函数原型:module.calibration4_20mA(dac_4, dac_20)
函数说明:校准4~20mA范围内的电流
参数:
dac_4   范围0~4095,超过校准无效,4mA电流对应的DAC值
dac_20  范围0~4095,超过校准无效,20mA电流对应的DAC值
dac_4和dac_20应满足条件:dac_4 < dac_20
返回值:无

更多资料下载

DFR0972_原理图.pdf

DFR0972_尺寸图.pdf

DFR0972_2D_CAD文件.rar

DFR0972_3D模型文件.rar

DFR0972_芯片手册.pdf

常见问题

还没有客户对此产品有任何问题,欢迎通过qq或者论坛联系我们!

更多问题及有趣的应用,可以 访问论坛 进行查阅或发帖。

DFshopping_car1.png DFRobot商城购买链接

修改历史

文档修改历史

版本号 修改时间 修改人 修改内容
V1.0 2022.05.23 刘礼华 第一版发布

产品修改历史

版本号 修改时间 修改人 修改内容
V1.0 2022.05.23 刘礼华 第一版发布