- 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.