- Súčasti sú povinné
- Modul DCP MCP4725 (digitálny na analógový prevodník)
- Komunikácia I2C v MCP4725
- Schéma zapojenia a vysvetlenie
- Programovanie STM32F103C8 pre digitálnu na analógovú konverziu
- Testovanie DAC s STM32
Všetci vieme, že mikrokontroléry pracujú iba s digitálnymi hodnotami, ale v skutočnom svete sa musíme vyrovnať s analógovými signálmi. Preto je tu ADC (analógovo-digitálne prevodníky) na prevod skutočných analógových hodnôt do digitálnej podoby, aby mikroprocesory mohli spracovávať signály. Ale čo keď potrebujeme analógové signály z digitálnych hodnôt, tak prichádza na rad DAC (digitálny na analógový prevodník).
Jednoduchým príkladom prevodníka digitálnych na analógové je nahrávanie skladieb v štúdiu, kde umelec spevák používa mikrofón a spieva pieseň. Tieto analógové zvukové vlny sa prevedú do digitálnej formy a potom sa uložia do súboru v digitálnom formáte. Keď sa skladba prehrá pomocou uloženého digitálneho súboru, tieto digitálne hodnoty sa prevedú na analógové signály pre výstup reproduktorov. Takže v tomto systéme sa používa DAC.
DAC je možné použiť v mnohých aplikáciách, ako je riadenie motorov, regulácia jasu LED svetiel, zvukový zosilňovač, video kodéry, systémy na zber dát atď.
Už sme prepojili DCP modul MCP4725 s Arduinom. Dnes budeme používať ten istý MCP4725 DAC IC na navrhnutie digitálno-analógového prevodníka pomocou mikrokontroléra STM32F103C8.
Súčasti sú povinné
- STM32F103C8
- MCP4725 DAC IC
- 10k potenciometer
- 16x2 LCD displej
- Nepál
- Pripojenie drôtov
Modul DCP MCP4725 (digitálny na analógový prevodník)
MCP4725 IC je 12-bitový digitálno-analógový prevodníkový modul, ktorý sa používa na generovanie výstupných analógových napätí od (0 do 5 V) a je riadený pomocou komunikácie I2C. Dodáva sa tiež s integrovanou permanentnou pamäťou EEPROM.
Tento IC má 12-bitové rozlíšenie. To znamená, že ako vstup používame (0 až 4096) na zabezpečenie výstupného napätia vzhľadom na referenčné napätie. Maximálne referenčné napätie je 5V.
Vzorec na výpočet výstupného napätia
O / P napätie = (referenčné napätie / rozlíšenie) x digitálna hodnota
Napríklad, ak ako referenčné napätie použijeme 5V a predpokladajme, že digitálna hodnota je 2048. Takže pre výpočet DAC výstupu.
O / P napätie = (5/4096) x 2048 = 2,5V
Pinout MCP4725Nižšie je obrázok MCP4725 so zreteľne označujúcimi názvami pinov.
Kolíky MCP4725 |
Použite |
VON |
Výstupné analógové napätie |
GND |
GND pre výstup |
SCL |
Linka sériových hodín I2C |
SDA |
Sériová dátová linka I2C |
VCC |
Vstupné referenčné napätie 5 V alebo 3,3 V. |
GND |
GND pre vstup |
Komunikácia I2C v MCP4725
Tento DAC IC môže byť prepojený s akýmkoľvek mikrokontrolérom pomocou komunikácie I2C. Komunikácia I2C vyžaduje iba dva vodiče SCL a SDA. V predvolenom nastavení je adresa I2C pre MCP4725 0x60. Kliknite na odkaz a dozviete sa viac o komunikácii I2C v STM32F103C8.
I2C piny v STM32F103C8:
SDA: PB7 alebo PB9, PB11.
SCL: PB6 alebo PB8, PB10.
Schéma zapojenia a vysvetlenie
Prepojenia medzi STM32F103C8 a 16x2 LCD
Pin LCD č |
Názov kolíka LCD |
Názov kolíka STM32 |
1 |
Zem (GND) |
Zem (G) |
2 |
VCC |
5V |
3 |
VEE |
Kolík od stredu potenciometra pre kontrast |
4 |
Register Select (RS) |
PB11 |
5 |
Čítanie / Zápis (RW) |
Zem (G) |
6 |
Povoliť (EN) |
PB10 |
7 |
Dátový bit 0 (DB0) |
Žiadne pripojenie (NC) |
8 |
Dátový bit 1 (DB1) |
Žiadne pripojenie (NC) |
9 |
Dátový bit 2 (DB2) |
Žiadne pripojenie (NC) |
10 |
Dátový bit 3 (DB3) |
Žiadne pripojenie (NC) |
11 |
Dátový bit 4 (DB4) |
PB0 |
12 |
Dátový bit 5 (DB5) |
PB1 |
13 |
Dátový bit 6 (DB6) |
PC13 |
14 |
Dátový bit 7 (DB7) |
PC14 |
15 |
Pozitívne LED |
5V |
16 |
LED negatívne |
Zem (G) |
Prepojenie medzi MCP4725 DAC IC a STM32F103C8
MCP4725 |
STM32F103C8 |
Multimetr |
SDA |
PB7 |
NC |
SCL |
PB6 |
NC |
VON |
PA1 |
Pozitívna sonda |
GND |
GND |
Negatívna sonda |
VCC |
3,3 V |
NC |
Je tiež pripojený potenciometer, stredový kolík je pripojený k analógovému vstupu PA1 (ADC) STM32F10C8, ľavý kolík je pripojený k GND a pravý kolík je pripojený k 3,3 V STM32F103C8.
V tomto tutoriáli pripojíme DCP IC MCP4725 k STM32 a pomocou 10k potenciometra poskytneme analógovú vstupnú hodnotu na STM32 ADC pin PA0. A potom pomocou ADC prevádzajte analógovú hodnotu na digitálnu formu. Potom pošlite tieto digitálne hodnoty na MCP4725 cez zbernicu I2C. Potom tieto digitálne hodnoty preveďte na analógové pomocou DAC MCP4725 IC a potom použite iný ADC pin PA1 STM32 na kontrolu analógového výstupu MCP4725 z pinu OUT. Na záver zobrazte hodnoty ADC aj DAC s napätím na 16x2 LCD displeji.
Programovanie STM32F103C8 pre digitálnu na analógovú konverziu
Na nahranie kódu do STM32F103C8 teraz nie je potrebný programátor FTDI. Jednoducho ho pripojte k PC cez USB port STM32 a začnite programovať pomocou ARDUINO IDE. Navštívte tento odkaz a dozviete sa viac o programovaní vášho STM32 v Arduino IDE. Na konci je uvedený kompletný program pre tento tutoriál STM32 DAC.
Najskôr zahrňte knižnicu pre I2C a LCD pomocou knižnice wire.h, SoftWire.h a liquidcrystal.h. Viac informácií o I2C v mikrokontroléri STM32 sa dozviete tu.
#include
Ďalej definujte a inicializujte LCD piny podľa LCD pinov pripojený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);
Potom definujte adresu I2C DCP IC MCP4725. Predvolená adresa I2C DCP MCP4725 je 0x60
#define MCP4725 0x60
V nastavení neplatnosti ()
Najskôr začnite komunikáciu I2C na pinoch PB7 (SDA) a PB6 (SCL) na STM32F103C8.
Wire.begin (); // Začína komunikácia I2C
Ďalej nastavte LCD displej do režimu 16x2 a zobrazte uvítaciu správu.
lcd.začiatok (16,2); lcd.print ("OKRUH DIGEST"); oneskorenie (1 000); lcd.clear (); lcd.setCursor (0,0); lcd.print ("STM32F103C8"); lcd.setCursor (0,1); lcd.print („DAC s MCP4725“); meškanie (2000); lcd.clear ();
V prázdnej slučke ()
1. Najskôr do vyrovnávacej pamäte vložte hodnotu riadiaceho bajtu (0b01000000).
(010 - nastavuje MCP4725 v režime zápisu) vyrovnávacia pamäť = 0b01000000;
2. Nasledujúci príkaz načíta analógovú hodnotu z kolíka PA0 a prevedie ju na digitálnu hodnotu v rozmedzí od 0 do 4096, pretože ADC má 12-bitové rozlíšenie a uloží ju do premennej adc .
adc = analogRead (PA0);
3. Toto nasledujúce tvrdenie je vzorec, ktorý sa používa na výpočet napätia zo vstupnej hodnoty ADC (0 až 4096) s referenčným napätím 3,3 V.
float ipvolt = (3,3 / 4096,0) * adc;
4. Najvýznamnejšie bitové hodnoty dajte do medzipamäte posunutím 4 bitov doprava v premennej ADC a najmenej významné bitové hodnoty do medzipamäte posunutím 4 bitov doľava v premennej adc .
buffer = adc >> 4; buffer = adc << 4;
5. Nasledujúci príkaz načíta analógovú hodnotu z kolíka ADC PA1 modulu STM32, ktorý je výstupom DAC (pin OUTPUT MCP4725 DAC IC). Tento pin môže byť tiež pripojený k multimetru na kontrolu výstupného napätia.
unsigned int analogread = analogRead (PA1);
6. Ďalej sa vypočíta hodnota napätia z premennej analogread pomocou vzorca s nasledujúcim výrokom.
float opvolt = (3.3 / 4096.0) * analogread;
7. V tej istej void loop () je niekoľko ďalších príkazov, ktoré sú vysvetlené nižšie
Začína prenos s MCP4725:
Wire.beginTransmission (MCP4725);
Odošle riadiaci bajt do I2C
Wire.write (vyrovnávacia pamäť);
Odošle MSB do I2C
Wire.write (vyrovnávacia pamäť);
Odošle LSB do I2C
Wire.write (vyrovnávacia pamäť);
Ukončí prenos
Wire.endTransmission ();
Teraz zobrazte tieto výsledky na displeji LCD 16 x 2 pomocou 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); oneskorenie (500); lcd.clear ();
Testovanie DAC s STM32
Keď zmeníme vstupnú hodnotu a napätie ADC otáčaním potenciometra, zmení sa aj výstupná hodnota a napätie DAC. Tu sú vstupné hodnoty zobrazené v prvom rade a výstupné hodnoty v druhom rade LCD displeja. K výstupnému kolíku MCP4725 je tiež pripojený multimetr na overenie analógového napätia.
Kompletný kód s ukážkovým videom je uvedený nižšie.