一个小项目要使用esp32核心板操作ads1256模块,esp32上运行的是micropython环境,参考模块厂家提供的c源码,移植一份python代码,可以正常工作。

硬件接线

esp32管脚 ads1256管脚 说明
gpio4 sclk
gpio5 din
gpio6 dout
5v 5v 如想使用esp32直接供 电,可以连接esp32排针 的+5V引脚,同时联系 esp32核心板客服, 将缺焊的IN-OUT二极管 补焊接上去 如不使用esp32供电,则 使用外部电源给ads1256 供电
gpio18 cs
gpio17 drdy
gpio8 pdwn
gnd gnd

程序说明

 如需要修改gain和采样率,参照代码修改参数即可 如需要测量单端和差分,参考如下代码,其实主要是修改了参数

例1 需要测量AIN7单端 

Adc=ads1256.ADS1256_readData(ads1256.ADS1256_MUXP_AIN7|ads1256.A DS1256_MUXN_AINCOM) Volts = Adc * 0.000000598

例2 需要测量AIN3和AIN4差分信号 

Adc=ads1256.ADS1256_readData(ads1256.ADS1256_MUXP_AIN3|ads1256.A DS1256_MUXN_AIN4) Volts = Adc * 0.000000598 

注意,差分时参数要一个P一个N,即: ads1256.ADS1256_MUXP_AIN3 ads1256.ADS1256_MUXN_AIN4

完整代码

from machine import Pin, SPI, SoftSPI
import time

ADS1256_MUXP_AIN0 = 0x00 
ADS1256_MUXP_AIN1 = 0x10 
ADS1256_MUXP_AIN2 = 0x20 
ADS1256_MUXP_AIN3 = 0x30 
ADS1256_MUXP_AIN4 = 0x40 
ADS1256_MUXP_AIN5 = 0x50 
ADS1256_MUXP_AIN6 = 0x60 
ADS1256_MUXP_AIN7 = 0x70 
ADS1256_MUXP_AINCOM = 0x80

ADS1256_MUXN_AIN0 = 0x00 
ADS1256_MUXN_AIN1 = 0x01 
ADS1256_MUXN_AIN2 = 0x02 
ADS1256_MUXN_AIN3 = 0x03 
ADS1256_MUXN_AIN4 = 0x04 
ADS1256_MUXN_AIN5 = 0x05 
ADS1256_MUXN_AIN6 = 0x06 
ADS1256_MUXN_AIN7 = 0x07 
ADS1256_MUXN_AINCOM = 0x08 

ADS1256_CMD_WAKEUP = 0x00 
ADS1256_CMD_RDATA = 0x01 
ADS1256_CMD_RDATAC = 0x03 
ADS1256_CMD_SDATAC = 0x0f 
ADS1256_CMD_RREG = 0x10 
ADS1256_CMD_WREG = 0x50 
ADS1256_CMD_SELFCAL = 0xf0 
ADS1256_CMD_SELFOCAL = 0xf1 
ADS1256_CMD_SELFGCAL = 0xf2 
ADS1256_CMD_SYSOCAL = 0xf3 
ADS1256_CMD_SYSGCAL = 0xf4 
ADS1256_CMD_SYNC = 0xfc 
ADS1256_CMD_STANDBY = 0xfd 
ADS1256_CMD_REST = 0xfe

ADS1256_STATUS = 0x00   
ADS1256_MUX = 0x01   
ADS1256_ADCON = 0x02   
ADS1256_DRATE = 0x03   
ADS1256_IO = 0x04   
ADS1256_OFC0 = 0x05   
ADS1256_OFC1 = 0x06   
ADS1256_OFC2 = 0x07   
ADS1256_FSC0 = 0x08   
ADS1256_FSC1 = 0x09   
ADS1256_FSC2 = 0x0A

ADS1256_GAIN_1 = 0x00 
ADS1256_GAIN_2 = 0x01 
ADS1256_GAIN_4 = 0x02 
ADS1256_GAIN_8 = 0x03 
ADS1256_GAIN_16 = 0x04 
ADS1256_GAIN_32 = 0x05 
ADS1256_GAIN_64 = 0x06 
ADS1256_MUXN_AINCOM = 0x08

ADS1256_DRATE_30000SPS = 0xF0 
ADS1256_DRATE_15000SPS = 0xE0 
ADS1256_DRATE_7500SPS = 0xD0 
ADS1256_DRATE_3750SPS = 0xC0 
ADS1256_DRATE_2000SPS = 0xB0 
ADS1256_DRATE_1000SPS = 0xA1 
ADS1256_DRATE_500SPS = 0x92 
ADS1256_DRATE_100SPS = 0x82 
ADS1256_DRATE_60SPS = 0x72 
ADS1256_DRATE_50SPS = 0x63 
ADS1256_DRATE_30SPS = 0x53 
ADS1256_DRATE_25SPS = 0x43 
ADS1256_DRATE_15SPS = 0x33 
ADS1256_DRATE_10SPS = 0x23 
ADS1256_DRATE_5SPS = 0x13 
ADS1256_DRATE_2_5SPS = 0x03

pdwn = Pin(8, Pin.OUT)
cs = Pin(18, Pin.OUT)
drdy = Pin(17, Pin.IN)

vspi = SoftSPI(baudrate = 100000, polarity = 0, phase = 0, sck = Pin(4), mosi = Pin(5), miso = Pin(6))

pdwn.value(0)
time.sleep_ms(1000)
pdwn.value(1)

cs.value(1)
time.sleep_ms(10)

def ADS1256_ReadReg(regId):
    cs.value(0)
    time.sleep_us(10)

    wbuf = bytearray([ADS1256_CMD_RREG | regId, 0x00])
    vspi.write(wbuf)

    time.sleep_us(10)

    buf = vspi.read(1)

    time.sleep_us(10)
    cs.value(1)
    return buf[0]

def ADS1256_ReadChipID():
    AD1256_waitIdle()
    id = ADS1256_ReadReg(ADS1256_STATUS)
    return id >> 4

def AD1256_waitIdle():
    while drdy.value() == 1:
        time.sleep_ms(10)

def ADS1256_writeReg(regAddr, data):
    cs.value(0)
    AD1256_waitIdle()
    time.sleep_us(10)

    buf = bytearray([ADS1256_CMD_WREG | (regAddr & 0x0F), 0x00, data])
    vspi.write(buf)
    time.sleep_us(10)

    cs.value(1)

def ADS1256_setGain(gain_value):
    AD1256_waitIdle()
    ADS1256_writeReg(ADS1256_ADCON, gain_value)

def ADS1256_setDrate(rate):
    AD1256_waitIdle()
    ADS1256_writeReg(ADS1256_DRATE, rate)

def ADS1256_readData(channel):
    sum = 0

    AD1256_waitIdle()
    ADS1256_writeReg(ADS1256_MUX, channel);
    time.sleep_us(100)

    cs.value(0)
    AD1256_waitIdle()

    buf = bytearray([ADS1256_CMD_SYNC, ADS1256_CMD_WAKEUP, ADS1256_CMD_RDATA])
    vspi.write(buf)

    time.sleep_us(10)
    buf = vspi.read(3)
    time.sleep_us(10)
    cs.value(1)

    sum |= (buf[0] << 16)
    sum |= (buf[1] << 8)
    sum |= buf[2]

    if sum > 0x7FFFFF:
        sum -= 0x1000000
    return sum

def ADS1256_Init():
    AD1256_waitIdle()
    cs.value(0)
    time.sleep_us(10)

    buf = bytearray([ADS1256_CMD_SELFCAL])
    vspi.write(buf)
    AD1256_waitIdle()
    time.sleep_us(10)
    cs.value(1)

    ADS1256_writeReg(ADS1256_STATUS, 0x06);

    ADS1256_writeReg(ADS1256_ADCON, ADS1256_GAIN_1)
    ADS1256_writeReg(ADS1256_DRATE, ADS1256_DRATE_10SPS)
    ADS1256_writeReg(ADS1256_IO, 0x00) 

    AD1256_waitIdle()
    cs.value(0)
    time.sleep_us(10)
    buf = bytearray([ADS1256_CMD_SELFCAL])
    vspi.write(buf)
    AD1256_waitIdle()
    time.sleep_us(10)
    cs.value(1)


 

Logo

火山引擎开发者社区是火山引擎打造的AI技术生态平台,聚焦Agent与大模型开发,提供豆包系列模型(图像/视频/视觉)、智能分析与会话工具,并配套评测集、动手实验室及行业案例库。社区通过技术沙龙、挑战赛等活动促进开发者成长,新用户可领50万Tokens权益,助力构建智能应用。

更多推荐