- Szükséges alkatrészek
- MCP4725 DAC modul (digitális-analóg átalakító)
- I2C kommunikáció az MCP4725-ben
- Áramkör diagram és magyarázat
- Az STM32F103C8 programozása digitális analóg átalakításhoz
- A DAC tesztelése STM32-vel
Mindannyian tudjuk, hogy a mikrovezérlők csak digitális értékekkel működnek, de a való világban analóg jelekkel kell foglalkoznunk. Ezért van az ADC (analóg-digitális átalakító), amely a valós analóg értékeket digitális formába konvertálja, hogy a mikrovezérlők feldolgozni tudják a jeleket. De mi van akkor, ha analóg jelekre van szükségünk digitális értékekből, tehát itt jön a DAC (Digital to Analog Converter).
Egyszerű példa a Digital to Analog átalakítóra egy dal rögzítése a stúdióban, ahol egy művészénekes mikrofont használ és egy dalt énekel. Ezeket az analóg hanghullámokat digitális formává alakítják, majd egy digitális formátumú fájlban tárolják, és amikor a dalt a tárolt digitális fájl segítségével játsszák le, ezeket a digitális értékeket analóg jelekké alakítják át a hangszóró kimenetéhez. Tehát ebben a rendszerben a DAC-t használják.
A DAC számos alkalmazásban használható, például motorvezérlésben, a LED-es lámpák fényerejének vezérlésében, hangerősítőben, videokódolókban, adatgyűjtő rendszerekben stb.
Már összekötöttük az MCP4725 DAC modult az Arduinóval. Ma ugyanazt az MCP4725 DAC IC-t fogjuk használni egy digitális-analóg átalakító tervezéséhez az STM32F103C8 mikrovezérlő segítségével.
Szükséges alkatrészek
- STM32F103C8
- MCP4725 DAC IC
- 10k potenciométer
- 16x2 LCD kijelző
- Kenyérlemez
- Vezetékek csatlakoztatása
MCP4725 DAC modul (digitális-analóg átalakító)
Az MCP4725 IC egy 12 bites digitális-analóg átalakító modul, amelyet kimeneti analóg feszültségek előállítására használnak (0 és 5 V között), és az I2C kommunikáció segítségével vezérelhető. A fedélzeti EEPROM memóriával is rendelkezik.
Ennek az IC-nek 12 bites felbontása van. Ez azt jelenti, hogy bemenetként (0 és 4096 között) használjuk a feszültség kimenetének biztosítását a referenciafeszültséghez képest. A maximális referenciafeszültség 5V.
Kimenet a kimeneti feszültség kiszámításához
O / P feszültség = (referenciafeszültség / felbontás) x digitális érték
Például, ha 5 V-ot használunk referenciafeszültségként, és tegyük fel, hogy a digitális érték 2048. Tehát a DAC kimenet kiszámításához.
O / P feszültség = (5/4096) x 2048 = 2,5 V
Az MCP4725 pinoutjaAz alábbiakban látható az MCP4725 képe, egyértelműen feltüntetve a pin neveket.

| Az MCP4725 csapjai | Használat | 
| KI | Kimenet analóg feszültség | 
| GND | GND a kimenethez | 
| SCL | I2C soros óra vonal | 
| SDA | I2C soros adatok sor | 
| VCC | Bemeneti referenciafeszültség: 5 V vagy 3,3 V | 
| GND | GND a bemenethez | 
I2C kommunikáció az MCP4725-ben
Ez a DAC IC bármely I2C kommunikációt használó mikrovezérlővel összekapcsolható. Az I2C kommunikációhoz csak két vezetékes SCL és SDA szükséges. Alapértelmezés szerint az MCP4725 I2C címe 0x60. Kövesse a linket, ha többet szeretne megtudni az I2C kommunikációról az STM32F103C8-ban.
I2C csapok az STM32F103C8-ban:
SDA: PB7 vagy PB9, PB11.
SCL: PB6 vagy PB8, PB10.

Áramkör diagram és magyarázat

Csatlakozások az STM32F103C8 és a 16x2 LCD között
| LCD tű sz | LCD tű neve | STM32 tű neve | 
| 1 | Föld (Gnd) | Föld (G) | 
| 2 | VCC | 5V | 
| 3 | VEE | Tű a potenciométer közepétől a kontraszt érdekében | 
| 4 | Register Select (RS) | PB11 | 
| 5. | Olvasás / írás (RW) | Föld (G) | 
| 6. | Engedélyezés (EN) | PB10 | 
| 7 | 0. adatbit (DB0) | Nincs kapcsolat (NC) | 
| 8. | 1. adatbit (DB1) | Nincs kapcsolat (NC) | 
| 9. | 2. adatbit (DB2) | Nincs kapcsolat (NC) | 
| 10. | 3. adatbit (DB3) | Nincs kapcsolat (NC) | 
| 11. | 4. adatbit (DB4) | PB0 | 
| 12. | 5. adatbit (DB5) | PB1 | 
| 13. | 6. adatbit (DB6) | PC13 | 
| 14 | 7. adatbit (DB7) | PC14 | 
| 15 | LED pozitív | 5V | 
| 16. | LED negatív | Föld (G) | 
Csatlakozás az MCP4725 DAC IC és az STM32F103C8 között
| MCP4725 | STM32F103C8 | Multiméter | 
| SDA | PB7 | NC | 
| SCL | PB6 | NC | 
| KI | PA1 | Pozitív szonda | 
| GND | GND | Negatív szonda | 
| VCC | 3.3V | NC | 
Csatlakoztatva van egy potenciométer is, amelynek középső csapja az STM32F10C8 PA1 analóg bemenetéhez (ADC) van csatlakoztatva, a bal csap a GND-hez és a jobb oldali tüske az STM32F103C8 3,3 V-hoz van csatlakoztatva.
Ebben az oktatóanyagban egy MCP4725 DAC IC-t csatlakoztatunk az STM32-hez, és 10k potenciométerrel analóg bemeneti értéket adunk az STM32 ADC PA0 tűhöz. Ezután az ADC segítségével konvertálja az analóg értéket digitális formába. Ezt követően küldje el ezeket a digitális értékeket az I2C buszon keresztül az MCP4725-re. Ezután konvertálja ezeket a digitális értékeket analógra a DAC MCP4725 IC segítségével, majd az STM32 másik PA1 ADC tűjével ellenőrizze az OP tű OUT csatlakozójának MCP4725 analóg kimenetét. Végül jelenítse meg mindkét ADC és DAC értéket feszültséggel a 16x2 LCD kijelzőn.

Az STM32F103C8 programozása digitális analóg átalakításhoz
A kód feltöltéséhez az STM32F103C8-ra most nincs szükség FTDI programozóra. Egyszerűen csatlakoztassa a számítógéphez az STM32 USB portján keresztül, és kezdje el a programozást az ARDUINO IDE segítségével. Látogassa meg ezt a linket, ha többet szeretne megtudni az STM32 programozásáról az Arduino IDE-ben. Ennek a STM32 DAC oktatóanyagnak a teljes programja a végén található.
Először közé könyvtár I2C és LCD segítségével wire.h, SoftWire.h és liquidcrystal.h könyvtárban. Tudjon meg többet az I2C-ről az STM32 mikrokontrollerben itt.
#include
Ezután határozza meg és inicializálja az LCD érintkezőket az STM32F103C8 készülékhez csatlakoztatott LCD csapok szerint
const int rs = PB11, en = PB10, d4 = PB0, d5 = PB1, d6 = PC13, d7 = PC14; LiquidCrystal lcd (rs, en, d4, d5, d6, d7);
Ezután adja meg az MCP4725 DAC IC I2C címét. Az MCP4725 DAC alapértelmezett I2C címe 0x60
#define MCP4725 0x60
A void beállításban ()
Először kezdje meg az I2C kommunikációt az STM32F103C8 PB7 (SDA) és PB6 (SCL) csatlakozóinál.
Wire.begin (); // Megkezdi az I2C kommunikációt
Ezután állítsa az LCD-kijelzőt 16x2-es módba, és üdvözlő üzenetet jelenítsen meg.
lcdbegin (16,2); lcd.print ("CIRCUIT DIGEST"); késés (1000); lcd.clear (); lcd.setCursor (0,0); lcd.print ("STM32F103C8"); lcd.setCursor (0,1); lcd.print ("DAC és MCP4725"); késés (2000); lcd.clear ();
A void ciklusban ()
1. Először a pufferben tegye a kontroll bájt értékét (0b01000000).
(010-Az MCP4725 beállítása írási módban) puffer = 0b01000000;
2. A következő utasítás kiolvassa az analóg értéket a PA0 tűről, és átalakítja 0 és 4096 közötti digitális értékre, mivel az ADC 12 bites felbontású és tárolja az adc változóban.
adc = analogRead (PA0);
3. Ez az alábbi állítás egy képlet, amelyet a feszültség kiszámításához használunk az ADC bemeneti értékéből (0 és 4096 között) 3,3 V referenciafeszültséggel.
float ipvolt = (3.3 / 4096.0) * adc;
4. Helyezze a legjelentősebb bitértékeket a pufferbe úgy, hogy 4 bitet jobbra tol, az ADC változóban, a legkevesebbet pedig a pufferben, ha 4 bitet balra tol az adc változóban.
puffer = adc >> 4; puffer = adc << 4;
5. A következő utasítás analóg értéket olvas le az STM32 PA1 ADC tűjéről, amely a DAC kimenet (MCP4725 DAC IC OUTPUT tűje). Ez a tű a multiméterhez is csatlakoztatható a kimeneti feszültség ellenőrzéséhez.
előjel nélküli int analreadread = analogRead (PA1);
6. Ezenkívül a változó analóg leolvasott feszültség értékét a következő utasítás képletével számoljuk ki.
float opvolt = (3.3 / 4096.0) * analóg olvasás;
7. Ugyanebben a void ciklusban () kevés más állítás található, amelyeket az alábbiakban ismertetünk
Az adást az MCP4725-vel kezdi:
Wire.beginTransmission (MCP4725);
A vezérlő bájtot elküldi az I2C-nek
Wire.write (puffer);
Az MSB-t elküldi az I2C-nek
Wire.write (puffer);
Küldi az LSB-t az I2C-nek
Wire.write (puffer);
Befejezi az adást
Wire.endTransmission ();
Jelenítse meg ezeket az eredményeket az LCD 16x2-es kijelzőn az lcd.print () használatával
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 (analóg olvasás); lcd.setCursor (10,1); lcd.print ("V:"); lcd.print (opvolt); késés (500); lcd.clear ();
A DAC tesztelése STM32-vel
Amikor a potenciométer forgatásával változtatjuk a bemenő ADC értéket és feszültséget, a kimeneti DAC értéke és feszültsége is megváltozik. Itt a bemeneti értékek az LCD kijelző első sorában, a kimeneti értékek pedig az LCD kijelző második sorában jelennek meg. Az MCP4725 kimeneti csatlakozóhoz multiméter is csatlakozik az analóg feszültség ellenőrzéséhez.

Az alábbiakban bemutatjuk a teljes kódot a bemutató videóval.

