- Komponente potrebne
- MCP4725 DAC modul (digitalno-analogni pretvarač)
- I2C komunikacija u MCP4725
- Kružni dijagram i objašnjenje
- Programiranje STM32F103C8 za digitalnu u analognu pretvorbu
- Testiranje DAC-a pomoću STM32
Svi znamo da mikrokontroleri rade samo s digitalnim vrijednostima, ali u stvarnom svijetu moramo se nositi s analognim signalima. Zbog toga postoji ADC (analogni u digitalni pretvarač) koji pretvara analogne vrijednosti iz stvarnog svijeta u digitalni oblik kako bi mikrokontroleri mogli obrađivati signale. Ali što ako su nam potrebni analogni signali iz digitalnih vrijednosti, ovdje dolazi DAC (digitalno-analogni pretvarač).
Jednostavan primjer pretvarača digitalnog u analogni je snimanje pjesme u studiju u kojem umjetnički pjevač koristi mikrofon i pjeva pjesmu. Ovi analogni zvučni valovi pretvaraju se u digitalni oblik, a zatim pohranjuju u datoteku digitalnog formata, a kada se pjesma reproducira pomoću pohranjene digitalne datoteke, te se digitalne vrijednosti pretvaraju u analogne signale za izlaz zvučnika. Dakle, u ovom se sustavu koristi DAC.
DAC se može koristiti u mnogim aplikacijama kao što su upravljanje motorom, upravljanje svjetlinom LED svjetla, audio pojačalo, video enkoderi, sustavi za prikupljanje podataka itd.
Već smo povezali MCP4725 DAC modul s Arduinom. Danas ćemo koristiti isti MCP4725 DAC IC za dizajn digitalno-analognog pretvarača pomoću mikrokontrolera STM32F103C8.
Komponente potrebne
- STM32F103C8
- MCP4725 DAC IC
- 10k potenciometar
- LCD zaslon od 16x2
- Breadboard
- Spajanje žica
MCP4725 DAC modul (digitalno-analogni pretvarač)
MCP4725 IC je 12-bitni modul digitalno-analognog pretvarača koji se koristi za generiranje izlaznih analognih napona od (0 do 5V) i njime se upravlja pomoću I2C komunikacije. Također dolazi s ugrađenom trajnom memorijom EEPROM.
Ovaj IC ima 12-bitnu razlučivost. To znači da koristimo (0 do 4096) kao ulaz kako bismo osigurali izlazni napon s obzirom na referentni napon. Maksimalni referentni napon je 5V.
Formula za izračunavanje izlaznog napona
O / P napon = (referentni napon / razlučivost) x digitalna vrijednost
Na primjer, ako koristimo 5V kao referentni napon i pretpostavimo da je digitalna vrijednost 2048. Dakle, za izračun DAC izlaza.
O / P napon = (5/4096) x 2048 = 2,5V
Isječak MCP4725Ispod je slika MCP4725 s jasno naznačenim imenima pinova.

|
Pribadače MCP4725 |
Koristiti |
|
VANJ |
Izlazi analogni napon |
|
GND |
GND za izlaz |
|
SCL |
Linija I2C serijskog sata |
|
SDA |
Linija serijskih podataka I2C |
|
VCC |
Ulazni referentni napon 5V ili 3,3V |
|
GND |
GND za ulaz |
I2C komunikacija u MCP4725
Ovaj DAC IC može se povezati s bilo kojim mikrokontrolerom pomoću I2C komunikacije. I2C komunikacija zahtijeva samo dvije žice SCL i SDA. Prema zadanim postavkama, I2C adresa za MCP4725 je 0x60. Slijedite vezu da biste saznali više o I2C komunikaciji u STM32F103C8.
I2C igle u STM32F103C8:
SDA: PB7 ili PB9, PB11.
SCL: PB6 ili PB8, PB10.

Kružni dijagram i objašnjenje

Veze između STM32F103C8 i 16x2 LCD-a
|
LCD pin br |
Naziv LCD ekrana |
Naziv pin-a STM32 |
|
1 |
Prizemlje (Gnd) |
Uzemljenje (G) |
|
2 |
VCC |
5V |
|
3 |
VEE |
Pribadača iz središta potenciometra za kontrast |
|
4 |
Odaberite registar (RS) |
PB11 |
|
5 |
Čitanje / pisanje (RW) |
Uzemljenje (G) |
|
6 |
Omogući (EN) |
PB10 |
|
7 |
Bit podataka 0 (DB0) |
Nema veze (NC) |
|
8 |
Bit podataka 1 (DB1) |
Nema veze (NC) |
|
9 |
Bit podataka 2 (DB2) |
Nema veze (NC) |
|
10 |
Bit podataka 3 (DB3) |
Nema veze (NC) |
|
11 |
Bit podataka 4 (DB4) |
PB0 |
|
12 |
Bit podataka 5 (DB5) |
PB1 |
|
13 |
Bit podataka 6 (DB6) |
PC13 |
|
14 |
Bit podataka 7 (DB7) |
PC14 |
|
15 |
LED pozitivan |
5V |
|
16 |
LED negativan |
Uzemljenje (G) |
Veza između MCP4725 DAC IC i STM32F103C8
|
MCP4725 |
STM32F103C8 |
Multimetar |
|
SDA |
PB7 |
NC |
|
SCL |
PB6 |
NC |
|
VANJ |
PA1 |
Pozitivna sonda |
|
GND |
GND |
Negativna sonda |
|
VCC |
3,3 V |
NC |
Potenciometar je također povezan, sa središnjim pinom spojenim na analogni ulaz PA1 (ADC) STM32F10C8, lijevim pinom spojenim na GND i najdesnijim pinom spojenim na 3,3 V STM32F103C8.
U ovom uputstvu spojit ćemo MCP4725 DAC IC sa STM32 i upotrijebiti 10k potenciometar za pružanje analogne ulazne vrijednosti STM32 ADC pinu PA0. A zatim upotrijebite ADC za pretvorbu analogne vrijednosti u digitalni oblik. Nakon toga pošaljite te digitalne vrijednosti na MCP4725 putem I2C sabirnice. Zatim pretvorite te digitalne vrijednosti u analogne pomoću DAC MCP4725 IC, a zatim upotrijebite drugi ADC pin PIN1 STM32 za provjeru analognog izlaza MCP4725 iz pin OUT-a. Na kraju prikažite obje vrijednosti ADC i DAC s naponima na LCD zaslonu 16x2.

Programiranje STM32F103C8 za digitalnu u analognu pretvorbu
Za prijenos koda na STM32F103C8 sada nije potreban FTDI programer. Jednostavno ga spojite na računalo putem USB priključka STM32 i započnite programirati s ARDUINO IDE. Posjetite ovu vezu da biste saznali više o programiranju vašeg STM32 u Arduino IDE. Kompletan program za ovaj STM32 DAC tutorial dat je na kraju.
Prvo uključite knjižnicu za I2C i LCD pomoću knjižnice wire.h, SoftWire.h i liquidcrystal.h. Ovdje saznajte više o I2C u mikrokontroleru STM32.
#include
Zatim definirajte i inicijalizirajte LCD iglice prema LCD iglicama povezanim sa STM32F103C8
const int rs = PB11, en = PB10, d4 = PB0, d5 = PB1, d6 = PC13, d7 = PC14; LCD LiquidCrystal (rs, en, d4, d5, d6, d7);
Zatim definirajte I2C adresu MCP4725 DAC IC. Zadana I2C adresa MCP4725 DAC-a je 0x60
#define MCP4725 0x60
U postavljanju praznine ()
Prvo započnite I2C komunikaciju na pinovima PB7 (SDA) i PB6 (SCL) STM32F103C8.
Wire.begin (); // Počinje I2C komunikacija
Zatim postavite LCD zaslon u način rada 16x2 i prikažite poruku dobrodošlice.
lcd.početak (16,2); lcd.print ("DIGEST CIRCUIT"); kašnjenje (1000); lcd.clear (); lcd.setCursor (0,0); lcd.print ("STM32F103C8"); lcd.setCursor (0,1); lcd.print ("DAC s MCP4725"); kašnjenje (2000); lcd.clear ();
U petlji void ()
1. Prvo u međuspremnik stavite vrijednost kontrolnog bajta (0b01000000).
(010-Postavlja MCP4725 u načinu pisanja) buffer = 0b01000000;
2. Sljedeća izjava čita analognu vrijednost s pina PA0 i pretvara je u digitalnu vrijednost u rasponu od 0 do 4096 jer je ADC 12-bitne razlučivosti i pohranjuje se u varijablu adc .
adc = analogRead (PA0);
3. Sljedeća izjava formula je koja se koristi za izračunavanje napona od ulazne vrijednosti ADC-a (0 do 4096) s referentnim naponom od 3,3 V.
plutajući ipvolt = (3,3 / 4096,0) * adc;
4. Stavite najznačajnije vrijednosti bitova u međuspremnik pomicanjem 4 bita udesno u varijabli ADC, a najmanje značajne vrijednosti bita u međuspremnik pomicanjem 4 bita ulijevo u varijabli adc .
međuspremnik = adc >> 4; međuspremnik = adc << 4;
5. Sljedeća izjava čita analognu vrijednost s ADC pina PA1 STM32 koji je DAC izlaz (MCP4725 DAC IC's OUTPUT pin). Ovaj se pin također može spojiti na multimetar kako bi se provjerio izlazni napon.
nepotpisano int analogread = analogRead (PA1);
6. Nadalje se vrijednost napona iz varijabilne analognečitavanja izračunava pomoću formule sa sljedećom izjavom.
plutajući opvolt = (3,3 / 4096,0) * analognipročitano;
7. U istoj petlji void () postoji nekoliko drugih izjava koje su objašnjene u nastavku
Počinje prijenos s MCP4725:
Wire.beginTransmission (MCP4725);
Šalje kontrolni bajt na I2C
Wire.write (međuspremnik);
Šalje MSB na I2C
Wire.write (međuspremnik);
Šalje LSB na I2C
Wire.write (međuspremnik);
Završava prijenos
Wire.endTransmission ();
Sada prikažite te rezultate na LCD zaslonu 16x2 pomoću 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čitati); lcd.setCursor (10,1); lcd.print ("V:"); lcd.tisak (opvolt); kašnjenje (500); lcd.clear ();
Testiranje DAC-a pomoću STM32
Kada rotiranjem potenciometra mijenjamo ulaznu vrijednost ADC-a i napon, mijenjaju se i izlazna vrijednost DAC-a i napon. Ovdje su ulazne vrijednosti prikazane u prvom redu, a izlazne vrijednosti u drugom redu LCD zaslona. Multimetar je također povezan na izlazni pin MCP4725 za provjeru analognog napona.

Kompletni kod s demonstracijskim videom dat je u nastavku.
