5106 CM5IO 8ADC

来自Mcuzone Wiki

Change the language to English

关键词

树莓派、CM5核心板、RPiOS、12位ADC、16位ADC、ADS1015、ADS1115、单端输入、差分输入、PGA、比较器、40Pin GPIO

一、简介

CM5IO_8ADC扩展板基于树莓派40Pin GPIO I2C扩展出两颗地址不同的ADC芯片,分为12位ADC版本以及16位ADC版本,工作电压可调,分为3.3V与5V两种电压。预留电压基准芯片,用户可利用电压基准芯片校准ADC测量误差值。每颗ADC芯片包含四路单端输入或两路差分输入,具有比较器和PGA(可编程增益放大器)。模块适用于树莓派4B/树莓派5/CM4IO/CM5IO等平台。

二、硬件资源

1. 采用40Pin GPIO进行扩展;

2. 分12位ADC版本和16位ADC版本;

3. 板载两颗ADC芯片,每颗ADC芯片包含四路单端输入或两路差分输入,即模块实现8通道;

4. 采样速度:12位ADC可达3.3KSPS,16位ADC为860SPS。

5. ADC输入分别用4个3.81mm-3Pin拧接端子;

6. 一个拨码开关,用于调节工作电压,分为3.3V与5V两种电压,工作电压与输入信号范围相关,用户可以根据实际需求进行选择;

7. 尺寸:56*65mm,m2.5定位孔;板材通过UL和ROHS认证,防火等级94V-0。

5106_CM5IO_8ADC_17.jpg

5106_CM5IO_8ADC_12.jpg

5106_CM5IO_8ADC_13.jpg

5106_CM5IO_8ADC_14.jpg

三、ADC模块测试

硬件平台:CM5IO_8ADC模块(16位ADC)搭配CM5IO MINI扩展板

软件平台:树莓派OS的版本为2024-11-19-raspios-bookworm-arm64.img.xz,树莓派OS下载地址:

https://www.raspberrypi.com/software/operating-systems/#raspberry-pi-os-64-bit5005_CM5IO_Mini_159.jpg

3.1 系统配置

启动系统,打开I2C接口,左上角树莓派标志—Preferences—Raspberry Pi Configuration—Interfaces

如图所示:

3003_21700_5V5A_PD_07.jpg

然后打开终端,运行下列命令:

sudo nano /boot/firmware/config.txt

在文件末尾加入下列语句:

dtoverlay=i2c0

5106_CM5IO_8ADC_03.jpg

保存退出并重启。系统启动后,安装i2c检测软件i2c-tools:

sudo apt install i2c-tools

安装完毕后在终端中运行:

i2cdetect -y 0

5106_CM5IO_8ADC_04.jpg

48和49即为两路ADC的地址。

3.2 下载实例代码

本文档采用Adafruit提供的ADC实例开源代码进行演示,在此对Adafruit表示感谢!

在终端中运行:

sudo apt-get update

git clone https://github.com/adafruit/Adafruit_Python_ADS1x15.git

cd Adafruit_Python_ADS1x15

然后安装库文件:

sudo pip install adafruit-ads1x15 --break-system-packages

cd examples/

3.3 配置ADC

3.3.1 配置单端输入

以测试ADC1的左侧通道为例。

在example文件夹下运行下列命令:

sudo nano simpletest.py

5106_CM5IO_8ADC_07.jpg

ADC地址为0x49(即使用接口示意图上的ADC1接口),因此将:

第一处黄框处语句注释掉。

第二处黄框修改为图上所示,ADS1115表示16位ADC芯片(如果是12位ADC版本,这里设置为ADS1015),后面的括号内为ADC地址,0x49代表ADC1。

第三处黄框为增益比设置,在这里我们设置为1,查上表可知,增益比1代表测量范围为-4.096V ~ +4.096V。

配置完成后保存退出。

3.3.2 配置差分输入

以测试ADC1的左侧通道为例。

在example文件夹下运行下列代码:

sudo nano differential.py

5106_CM5IO_8ADC_08.jpg

配置方法与单端实例一样。

配置完成后保存退出。

3.3.3 配置其它通道

单端与差分都需要配置:

adc = Adafruit_ADS1x15.ADS1115(address=0x49, busnum=0)

address:ADC地址,ADC1为0x49,ADC2为0x48;

busnum:i2c编号,执行ls /dev/i2c*可以查到,一般为0或1。

只有差分需要配置:

value = adc.read_adc_difference(0, gain=GAIN)

括号内的第一个数字,ADC1为0,ADC2为3。

3.4 ADC测试

本次测试实用REF5040和REF5020基准源作为输入信号,REF5040实测4.094V,REF5020实测2.048V。ADC工作电压为5V或3.3V。

单端输入测试:

将提供输入信号源电压的接口的Vout1与ADC1接口的AIN0相连,提供输入信号源电压的接口的GND与ADC1接口的GND相连:

5106_CM5IO_8ADC_16.jpg

运行:

python simpletest.py

差分输入测试:

将提供输入信号源电压的接口的Vout1与ADC1接口的AIN0相连,提供输入信号源电压的接口的GND与ADC1接口的AIN1相连:

5106_CM5IO_8ADC_15.jpg

运行:

python differential.py

我们测试的是AIN0,16位ADC,所以可以根据以下公式算出转换后AIN0的电压值:

VAIN0=(AIN0/(2^16/2))*测量范围

增益比与测量范围的对应关系可以在源码中查到。

如在输入信号源电压为4.094V,工作电压为5V,增益比为1的情况下,单端测试输入结果为32752,则:

VAIN0=(32752/(2^16/2))*4.096=4.094V

我们做了多种不同情况的测试,列表如下:

编号 输入信号源电压(V) 工作电压(V) 增益比 测试方式 输出结果 输出电压(V) 绝对误差(V) 误差率 测量输出结果
01 4.094 3.3 1 单端 31424 3.928 -0.166 -4.05% 点击查看结果
02 4.094 5 1 单端 32752 4.094 0 0.00% 点击查看结果
03 4.094 3.3 2/3 单端 21056 3.948 -0.146 -3.57% 点击查看结果
04 2.048 5 2 单端 32752 2.047 -0.001 -0.05% 点击查看结果
05 2.048 3.3 1 单端 16384 2.048 0 0.00% 点击查看结果
06 2.048 5 1 单端 16384 2.048 0 0.00% 点击查看结果
07 2.048 3.3 1 差分 16432 2.054 0.006 0.29% 点击查看结果

上述测试的输出结果的抖动范围几乎为0,说明转换相当稳定。

其中编号01和编号03的误差较大,原因分析如下:

编号01:

因为输入信号源电压为4.094V,而工作电压为3.3V,在增益比为1的情况下,输入信号源电压远远高于工作电压,但是ADC芯片手册中对输入信号源电压与工作电压的关系,有如下说明:

No more than VDD + 0.3V must be applied to the analog inputs of the device.

即输入信号源电压最多只能比工作电压高0.3V,而4.094V远远大于3.3V,因此造成误差相当大。

编号03:

输入信号源电压为4.094V,工作电压为3.3V,此时的增益比为2/3,虽然4.094*(2/3)=2.729<3.3,但是ADC芯片手册中对输入信号源电压与工作电压的关系,有如下说明:

No more than VDD + 0.3V must be applied to the analog inputs of the device.

即输入信号源电压最多只能比工作电压高0.3V,所以编号03的测试显然也是不符合要求的,因此造成误差率相当大。

联系我们

4f7e81daf8791971.jpg 79c020da7ad0af9b.jpg 2851e01a0549e6f7.gif 0003_bb.jpg 0005_qq.jpg QQ:8204136

邮件:mcuzone@vip.qq.com

电话:13957118045

如本页面有任何疏漏、错误或者侵权,请通过上述途径联系我们,谢谢!

Copyright 2004-2025 野芯科技