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.

 

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

 

  • Krok 2. Zainstaluj bibliotekę grove.py

 

  1. cd grove.py
  2. # Python2
  3. sudo pip install .
  4. # Python3
  5. sudo pip3 install .

 

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

 

  1. cd grove.py/grove
  2. python adc_8chan_12bit.py

 

Poniżej znajduje się kod adc_8chan_12bit.py.

 

  1. import time
  2. from grove.i2c import Bus
  3.  
  4. ADC_DEFAULT_IIC_ADDR = 0X04
  5.  
  6. ADC_CHAN_NUM = 8
  7.  
  8. REG_RAW_DATA_START = 0X10
  9. REG_VOL_START = 0X20
  10. REG_RTO_START = 0X30
  11.  
  12. REG_SET_ADDR = 0XC0
  13.  
  14.  
  15. class Pi_hat_adc():
  16. def __init__(self,bus_num=1,addr=ADC_DEFAULT_IIC_ADDR):
  17. self.bus=Bus(bus_num)
  18. self.addr=addr
  19.  
  20.  
  21. #get all raw adc data,THe max value is 4095,cause it is 12 Bit ADC
  22. def get_all_adc_raw_data(self):
  23. array = []
  24. for i in range(ADC_CHAN_NUM):
  25. data=self.bus.read_i2c_block_data(self.addr,REG_RAW_DATA_START+i,2)
  26. val=data[1]<<8|data[0]
  27. array.append(val)
  28. return array
  29.  
  30. def get_nchan_adc_raw_data(self,n):
  31. data=self.bus.read_i2c_block_data(self.addr,REG_RAW_DATA_START+n,2)
  32. val =data[1]<<8|data[0]
  33. return val
  34. #get all data with unit mv.
  35. def get_all_vol_milli_data(self):
  36. array = []
  37. for i in range(ADC_CHAN_NUM):
  38. data=self.bus.read_i2c_block_data(self.addr,REG_VOL_START+i,2)
  39. val=data[1]<<8|data[0]
  40. array.append(val)
  41. return array
  42.  
  43. def get_nchan_vol_milli_data(self,n):
  44. data=self.bus.read_i2c_block_data(self.addr,REG_VOL_START+n,2)
  45. val =data[1]<<8|data[0]
  46. return val
  47.  
  48. #get all data ratio,unit is 0.1%
  49. def get_all_ratio_0_1_data(self):
  50. array = []
  51. for i in range(ADC_CHAN_NUM):
  52. data=self.bus.read_i2c_block_data(self.addr,REG_RTO_START+i,2)
  53. val=data[1]<<8|data[0]
  54. array.append(val)
  55. return array
  56.  
  57. def get_nchan_ratio_0_1_data(self,n):
  58. data=self.bus.read_i2c_block_data(self.addr,REG_RTO_START+n,2)
  59. val =data[1]<<8|data[0]
  60. return val
  61.  
  62.  
  63.  
  64. ADC = Pi_hat_adc()
  65. def main():
  66. raw_data=ADC.get_all_adc_raw_data()
  67. vol_data=ADC.get_all_vol_milli_data()
  68. ratio_data=ADC.get_all_ratio_0_1_data()
  69. print("raw data for each channel:(1-8chan)(12 bit-max=4096):")
  70. print(raw_data)
  71. print("voltage for each channel:(unit:mv,max=3300mv):")
  72. print(vol_data)
  73. print ("ratio for each channel(unit 0.1%,max=100.0%):")
  74. print(ratio_data)
  75.  
  76. print(" ")
  77. print("NOTICE!!!:")
  78. print("The default setting of ADC PIN is floating_input.")
  79. print(" ")
  80.  
  81. if __name__ == '__main__':
  82. main()

 

Sukces

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

  1.  
  2. pi@raspberrypi:~/grove.py/grove $ python adc_8chan_12bit.py
  3. raw data for each channel:(1-8chan)(12 bit-max=4096):
  4. [2177, 2098, 2064, 2038, 2127, 2066, 2172, 2145]
  5. voltage for each channel:(unit:mv,max=3300mv):
  6. [1599, 1741, 1668, 1658, 1644, 1787, 1694, 1677]
  7. ratio for each channel(unit 0.1%,max=100.0%):
  8. [521, 544, 514, 504, 500, 559, 524, 505]
  9.  
  10. NOTICE!!!:
  11. 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ń.

 

  1. pi@raspberrypi:~/grove.py/grove $ python grove_sound_sensor.py 6
  2. Detecting sound...
  3. Sound value: 433
  4. Sound value: 342
  5. Sound value: 443
  6. Sound value: 300
  7. Sound value: 632
  8. Sound value: 258
  9. Sound value: 591
  10. Sound value: 267
  11. Sound value: 871
  12. ^CTraceback (most recent call last):
  13. File "grove_sound_sensor.py", line 67, in
  14. main()
  15. File "grove_sound_sensor.py", line 64, in main
  16. time.sleep(.3)
  17. KeyboardInterrupt

 

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

 

Linki

zapraszamy do współpracy!

Open form