|
该隔离模块的ADC芯片为MCP3421芯片,内带DC-DC隔离电源模块。
淘宝:https://item.taobao.com/item.htm ... MZ3&id=660440179329
安富莱_I2C隔离ADC模块_规格书(V1.0).pdf
(501.12 KB, 下载次数: 37)
特别注意:
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 */
- #define MCP3421_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[8];
- uint8_t buf1[8];
- uint8_t cfg[8];
- 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[i] << 8) + buf1[i];
-
- if (cfg[i] == MCP3421_CFG_BYTE)
- {
- _buf[i] = (int16_t)temp;
- }
- else
- {
- err = 1;
- }
-
- }
-
- if (err == 1)
- {
- MCP3421_Init();
- }
- }
复制代码
|
|