АЦП в ардуино

АЦП

Когда мы подключаем датчики к микроконтроллеру, выход датчика во многих случаях является аналоговым по своей природе. Но микроконтроллер обрабатывает цифровые сигналы.

Следовательно, мы используем АЦП (ADC) между датчиком и микроконтроллером. Он преобразует аналоговый сигнал в цифровой и передает его микроконтроллеру.


Arduino Uno имеет 6 встроенных каналов АЦП, которые можно использовать для считывания аналогового сигнала в диапазоне от 0–5В.

Данная плата ардуино имеет 10-битный АЦП, что означает, что он будет выдавать цифровое значение в диапазоне 0 – 1023 (210). Это называется разрешением, которое указывает на количество дискретных значений, которые он может равномерно «растянуть» в диапазоне аналоговых значений.

Вычисление значения цифрового выхода

Разрешение АЦП = Vref / (2n — 1)

Цифровое значение = Vin / разрешение

Где,  Vref — опорное напряжение — это максимальное значение, которое может преобразовать АЦП.

Для простоты предположим, что Vref  равно , тогда:

  • Для Vin = цифровое значение  = 0
  • Для Vin = цифровое значение  = 1023 (10 бит)
  • Для Vin = 2.5В цифровое значение = 512 (10 бит)

АЦП Ардуино Уно

АЦП Arduino Uno
Контакты, поддерживающие аналого-цифровое преобразование в Arduino Uno

Функции для АЦП Arduino


analogRead(pin)
Эта функция используется для считывания аналогового значения с указанного аналогового контакта.

analogReference(type)
Эта функция используется для настройки опорного напряжения, используемого для аналогового входа.

Чтение аналогового значения с помощью Arduino

Давайте напишем программу для считывания различных аналоговых значений, установленных с помощью потенциометра, подключенного к аналоговому каналу A0. Отобразим цифровое значение на последовательном мониторе, которое мы получили от АЦП Arduino.

Потенциометр, подключенный к Ардуино
Рисунок 2. Потенциометр, подключенный к Ардуино

Скетч чтения аналогового канала

int sensorPin = A0;  //Вход контакта потенциометра
int digitalValue = 0;// переменная хранит считанное значение аналогового сигнала

void setup() {
  Serial.begin(9600);
}

void loop() {
  digitalValue = analogRead(sensorPin);// чтение канала АЦП
  Serial.print("digital value = ");
  Serial.println(digitalValue);        //печать значения в порт монитора
  delay(1000);
}

Результат работы скетча чтения аналогового канала

Монитор порта после загрузки скетча
Рисунок 3. Монитор порта после загрузки скетча

Заметка


Если к аналоговому входному каналу ничего не подключено, функция AnalogRead() возвращает зашумленное значение.

Чтение аналогового напряжения с помощью Arduino Uno

Как уже было сказано, АЦП преобразует уровень напряжения на аналоговом контакте в пропорциональное цифровое значение (диапазон значений зависит от разрядности АЦП).

Но чтобы узнать, какое входное аналоговое значение подано на вход платы, нам нужно преобразовать это цифровое значение обратно в аналоговое с помощью формулы в программном коде:

Vin = цифровое значение * (Vref / 2n – 1)

Пример


10-ти битный АЦП с опорным напряжением 5В «считал» значение равное 512. Необходимо определить какому уровню напряжения соответствует данное цифровое значение. Получаем:

Vin = 512 × (5 В / 1023)  = 2,5 В

Скетч для чтения аналогового напряжения с помощью Arduino

int sensorPin = A0;   
int digitalValue = 0;  
float analogVoltage = 0.00;

void setup() {
  Serial.begin(9600);
}

void loop() {
  digitalValue = analogRead(sensorPin);  Serial.print("digital value = ");
  Serial.print(digitalValue);       
  analogVoltage = (digitalValue * 5.00)/1023.00;
  Serial.print("  analog voltage = ");
  Serial.println(analogVoltage);
  delay(1000);
}

Результат работы скетча чтения аналогового напряжения

Монитор порта
Рисунок 4. Монитор порта
0 0 голоса
Рейтинг статьи
Подписаться
Уведомить о
guest
0 комментариев
Межтекстовые Отзывы
Посмотреть все комментарии