如何修改ADS1263 Python代码以使用树莓派3.3V电压基准进行高精度测量?
如何修改ADS1263 Python代码以使用树莓派3.3V电压基准进行高精度测量?
首先得确认硬件连接:把树莓派的3.3V引脚(比如Pin 1)接到ADS1263的VREFP引脚,ADS1263的VREFN引脚接树莓派的GND,这样就能用上3.3V的外部基准了。
接下来看代码修改,核心是配置ADS1263的寄存器,切换到外部基准并适配你的单端正信号范围(100mV到3V)。下面是修改后的完整代码,我标注了关键改动:
import board import busio import ADS1263 import RPi.GPIO as GPIO import time def adcMonitor(conn): ADC = ADS1263.ADS1263() ADC.ADS1263_SetMode(1) ADC.ADS1263_init_ADC1('ADS1263_14400SPS') # ------------------- 新增的基准与输入配置 ------------------- # 1. 设置外部基准(选择VREFP/VREFN作为参考,对应树莓派的3.3V和GND) ADC.ADS1263_WriteReg(0x02, 0x01) # 2. 设置增益为1x,输入范围适配0~Vref(刚好覆盖你的100mV~3V正信号) ADC.ADS1263_WriteReg(0x01, 0x00) # 3. 配置通道0为单端输入(测量AIN0相对于AGND的电压,符合你的信号特性) ADC.ADS1263_WriteReg(0x03, 0x00) # MUXP选择AIN0作为正输入端 ADC.ADS1263_WriteReg(0x04, 0x08) # MUXN选择AGND作为负输入端 # --------------------------------------------------------- while True: if (conn.recv() == "start"): running = True buffer = [] lastValue = 0 while (running == True): # 检查是否需要停止 if (conn.poll()): if (conn.recv() == "stop"): running = False # 获取测量值并去重 nextValue = ADC.ADS1263_GetChannalValue(0) if (nextValue != lastValue): buffer.append(nextValue) lastValue = nextValue # 补上更新lastValue,避免重复添加相同值 # 发送测量数据 conn.send(buffer)
关键配置说明:
- 基准切换:寄存器
0x02是基准控制寄存器,写入0x01表示选择外部基准(默认是内部2.5V基准),这样ADC就会用你接的3.3V作为参考电压。 - 输入范围适配:寄存器
0x01控制增益和输入范围,写入0x00对应增益1x、输入范围0~Vref,完美匹配你的100mV到3V的正信号,相比原来的-2.5V~2.5V范围,能利用更多的ADC分辨率,提高测量精度。 - 单端通道配置:默认可能是差分输入模式,我们把通道0配置成单端输入(AIN0对AGND),这样测量的就是信号相对于地的正电压,符合你的信号场景。
另外原代码里有个小疏漏:获取nextValue后没有更新lastValue,我已经补上了,不然如果信号波动后回到之前的值,会重复添加到buffer里,影响数据准确性。
备注:内容来源于stack exchange,提问作者Malum Phobos
相关产品推荐
相关产品推荐

