Pular para o conteúdo principal

ADC de 8 Canais e 12 Bits para Raspberry Pi (STM32F030)

ADC é um acessório comum para Raspberry Pi. Hoje em dia, muitos MCUs baratos possuem ADC integrado, então fizemos este ADC de 8 canais baseado no STM32F030, que é um MCU ARM Cortex M0 econômico e de baixo consumo de energia. Nós disponibilizamos 8 canais de ADC a partir do MCU e integramos 4 conectores Grove analógicos para que você também possa usar módulos Grove analógicos com ele.

Características

  • Unidade de cálculo de CRC
  • Controlador DMA (acesso direto à memória) de 5 canais
  • RTC de calendário com alarme e despertar periódico de Stop/Standby
  • Temporizadores
    • Temporizador de controle avançado
    • Temporizadores de uso geral e temporizadores básicos
    • Temporizadores watchdog independentes e de sistema
    • Temporizador SysTick
  • Relógio em tempo real (RTC)
  • Depuração por fio serial (SWD)
  • Suporta Raspberry Pi 3B/3B+/4

Especificação

ItemValor
Tensão de Alimentação de Operação3.3V
Resolução do ADC12 bit
Frequência Máxima de Clock48 MHz
Tamanho da Memória de Programa16kB
Tamanho da RAM de Dados4 kB
Largura do Barramento de Dados32 bit
Temperatura de Operação-40~85℃
Interfaces de ComunicaçãoI2C
Endereço I2C0x04(padrão)
TamanhoC: 65mm L: 55mm A: 18mm
Peso25.9g
Tamanho da embalagemC: 140mm L: 75mm A: 25mm
Peso Bruto45g

Aplicações típicas

  • Medição de temperatura
  • Bens de consumo

Visão Geral de Hardware

Pinagem

Visão geral

GPIO

A mesma pinagem do Raspberry Pi.

SWD

Usamos a porta SWD para gravar o firmware nesta placa. Além disso, você pode ver o pino 9/pino 10/pino 11 nesta seção. Esses três pinos não são usados por nenhuma porta Grove, você é livre para usá-los sem se preocupar com conflitos de pinos.

Porta Grove Analógica

Como não há ADC integrado no Raspberry Pi, a placa de ADC baseada em STM32 permite que o sensor analógico funcione com o seu Raspberry Pi.

Há 4 soquetes Grove analógicos nesta placa, de forma que esta placa de ADC pode funcionar diretamente com módulos Grove usando o cabo Grove - Universal 4 Pin Buckled 5cm Cable.

O sensor analógico fornece a tensão analógica para o ADC de 12 bits. Depois que o ADC converte os dados analógicos em dados digitais, ele envia os dados digitais para o Raspberry Pi através da interface I2C.

Portas de conector fêmea

Igual à porta Grove analógica, mas nesta parte em vez de usar o cabo Grove - Universal 4 Pin Buckled 5cm Cable você precisa usar o Breadboard Jumper Wire Pack.

8 portas de junção analógicas, A0 ~ A7.

Borne de parafuso

Igual ao acima, mas com método de conexão diferente. Este grupo de conectores de pinos inclui os pinos analógicos A0 ~ A7, Vcc e GND.

Plataformas Suportadas

ArduinoRaspberry Pi

Primeiros Passos

Hardware

Materiais necessários

Raspberry pi8-Channel 12-Bit ADC for Raspberry Pi (STM32F030)(STM32F030)
enter image description here
Adquira agoraAdquira agora
  • Passo 1. Insira o ADC de 8 Canais e 12 Bits para Raspberry Pi (STM32F030) no Raspberry Pi.
  • Passo 2. Conecte o Raspberry Pi ao PC através de um cabo USB.

Software

cuidado

If you are using Raspberry Pi with Raspberrypi OS >= Bullseye, you have to use this command line only with Python3.

  • Passo 1. Baixe o arquivo-fonte clonando a biblioteca grove.py.
cd ~
git clone https://github.com/Seeed-Studio/grove.py

  • Passo 2. Instale a biblioteca grove.py
cd grove.py
# Python2
sudo pip install .
# Python3
sudo pip3 install .
  • Passo 3. Execute os comandos abaixo para rodar o código.
cd grove.py/grove
python3 adc_8chan_12bit.py

A seguir está o código 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


#get all raw adc data,THe max value is 4095,cause it is 12 Bit 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
#get all data with unit mv.
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

#get all data ratio,unit is 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("raw data for each channel:(1-8chan)(12 bit-max=4096):")
print(raw_data)
print("voltage for each channel:(unit:mv,max=3300mv):")
print(vol_data)
print ("ratio for each channel(unit 0.1%,max=100.0%):")
print(ratio_data)

print(" ")
print("NOTICE!!!:")
print("The default setting of ADC PIN is floating_input.")
print(" ")

if __name__ == '__main__':
main()


dica

Se tudo correr bem, você conseguirá ver o seguinte resultado


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.



Exemplo

cuidado

If you are using Raspberry Pi with Raspberrypi OS >= Bullseye, you have to use this command line only with Python3.

Tomaremos o Grove - Sound Sensor como exemplo para apresentar como usar esta placa.

Conexão de hardware

  • Passo 1. Conecte o ADC de 8 Canais e 12 Bits para Raspberry Pi (STM32F030) ao Raspberry Pi.
  • Passo 2. Conecte o Grove - Sound Sensor à porta A0 do módulo ADC.
  • Passo 3. Conecte o Raspberry Pi ao PC através de um cabo USB.

Diagrama de conexão de hardware

Digite o seguinte comando ++python grove_sound_sensor.py 0++ na interface de linha de comando.


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

Você pode sair deste programa simplesmente pressionando ctrl+c.

Visualizador de esquemático online


:::noteNota de alteração de produto:

Como os chips da série ST32 estão fora de estoque globalmente, os preços aumentaram várias vezes e não há uma data de entrega definida. Não tivemos escolha a não ser mudar para o chip MM32. Os modelos de substituição específicos são os seguintes: STM32F030F4P6TR é substituído por MM32F031F6P6. Após a substituição do chip, as funções do produto, características, métodos de uso e códigos permanecem inalterados. Deve-se notar que a versão do firmware foi alterada, e o firmware de fábrica foi ajustado de acordo com os diferentes chips. Se você precisar regravar o firmware, faça o download do firmware correspondente ao chip. :::

Recursos

Suporte Técnico e Discussão sobre o Produto

Obrigado por escolher nossos produtos! Estamos aqui para fornecer diferentes tipos de suporte para garantir que sua experiência com nossos produtos seja a mais tranquila possível. Oferecemos vários canais de comunicação para atender a diferentes preferências e necessidades.

Loading Comments...