5106 CM5IO 8ADC
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。
三、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-bit
3.1 系统配置
启动系统,打开I2C接口,左上角树莓派标志—Preferences—Raspberry Pi Configuration—Interfaces
如图所示:
然后打开终端,运行下列命令:
sudo nano /boot/firmware/config.txt
在文件末尾加入下列语句:
dtoverlay=i2c0
保存退出并重启。系统启动后,安装i2c检测软件i2c-tools:
sudo apt install i2c-tools
安装完毕后在终端中运行:
i2cdetect -y 0
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
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
配置方法与单端实例一样。
配置完成后保存退出。
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相连:
运行:
python simpletest.py
差分输入测试:
将提供输入信号源电压的接口的Vout1与ADC1接口的AIN0相连,提供输入信号源电压的接口的GND与ADC1接口的AIN1相连:
运行:
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的测试显然也是不符合要求的,因此造成误差率相当大。
联系我们
电话:13957118045
如本页面有任何疏漏、错误或者侵权,请通过上述途径联系我们,谢谢!
Copyright 2004-2025 野芯科技