![Arduino ADC read to PWM output](http://ardudevelop.eu/wp-content/uploads/2022/10/Arduino-PWM-АДЦ.jpg)
Въведение
След като разгледахме как се изчита аналогова стойност “Arduino UNO ADC read” и как се генерира широчинно импулсна модулация “Arduino UNO PWM output” с Arduino IDE, е време да видим как се прочита аналогов пин и как се прехвърля стойността му към дигитален пин като генерираме ШИМ/PWM според изчетените аналогови стойности. Нека кръстим тази програма “ADCtoPWM.ino”. В Arduino IDE това се постига с три функции:
- Прочитане на стойността на аналогов пин: analogRead(пин);
- Преизчисляване на резултата от аналоговия пин към цифровия изход: map(стойност, 0, 1023, 0, 255);
- Задаване на PWM/ШИМ: analogWrite(пин, стойност);
Функции
1. analogRead(пин)
Функцията analogRead(пин); връща целочислена стойност от 0 до 1023 при измерено напрежение 0-5 волта за Arduino UNO. За Arduino DUE, резолюцията е 12 битова при 3.3 волта, което прави 0-4096 при измерено напрежение 0-3.3 волта. Резолюцията може да се промени с функцията analogReadResolution(bit), но за това по нататък.
2. map(стойност, 0, 1023, 0, 255)
Функцията map(променлива, 0, 1023, 0, 255); преизчислява аналоговия вход (0-1023) към PWM/ШИМ стойности (0-255). Примерен код: value = map(val, 0, 1023, 0, 255);. Това означава, че стойността val
, която се намира в обхвата от 0 до 1023, ще бъде преизчислена в нова стойност value
, която ще бъде в обхвата от 0 до 255. Формулата за преизчисляване на стойност x
от един обхват [in_min, in_max] към друг обхват [out_min, out_max] е:
y=(in_max−in_min)(x−in_min)×(out_max−out_min)+out_min
3. analogWrite(пин, стойност)
Функцията analogWrite(пин, стойност); задава широчинно импулсна модулация (ШИМ/PWM) на дигитален пин. Например: analogWrite(3, value);.
Примерен Код
int led = 3;
int potRead = 0;
int value = 0;
void setup() {
Serial.begin(9600);
pinMode(led, OUTPUT);
digitalWrite(led, LOW);
}
void loop() {
potRead = analogRead(A0);
Serial.println(potRead);
value = map(potRead, 0, 1023, 0, 255);
analogWrite(led, value);
}
Свързване на Компонентите
Компоненти:
- Arduino UNO / MEGA (или друга платформа)
- Потенциометър 10k
- Резистор 220 Ом
- Светодиод
Схема на свързването:
На картинката отдолу ще видите схема на Arduino UNO която включва потенциометър, резистор и светодиод, показващи как работи PWM/ШИМ с регулация от ADC/АЦП.
![ADC-АЦП-sheme](http://ardudevelop.eu/wp-content/uploads/2022/10/ADC-АЦП-sheme.jpg)
Снимка на тестовата платформа:
![Arduino UNO ADC to PWM_1](http://ardudevelop.eu/wp-content/uploads/2022/10/PWM_test_1.jpg)
![Arduino UNO ADC to PWM_2](http://ardudevelop.eu/wp-content/uploads/2022/10/PWM_test_2.jpg)
Клип как работи платформата:
На този клип ще видите нагледно как работи тази схема. Закачили сме дигитален осцилоскоп (в този случай DSO150), на който може да видим реално как се генерира ШИМ/PWM сигналът от Arduino платформата.
Заключение
Тази статия “Arduino ADC read to PWM output” показва как да прочетем аналогов (ADC) сигнал и да го прехвърлим към широчинно импулсна модулация (PWM изход). Този процес е основен при работа с много електронни устройства и дава възможност за управление на физически компоненти чрез софтуер. Може да изгледате този видео клип.