- Potrebne komponente
- Modul DAC MCP4725 (digitalno-analogni pretvornik)
- Komunikacija I2C v MCP4725
- Shema vezja in razlaga
- Programiranje STM32F103C8 za digitalno v analogno pretvorbo
- Testiranje DAC-a s STM32
Vsi vemo, da mikrokrmilniki delujejo samo z digitalnimi vrednostmi, v resničnem svetu pa se moramo spoprijeti z analognimi signali. Zato je ADC (analogni v digitalni pretvornik) namenjen pretvorbi analognih vrednosti iz resničnega sveta v digitalno obliko, da lahko mikrokrmilniki obdelajo signale. Kaj pa, če potrebujemo analogne signale iz digitalnih vrednosti, zato prihaja DAC (digitalno-analogni pretvornik).
Preprost primer za pretvornik Digital to Analog je snemanje pesmi v studiu, kjer umetniški pevec uporablja mikrofon in poje pesem. Ti analogni zvočni valovi se pretvorijo v digitalno obliko in nato shranijo v datoteko digitalnega formata. Ko se skladba predvaja z uporabo shranjene digitalne datoteke, se te digitalne vrednosti pretvorijo v analogne signale za izhod zvočnikov. V tem sistemu se torej uporablja DAC.
DAC se lahko uporablja v številnih aplikacijah, kot so krmiljenje motorja, nadzor svetlosti LED-luči, ojačevalnik zvoka, video dajalniki, sistemi za pridobivanje podatkov itd.
Modul DAC MCP4725 smo že povezali z Arduino. Danes bomo z isto IC-enoto MCP4725 DAC oblikovali digitalno-analogni pretvornik z mikrokrmilnikom STM32F103C8.
Potrebne komponente
- STM32F103C8
- MCP4725 DAC IC
- 10k potenciometer
- LCD zaslon 16x2
- Breadboard
- Povezovanje žic
Modul DAC MCP4725 (digitalno-analogni pretvornik)
MCP4725 IC je 12-bitni digitalno-analogni pretvorniški modul, ki se uporablja za generiranje izhodnih analognih napetosti od (0 do 5V) in ga krmili s pomočjo komunikacije I2C. Na voljo je tudi z neprekinjenim pomnilnikom EEPROM.
Ta IC ima 12-bitno ločljivost. To pomeni, da uporabljamo (0 do 4096) kot vhod za zagotavljanje izhodne napetosti glede na referenčno napetost. Največja referenčna napetost je 5V.
Formula za izračun izhodne napetosti
O / P napetost = (referenčna napetost / ločljivost) x digitalna vrednost
Na primer, če za referenčno napetost uporabimo 5V in predpostavimo, da je digitalna vrednost 2048. Torej za izračun izhoda DAC.
Napetost O / P = (5/4096) x 2048 = 2,5V
Izrez MCP4725Spodaj je slika MCP4725 z jasno navedenimi imeni zatičev.
Zatiči MCP4725 |
Uporaba |
OUT |
Izhodi analogne napetosti |
GND |
GND za izhod |
SCL |
Linija serijske ure I2C |
SDA |
Vrstica serijskih podatkov I2C |
VCC |
Vhodna referenčna napetost 5V ali 3,3V |
GND |
GND za vnos |
Komunikacija I2C v MCP4725
Ta IC DAC je lahko povezan s katerim koli mikrokrmilnikom s pomočjo komunikacije I2C. Za komunikacijo I2C potrebujete le dve žici SCL in SDA. Privzeto je naslov I2C za MCP4725 0x60. Sledite povezavi, če želite izvedeti več o komunikaciji I2C v STM32F103C8.
I2C zatiči v STM32F103C8:
SDA: PB7 ali PB9, PB11.
SCL: PB6 ali PB8, PB10.
Shema vezja in razlaga
Povezave med STM32F103C8 in 16x2 LCD
Številka LCD |
Ime pin LCD |
Ime pin STM32 |
1. |
Tla (Gnd) |
Tla (G) |
2. |
VCC |
5V |
3. |
VEE |
Pin za sredino potenciometra za kontrast |
4. |
Izbira registra (RS) |
PB11 |
5. |
Branje / pisanje (RW) |
Tla (G) |
6. |
Omogoči (EN) |
PB10 |
7. |
Podatkovni bit 0 (DB0) |
Brez povezave (NC) |
8. |
Podatkovni bit 1 (DB1) |
Brez povezave (NC) |
9. |
Podatkovni bit 2 (DB2) |
Brez povezave (NC) |
10. |
Podatkovni bit 3 (DB3) |
Brez povezave (NC) |
11. |
Podatkovni bit 4 (DB4) |
PB0 |
12. |
Podatkovni bit 5 (DB5) |
PB1 |
13. |
Podatkovni bit 6 (DB6) |
PC13 |
14. |
Podatkovni bit 7 (DB7) |
PC14 |
15. |
LED pozitivna |
5V |
16. |
LED negativno |
Tla (G) |
Povezava med MCP4725 DAC IC in STM32F103C8
MCP4725 |
STM32F103C8 |
Multimeter |
SDA |
PB7 |
NC |
SCL |
PB6 |
NC |
OUT |
PA1 |
Pozitivna sonda |
GND |
GND |
Negativna sonda |
VCC |
3.3V |
NC |
Priključen je tudi potenciometer, s sredinskim zatičem, priključenim na analogni vhod PA1 (ADC) STM32F10C8, levi zatič povezan z GND in najbolj desni zatič, povezan z 3,3 V STM32F103C8.
V tej vadnici bomo povezali IC MCP4725 DAC s STM32 in uporabili 10k potenciometer za zagotavljanje analogne vhodne vrednosti na STM32 ADC pin PA0. Nato z ADC pretvorite analogno vrednost v digitalno obliko. Po tem pošljite te digitalne vrednosti prek vodila I2C na MCP4725. Nato te digitalne vrednosti pretvorite v analogne z uporabo DAC MCP4725 IC in nato z drugim ADC zatičem PA1 STM32 preverite analogni izhod MCP4725 iz pin OUT. Na koncu na zaslonu LCD 16x2 prikažite vrednosti ADC in DAC z napetostmi.
Programiranje STM32F103C8 za digitalno v analogno pretvorbo
Za nalaganje kode na STM32F103C8 zdaj ni potreben programer FTDI. Preprosto ga povežite z računalnikom prek vrat USB STM32 in začnite programirati z ARDUINO IDE. Obiščite to povezavo, če želite izvedeti več o programiranju vašega STM32 v Arduino IDE. Na koncu je podan celoten program za to vadnico DAC STM32.
Najprej vključite knjižnico za I2C in LCD z uporabo knjižnic wire.h, SoftWire.h in liquidcrystal.h. Več o I2C v mikrokrmilniku STM32 lahko preberete tukaj.
#include
Nato določite in inicializirajte zatiče LCD v skladu z zatiči LCD, povezanimi s STM32F103C8
const int rs = PB11, en = PB10, d4 = PB0, d5 = PB1, d6 = PC13, d7 = PC14; LCD LiquidCrystal (rs, en, d4, d5, d6, d7);
Nato določite naslov I2C IC DAC MCP4725. Privzeti naslov I2C DAC MCP4725 je 0x60
#define MCP4725 0x60
V nastavitvi void ()
Najprej začnite komunikacijo I2C na nožicah PB7 (SDA) in PB6 (SCL) STM32F103C8.
Wire.begin (); // Začne komunikacijo I2C
Nato nastavite LCD zaslon v način 16x2 in prikažite pozdravno sporočilo.
lcd.begin (16,2); lcd.print ("DIGEST CIRCUIT"); zamuda (1000); lcd.clear (); lcd.setCursor (0,0); lcd.print ("STM32F103C8"); lcd.setCursor (0,1); lcd.print ("DAC z MCP4725"); zamuda (2000); lcd.clear ();
V void zanki ()
1. Najprej v medpomnilnik postavite vrednost kontrolnega bajta (0b01000000).
(010-Nastavi MCP4725 v načinu zapisovanja) buffer = 0b01000000;
2. Naslednji stavek prebere analogno vrednost s pina PA0 in jo pretvori v digitalno vrednost od 0 do 4096, saj ima ADC 12-bitno ločljivost in jo shrani v spremenljivko adc .
adc = analogRead (PA0);
3. Ta naslednja izjava je formula, ki se uporablja za izračun napetosti od vhodne vrednosti ADC (0 do 4096) z referenčno napetostjo 3,3 V.
float ipvolt = (3,3 / 4096,0) * adc;
4. Najpomembnejše bitne vrednosti vstavite v vmesni pomnilnik tako, da v spremenljivki ADC premaknete 4 bite v desno, najmanjše pomembne bitne vrednosti pa v vmesni pomnilnik tako, da v spremenljivki ADC premaknete 4 bite v levo.
medpomnilnik = adc >> 4; medpomnilnik = adc << 4;
5. Naslednja izjava bere analogno vrednost iz ADC-zatiča PA1 STM32, ki je izhod DAC (IZHODNI zatič MCP4725 DAC IC). Ta zatič lahko priključite tudi na multimeter, da preverite izhodno napetost.
unsigned int analogread = analogRead (PA1);
6. Nadalje se vrednost napetosti iz spremenljive analogne odčitke izračuna po formuli z naslednjo izjavo.
float opvolt = (3,3 / 4096,0) * analogno branje;
7. V isti void zanki () je nekaj drugih izjav, ki so razložene v nadaljevanju
Začne se prenos z MCP4725:
Wire.beginTransmission (MCP4725);
Pošlje kontrolni bajt v I2C
Wire.write (medpomnilnik);
Pošlje MSB v I2C
Wire.write (medpomnilnik);
Pošlje LSB v I2C
Wire.write (medpomnilnik);
Konča prenos
Wire.endTransmission ();
Zdaj prikažite te rezultate na LCD 16x2 zaslonu s pomočjo lcd.print ()
lcd.setCursor (0,0); lcd.print ("IP:"); lcd.print (adc); lcd.setCursor (10,0); lcd.print ("V:"); lcd.print (ipvolt); lcd.setCursor (0,1); lcd.print ("D OP:"); lcd.print (analogno branje); lcd.setCursor (10,1); lcd.print ("V:"); lcd.print (opvolt); zamuda (500); lcd.clear ();
Testiranje DAC-a s STM32
Ko z vrtenjem potenciometra spreminjamo vhodno vrednost ADC in napetost, se spremenita tudi izhodna vrednost DAC in napetost. Tu so vhodne vrednosti prikazane v prvi vrstici, izhodne pa v drugi vrstici LCD zaslona. Na izhodni pin MCP4725 je priključen tudi multimeter za preverjanje analogne napetosti.
Celotna koda z demonstracijskim videom je navedena spodaj.