- Būtini komponentai
- MCP4725 DAC modulis (skaitmeninis į analoginį keitiklį)
- „I2C“ ryšys MCP4725
- Grandinės schema ir paaiškinimas
- STM32F103C8 programavimas skaitmeninei analoginei konversijai
- DAC testavimas naudojant STM32
Visi žinome, kad mikrovaldikliai veikia tik su skaitmeninėmis vertybėmis, tačiau realiame pasaulyje turime susidurti su analoginiais signalais. Štai kodėl ADC (analoginiai į skaitmeninius keitiklius) yra skirti konvertuoti realaus pasaulio analogines vertes į skaitmeninę formą, kad mikrovaldikliai galėtų apdoroti signalus. Bet ką daryti, jei mums reikia analoginių signalų iš skaitmeninių verčių, taigi čia yra DAC (Digital to Analog Converter).
Paprastas „ Digital to Analog“ keitiklio pavyzdys yra dainos įrašymas studijoje, kur atlikėjas dainininkas naudoja mikrofoną ir dainuoja dainą. Šios analoginės garso bangos yra konvertuojamos į skaitmeninę formą ir tada saugomos skaitmeninio formato faile, o kai daina grojama naudojant saugomą skaitmeninį failą, šios skaitmeninės vertės yra konvertuojamos į analoginius signalus garsiakalbio išvesties klausimais. Taigi šioje sistemoje naudojamas DAC.
DAC gali būti naudojamas daugelyje programų, tokių kaip variklio valdymas, LED žibintų valdymo ryškumas, garso stiprintuvas, vaizdo koduotojai, duomenų gavimo sistemos ir kt.
Mes jau sujungėme MCP4725 DAC modulį su „Arduino“. Šiandien naudosime tą patį „MCP4725 DAC IC“ kurdami skaitmeninį į analoginį keitiklį naudodami mikrovaldiklį STM32F103C8.
Būtini komponentai
- STM32F103C8
- MCP4725 DAC IC
- 10k potenciometras
- 16x2 LCD ekranas
- Bandomoji Lenta
- Laidų sujungimas
MCP4725 DAC modulis (skaitmeninis į analoginį keitiklį)
„MCP4725 IC“ yra 12 bitų skaitmeninio - analoginio keitiklio modulis, naudojamas išvesties analoginėms įtampoms generuoti nuo (0 iki 5 V) ir valdomas naudojant I2C ryšį. Jis taip pat pateikiamas su nepastovia atmintimi EEPROM.
Šis IC turi 12 bitų skiriamąją gebą. Tai reiškia, kad mes naudojame (nuo 0 iki 4096) kaip įvestį, kad gautume įtampos išėjimą, palyginti su etalonine įtampa. Didžiausia atskaitos įtampa yra 5 V.
Formulė išėjimo įtampai apskaičiuoti
O / P įtampa = (etaloninė įtampa / skiriamoji geba) x skaitmeninė vertė
Pavyzdžiui, jei mes naudojame 5 V kaip atskaitos įtampą ir tarkime, kad skaitmeninė vertė yra 2048. Taigi, norint apskaičiuoti DAC išvestį.
O / P įtampa = (5/4096) x 2048 = 2,5 V
MCP4725 kištukasŽemiau yra MCP4725 vaizdas su aiškiai nurodomais smeigtukų pavadinimais.
MCP4725 kaiščiai |
Naudokite |
OUT |
Išvestis Analoginė įtampa |
BND |
BND išėjimui |
SCL |
„I2C“ serijinio laikrodžio linija |
SDA |
„I2C Serial Data“ linija |
VCC |
Įėjimo etaloninė įtampa 5 V arba 3,3 V |
BND |
BND įvestis |
„I2C“ ryšys MCP4725
Šį DAC IC galima susieti su bet kuriuo mikrovaldikliu naudojant I2C ryšį. „I2C“ ryšiui reikia tik dviejų laidų SCL ir SDA. Pagal numatytuosius nustatymus MCP4725 I2C adresas yra 0x60. Norėdami sužinoti daugiau apie I2C ryšį STM32F103C8, spustelėkite nuorodą.
„I2C“ kaiščiai STM32F103C8:
SDA: PB7 arba PB9, PB11.
SCL: PB6 arba PB8, PB10.
Grandinės schema ir paaiškinimas
Jungtys tarp STM32F103C8 ir 16x2 LCD
LCD kaiščio Nr |
LCD smeigtuko pavadinimas |
STM32 kaiščio pavadinimas |
1 |
Žemė (Gnd) |
Žemė (G) |
2 |
VCC |
5V |
3 |
VEE |
Kontrastas - kaištis iš potenciometro centro |
4 |
„Register Select“ (RS) |
PB11 |
5 |
Skaityti / rašyti (RW) |
Žemė (G) |
6 |
Įgalinti (EN) |
PB10 |
7 |
0 duomenų bitas (DB0) |
Nėra ryšio (NC) |
8 |
1 duomenų bitas (DB1) |
Nėra ryšio (NC) |
9 |
2 duomenų bitas (DB2) |
Nėra ryšio (NC) |
10 |
3 duomenų bitas (DB3) |
Nėra ryšio (NC) |
11 |
4 duomenų bitas (DB4) |
PB0 |
12 |
5 duomenų bitas (DB5) |
PB1 |
13 |
6 duomenų bitas (DB6) |
PC13 |
14 |
7 duomenų bitas (DB7) |
PC14 |
15 |
LED teigiamas |
5V |
16 |
LED neigiamas |
Žemė (G) |
Ryšys tarp MCP4725 DAC IC ir STM32F103C8
MCP4725 |
STM32F103C8 |
Multimetras |
SDA |
PB7 |
NC |
SCL |
PB6 |
NC |
OUT |
PA1 |
Teigiamas zondas |
BND |
BND |
Neigiamas zondas |
VCC |
3.3V |
NC |
Taip pat prijungtas potenciometras, kurio centrinis kaištis prijungtas prie ST132 analoginio įėjimo (ADC) iš STM32F10C8.
Šioje pamokoje mes sujungsime MCP4725 DAC IC su STM32 ir naudosime 10k potenciometrą, kad pateiktumėte analoginę įvesties vertę STM32 ADC kaiščiui PA0. Tada naudokite ADC, kad konvertuotumėte analoginę vertę į skaitmeninę formą. Po to per I2C magistralę nusiųskite tas skaitmenines reikšmes į MCP4725. Tada konvertuokite tas skaitmenines reikšmes į analogines naudodami DAC MCP4725 IC, tada naudokite kitą STM32 ADC kaištį PA1, kad patikrintumėte MCP4725 analoginę išvestį iš kaiščio OUT. Galiausiai 16x2 LCD ekrane parodykite abi ADC ir DAC reikšmes su įtampa.
STM32F103C8 programavimas skaitmeninei analoginei konversijai
FTDI programuotojo dabar nereikia įkelti kodą į STM32F103C8. Tiesiog prijunkite jį prie kompiuterio per STM32 USB prievadą ir pradėkite programuoti naudodami „ ARDUINO IDE“. Norėdami sužinoti daugiau apie STM32 programavimą „Arduino IDE“, apsilankykite šioje nuorodoje. Pabaigoje pateikiama visa šios STM32 DAC mokymo programos programa.
Pirmiausia įtraukite „I2C“ ir „LCD“ biblioteką naudodami „ wire.h“, „ SoftWire.h“ ir „ liquidcrystal.h“ biblioteką. Sužinokite daugiau apie „I2C“ naudojant „STM32“ mikrovaldiklį čia.
# įtraukti
Tada nustatykite ir inicializuokite LCD kaiščius pagal LCD kaiščius, sujungtus su STM32F103C8
const int rs = PB11, en = PB10, d4 = PB0, d5 = PB1, d6 = PC13, d7 = PC14; „LiquidCrystal LCD“ (rs, en, d4, d5, d6, d7);
Tada nustatykite MCP4725 DAC IC I2C adresą. Numatytasis MCP4725 DAC I2C adresas yra 0x60
#define MCP4725 0x60
Tuščioje sąrankoje ()
Pirmiausia pradėkite I2C ryšį ties STM32F103C8 kaiščiais PB7 (SDA) ir PB6 (SCL).
Viela.prasideda (); // Pradeda I2C ryšį
Tada nustatykite LCD ekraną 16x2 režimu ir rodykite sveikinimo pranešimą.
lcd.prade (16,2); lcd.print („CIRCUIT DIGEST“); vėlavimas (1000); lcd.clear (); lcd.setCursor (0,0); lcd.print ("STM32F103C8"); lcd.setCursor (0,1); lcd.print ("DAC su MCP4725"); vėlavimas (2000); lcd.clear ();
Tuščiajame cikle ()
1. Pirmiausia į buferį įdėkite valdymo baito vertę (0b01000000).
(010-nustato MCP4725 rašymo režimu) buferis = 0b01000000;
2. Šis teiginys nuskaito analoginę vertę iš kaiščio PA0 ir paverčia ją skaitmenine verte nuo 0 iki 4096, nes ADC yra 12 bitų skiriamoji geba ir saugoma kintamajame adc .
adc = analogRead (PA0);
3. Šis teiginys yra formulė, naudojama apskaičiuojant įtampą iš ADC įėjimo vertės (nuo 0 iki 4096), kai etaloninė įtampa yra 3,3 V.
float ipvolt = (3.3 / 4096.0) * adc;
4. Įdėkite svarbiausias bitų reikšmes į buferį, perkeldami 4 bitus į dešinę ADC kintamajame, o mažiausiai reikšmingi bitų dydžiai - buferyje, perkeldami 4 bitus į kairę ADC kintamajame.
buferis = adc >> 4; buferis = adc << 4;
5. Šis teiginys nuskaito analoginę vertę iš STM32 ADC kaiščio PA1, kuris yra DAC išvestis (MCP4725 DAC IC išvesties kaištis). Šis kaištis taip pat gali būti prijungtas prie multimetro, norint patikrinti išėjimo įtampą.
nepasirašytas int analogread = analogRead (PA1);
6. Toliau įtampos vertė iš kintamo analoginio skaičiuojama pagal formulę su šiuo teiginiu.
plūduriuojantis opvoltas = (3,3 / 4096,0) * analoginis skaitymas;
7. Toje pačioje tuštumo kilpoje () yra keletas kitų teiginių, kurie paaiškinti toliau
Pradedama perduoti naudojant MCP4725:
„Wire.beginTransmission“ (MCP4725);
Siunčia valdymo baitą į I2C
Wire.write (buferis);
Siunčia MSB į I2C
Wire.write (buferis);
Siunčia LSB į I2C
Wire.write (buferis);
Baigia perdavimą
„Wire.endTransmission“ ();
Dabar rodykite tuos rezultatus LCD 16x2 ekrane naudodami 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 (analoginis skaitymas); lcd.setCursor (10,1); lcd.print ("V:"); lcd.print (opvolt); vėlavimas (500); lcd.clear ();
DAC testavimas naudojant STM32
Kai keičiame įvesties ADC vertę ir įtampą sukdami potenciometrą, keičiasi ir išėjimo DAC vertė bei įtampa. Čia įvesties reikšmės rodomos pirmoje eilutėje, o išvesties vertės - antroje LCD ekrano eilutėje. Taip pat prie MCP4725 išvesties kaiščio prijungtas multimetras, kad būtų galima patikrinti analoginę įtampą.
Visas kodas su demonstraciniu vaizdo įrašu pateikiamas žemiau.