- Požadované komponenty
- Modul DAC MCP4725 (digitální na analogový převodník)
- Komunikace I2C v MCP4725
- Schéma zapojení a vysvětlení
- Programování STM32F103C8 pro digitální na analogový převod
- Testování DAC s STM32
Všichni víme, že mikrokontroléry fungují pouze s digitálními hodnotami, ale ve skutečném světě se musíme vypořádat s analogovými signály. Proto je zde ADC (analogově-digitální převaděče), které převádějí analogové hodnoty reálného světa do digitální podoby, aby mikrokontroléry mohly zpracovávat signály. Ale co když potřebujeme analogové signály z digitálních hodnot, tak přichází DAC (Digital to Analog Converter).
Jednoduchým příkladem převaděče digitálních na analogové je nahrávání skladby ve studiu, kde umělec zpěvák používá mikrofon a zpívá píseň. Tyto analogové zvukové vlny jsou převedeny do digitální podoby a poté uloženy do souboru digitálního formátu a při přehrávání skladby pomocí uloženého digitálního souboru jsou tyto digitální hodnoty převedeny na analogové signály pro výstup reproduktoru. V tomto systému se tedy používá DAC.
DAC lze použít v mnoha aplikacích, jako je ovládání motoru, ovládání jasu LED světel, audio zesilovač, video kodéry, systémy pro sběr dat atd.
Již jsme propojili modul DCP MCP4725 s Arduinem. Dnes budeme používat stejný MCP4725 DAC IC k návrhu převodníku digitálního na analogový pomocí mikrokontroléru STM32F103C8.
Požadované komponenty
- STM32F103C8
- MCP4725 DAC IC
- 10k potenciometr
- 16x2 LCD displej
- Nepájivá deska
- Připojení vodičů
Modul DAC MCP4725 (digitální na analogový převodník)
MCP4725 IC je 12bitový digitální převodník na analogový převodník, který se používá ke generování výstupních analogových napětí od (0 do 5 V) a je řízen pomocí komunikace I2C. Dodává se také s integrovanou energeticky nezávislou pamětí EEPROM.
Tento IC má 12bitové rozlišení. To znamená, že používáme (0 až 4096) jako vstup k poskytování napěťového výstupu s ohledem na referenční napětí. Maximální referenční napětí je 5V.
Vzorec pro výpočet výstupního napětí
O / P napětí = (referenční napětí / rozlišení) x digitální hodnota
Jako příklad použijeme 5 V jako referenční napětí a předpokládejme, že digitální hodnota je 2048. Takže pro výpočet výstupu DAC.
O / P napětí = (5/4096) x 2048 = 2,5V
Pinout MCP4725Níže je obrázek MCP4725 s jasně označujícími názvy pinů.
Kolíky MCP4725 |
Použití |
VEN |
Výstup analogového napětí |
GND |
GND pro výstup |
SCL |
Sériová hodinová linka I2C |
SDA |
Sériová datová linka I2C |
VCC |
Vstupní referenční napětí 5V nebo 3,3V |
GND |
GND pro vstup |
Komunikace I2C v MCP4725
Tento DAC IC lze propojit s jakýmkoli mikrokontrolérem pomocí komunikace I2C. Komunikace I2C vyžaduje pouze dva vodiče SCL a SDA. Ve výchozím nastavení je adresa I2C pro MCP4725 0x60. Postupujte podle odkazu a dozvíte se více o komunikaci I2C v STM32F103C8.
I2C piny v STM32F103C8:
SDA: PB7 nebo PB9, PB11.
SCL: PB6 nebo PB8, PB10.
Schéma zapojení a vysvětlení
Propojení mezi STM32F103C8 a 16x2 LCD
Číslo PIN LCD |
Název PINu LCD |
Název PIN STM32 |
1 |
Ground (GND) |
Zem (G) |
2 |
VCC |
5V |
3 |
VEE |
Kolík od středu potenciometru pro kontrast |
4 |
Výběr rejstříku (RS) |
PB11 |
5 |
Čtení / zápis (RW) |
Zem (G) |
6 |
Povolit (EN) |
PB10 |
7 |
Datový bit 0 (DB0) |
Žádné připojení (NC) |
8 |
Datový bit 1 (DB1) |
Žádné připojení (NC) |
9 |
Datový bit 2 (DB2) |
Žádné připojení (NC) |
10 |
Datový bit 3 (DB3) |
Žádné připojení (NC) |
11 |
Datový bit 4 (DB4) |
PB0 |
12 |
Datový bit 5 (DB5) |
PB1 |
13 |
Datový bit 6 (DB6) |
PC13 |
14 |
Datový bit 7 (DB7) |
PC14 |
15 |
Pozitivní LED |
5V |
16 |
LED negativní |
Zem (G) |
Spojení mezi MCP4725 DAC IC a STM32F103C8
MCP4725 |
STM32F103C8 |
Multimetr |
SDA |
PB7 |
NC |
SCL |
PB6 |
NC |
VEN |
PA1 |
Pozitivní sonda |
GND |
GND |
Negativní sonda |
VCC |
3,3 V |
NC |
Je také připojen potenciometr se středovým kolíkem připojeným k analogovému vstupu PA1 (ADC) STM32F10C8, levým kolíkem připojeným k GND a pravým kolíkem připojeným k 3,3 V STM32F103C8.
V tomto tutoriálu připojíme DCP IC MCP4725 k STM32 a pomocí 10k potenciometru poskytneme analogovou vstupní hodnotu na STM32 ADC pin PA0. A pak použijte ADC k převodu analogové hodnoty do digitální podoby. Poté odešlete tyto digitální hodnoty na sběrnici I2C na MCP4725. Pak převeďte tyto digitální hodnoty na analogové pomocí DAC MCP4725 IC a poté použijte další ADC pin PA1 STM32 ke kontrole analogového výstupu MCP4725 z pin OUT. Nakonec zobrazte hodnoty ADC i DAC s napětím na 16x2 LCD displeji.
Programování STM32F103C8 pro digitální na analogový převod
K nahrání kódu do STM32F103C8 nyní není nutný programátor FTDI. Jednoduše jej připojte k PC přes USB port STM32 a začněte programovat pomocí ARDUINO IDE. Na tomto odkazu se dozvíte více o programování vašeho STM32 v Arduino IDE. Na konci je uveden kompletní program pro tento tutoriál STM32 DAC.
Nejprve zahrňte knihovnu pro I2C a LCD pomocí knihovny wire.h, SoftWire.h a liquidcrystal.h. Další informace o I2C v mikrokontroléru STM32 najdete zde.
#zahrnout
Dále definujte a inicializujte LCD piny podle LCD pinů připojených k STM32F103C8
const int rs = PB11, en = PB10, d4 = PB0, d5 = PB1, d6 = PC13, d7 = PC14; LiquidCrystal lcd (rs, en, d4, d5, d6, d7);
Poté definujte I2C adresu MCP4725 DAC IC. Výchozí adresa I2C DAC MCP4725 je 0x60
#define MCP4725 0x60
V nastavení neplatnosti ()
Nejprve zahajte komunikaci I2C na pinech PB7 (SDA) a PB6 (SCL) na STM32F103C8.
Wire.begin (); // Zahájí komunikaci I2C
Dále nastavte LCD displej do režimu 16x2 a zobrazte uvítací zprávu.
lcd.begin (16,2); lcd.print ("OKRUH DIGEST"); zpoždění (1000); lcd.clear (); lcd.setCursor (0,0); lcd.print ("STM32F103C8"); lcd.setCursor (0,1); lcd.print („DAC s MCP4725“); zpoždění (2000); lcd.clear ();
V neplatné smyčce ()
1. Nejprve do vyrovnávací paměti vložte hodnotu kontrolního bajtu (0b01000000).
(010-Sady MCP4725 v režimu zápisu) buffer = 0b01000000;
2. Následující příkaz přečte analogovou hodnotu z pinu PA0 a převede ji na digitální hodnotu v rozsahu od 0 do 4096, protože ADC má 12bitové rozlišení a uloží ji do proměnné adc .
adc = analogRead (PA0);
3. Toto následující prohlášení je vzorec používaný k výpočtu napětí ze vstupní hodnoty ADC (0 až 4096) s referenčním napětím 3,3 V.
float ipvolt = (3,3 / 4096,0) * adc;
4. Umístěte nejvýznamnější bitové hodnoty do vyrovnávací paměti posunutím 4 bitů doprava v proměnné ADC a nejméně významné bitové hodnoty do vyrovnávací paměti posunutím 4 bitů doleva v proměnné adc .
buffer = adc >> 4; buffer = adc << 4;
5. Následující příkaz načte analogovou hodnotu z ADC pinu PA1 STM32, který je výstupem DAC (MCP4725 DAC IC OUTPUT pin). Tento pin lze také připojit k multimetru ke kontrole výstupního napětí.
unsigned int analogread = analogRead (PA1);
6. Dále se vypočítá hodnota napětí z proměnné analogového vzorce pomocí vzorce s následujícím výrokem.
float opvolt = (3.3 / 4096.0) * analogread;
7. Ve stejné smyčce void () existuje několik dalších příkazů, které jsou vysvětleny níže
Začíná přenos s MCP4725:
Wire.beginTransmission (MCP4725);
Odešle řídicí bajt do I2C
Wire.write (buffer);
Odešle MSB do I2C
Wire.write (buffer);
Odešle LSB do I2C
Wire.write (buffer);
Ukončí přenos
Wire.endTransmission ();
Nyní zobrazte tyto výsledky na displeji LCD 16x2 pomocí 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 (analogový); lcd.setCursor (10,1); lcd.print ("V:"); lcd.print (opvolt); zpoždění (500); lcd.clear ();
Testování DAC s STM32
Když změníme vstupní hodnotu a napětí ADC otáčením potenciometru, změní se také výstupní hodnota a napětí DAC. Zde jsou vstupní hodnoty zobrazeny v prvním řádku a výstupní hodnoty ve druhém řádku LCD displeje. K výstupnímu kolíku MCP4725 je také připojen multimetr k ověření analogového napětí.
Kompletní kód s ukázkovým videem je uveden níže.