Przetwornik analogowo-cyfrowy (ADC) jest popularny akcesorium dla Raspberry Pi. Obecnie wiele tańszych mikrokontrolerów ma już wbudowany konwerter, więc ten 8-kanałowy przetwornik został stworzony w oparciu o STM32F030, który jest ekonomicznym, energooszczędnym mikrokontrolerem ARM Cortex M0. Płytka posiada 8 kanałów ADC oraz zintegrowane 4 złącza analogowe Grove, dzięki czemu można przy jej pomocy korzystać również z analogowych modułów Grove.

  

Kup Teraz

Właściwości

  • Jednostka obliczeniowa CRC
  • 5-kanałowy kontroler DMA (bezpośredni dostęp do pamięci)
  • Kalendarz RTC z alarmem oraz okresowym budzeniem Stop / Standby
  • Timery
    • Timer z zaawansowaną kontrolą
    • Ogólne timery oraz podstawowe timery
    • Niezależny time oraz watchdog timer
    • SysTick timer
  • Zegar czasu rzeczywistego (RTC)
  • Debugowanie przewodu szeregowego (SWD)

Specyfikacje

CechaWartość
Napięcie robocze 3.3 V
Rozdzielczość ADC 12 bit

Maksymalna częstotliwość

sygnału zegarowego

48 MHz
Wielkość pamięci odczytu 16 kB
Wielkość pamięci RAM 4 kB
Szerokość magistrali danych 32 bit
Temperatura robocza od -40°C do 85℃
Interfejs komunikacji I2C
Adres I2C 0x04 (domyślny)
Wymiary 65 x 55 x 18 mm
Waga 25.9 g
Wymiary opakowania 140 x 75 x 25 mm
Waga brutto 45 g

Typowe zastosowania

  • Pomiar temperatury
  • Dobra konsumpcyjne

Przegląd sprzętu

Rozkład wyprowadzeń

GPIO

Taki sam rozkład jak na Raspberry Pi.

 

SWD

Portu SWD używamy do nagrania oprogramowania układowego na tej płytce. Dodatkowo w tej sekcji możesz zobaczyć pin 9 / pin 10 / pin 11. Te trzy piny nie są używane przez żaden port Grove, możesz ich używać bez obaw o spięcie pinów.

Grove Port Analogowy

Jak wiadomo, na Raspberry Pi nie ma konwertera ADC, więc ta płytka ADC na bazie STM32 pozwala na pracę czujników analogowych z Raspberry Pi.

 

Na płytce są 4 gniazda analogowe Grove, więc możesz podłączać moduły Grove bezpośrednio za pomocą Grove - Uniwersalny Przewód Taśmowy 5 cm 4 piny.

 

Czujnik analogowy wprowadza napięcie analogowe do 12-bitowego przetwornika ADC. Po przekształceniu danych analogowych na cyfrowe, przetwornik wprowadza je do Raspberry Pi poprzez interfejs I2C.

Żeńskie złącza pinowe

Działają podobnie jak porty analogowe Grove, tylko zamiast Grove - Uniwersalny Przewód Taśmowy 5 cm 4 piny wykorzystują zestaw przewodów Breadboard Jumper Wire Pack.

 

8 analogowych portów przyłączeniowych, A0 ~ A7.

Złącza śrubowe

Podobne do powyższych, mają tylko inną metodę podłączenia. Ta grupa zawiera piny analogowe A0 ~ A7, Vcc oraz GND.

Jak zacząć?

Sprzęt

Wymagane materiały

Raspberry Pi

8-kanałowy 12-bitowy przetwornik analogowo-cyfrowy

dla Raspberry Pi(STM32F030)

 

  • Krok 1. Wprowadź przetwornik do Raspberry Pi.
  • Krok 2. Podłącz Raspberry Pi do komputera przez kabel USB.

 

Oprogramowanie

  • Krok 1. Pobierz plik źródłowy, klonując bibliotekę grove.py.

 

cd ~
git clone https://github.com/Seeed-Studio/grove.py

 

  • Krok 2. Zainstaluj bibliotekę grove.py

 

cd grove.py
# Python2
sudo pip install .
# Python3
sudo pip3 install .

 

  • Krok 3. Wykonaj poniższe komendy, aby uruchomić kod.

 

cd grove.py/grove
python adc_8chan_12bit.py 

 

Poniżej znajduje się kod 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()

 

Sukces

Jeśli wszystko wykonałeś pomyślnie, powinien wyświetlić się poniższy komunikat. 


pi@raspberrypi:~/grove.py/grove $ python 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.

 

Przykład

Weźmy Grove - Czujnik Dźwięku za przykład, aby zaprezentować, jak korzystać z tej płytki.

 

Podłączenie sprzętu

  • Krok 1. Podłącz przetwornik do Raspberry Pi.
  • Krok 2. Podłącz Grove - Czujnik dźwięku przez port A0 do przetwornika.
  • Krok 3. Podłącz Raspberry Pi do komputera przez kabel USB.

Schemat połączeń sprzętu

Wpisz następujące polecenie: ++python grove_sound_sensor.py 0++ w wierszu poleceń.

 

pi@raspberrypi:~/grove.py/grove $ python grove_sound_sensor.py 6
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 
    main()
  File "grove_sound_sensor.py", line 64, in main
    time.sleep(.3)
KeyboardInterrupt

 

Możesz opuścić program, wciskając Ctrl+C.

 

Linki

zapraszamy do współpracy!