- Модуль ЦАП MCP4725 (цифро-аналоговый преобразователь)
- Связь I2C в ЦАП MCP4725
- Необходимые компоненты
- Принципиальная электрическая схема
- Программирование DAC Arduino
- Цифро-аналоговое преобразование с использованием MCP4725 и Arduino
Все мы знаем, что микроконтроллеры работают только с цифровыми значениями, но в реальном мире нам приходится иметь дело с аналоговыми сигналами. Вот почему АЦП (аналого-цифровые преобразователи) предназначены для преобразования реальных аналоговых значений в цифровую форму, чтобы микроконтроллеры могли обрабатывать сигналы. Но что, если нам нужны аналоговые сигналы из цифровых значений, так что здесь идет ЦАП (цифро-аналоговый преобразователь).
Простым примером цифро-аналогового преобразователя является запись песни в студии, где певец-исполнитель использует микрофон и поет песню. Эти аналоговые звуковые волны преобразуются в цифровую форму, а затем сохраняются в файле цифрового формата, и когда песня воспроизводится с использованием сохраненного цифрового файла, эти цифровые значения преобразуются в аналоговые сигналы для вывода на динамик. Итак, в этой системе используется ЦАП.
ЦАП можно использовать во многих приложениях, таких как управление двигателем, регулировка яркости светодиодных индикаторов, аудиоусилитель, видеокодеры, системы сбора данных и т. Д.
Во многих микроконтроллерах есть внутренний ЦАП, который можно использовать для аналогового вывода. Но процессоры Arduino, такие как ATmega328 / ATmega168, не имеют встроенного ЦАП. Arduino имеет функцию АЦП (аналого-цифровой преобразователь), но не имеет ЦАП (цифро-аналоговый преобразователь). Он имеет 10-битный ЦАП во внутреннем АЦП, но этот ЦАП не может использоваться как автономный. Итак, здесь, в этом руководстве Arduino DAC, мы используем дополнительную плату под названием MCP4725 DAC Module с Arduino.
Модуль ЦАП MCP4725 (цифро-аналоговый преобразователь)
MCP4725 IC - это 12-разрядный модуль цифро-аналогового преобразователя, который используется для генерации выходных аналоговых напряжений от (0 до 5 В) и управляется с помощью связи I2C. Он также имеет встроенную энергонезависимую память EEPROM.
Эта ИС имеет 12-битное разрешение. Это означает, что мы используем (от 0 до 4096) в качестве входных данных для обеспечения выходного напряжения относительно опорного напряжения. Максимальное опорное напряжение 5В.
Формула для расчета выходного напряжения
O / P напряжение = (Опорное напряжение / разрешение) х цифровое значение
Для примера, если мы используем 5V в качестве опорного напряжения и давайте предположим, что цифровое значение 2048. Таким образом, для вычисления выходного сигнала ЦАП.
Напряжение O / P = (5/4096) x 2048 = 2,5 В
Распиновка MCP4725
Ниже представлено изображение MCP4725 с четко обозначенными именами контактов.
Штифты MCP4725 |
Использовать |
ИЗ |
Выходы Аналоговое напряжение |
GND |
GND для выхода |
SCL |
Линия последовательных часов I2C |
ПДД |
Линия последовательных данных I2C |
VCC |
Ввод опорного напряжения 5В или 3.3В |
GND |
GND для входа |
Связь I2C в ЦАП MCP4725
Эта ИС ЦАП может быть сопряжена с любым микроконтроллером с использованием связи I2C. Для связи I2C требуются только двухпроводные SCL и SDA. По умолчанию адрес I2C для MCP4725 - 0x60, 0x61 или 0x62. Для меня это 0x61. Используя шину I2C, мы можем подключить несколько микросхем ЦАП MCP4725. Единственное, нам нужно изменить адрес I2C IC. Связь I2C в Arduino уже подробно объяснялась в предыдущем руководстве.
В этом руководстве мы подключим микросхему ЦАП MCP4725 к Arduino Uno и предоставим аналоговое входное значение на вывод A0 Arduino с помощью потенциометра. Затем АЦП будет использоваться для преобразования аналогового значения в цифровую форму. После этого эти цифровые значения отправляются на MCP4725 по шине I2C для преобразования в аналоговые сигналы с помощью DAC MCP4725 IC. Вывод A1 Arduino используется для проверки аналогового выхода MCP4725 с вывода OUT и, наконец, отображения значений и напряжений АЦП и ЦАП на ЖК-дисплее 16x2.
Необходимые компоненты
- Ардуино Нано / Ардуино Уно
- Модуль ЖК-дисплея 16x2
- Микросхема ЦАП MCP4725
- Потенциометр 10k
- Макетная плата
- Перемычки
Принципиальная электрическая схема
В таблице ниже показано соединение между ИС ЦАП MCP4725, Arduino Nano и мультиметром.
MCP4725 |
Ардуино Нано |
Мультиметр |
ПДД |
A4 |
NC |
SCL |
A5 |
NC |
A0 или OUT |
A1 |
+ ve терминал |
GND |
GND |
-ve терминал |
VCC |
5В |
NC |
Соединение между ЖК-дисплеем 16x2 и Arduino Nano
ЖК-дисплей 16x2 |
Ардуино Нано |
VSS |
GND |
VDD |
+ 5В |
V0 |
От центрального штифта потенциометра для регулировки контрастности ЖК-дисплея |
RS |
D2 |
RW |
GND |
E |
D3 |
D4 |
D4 |
D5 |
D5 |
D6 |
D6 |
D7 |
D7 |
А |
+ 5В |
K |
GND |
Потенциометр используются с центральным контактом, подключенным к A0 аналоговому входу Arduino Nano, левый стержень, подключенных к GND и правому большинство штифта, соединенному с 5V из Arduino.
Программирование DAC Arduino
Полный код Arduino для DAC приведен в конце с демонстрационным видео. Здесь мы объяснили код построчно.
Во-первых, включите библиотеку для I2C и LCD с помощью библиотеки 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 («Ардуино»); lcd.setCursor (0,1); lcd.print («ЦАП с MCP4725»); задержка (2000); lcd.clear ();
В пустом цикле ()
1. Сначала в буфер поместите значение контрольного байта (0b01000000)
(010-устанавливает MCP4725 в режим записи)
буфер = 0b01000000;
2. Следующий оператор считывает аналоговое значение с вывода A0 и преобразует его в цифровые значения (0-1023). АЦП Arduino имеет 10-битное разрешение, поэтому умножение его на 4 дает: 0-4096, так как DAC имеет 12-битное разрешение.
adc = analogRead (A0) * 4;
3. Это утверждение, чтобы найти напряжение от входного значения АЦП (от 0 до 4096) и опорное напряжение, как 5V
float ipvolt = (5.0 / 4096.0) * adc;
4. Ниже первая строка помещает наиболее значимые битовые значения в буфер, сдвигая 4 бита вправо в переменной ADC, а вторая строка помещает наименее значимые битовые значения в буфер, сдвигая 4 бита влево в переменной ADC.
буфер = adc >> 4; буфер = adc << 4;
5. Следующая инструкция считывает аналоговое напряжение с A1, который является выходом ЦАП (вывод OUTPUT ИС ЦАП MCP4725). Этот вывод также можно подключить к мультиметру для проверки выходного напряжения. Узнайте, как использовать мультиметр здесь.
беззнаковое int analogread = analogRead (A1) * 4;
6. Далее значение напряжения из аналогового показания переменной рассчитывается по формуле ниже.
float opvolt = (5.0 / 4096.0) * analogread;
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 ("IP:"); lcd.print (АЦП); lcd.setCursor (10,0); lcd.print ("V:"); lcd.print (ipvolt); lcd.setCursor (0,1); lcd.print ("D OP:"); lcd.print (аналоговое чтение); lcd.setCursor (10,1); lcd.print ("V:"); lcd.print (опвольт); задержка (500); lcd.clear ();
Цифро-аналоговое преобразование с использованием MCP4725 и Arduino
После завершения всех подключений схемы и загрузки кода в Arduino, измените потенциометр и посмотрите результат на ЖК-дисплее . Первая строка ЖК-дисплея покажет значение входного АЦП и напряжение, а вторая строка покажет значение и напряжение выходного ЦАП.
Вы также можете проверить выходное напряжение, подключив мультиметр к контактам OUT и GND MCP4725.
Вот как мы можем преобразовать цифровые значения в аналоговые, связав модуль ЦАП MCP4725 с Arduino.