цифровая электроника
вычислительная техника
встраиваемые системы

 




Raspberry Pi и АЦП: принцип работы, схема, код

Автор: Mike(admin) от 9-11-2018, 10:05

Raspberry Pi – это плата на базе процессора архитектуры ARM, предназначенная для инженеров и радиолюбителей. Сейчас Raspberry Pi является одной из самых надежных платформ разработки проектов. Благодаря высокой скорости процессора и 1 ГБ ОЗУ, Pi может использоваться для многих требовательных проектов, таких как обработка изображений и Интернет вещей.


Raspberry Pi и АЦП: принцип работы, схема, код

Одним из компонентов для успешной реализации многих проектов является аналого-цифровой преобразователь (АЦП). Стандартные микроконтроллеры имеют каналы АЦП, но для в Raspberry Pi отсутствуют внутренние каналы АЦП. Поэтому, если мы хотим взаимодействовать с любыми аналоговыми датчиками, нам нужен блок преобразования АЦП. Поэтому для этих целей мы собираемся использовать микросхему ADC0804 с малиной Raspberry Pi.


ADC0804 – это микросхема, предназначенная для преобразования аналогового сигнала в 8-битные цифровые данные. Этот чип является одной из популярных серий АЦП. Это 8-битный преобразователь, поэтому мы имеем цифровые значения от 0 до 255. При измеряемом напряжении не более 5 В мы будем наблюдать изменение в 19,5 мВ на каждый бит. Ниже приведена распиновка ADC0804.


ADC0804

Теперь еще одна важная вещь: ADC0804 работает с напряжением 5 В. Проблема заключается в том, что логика и питание Raspberry Pi имеет значение +3,3 В, поэтому вы не можете совместить миникомпьютер с +5 В напрямую. Если вы подадите +5В на любой вывод GPIO платы Raspberry Pi, эта плата будет повреждена. Поэтому для понижения логического уровня с +5 В в +3,3 В мы будем использовать схему делителя напряжения. Схема подключения Raspberry Pi и ADC0804 представлена ниже.


Raspberry Pi и АЦП: схема

На входе АЦП всегда много шума, этот шум может сильно повлиять на качество сигнала, поэтому мы используем конденсатор 0,1 мкФ для фильтрации шума. Без него будет много колебаний на выходе. Микросхема работает на тактирующем RC-резонаторе (резистор-конденсатор). Как показано на схеме, C2 и R20 образуют такой резонатор. Здесь важно помнить, что конденсатор C2 может быть изменен на более низкое значение для более высокой скорости преобразования АЦП. Однако с более высокой скоростью будет снижаться точность. Поэтому, если приложение требует более высокой точности, выберите конденсатор с более высоким значением и для более высокой скорости выберите конденсатор с более низким значением.


Программа для Raspberry Pi с подключенным АЦП ADC0804 была написана на языке Python. После запуска на экране будет отображаться цифровое значение аналогового сигнала от 0 до 255.


Raspberry Pi и АЦП: принцип работы, схема, код

Код программы:



import RPi.GPIO as IO        # вызываем заголовочный файл, который помогает нам использовать GPIO
import time                          # вызываем time, чтобы обеспечить задержки в программе
IO.setwarnings(False)         # не показывать никаких предупреждений
x=1
b0 =0                                    # целые числа для хранения 8 бит
b1 =0
b2 =0
b3 =0
b4 =0
b5 =0
b6 =0
b7 =0
IO.setmode (IO.BCM)            # программирование GPIO по номерам контактов BCM. (например, PIN29 как GPIO5)
IO.setup(4,IO.IN)                    # настроить контакты GPIO на вход
IO.setup(17,IO.IN)
IO.setup(27,IO.IN)
IO.setup(22,IO.IN)
IO.setup(5,IO.IN)
IO.setup(6,IO.IN)
IO.setup(13,IO.IN)
IO.setup(19,IO.IN)
while 1:                                               # бесконечный цикл
    if (IO.input(19) == True):
        time.sleep(0.001)
        if (IO.input(19) == True):
            b7=1                                       # если линия19 имеет высокий уровень бит7 = 1

    if (IO.input(13) == True):
        time.sleep(0.001)
        if (IO.input(13) == True):
            b6=1                                      # если линия13 имеет высокий уровень бит6 = 1

    if (IO.input(6) == True):
        time.sleep(0.001)
        if (IO.input(6) == True):
            b5=1                                      # если линия6 имеет высокий уровень бит5 = 1

    if (IO.input(5) == True):
        time.sleep(0.001)
        if (IO.input(5) == True):
            b4=1                                     # если линия5 имеет высокий уровень бит4 = 1

    if (IO.input(22) == True):
        time.sleep(0.001)
        if (IO.input(22) == True):
            b3=1                                     # если линия22 имеет высокий уровень бит3 = 1

    if (IO.input(27) == True):
        time.sleep(0.001)
        if (IO.input(27) == True):
            b2=1                                    # если линия27 имеет высокий уровень бит2 = 1
 
  if (IO.input(17) == True):
        time.sleep(0.001)
        if (IO.input(17) == True):
            b1=1                                    # если линия17 имеет высокий уровень бит1 = 1

    if (IO.input(4) == True):
        time.sleep(0.001)
        if (IO.input(4) == True):
            b0=1                                    # если линия4 имеет высокий уровень бит0 = 1
    
    x = (1*b0)+(2*b1)
    x = x+(4*b2)+(8*b3)
    x = x+(16*b4)+(32*b5)
    x = x+(64*b6)+(128*b7)                    # представляем значения бит от младшего к старшему
    print ( x)                                              # выводим значение АЦП
    b0=b1=b2=b3=b4=b5=b6=b7=0        # сбрасываем значения
    time.sleep(0.01)                                   # ждем 10 мс



© digitrode.ru


Теги: Raspberry Pi




Уважаемый посетитель, Вы зашли на сайт как незарегистрированный пользователь.
Мы рекомендуем Вам зарегистрироваться либо войти на сайт под своим именем.

Комментарии:

Оставить комментарий