- Необходимые компоненты
- Модуль ЦАП MCP4725 (цифро-аналоговый преобразователь)
- Связь I2C в MCP4725
- Принципиальная схема и объяснение
- Программирование STM32F103C8 для цифро-аналогового преобразования
- Тестирование ЦАП с STM32
Все мы знаем, что микроконтроллеры работают только с цифровыми значениями, но в реальном мире нам приходится иметь дело с аналоговыми сигналами. Вот почему АЦП (аналого-цифровые преобразователи) предназначены для преобразования реальных аналоговых значений в цифровую форму, чтобы микроконтроллеры могли обрабатывать сигналы. Но что, если нам нужны аналоговые сигналы из цифровых значений, так что здесь идет ЦАП (цифро-аналоговый преобразователь).
Простым примером цифро-аналогового преобразователя является запись песни в студии, где певец-исполнитель использует микрофон и поет песню. Эти аналоговые звуковые волны преобразуются в цифровую форму, а затем сохраняются в файле цифрового формата, и когда песня воспроизводится с использованием сохраненного цифрового файла, эти цифровые значения преобразуются в аналоговые сигналы для вывода на динамик. Итак, в этой системе используется ЦАП.
ЦАП можно использовать во многих приложениях, таких как управление двигателем, регулировка яркости светодиодных индикаторов, аудиоусилитель, видеокодеры, системы сбора данных и т. Д.
Мы уже подключили модуль ЦАП MCP4725 к Arduino. Сегодня мы будем использовать ту же микросхему ЦАП MCP4725 для разработки цифро-аналогового преобразователя с использованием микроконтроллера STM32F103C8.
Необходимые компоненты
- STM32F103C8
- Микросхема ЦАП MCP4725
- Потенциометр 10k
- ЖК-дисплей 16x2
- Макетная плата
- Подключение проводов
Модуль ЦАП 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. Перейдите по ссылке, чтобы узнать больше о связи I2C в STM32F103C8.
Контакты I2C в STM32F103C8:
SDA: PB7 или PB9, PB11.
SCL: PB6 или PB8, PB10.
Принципиальная схема и объяснение
Соединения между STM32F103C8 и ЖК-дисплеем 16x2
ЖК-вывод Нет |
Имя вывода ЖК-дисплея |
Имя контакта STM32 |
1 |
Земля (Gnd) |
Земля (G) |
2 |
VCC |
5В |
3 |
VEE |
Пин от центра потенциометра для контраста |
4 |
Выбрать регистр (RS) |
PB11 |
5 |
Чтение / запись (RW) |
Земля (G) |
6 |
Включить (EN) |
PB10 |
7 |
Бит данных 0 (DB0) |
Нет соединения (NC) |
8 |
Бит данных 1 (DB1) |
Нет соединения (NC) |
9 |
Бит данных 2 (DB2) |
Нет соединения (NC) |
10 |
Бит данных 3 (DB3) |
Нет соединения (NC) |
11 |
Бит данных 4 (DB4) |
PB0 |
12 |
Бит данных 5 (DB5) |
PB1 |
13 |
Бит данных 6 (DB6) |
PC13 |
14 |
Бит данных 7 (DB7) |
PC14 |
15 |
Светодиод Положительный |
5В |
16 |
Светодиод отрицательный |
Земля (G) |
Связь между ИС ЦАП MCP4725 и STM32F103C8
MCP4725 |
STM32F103C8 |
Мультиметр |
ПДД |
PB7 |
NC |
SCL |
PB6 |
NC |
ИЗ |
PA1 |
Положительный зонд |
GND |
GND |
Отрицательный зонд |
VCC |
3,3 В |
NC |
Также подключен потенциометр, центральный контакт которого подключен к аналоговому входу PA1 (ADC) STM32F10C8, левый контакт подключен к GND, а крайний правый контакт подключен к 3,3 В STM32F103C8.
В этом руководстве мы подключим микросхему ЦАП MCP4725 к STM32 и будем использовать потенциометр 10k для передачи аналогового входного значения на вывод PA0 АЦП STM32. А затем используйте АЦП для преобразования аналогового значения в цифровую форму. После этого отправьте эти цифровые значения на MCP4725 по шине I2C. Затем преобразуйте эти цифровые значения в аналоговые, используя ЦАП MCP4725 IC, а затем используйте другой вывод АЦП PA1 STM32 для проверки аналогового выхода MCP4725 с вывода OUT. Наконец, отобразите значения АЦП и ЦАП с напряжениями на ЖК-дисплее 16x2.
Программирование STM32F103C8 для цифро-аналогового преобразования
Программист FTDI теперь не требуется для загрузки кода в STM32F103C8. Просто подключите его к ПК через USB-порт STM32 и начните программировать с помощью ARDUINO IDE. Посетите эту ссылку, чтобы узнать больше о программировании вашего STM32 в Arduino IDE. Полная программа для этого руководства по ЦАП STM32 приведена в конце.
Сначала включите библиотеку для I2C и LCD, используя библиотеки wire.h, SoftWire.h и liquidcrystal.h. Узнайте больше о I2C в микроконтроллере STM32 здесь.
#включают
Затем определите и инициализируйте выводы ЖК-дисплея в соответствии с выводами ЖК-дисплея, подключенными к STM32F103C8.
const int rs = PB11, en = PB10, d4 = PB0, d5 = PB1, d6 = PC13, d7 = PC14; ЖК-дисплей LiquidCrystal (rs, en, d4, d5, d6, d7);
Затем определите I2C-адрес ИС ЦАП MCP4725. Адрес I2C ЦАП MCP4725 по умолчанию: 0x60.
#define MCP4725 0x60
В настройке void ()
Сначала начните связь I2C на выводах PB7 (SDA) и PB6 (SCL) STM32F103C8.
Wire.begin (); // Начинает связь по I2C
Затем установите ЖК-дисплей в режим 16x2 и отобразите приветственное сообщение.
lcd.begin (16,2); lcd.print ("ДАЙДЖЕСТ ЦЕПИ"); задержка (1000); lcd.clear (); lcd.setCursor (0,0); lcd.print ("STM32F103C8"); lcd.setCursor (0,1); lcd.print («ЦАП с MCP4725»); задержка (2000); lcd.clear ();
В пустом цикле ()
1. Сначала в буфер поместите значение контрольного байта (0b01000000).
(010 - устанавливает MCP4725 в режим записи) buffer = 0b01000000;
2. Следующий оператор считывает аналоговое значение с вывода PA0 и преобразует его в цифровое значение в диапазоне от 0 до 4096, поскольку АЦП имеет 12-битное разрешение, и сохраняет его в переменной adc .
adc = analogRead (PA0);
3. Это следующее утверждение представляет собой формулу, используемую для расчета напряжения на основе входного значения АЦП (от 0 до 4096) с опорным напряжением 3,3 В.
float ipvolt = (3.3 / 4096.0) * adc;
4. Поместите значения старших битов в буфер, сдвинув 4 бита вправо в переменной ADC, и значения младших битов в буфер, сдвинув 4 бита влево в переменной ADC .
буфер = adc >> 4; буфер = adc << 4;
5. Следующий оператор считывает аналоговое значение с вывода PA1 АЦП модуля STM32, который является выходом ЦАП (вывод OUTPUT ИС ЦАП MCP4725). Этот вывод также можно подключить к мультиметру для проверки выходного напряжения.
беззнаковое int analogread = analogRead (PA1);
6. Далее значение напряжения из переменной analogread вычисляется по формуле со следующим утверждением.
float opvolt = (3.3 / 4096.0) * analogread;
7. В том же цикле void () есть несколько других операторов, которые описаны ниже.
Начинает передачу с 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 ();
Тестирование ЦАП с STM32
Когда мы изменяем значение входного АЦП и напряжение, вращая потенциометр, значение и напряжение выходного ЦАП также изменяются. Здесь входные значения отображаются в первой строке, а выходные значения - во второй строке ЖК-дисплея. К выходному выводу MCP4725 также подключен мультиметр для проверки аналогового напряжения.
Полный код с демонстрационным видео приведен ниже.