Модуль ЦАП на MCP4725 со встроенной EEPROM позволяет генерировать аналоговый сигнал из цифрового с разрешением 12 бит, требует всего 6 мкс после подачи питания для инициализации и имеет сверхнизкое энергопотребление.
Благодаря адресному контакту возможно использование до 2 модулей на одной шине I2C. Выход модуля – Rail-to-Rail, что позволяет получить максимальный уровень сигнала равный напряжению питания.
Так как в базовые модели Arduino не входит встроенный ЦАП, MCP4725 может быть использован в проектах Arduino, чтобы получить аналоговый сигнал, если формирование сигнала из ШИМ не дает нужной точности.
Пример
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 |
// Подключаем библиотеку для работы с шиной I2C #include <Wire.h> // Подключаем библиотеку для управления ЦАП MCP4725 от Adafruit #include <Adafruit_MCP4725.h> // Определяем пин A0 как вход для измерения напряжения с выхода MCP4725 #define analogVin A0 // Создаём объект для работы с MCP4725 Adafruit_MCP4725 MCP4725; void setup(void) { // Запускаем последовательный порт для вывода данных на компьютер Serial.begin(9600); // Инициализация MCP4725 с I2C-адресом 0x60 (стандартный для модуля от Sparkfun) MCP4725.begin(0x60); } void loop(void) { // Переменная для хранения значения, которое отправляем в ЦАП (12 бит: 0-4095) uint32_t MCP4725_value; // Переменная для сырого значения с АЦП Arduino (10 бит: 0-1023) int adcValueRead = 0; // Переменная для напряжения, вычисленного по показаниям АЦП float voltageRead = 0; // Переменная для теоретического напряжения, которое должен выдавать MCP4725 float MCP4725_expected_output; // Цикл: перебираем значения от 0 до 4095 с шагом 15 for (MCP4725_value = 0; MCP4725_value < 4096; MCP4725_value = MCP4725_value + 15) { // Вычисляем ожидаемое напряжение на выходе MCP4725 // Формула: (опорное напряжение 5В / 4096 шагов) * текущее значение MCP4725_expected_output = (5.0 / 4096.0) * MCP4725_value; // Устанавливаем напряжение на MCP4725 // false означает, что не записываем в EEPROM (память микросхемы) MCP4725.setVoltage(MCP4725_value, false); // Ждём 250 мс, чтобы напряжение стабилизировалось delay(250); // Читаем значение с пина A0 (с выхода MCP4725) adcValueRead = analogRead(analogVin); // Преобразуем показания АЦП (0-1023) в напряжение (0-5В) voltageRead = (adcValueRead * 5.0 ) / 1024.0; // Выводим в Serial Monitor: // 1. Исходное значение, отправленное в MCP4725 Serial.print("MCP4725 Value: "); Serial.print(MCP4725_value); // 2. Ожидаемое напряжение на выходе (теоретическое) Serial.print("\tExpected Voltage: "); Serial.print(MCP4725_expected_output, 3); // 3 знака после запятой // 3. Сырое значение с АЦП Arduino Serial.print("\tArduino ADC Value: "); Serial.print(adcValueRead); // 4. Реальное напряжение, измеренное Arduino Serial.print("\tArduino Voltage: "); Serial.println(voltageRead, 3); // 3 знака после запятой и перевод строки } } |
Скачать библиотеку Adafruit_MCP4725 (ZIP)
Скачать библиотеку Adafruit_BusIO (ZIP)
Скачать документацию MCP4725 (PDF)





