简介
这一个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
尺寸图
功能指示图
使用教程
软硬件准备
- 硬件
- Arduino UNO主板 ×1
- DFR0972_I2C转4-20mA模拟电流模块 x1
- 万用表 ×1
- 220Ω~650Ω之间电阻(大于1/8瓦) ×1
- 实验电源 ×1
- 连接线 若干
- 软件
- Arduino IDE 点击下载Arduino IDE
- 首先下载并安装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之间的值了。
校准步骤:
- 按上面的接线图连接好线路。
- 编写如下代码:
#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
返回值:无
更多资料下载
常见问题
还没有客户对此产品有任何问题,欢迎通过qq或者论坛联系我们!
更多问题及有趣的应用,可以 访问论坛 进行查阅或发帖。
修改历史
文档修改历史
版本号 | 修改时间 | 修改人 | 修改内容 |
---|---|---|---|
V1.0 | 2022.05.23 | 刘礼华 | 第一版发布 |
产品修改历史
版本号 | 修改时间 | 修改人 | 修改内容 |
---|---|---|---|
V1.0 | 2022.05.23 | 刘礼华 | 第一版发布 |