- Потрібні компоненти
- ЦАП-модуль MCP4725 (цифро-аналоговий перетворювач)
- Зв'язок I2C у MCP4725
- Принципова схема та пояснення
- Програмування STM32F103C8 для цифрового в аналогове перетворення
- Тестування ЦАП за допомогою STM32
Ми всі знаємо, що мікроконтролери працюють лише з цифровими значеннями, але в реальному світі нам доводиться мати справу з аналоговими сигналами. Ось чому ADC (аналого-цифрові перетворювачі) існує для перетворення реальних аналогових значень у цифрову форму, щоб мікроконтролери могли обробляти сигнали. Але що, якщо нам потрібні аналогові сигнали від цифрових значень, отже, ось ЦАП (цифро-аналоговий перетворювач).
Простим прикладом цифрового аналогового перетворювача є запис пісні в студії, де співак виконавця використовує мікрофон і співає пісню. Ці аналогові звукові хвилі перетворюються в цифрову форму, а потім зберігаються у файлі цифрового формату, і коли пісня відтворюється за допомогою збереженого цифрового файлу, ці цифрові значення перетворюються в аналогові сигнали для виходу динаміка. Тож у цій системі використовується ЦАП.
ЦАП може використовуватися в багатьох додатках, таких як управління двигуном, регулювання яскравості світлодіодних ламп, підсилювач звуку, відеокодери, системи збору даних тощо.
Ми вже з'єднали модуль ЦАП MCP4725 з Arduino. Сьогодні ми використаємо ту саму мікросхему ЦАП MCP4725 для розробки цифрово- аналогового перетворювача за допомогою мікроконтролера STM32F103C8.
Потрібні компоненти
- STM32F103C8
- MCP4725 ЦАП ІС
- 10k потенціометр
- РК-дисплей 16x2
- Макет
- Підключення проводів
ЦАП-модуль 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. Перейдіть за посиланням, щоб дізнатись більше про зв'язок I2C у STM32F103C8.
I2C-шпильки в STM32F103C8:
SDA: PB7 або PB9, PB11.
SCL: PB6 або PB8, PB10.
Принципова схема та пояснення
З'єднання між STM32F103C8 та РК-дисплеєм 16x2
ЖК-номер |
Назва PIN-коду РК-дисплея |
Ім'я контакту 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) |
ПК13 |
14 |
Біт даних 7 (DB7) |
ПК14 |
15 |
Позитивний світлодіод |
5 В |
16 |
Світлодіод негативний |
Земля (G) |
Зв'язок між мікросхемою ЦАП MCP4725 та STM32F103C8
MCP4725 |
STM32F103C8 |
Мультиметр |
SDA |
PB7 |
NC |
SCL |
PB6 |
NC |
ВИХІД |
PA1 |
Позитивний зонд |
GND |
GND |
Негативний зонд |
VCC |
3,3 В |
NC |
Потенціометр також підключений, центральний штифт підключений до аналогового входу PA1 (ADC) STM32F10C8, лівий штифт підключений до GND, а самий правий штифт підключений до 3,3 В STM32F103C8.
У цьому навчальному посібнику ми підключимо мікросхему ЦАП MCP4725 до STM32 і використаємо потенціометр 10k для надання аналогового значення входу на контакт AD0 STC32 ADC. А потім використовуйте АЦП для перетворення аналогового значення в цифрову форму. Після цього відправте ці цифрові значення на MCP4725 через шину I2C. Потім перетворіть ці цифрові значення в аналогові, використовуючи мікросхему ЦАП MCP4725, а потім використовуйте інший вивід АЦП PA1 STM32, щоб перевірити аналоговий вихід MCP4725 з виводу OUT. Нарешті, на РК-дисплеї 16x2 відображте значення ADC та DAC з напругою.
Програмування STM32F103C8 для цифрового в аналогове перетворення
Для завантаження коду на STM32F103C8 зараз не потрібен програміст FTDI. Просто підключіть його до ПК через USB-порт STM32 і почніть програмувати за допомогою ARDUINO IDE. Відвідайте це посилання, щоб дізнатися більше про програмування вашого STM32 в Arduino IDE. Повна програма для цього підручника з ЦАП STM32 подана в кінці.
По- перше, включають бібліотеку для I2C і ЖК використанням 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 ();
У циклі void ()
1. Спочатку в буфер помістіть контрольний байт (0b01000000).
(010-Встановлює MCP4725 у режимі запису) buffer = 0b01000000;
2. Наступне твердження зчитує аналогове значення з виводу PA0 і перетворює його в цифрове значення в діапазоні від 0 до 4096, оскільки ADC має 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. У наступному висловлюванні зчитується аналогове значення з ADC-штифта PA1 STM32, що є вихідним ЦАП (вихідний вивід ЦАП MCP4725). Цей штифт також можна підключити до мультиметра для перевірки вихідної напруги.
unsigned int analogread = analogRead (PA1);
6. Далі значення напруги від змінної аналоговоїчитання обчислюється за формулою з наступним твердженням.
float opvolt = (3,3 / 4096,0) * аналоговийчитати;
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 ("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 ();
Тестування ЦАП за допомогою STM32
Коли ми змінюємо вхідне значення АЦП і напругу, обертаючи потенціометр, вихідне значення ЦАП і напруга також змінюються. Тут вхідні значення відображаються в першому рядку, а вихідні - у другому рядку РК-дисплея. Мультиметр також підключений до вихідного виводу MCP4725 для перевірки аналогової напруги.
Повний код із демонстраційним відео наведено нижче.