eric2013 发表于 2021-11-8 00:44:00

【安富莱】发布隔离I2C接口ADC模块MCP3421, 18位分辨率 ,3.3V和5V,小体积

该隔离模块的ADC芯片为MCP3421芯片,内带DC-DC隔离电源模块。

淘宝:https://item.taobao.com/item.htm ... MZ3&id=660440179329




特别注意:
1、任何时候,输入端电压范围必须在 -0.3V 到 3.3V之间,超过该范围可能造成芯片损坏。
2、模拟输入端未做任何处理,测电压需要客户外接采样电阻,测高压需要加分压电阻。


产品特点:
1、隔离I2C接口,用法简单。
2、供电3.3V 或 5V,可用于3.3V或5V单片机
3、内置低温飘基准,基准电压 2.048V
4、分辨率可设置
    240 SPS (12 bits),
    60 SPS (14 bits),
    15 SPS (16 bits),
   3.75 SPS (18 bits)
5、带PGA, X1, X2, X4, X8可设置。(模块模拟输入负端已固定接GND)
    X1 时:量程 -300mV ~ 2048mV,输入阻抗 2.25M
    X2 时:量程 -300mV ~ 1024mV,输入阻抗 2.25M / 2
    X4 时:量程 -300mV ~ 512mV,输入阻抗 2.25M / 4
    X8 时:量程 正负256mV,输入阻抗 2.25M / 8

硬件说明:
1、I2C总线已内置上拉电阻,阻值1KΩ
2、因为所有模块的I2C地址一样,不支持多个模块并联到1个总线应用

多路模块使用方法:
1、简单用法是每个模块占用2个GPIO,软件模拟I2C操作即可。
2、省管脚用法是所有模块的I2C_SCL共用一个GPIO控制,I2C_SDA分多个。
   这种用法需要注意模块内置1K电阻的影响,8个模块并联等效上拉电阻为 125欧姆(3.3V时 26mA电流)
   如果有特殊需求,可定制无上拉电阻的模块。
3、推荐所有的SCL用同一组GPIO,所有的SDA用同一组GPIO。这样软件上非常方便多路同时操作。


适合场合:
    采集4-20mA电流、采集0-10V\正负10V 信号、大电流悬浮测量


应用1:正负20mA电流测量
    模拟输入引脚AIN和AGND之间接低温飘 10欧采样电阻,可采集正负20mA电流。
    PGA选择X8 , 输入量程为正负25.6mA。

应用2:正负10A电流测量
    电流的采集一般选择PGA X8,这样采样电阻的功率最小,对测量电路的影响也最小。
    大电流测量只需要选择合适的电流采样电阻即可,将压降控制256mV内。
    10A测量,可选择采样电阻为 20mΩ,功率2W。实际量程 正负12.8A

应用3:正负10V电压测量
    输入端AIN前增加2个电阻将正负10V信号降压到0.2V左右, PGA选择X8,可识别正负电压。
    分压电阻取值:   10K 和 249.    PGA = 8
    实际量程为正负 10.54V

应用4:0-10V电压测量
    高压正电压测量可以直接使用PGA X1 档位获得最佳的信噪比。
    将输入电压直接分压到 2.048V以内即可。
    分压电阻取值 10K和 2.49K, 实际量程 0 - 10.273V




关键代码:


/* ADC芯片配置字 16bit, 增益8 */
#defineMCP3421_CFG_BYTE((1 << 4) (2 << 2) (3 << 0))

void MCP3421_Init(void)
{
    uint8_t cfg;
   
    i2c_MCP_Start();
   
    i2c_MCP_SendByte(0xD0 I2C_WR);/* 此处是写指令 */
   
    i2c_MCP_WaitAck();

    i2c_MCP_SendByte(MCP3421_CFG_BYTE);
   
    i2c_MCP_WaitAck();
   
    i2c_MCP_Stop();
}

void MCP3421_ReadAdc16(int16_t *_buf)
{
    uint8_t buf0;
    uint8_t buf1;
    uint8_t cfg;
    uint8_t i;
    uint16_t temp;
    uint8_t err = 0;
   
    i2c_MCP_Start();   
    i2c_MCP_SendByte(0xD0 I2C_RD);/* 此处是读指令 */   
    i2c_MCP_Ack();         
    i2c_MCP_ReadByte(buf0);
    i2c_MCP_Ack();
    i2c_MCP_ReadByte(buf1);
    i2c_MCP_Ack();
    i2c_MCP_ReadByte(cfg);      
    i2c_MCP_NAck();
    i2c_MCP_Stop();
   
    for (i = 0; i < 8; i++)
    {
      temp = (buf0 << 8) + buf1;
      
      if (cfg == MCP3421_CFG_BYTE)
      {
            _buf = (int16_t)temp;
      }
      else
      {
            err = 1;            
      }
      
    }   
   
    if (err == 1)
    {
      MCP3421_Init();
    }
}

https://img.alicdn.com/imgextra/i3/299314119/O1CN01GP9doD1gIY75L6Iym_!!299314119.png
https://img.alicdn.com/imgextra/i2/299314119/O1CN01jC8v9d1gIY70jne0x_!!299314119.png



eric2013 发表于 2021-11-8 01:02:23

H7-TOOL的I2C控制器驱动隔离I2C接口ADC模块MCP3421,18位分辨
http://www.armbbs.cn/static/image/filetype/unknown.gif MCP3421模块测试(V1.1) .lua

https://img.anfulai.cn/dz/attachment/forum/202111/08/005714h51b6jjw0nil8nqf.png

https://img.anfulai.cn/dz/attachment/forum/202111/08/010031p01fedf5r5zpfrc8.png

页: [1]
查看完整版本: 【安富莱】发布隔离I2C接口ADC模块MCP3421, 18位分辨率 ,3.3V和5V,小体积