Для того, чтобы получить аналоговый сигнал нужной формы из цифровой системы, необходим цифро-аналоговый преобразователь или просто ЦАП. К сожалению, в базовые модели Arduino (Arduino Uno, Arduino Mini и т.п.) не входит встроенный ЦАП, поэтому в таких случаях (если формирование сигнала из ШИМ не дает нужной точности) следует пользоваться внешними модулями ЦАП.

В данном материале мы рассмотрим ЦАП MCP4725 компании Microchip и то, как работать с ним с помощью Arduino.
MCP4725 представляет собой одноканальный 12-разрядный, буферизованный аналого-цифровой преобразователь со встроенным EEPROM и последовательным интерфейсом, совместимым с I2C. Поскольку данная микросхема доступна в корпусе SOT-23-6, радиолюбителям сложно припаять и тестировать такой ЦАП, поэтому на рынке появились модули с впаянным MCP4725 по доступным ценам.

Недорогой модуль, показанный выше, обеспечивает легкий доступ к 12-разрядному ЦАП MCP4725. Согласно документации, адрес устройства содержит четыре фиксированных бита (код устройства = 1100) и три бита адреса (A2, A1, A0). Биты A2 и A1 устанавливаются во время изготовления, а бит A0 определяется логическим состоянием настраиваемого пользователем вывода A0. Вывод A0 можно подключить к VCC или GND или активно управлять цифровыми логическими уровнями. Обнаружено, что адрес I2C по умолчанию для модуля, представленного здесь, равен 0x60 (A0 = 0, A1 = 0, A2 = 0). Также обратите внимание, что напряжение на выводе VCC используется как вход питания, а также опорный вход ЦАП, поэтому источник питания на выводе VCC должен быть настолько чистым, насколько это возможно для хорошей эффективности ЦАП.
Что касается требований к питанию, MCP4725 будет потреблять не более 0,4 мА от источника питания с нулевой нагрузкой на выходе и подавать к нагрузке менее 25 мА. Поскольку это 12-разрядный ЦАП, он будет принимать до 4096 возможных входных значений для обеспечения аналогового выхода. Здесь выходное значение 0 равно нулю, а выходное значение 4095 является полномасштабным выходом, которое определяется опорным напряжением, подаваемым на вывод VCC. Подключается MCP4725 к Arduino следующим образом:

Далее приведен простой скетч (код) для первоначального теста модуля MCP4725. В этом эксперименте используется Arduino Uno и ЖК-экран в качестве аппаратного обеспечения в дополнение к модулю ЦАП. Скетч, поддерживаемый библиотекой Adafruit_MCP4725, инкрементирует выход ЦАП, считывает значения и отображает результаты на ЖК-экране.
#include <Wire.h>
#include <Adafruit_MCP4725.h>
#include <LiquidCrystal.h>
#define MCP4725In A1
Adafruit_MCP4725 MCP4725;
LiquidCrystal lcd(8, 9, 4, 5, 6, 7);
void setup()
{
delay(1000);
lcd.begin(16,2);
MCP4725.begin(0x60);
// Считывание - требуемое значение
lcd.setCursor(0,0);
lcd.print("REQD: ");
// Считывание - наблюдаемое значение
lcd.setCursor(0,1);
lcd.print("OBSD: ");
}
void loop()
{
uint32_t MCP4725_value;
int adcInput = 0;
float voltageIn = 0;
float MCP4725_reading;
for (MCP4725_value = 0; MCP4725_value < 4096; MCP4725_value = MCP4725_value + 128)
{
delay(1000);
MCP4725_reading = (5.0/4096.0) * MCP4725_value;
MCP4725.setVoltage(MCP4725_value, false);
adcInput = analogRead(MCP4725In);
voltageIn = (adcInput * 5.0 )/ 1024.0;
lcd.setCursor(7,0);
lcd.print(MCP4725_reading,3);
lcd.setCursor(7,1);
lcd.print(voltageIn,3);
}
}
Вот как это может выглядеть:

© digitrode.ru