Skip to main content

树莓派 8 通道 12 位 ADC (STM32F030)

ADC 是树莓派的常见配件。如今许多廉价的 MCU 都内置了 ADC,因此我们基于 STM32F030 制作了这款 8 通道 ADC,STM32F030 是一款高性价比、低功耗的 ARM Cortex M0 MCU。我们从 MCU 引出了 8 通道 ADC,并集成了 4 个模拟 Grove 连接器,这样您也可以将模拟 Grove 模块与其配合使用。

特性

  • CRC 计算单元
  • 5 通道直接内存访问 (DMA) 控制器
  • 带闹钟和从停止/待机状态周期性唤醒的日历 RTC
  • 定时器
    • 高级控制定时器
    • 通用定时器和基本定时器
    • 独立和系统看门狗定时器
    • SysTick 定时器
  • 实时时钟 (RTC)
  • 串行线调试 (SWD)
  • 支持树莓派 3B/3B+/4

规格参数

项目
工作电源电压3.3V
ADC 分辨率12 位
最大时钟频率48 MHz
程序存储器大小16kB
数据 RAM 大小4 kB
数据总线宽度32 位
工作温度-40~85℃
通信接口I2C
I2C 地址0x04(默认)
尺寸长:65mm 宽:55mm 高:18mm
重量25.9g
包装尺寸长:140mm 宽:75mm 高:25mm
毛重45g

典型应用

  • 温度测量
  • 消费品

硬件概述

引脚定义

概述

GPIO

与树莓派相同的引脚定义。

SWD

我们使用 SWD 端口向此板烧录固件。此外,您可以在此部分看到引脚 9/引脚 10/引脚 11。这三个引脚未被任何 Grove 端口使用,您可以自由使用它们而无需担心引脚冲突。

Grove 模拟端口

由于树莓派没有内置 ADC,因此基于 STM32 的 ADC 板允许模拟传感器与您的树莓派配合工作。

此板上有 4 个 Grove 模拟插座,因此此 ADC 板可以通过使用 Grove - 通用 4 针扣式 5cm 线缆 直接与 Grove 模块配合工作。

模拟传感器将模拟电压输入到 12 位 ADC。ADC 将模拟数据转换为数字数据后,通过 I2C 接口将数字数据输入到树莓派。

母针头端口

与 Grove 模拟端口相同,但此部分不使用 Grove - 通用 4 针扣式 5cm 线缆,您需要使用面包板跳线包

8 个模拟接口端口,A0 ~ A7。

螺丝端子

与上述相同,但连接方式不同。这组引脚连接器包括模拟引脚 A0 ~ A7、Vcc 和 GND。

支持的平台

ArduinoRaspberry Pi

入门指南

硬件

所需材料

Raspberry pi8通道12位ADC for Raspberry Pi (STM32F030)(STM32F030)
enter image description here
立即购买立即购买
  • 步骤1. 将8通道12位ADC for Raspberry Pi (STM32F030)插入Raspberry Pi。
  • 步骤2. 通过USB线缆将Raspberry Pi连接到PC。

软件

caution

如果您使用的是Raspberry Pi with Raspberrypi OS >= Bullseye,您必须仅使用Python3运行此命令行。

  • 步骤1. 通过克隆grove.py库来下载源文件。
cd ~
git clone https://github.com/Seeed-Studio/grove.py

  • 步骤 2. 安装 grove.py 库
cd grove.py
# Python2
sudo pip install .
# Python3
sudo pip3 install .
  • 步骤 3. 执行以下命令来运行代码。
cd grove.py/grove
python3 adc_8chan_12bit.py

以下是 adc_8chan_12bit.py 代码。


import time
from grove.i2c import Bus

ADC_DEFAULT_IIC_ADDR = 0X04

ADC_CHAN_NUM = 8

REG_RAW_DATA_START = 0X10
REG_VOL_START = 0X20
REG_RTO_START = 0X30

REG_SET_ADDR = 0XC0


class Pi_hat_adc():
def __init__(self,bus_num=1,addr=ADC_DEFAULT_IIC_ADDR):
self.bus=Bus(bus_num)
self.addr=addr


#获取所有原始ADC数据,最大值为4095,因为它是12位ADC
def get_all_adc_raw_data(self):
array = []
for i in range(ADC_CHAN_NUM):
data=self.bus.read_i2c_block_data(self.addr,REG_RAW_DATA_START+i,2)
val=data[1]<<8|data[0]
array.append(val)
return array

def get_nchan_adc_raw_data(self,n):
data=self.bus.read_i2c_block_data(self.addr,REG_RAW_DATA_START+n,2)
val =data[1]<<8|data[0]
return val
#获取所有数据,单位为毫伏。
def get_all_vol_milli_data(self):
array = []
for i in range(ADC_CHAN_NUM):
data=self.bus.read_i2c_block_data(self.addr,REG_VOL_START+i,2)
val=data[1]<<8|data[0]
array.append(val)
return array

def get_nchan_vol_milli_data(self,n):
data=self.bus.read_i2c_block_data(self.addr,REG_VOL_START+n,2)
val =data[1]<<8|data[0]
return val

#获取所有数据比率,单位为0.1%
def get_all_ratio_0_1_data(self):
array = []
for i in range(ADC_CHAN_NUM):
data=self.bus.read_i2c_block_data(self.addr,REG_RTO_START+i,2)
val=data[1]<<8|data[0]
array.append(val)
return array

def get_nchan_ratio_0_1_data(self,n):
data=self.bus.read_i2c_block_data(self.addr,REG_RTO_START+n,2)
val =data[1]<<8|data[0]
return val


ADC = Pi_hat_adc()
def main():
raw_data=ADC.get_all_adc_raw_data()
vol_data=ADC.get_all_vol_milli_data()
ratio_data=ADC.get_all_ratio_0_1_data()
print("每个通道的原始数据:(1-8通道)(12位-最大值=4096):")
print(raw_data)
print("每个通道的电压:(单位:毫伏,最大值=3300毫伏):")
print(vol_data)
print ("每个通道的比率(单位0.1%,最大值=100.0%):")
print(ratio_data)

print(" ")
print("注意!!!:")
print("ADC引脚的默认设置为浮空输入。")
print(" ")

if __name__ == '__main__':
main()


tip

如果一切顺利,您将能够看到以下结果


pi@raspberrypi:~/grove.py/grove $ python3 adc_8chan_12bit.py
raw data for each channel:(1-8chan)(12 bit-max=4096):
[2177, 2098, 2064, 2038, 2127, 2066, 2172, 2145]
voltage for each channel:(unit:mv,max=3300mv):
[1599, 1741, 1668, 1658, 1644, 1787, 1694, 1677]
ratio for each channel(unit 0.1%,max=100.0%):
[521, 544, 514, 504, 500, 559, 524, 505]

NOTICE!!!:
The default setting of ADC PIN is floating_input.



示例

caution

如果您使用的是 Raspberry Pi with Raspberrypi OS >= Bullseye,您必须仅使用 Python3 来运行此命令行。

我们将以 Grove - 声音传感器 为例来介绍如何使用这个板子。

硬件连接

  • 步骤 1. 将 8 通道 12 位 ADC for Raspberry Pi (STM32F030) 插入 Raspberry Pi。
  • 步骤 2. 将 Grove - 声音传感器连接到 ADC 模块的 A0 端口。
  • 步骤 3. 通过 USB 线缆将 Raspberry Pi 连接到 PC。

硬件连接图

在命令行界面中输入以下命令 ++python grove_sound_sensor.py 0++。


pi@raspberrypi:~/grove.py/grove $ python3 grove_sound_sensor.py 0
Detecting sound...
Sound value: 433
Sound value: 342
Sound value: 443
Sound value: 300
Sound value: 632
Sound value: 258
Sound value: 591
Sound value: 267
Sound value: 871
^CTraceback (most recent call last):
File "grove_sound_sensor.py", line 67, in <module>
main()
File "grove_sound_sensor.py", line 64, in main
time.sleep(.3)
KeyboardInterrupt

您可以通过简单地按下 ctrl+c 来退出此程序。

原理图在线查看器


:::note产品变更说明:

由于 ST32 系列芯片全球缺货,价格上涨数倍且没有明确的交货日期。我们不得不改用 MM32 芯片。具体替换型号如下:STM32F030F4P6TR 替换为 MM32F031F6P6。芯片替换后,产品功能、特性、使用方法和代码保持不变。需要注意的是固件版本已发生变化,出厂固件已根据不同芯片进行调整。如果您需要重新烧录固件,请下载对应芯片的固件。 :::

资源

技术支持与产品讨论

感谢您选择我们的产品!我们在这里为您提供不同的支持,以确保您使用我们产品的体验尽可能顺畅。我们提供多种沟通渠道,以满足不同的偏好和需求。

Loading Comments...