- Az ADC összehasonlítása az Arduino és az STM32F103C8 között
- ADC az STM32-ben
- Hogyan lehet az analóg jelet digitális formátumra konvertálni
- ADC csapok az STM32F103C8T6-ban
- Szükséges alkatrészek
- Áramkör és magyarázatok
- STM32 programozása ADC értékek leolvasására
Szinte minden beágyazott alkalmazásban használt egyik közös jellemző az ADC modul (Analog to Digital Converter). Ezek az analóg-digitális átalakítók leolvashatják az analóg érzékelők feszültségét, például hőmérséklet-érzékelő, dőlésérzékelő, áramérzékelő, Flex-érzékelő és még sok más. Tehát ebben az oktatóanyagban megtanuljuk, hogyan kell az ADC-t használni az STM32F103C8-ban az analóg feszültségek leolvasására az Energia IDE segítségével. Mi felület egy kis potenciométert STM32 Blue Pill ellátás és a kínálat változó feszültség egy analóg pin, olvassa el a feszültséget, és megjeleníti azt a 16x2 LCD-képernyőn.
Az ADC összehasonlítása az Arduino és az STM32F103C8 között
Az Arduino kártyán 6 csatornás (8 csatorna a Mini-n és a Nano-on, 16 a Mega-on), 10-bites ADC-t tartalmaz 0–5 V bemeneti feszültségtartományban. Ez azt jelenti, hogy a 0 és 5 volt közötti bemeneti feszültségeket 0 és 1023 közötti egész értékekre fogja feltérképezni. Most az STM32F103C8 esetében 10 csatornánk van, 12 bites ADC, 0–3,3 V bemeneti tartományban. A 0 és 3,3 volt közötti bemeneti feszültségeket 0 és 4095 közötti egész értékekre fogja feltérképezni.
ADC az STM32-ben
Az STM32 mikrovezérlőkbe ágyazott ADC a SAR (szekvenciális közelítő regiszter) elvet használja, amelynek segítségével az átalakítást több lépésben hajtják végre. A konverziós lépések száma megegyezik az ADC konverterben lévő bitek számával. Minden lépést az ADC óra vezérel. Minden ADC óra egy bitet eredményez eredménytől kimenetig. Az ADC belső kialakítása a kapcsolt kondenzátoros technikán alapul. Ha még nem ismeri az STM32 alkalmazást, akkor nézze meg az Első lépések az STM32 bemutatónkat.
12 bites felbontás
Ez az ADC egy 10 csatornás, 12 bites ADC. Itt a 10 csatorna kifejezés azt jelenti, hogy van 10 ADC csap, amelyek segítségével megmérhetjük az analóg feszültséget. A 12 bites kifejezés az ADC felbontását jelenti. A 12-bites a 2-t jelenti tíz (2 12) hatványig, ami 4096. Ez az ADC-hez tartozó mintalépések száma, így az ADC-értékeink tartománya 0 és 4095 között lesz. Az érték 0-ról 40-re növekszik. 4095 a lépésenkénti feszültség értéke alapján, amely képlettel kiszámítható
FESZÜLTSÉG / LÉPÉS = REFERENCIAFESZÜLTSÉG / 4096 = (3,3 / 4096 = 8,056 mV) egységenként.
Hogyan lehet az analóg jelet digitális formátumra konvertálni
Mivel a számítógépek csak bináris / digitális értékeket tárolnak és dolgoznak fel (1 és 0 értékek). Tehát az analóg jeleket, mint például az érzékelő kimenetét voltban, digitális értékekké kell átalakítani a feldolgozáshoz, és az átalakításnak pontosnak kell lennie. Amikor az analóg bemeneten az STM32-nek bemeneti analóg feszültséget kap, az analóg érték egy egész változóban olvasható és tárolható. A tárolt analóg értéket (0–3,3 V) az alábbi képlet segítségével egész számokká (0–4096) konvertáljuk:
BEMENETI FESZÜLTSÉG = (ADC-érték / ADC-felbontás) * Referenciafeszültség
Felbontás = 4096
Referencia = 3,3 V
ADC csapok az STM32F103C8T6-ban
Az STM32-ben 10 analóg csap van, PA0-tól PB1-ig.
Ellenőrizze azt is, hogyan kell használni az ADC-t más mikrovezérlőkben:
- Hogyan kell használni az ADC-t az Arduino Uno-ban?
- Az ADC0808 összekapcsolása a 8051 mikrokontrollerrel
- A PIC mikrokontroller ADC moduljának használata
- Raspberry Pi ADC bemutató
- Az ADC használata az MSP430G2-ben - Analóg feszültség mérése
Szükséges alkatrészek
- STM32F103C8
- LCD 16 * 2
- Potenciométer 100k
- Kenyérlemez
- Csatlakozó vezetékek
Áramkör és magyarázatok
A 16 * 2 LCD és az STM32F103C8T6 kártya analóg bemenetének interfészét az alábbiakban mutatjuk be.
Az LCD-hez kapcsolódó csatlakozások az alábbiak:
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 |
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) |
A csatlakozásokat a fenti táblázat szerint végezzük. Az áramkörben két potenciométer található, az elsőt feszültségosztóra használják, amely a feszültség változtatására és az STM32 analóg bemenetének biztosítására használható. Ennek a potenciométernek a bal csapszeme pozitív bemeneti feszültséget kap az STM32-től (3,3 V), a jobb tüske pedig a földhöz csatlakozik, a potenciométer középső csapja pedig az STM32 analóg bemenetéhez (PA7) van csatlakoztatva. A másik potenciométer az LCD kijelző kontrasztjának változtatására szolgál. Az STM32 áramforrását a számítógép vagy a laptop USB tápellátása biztosítja.
STM32 programozása ADC értékek leolvasására
Korábbi oktatóanyagunkban megismertük az STM32F103C8T6 kártya USB port használatával történő programozását. Tehát most nincs szükségünk 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. Nagyon egyszerű az STM32 programozása az ARDUINO IDE-ben az analóg feszültség leolvasására. Ugyanaz, mint az arduino tábla. Nincs szükség az STM32 jumper csapjainak cseréjére.
Ebben a programban leolvassa az analóg értéket és kiszámítja a feszültséget ezzel az értékkel, majd mind az analóg, mind a digitális értékeket megjeleníti az LCD képernyőn.
Először határozza meg az LCD csapokat. Ezek meghatározzák, hogy az LCD csapok melyik STM32 tűhöz vannak csatlakoztatva. Módosíthatja az Ön igényei szerint.
const int rs = PB11, en = PB10, d4 = PB0, d5 = PB1, d6 = PC13, d7 = PC14; // megemlíti a PIN-neveket, amelyekhez az LCD csatlakozik
Ezután felvesszük az LCD kijelző fejlécfájlját. Ez meghívja azt a könyvtárat, amely tartalmazza az STM32 és az LCD közötti kommunikáció kódját. Győződjön meg arról is, hogy a Liquid Crystal függvény meghívásra kerül-e az előbb definiált csapok nevével.
#include
A setup () függvényen belül csak egy intro üzenetet adnánk, amely megjelenik az LCD képernyőn. Megismerheti az LCD és az STM32 közötti interfészt.
lcdbegin (16, 2); // 16 * 2 LCD lcd-t használunk. Clear (); // Törölje a képernyőt lcd.setCursor (0, 0); // Az első sor első oszlopában lcd.prin t ("CIRCUITDIGEST"); // Nyomtassa ki ezt az lcd.setCursor (0, 1); // A második sor első oszlopában n lcd.print ("STM32F103C8"); // nyomtatása thi s késleltetés (2000); // várjon két másodpercet lcd.clear (); // Törölje a képernyőt lcd.setCursor (0, 0); // Az első sor első oszlopában lcd.print ("ADC IN USING IN"); // Nyomtassa ki ezt az lcd.setCursor (0,1); // A második sor első oszlopában lcd.print ("STM32F103C8"); // Nyomtassa ki ezt a késleltetést (2000); // várjon két másodpercet lcd.clear (); // Törölje a képernyőt
Végül a végtelen hurok () függvényünkben elkezdjük leolvasni a potenciométerről a PA7 tűhöz táplált analóg feszültséget. Amint arról már volt szó, a mikrovezérlő digitális eszköz, és nem tudja közvetlenül leolvasni a feszültségszintet. SAR-technika alkalmazásával a feszültségszint 0 és 4096 között van feltérképezve. Ezeket az értékeket ADC-értékeknek nevezzük, ennek az ADC-értéknek az eléréséhez egyszerűen használja a következő sort
int val = analógRead (A7); // leolvassa az ADC értéket a PA 7 tűről
Itt az analogRead () függvény használható a csap analóg értékének leolvasására. Végül ezt az értéket elmentjük a „ val ” nevű változóba. A változó típusa egész szám, mert csak 0 és 4096 közötti értékeket tárolunk ebben a változóban.
A következő lépés a feszültségérték kiszámítása az ADC értékből. Ehhez a következő képleteket használjuk
Feszültség = (ADC-érték / ADC-felbontás) * Referenciafeszültség e
Esetünkben már tudjuk, hogy a mikrovezérlőnk ADC felbontása 4096. Az ADC értéke megtalálható az előző sorban is, és tárolta a val nevű változót. A referenciafeszültség megegyezik azzal a feszültséggel, amelyen a mikrovezérlő működik. Amikor a STM32 tábla Melyik USB kábelen keresztül, akkor az üzemi feszültség 3.3V. Az üzemi feszültséget úgy is megmérheti, hogy multimétert használ a Vcc és a föld földelőcsapján keresztül. Tehát a fenti képlet illeszkedik esetünkbe az alábbiak szerint
úszófeszültség = (úszó (val) / 4096) * 3,3; // képletek átalakítani az ADC érték feszültségű e
Összetévesztheti az úszóval (val). Ez a „val” változó int adattípustól „lebegő” adattípussá alakítására szolgál. Erre az átalakításra azért van szükség, mert csak akkor tudjuk megsokszorozni a 3.3-at, ha a val / 4096 eredményét úszóban megkapjuk. Ha az értéket egész számban kapjuk meg, az mindig 0 lesz, és az eredmény is nulla lesz. Miután kiszámoltuk az ADC értéket és a feszültséget, nem marad más hátra, mint az eredmény megjelenítése az LCD képernyőn, amelyet a következő sorok segítségével tehetünk meg
lcd.setCursor (0, 0); // állítsa a kurzort a 0. oszlop 0. sorára, lcd.print ("ADC Val:"); lcd.print (val); // ADC-érték megjelenítése: lcd.setCursor (0, 1); // állítsa a kurzort a 0. oszlop 1. sorához lcd.print ("Feszültség:"); lcd.print (feszültség); // Kijelző feszültsége
A teljes kód és a bemutató videó az alábbiakban található.