I2C转模拟电流模块

简介

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

特性

应用场景

参数规格

尺寸图

功能指示图

DFR0972功能指示图

使用教程

软硬件准备

如何安装库?

硬件连接

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

第二步:将实验电源的电压调节到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之间的值了。

校准步骤:

4mA端校准:

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 刘礼华 第一版发布