- ЦАП-модуль MCP4725 (цифро-аналоговий перетворювач)
- Зв'язок I2C у ЦАП MCP4725
- Потрібні компоненти
- Кругова діаграма
- Програмування DAC Arduino
- Перетворення цифрового в аналогове за допомогою MCP4725 та Arduino
Ми всі знаємо, що мікроконтролери працюють лише з цифровими значеннями, але в реальному світі нам доводиться мати справу з аналоговими сигналами. Ось чому ADC (аналого-цифрові перетворювачі) існує для перетворення реальних аналогових значень у цифрову форму, щоб мікроконтролери могли обробляти сигнали. Але що, якщо нам потрібні аналогові сигнали від цифрових значень, отже, ось ЦАП (цифро-аналоговий перетворювач).
Простим прикладом цифрового аналогового перетворювача є запис пісні в студії, де співак виконавця використовує мікрофон і співає пісню. Ці аналогові звукові хвилі перетворюються в цифрову форму, а потім зберігаються у файлі цифрового формату, і коли пісня відтворюється за допомогою збереженого цифрового файлу, ці цифрові значення перетворюються в аналогові сигнали для виходу динаміка. Тож у цій системі використовується ЦАП.
ЦАП може використовуватися в багатьох додатках, таких як управління двигуном, регулювання яскравості світлодіодних ламп, підсилювач звуку, відеокодери, системи збору даних тощо.
У багатьох мікроконтролерах є внутрішній ЦАП, який можна використовувати для отримання аналогового виходу. Але процесори Arduino, такі як ATmega328 / ATmega168, не мають вбудованого ЦАП. Arduino має функцію АЦП (аналого-цифровий перетворювач), але у нього немає ЦАП (цифро-аналоговий перетворювач). Він має 10-розрядний ЦАП у внутрішньому АЦП, але цей ЦАП не може використовуватися як автономний. Отже, у цьому посібнику з ЦАП Arduino ми використовуємо додаткову плату під назвою Модуль ЦАП MCP4725 з Arduino.
ЦАП-модуль MCP4725 (цифро-аналоговий перетворювач)
MCP4725 IC - це 12-бітний цифрово -аналоговий модуль перетворювача, який використовується для генерування вихідних аналогових напруг від (0 до 5 В) і управляється за допомогою зв'язку I2C. Він також має вбудовану енергонезалежну пам'ять EEPROM.
Ця ІС має 12-бітну роздільну здатність. Це означає, що ми використовуємо (від 0 до 4096) як вхід для забезпечення вихідної напруги відносно опорної напруги. Максимальна опорна напруга - 5 В.
Формула для розрахунку вихідної напруги
Напруга O / P = (опорна напруга / роздільна здатність) x цифрове значення
Наприклад, якщо ми використовуємо 5 В як еталонну напругу і припустимо, що цифрове значення дорівнює 2048. Отже, для розрахунку вихідного сигналу ЦАП.
Напруга O / P = (5/4096) x 2048 = 2,5 В
Розтискач MCP4725
Внизу наведено зображення MCP4725 з чітко вказаними назвами контактів.
Шпильки MCP4725 |
Використовуйте |
ВИХІД |
Виводи аналогової напруги |
GND |
GND для виходу |
SCL |
Лінія послідовного годинника I2C |
SDA |
Лінія послідовних даних I2C |
VCC |
Вхідна опорна напруга 5 В або 3,3 В |
GND |
GND для введення |
Зв'язок I2C у ЦАП MCP4725
Цю ЦАП можна з'єднати з будь-яким мікроконтролером, використовуючи зв'язок I2C. Для зв'язку I2C потрібні лише два дроти SCL і SDA. За замовчуванням адреса I2C для MCP4725 - 0x60 або 0x61 або 0x62. Для мене його 0x61. Використовуючи шину I2C, ми можемо підключити декілька мікросхем ЦАП MCP4725. Єдине, нам потрібно змінити адресу I2C ІС. Зв'язок I2C в Arduino вже детально пояснено в попередньому навчальному посібнику.
У цьому посібнику ми підключимо мікросхему ЦАП MCP4725 до Arduino Uno та надамо значення аналогового входу на штифт Arduino A0 за допомогою потенціометра. Тоді АЦП буде використовуватися для перетворення аналогового значення в цифрову форму. Після цього ці цифрові значення передаються на MCP4725 через шину I2C для перетворення в аналогові сигнали за допомогою мікросхеми ЦАП MCP4725. Вивід Arduino A1 використовується для перевірки аналогового виходу MCP4725 з виводу OUT і, нарешті, відображення значень ADC і DAC та напруги на РК-дисплеї 16x2.
Потрібні компоненти
- Arduino Nano / Arduino Uno
- Модуль РК-дисплея 16x2
- MCP4725 ЦАП ІС
- 10k потенціометр
- Макет
- Провід перемички
Кругова діаграма
Нижче в таблиці наведено зв’язок між мікросхемою ЦАП MCP4725, Arduino Nano та багатоміром
MCP4725 |
Arduino Nano |
Мультиметр |
SDA |
A4 |
NC |
SCL |
A5 |
NC |
A0 або OUT |
А1 |
+ ve термінал |
GND |
GND |
-ve термінал |
VCC |
5 В |
NC |
Зв'язок між РК-дисплеєм 16x2 та Arduino Nano
РК-дисплей 16x2 |
Arduino Nano |
VSS |
GND |
VDD |
+ 5В |
V0 |
Від центрального штифта потенціометра для регулювання контрастності РК-дисплея |
RS |
D2 |
RW |
GND |
Е |
D3 |
D4 |
D4 |
D5 |
D5 |
D6 |
D6 |
D7 |
D7 |
A |
+ 5В |
К |
GND |
Потенціометр використовуються з центральним контактом, підключеним до A0 аналоговому входу Arduino Nano, лівий стрижень, підключених до GND і правому більшість штифта, з'єднаному з 5V з Arduino.
Програмування DAC Arduino
Повний код Arduino для підручника з ЦАП подано в кінці з демонстраційним відео. Тут ми пояснили код рядок за рядком.
По- перше, включають в себе бібліотеку для I2C і ЖК використанням wire.h і liquidcrystal.h бібліотеки.
#включати
Далі визначте та ініціалізуйте висновки РК-дисплея відповідно до висновків, які ми підключили до Arduino Nano
Рідкий кристал LiquidCrystal (2,3,4,5,6,7); // Визначення штифтів РК-дисплея RS, E, D4, D5, D6, D7
Далі визначте адресу I2C мікросхеми ЦАП MCP4725
#define MCP4725 0x61
Налаштування void ()
Спочатку розпочніть зв'язок I2C на штифтах A4 (SDA) і A5 (SCL) Arduino Nano
Wire.begin (); // Починає зв'язок I2C
Далі встановіть РК-дисплей у режим 16x2 та відобразіть привітальне повідомлення.
lcd.begin (16,2); // Встановлює РК-дисплей у режимі 16X2 lcd.print ("CIRCUIT DIGEST"); затримка (1000); lcd.clear (); lcd.setCursor (0,0); lcd.print ("Arduino"); lcd.setCursor (0,1); lcd.print ("ЦАП з MCP4725"); затримка (2000); lcd.clear ();
У циклі void ()
1. Спочатку в буфер помістіть контрольний байт (0b01000000)
(010-встановлює MCP4725 у режимі запису)
буфер = 0b01000000;
2. Наступне твердження зчитує аналогове значення з виводу A0 і перетворює його в цифрові значення (0-1023). Arduino ADC має 10-бітну роздільну здатність, тому помножте його на 4: 0-4096, оскільки ЦАП має 12-бітову роздільну здатність.
adc = analogRead (A0) * 4;
3. Це твердження має знайти напругу з вхідного значення АЦП (від 0 до 4096) і опорну напругу як 5 В
float ipvolt = (5,0 / 4096,0) * adc;
4. Нижче першого рядка поміщає найбільш значущі бітові значення в буфер, зсуваючи 4 біти вправо в змінну ADC, а другий рядок поміщає найменш значущі бітові значення в буфер, переміщуючи 4 біти вліво в змінну ADC.
буфер = adc >> 4; буфер = adc << 4;
5. У наступному твердженні зчитується аналогова напруга від А1, яка є виходом ЦАП (вихідний штифт MCP4725 ЦАП). Цей штифт також можна підключити до мультиметра для перевірки вихідної напруги. Дізнайтеся, як користуватися мультиметром тут.
unsigned int analogread = analogRead (A1) * 4;
6. Далі значення напруги від змінної аналогової зчитування обчислюється за формулою нижче
float opvolt = (5.0 / 4096.0) * аналоговийчитання;
7. Наступний оператор використовується для того, щоб розпочати передачу з MCP4725
Wire.beginTransmission (MCP4725);
Надсилає контрольний байт в I2C
Wire.write (буфер);
Надсилає MSB до I2C
Wire.write (буфер);
Надсилає LSB до I2C
Wire.write (буфер);
Закінчується передача
Wire.endTransmission ();
Тепер нарешті відобразіть ці результати на РК-дисплеї 16x2 за допомогою lcd.print ()
lcd.setCursor (0,0); lcd.print ("A IP:"); lcd.print (adc); lcd.setCursor (10,0); lcd.print ("V:"); lcd.print (ipvolt); lcd.setCursor (0,1); lcd.print ("D OP:"); lcd.print (analogread); lcd.setCursor (10,1); lcd.print ("V:"); lcd.print (opvolt); затримка (500); lcd.clear ();
Перетворення цифрового в аналогове за допомогою MCP4725 та Arduino
Після завершення всіх з'єднань ланцюга та завантаження коду в Arduino змініть потенціометр і перегляньте вихід на РК-дисплеї . Перший рядок РК-дисплея відображатиме вхідне значення АЦП і напругу, а другий рядок - вихідне значення ЦАП і напругу.
Ви також можете перевірити вихідну напругу, підключивши мультиметр до виводу OUT і GND MCP4725.
Ось як ми можемо перетворити цифрові значення в аналогові, пов’язуючи модуль ЦАП MCP4725 з Arduino.