AD7606使用系列篇1--ESP32

本文详细介绍了如何使用ESP32与AD7606传感器配合Micropython进行通信,包括硬件连接、GPIO配置以及编写用于数据采集的代码。作者还提供了GitHub上的代码资源供读者参考。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

AD7606使用系列篇1--ESP32

使用说明

在使用前,请先前往Micropython官网下载固件,下载固件后烧录,按下表连接杜邦线后即可使用。

AD7606板引脚ESP32开发板引脚
+5VVIN
GNDGND
D7D10
RDD14
CSD27
RESETD22
CAD21
RANGED32
OS0D25
OS1D26
OS2D33
BUSYD23

Micropython代码

from machine import Pin, SPI, PWM
import time, array, sys
SAMPLING_POINTS = 10
nums = 0
# Define all pin
SPI_MISO_PIN = 12
SPI_MOSI_PIN = 13
SPI_SCK_PIN = 14
AD_CS_PIN = 27
AD_RESET_PIN = 22
AD_CONVST_PIN = 21
AD_RANGE_PIN = 32
AD_OS0_PIN = 25
AD_OS1_PIN = 26
AD_OS2_PIN = 33
AD_BUSY_PIN = 23
CS_PIN = Pin(AD_CS_PIN, Pin.OUT)
RESET_PIN = Pin(AD_RESET_PIN, Pin.OUT)
OS0_PIN = Pin(AD_OS0_PIN, Pin.OUT)
OS1_PIN = Pin(AD_OS1_PIN, Pin.OUT)
OS2_PIN = Pin(AD_OS2_PIN, Pin.OUT)
RANGE_PIN = Pin(AD_RANGE_PIN, Pin.OUT)
CONVST_PIN = Pin(AD_CONVST_PIN, Pin.OUT)
BUSY_PIN = Pin(AD_BUSY_PIN, Pin.IN, Pin.PULL_UP)
#BUSY_PIN.irq(trigger = Pin.IRQ_FALLING, handler = call_back)
num_rows = 8
num_columns = SAMPLING_POINTS
HSPI = SPI(1, baudrate=8000000, sck=Pin(SPI_SCK_PIN), mosi=Pin(SPI_MOSI_PIN), miso=Pin(SPI_MISO_PIN))
ad7606SamplingDoneFlag = 0

# Define buffer
data = [array.array('d', [0] * num_columns) for _ in range(num_rows)]

def AD7606_ESP32(RANGE = 1, OS = 0):
    global CS_PIN, RESET_PIN, CONVST_PIN, OS0_PIN, OS1_PIN, OS2_PIN, RANGE_PIN, ad7606SamplingDoneFlag
    # Initialize CS pin
    CS_PIN.on()
    
    # Reset AD7606
    RESET_PIN.off()
    time.sleep(0.001)
    RESET_PIN.on()
    time.sleep(0.001)
    RESET_PIN.off()

    # Start AD7606
    PWM0 = PWM(CONVST_PIN)
    freq = PWM0.freq()
    PWM0.freq(100000) 
    duty = PWM0.duty()
    PWM0.duty(1014)
    
    # Define OS pin
    MODE = OS
    M = [0, 0, 0]
    for i in range(3):
        M[i] = MODE % 2
        MODE = MODE // 2
    if M[0] == 1:
        OS0_PIN.on()
    else:
        OS0_PIN.off()
    if M[1] == 1:
        OS1_PIN.on()
    else:
        OS1_PIN.off()
    if M[2] == 1:
        OS2_PIN.on()
    else:
        OS2_PIN.off()
    if RANGE == 1:
        RANGE_PIN.on()
    else:
        RANGE_PIN.off()
        
    while True:
        if ad7606SamplingDoneFlag:
            PWM0.duty(0)
            CS_PIN.on()
            ad7606SamplingDoneFlag = 1
            break
    
def call_back(pin):
    global CS_PIN, array, nums, ad7606SamplingDoneFlag
    if pin == Pin(23):
        if nums < SAMPLING_POINTS:
            ad7606SamplingDoneFlag = 0
            for i in range(8):
                CS_PIN.off()
                buf = bytearray(2)
                HSPI.readinto(buf)
                first_byte = buf[0]
                first_bit = (first_byte >> 7) & 1
                if first_bit == 1:
                    data[i][nums] = int.from_bytes(buf, 'big')/65535 * 2 * 10 - 20
                else:
                    data[i][nums] = int.from_bytes(buf, 'big')/65535 * 2 * 10
                if i == 0:
                    print(data[i][nums])
                CS_PIN.on()
            nums = nums + 1
        else:
            ad7606SamplingDoneFlag = 1
 
if __name__=="__main__":
    BUSY_PIN.irq(trigger = Pin.IRQ_FALLING, handler = call_back)
    AD7606_ESP32(RANGE = 1, OS = 0)    

本人也将代码开源在Gitee上,有需要的可下载。
如有其他问题,可私信我。

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值