- Porovnanie ADC v Arduine a STM32F103C8
- ADC v STM32
- Ako sa prevádza analógový signál do digitálneho formátu
- Piny ADC v STM32F103C8T6
- Súčasti sú povinné
- Schéma zapojenia a vysvetlenie
- Programovanie STM32 na čítanie hodnôt ADC
Spoločnou vlastnosťou, ktorá sa používa takmer v každej zabudovanej aplikácii, je modul ADC (analógovo-digitálny prevodník). Tieto analógovo-digitálne prevodníky dokážu čítať napätie z analógových snímačov, ako sú teplotný snímač, snímač náklonu, prúdový snímač, snímač Flex a oveľa viac. Takže v tomto tutoriále sa naučíme, ako používať ADC v STM32F103C8 na čítanie analógových napätí pomocou Energia IDE. Budeme rozhranie malý potenciometer pre STM32 Modrá pilulka palube a dodať meniace sa napätie na analógový pin prečítať napätie a zobraziť ju na 16x2 LCD displeji.
Porovnanie ADC v Arduine a STM32F103C8
Na doske Arduino obsahuje 6 kanálov (8 kanálov pre Mini a Nano, 16 pre Mega), 10-bitový ADC s rozsahom vstupného napätia 0V - 5V. To znamená, že bude mapovať vstupné napätie medzi 0 a 5 voltami na celočíselné hodnoty medzi 0 a 1023. Teraz v prípade STM32F103C8 máme 10 kanálov, 12-bitový ADC so vstupným rozsahom 0V - 3,3V. Bude mapovať vstupné napätie od 0 do 3,3 voltov na celočíselné hodnoty od 0 do 4095.
ADC v STM32
ADC zabudovaný do mikrokontrolérov STM32 využíva princíp SAR (postupný aproximačný register), pomocou ktorého sa konverzia uskutočňuje v niekoľkých krokoch. Počet konverzných krokov sa rovná počtu bitov v ADC prevádzači. Každý krok je riadený hodinami ADC. Každé hodiny ADC produkujú jeden bit od výsledku k výstupu. Interný dizajn ADC je založený na technike spínaných kondenzátorov. Ak ste v STM32 nováčikom, pozrite si náš výukový program Začíname s STM32.
12-bitové rozlíšenie
Tento ADC je 10-kanálový 12-bitový ADC. Tu pojem 10 kanál znamená, že existuje 10 pinov ADC, pomocou ktorých môžeme merať analógové napätie. Pojem 12-bit znamená implicitné rozlíšenie ADC. 12-bit znamená 2 k sile desiatich (2 12), čo je 4096. Toto je počet vzorových krokov pre náš ADC, takže rozsah našich hodnôt ADC bude od 0 do 4095. Hodnota sa zvýši z 0 na 4095 na základe hodnoty napätia na krok, ktorú je možné vypočítať podľa vzorca
NAPÄTIE / KROK = REFERENČNÉ NAPÄTIE / 4096 = (3,3 / 4096 = 8,056 mV) na jednotku.
Ako sa prevádza analógový signál do digitálneho formátu
Pretože počítače ukladajú a spracúvajú iba binárne / digitálne hodnoty (1 a 0). Takže analógové signály, ako je výstup snímača vo voltoch, musia byť na spracovanie prevedené na digitálne hodnoty a prevod musí byť presný. Ak je na analógové vstupy STM32 privádzané vstupné analógové napätie, je analógová hodnota načítaná a uložená v celočíselnej premennej.. Uložená analógová hodnota (0-3,3 V) sa prevedie na celé čísla (0-4096) pomocou nasledujúceho vzorca:
VSTUPNÉ NAPÄTIE = (hodnota ADC / rozlíšenie ADC) * referenčné napätie
Rozlíšenie = 4096
Referencia = 3,3 V
Piny ADC v STM32F103C8T6
V STM32 je 10 analógových pinov od PA0 po PB1.
Skontrolujte tiež, ako používať ADC v iných mikrokontroléroch:
- Ako používať ADC v Arduino Uno?
- Prepojenie ADC0808 s mikrokontrolérom 8051
- Pomocou modulu ADC mikrokontroléra PIC
- Výukový program ADC pre Raspberry Pi
- Ako používať ADC v MSP430G2 - Meranie analógového napätia
Súčasti sú povinné
- STM32F103C8
- LCD 16 * 2
- Potenciometer 100k
- Nepál
- Pripojovacie vodiče
Schéma zapojenia a vysvetlenie
Schéma zapojenia pre rozhranie 16 * 2 LCD a analógového vstupu na dosku STM32F103C8T6 je uvedená nižšie.
Pripojenia, ktoré sa vykonávajú pre LCD, sú uvedené nižšie:
Pin LCD č |
Názov kolíka LCD |
Názov kolíka STM32 |
1 |
Zem (GND) |
Zem (G) |
2 |
VCC |
5V |
3 |
VEE |
Špendlík zo stredu potenciometra |
4 |
Register Select (RS) |
PB11 |
5 |
Čítanie / Zápis (RW) |
Zem (G) |
6 |
Povoliť (EN) |
PB10 |
7 |
Dátový bit 0 (DB0) |
Žiadne pripojenie (NC) |
8 |
Dátový bit 1 (DB1) |
Žiadne pripojenie (NC) |
9 |
Dátový bit 2 (DB2) |
Žiadne pripojenie (NC) |
10 |
Dátový bit 3 (DB3) |
Žiadne pripojenie (NC) |
11 |
Dátový bit 4 (DB4) |
PB0 |
12 |
Dátový bit 5 (DB5) |
PB1 |
13 |
Dátový bit 6 (DB6) |
PC13 |
14 |
Dátový bit 7 (DB7) |
PC14 |
15 |
Pozitívne LED |
5V |
16 |
LED negatívne |
Zem (G) |
Pripojenia sa uskutočňujú podľa vyššie uvedenej tabuľky. V obvode sú prítomné dva potenciometre, prvý sa používa na delič napätia, ktorým je možné meniť napätie a poskytovať analógový vstup pre STM32. Ľavý kolík tohto potenciometra dostane kladné vstupné napätie z STM32 (3,3 V) a pravý kolík je pripojený k zemi, stredný kolík potenciometra je pripojený k analógovému vstupnému kolíku (PA7) STM32. Druhý potenciometer slúži na zmenu kontrastu LCD displeja. Zdroj napájania pre STM32 je dodávaný pomocou USB napájania z PC alebo notebooku.
Programovanie STM32 na čítanie hodnôt ADC
V našom predchádzajúcom tutoriáli sme sa dozvedeli o programovaní dosky STM32F103C8T6 pomocou USB portu. Takže teraz nepotrebujeme programátor FTDI. Jednoducho ho pripojte k PC cez USB port STM32 a začnite programovať pomocou ARDUINO IDE. Programovanie vášho STM32 v ARDUINO IDE na čítanie analógového napätia je veľmi jednoduché. Je to rovnaké ako s arduino doskou. Nie je potrebné meniť prepojovacie piny STM32.
V tomto programe bude načítaná analógová hodnota a vypočítané napätie s touto hodnotou a potom bude na analógovej aj digitálnej hodnote zobrazená na obrazovke LCD.
Najskôr vymedzte kolíky LCD. Tieto definujú, na ktorý pin STM32 sú pripojené LCD piny. Môžete upraviť podľa svojich požiadaviek.
const int rs = PB11, en = PB10, d4 = PB0, d5 = PB1, d6 = PC13, d7 = PC14; // uviesť názvy pinov, ku ktorým je LCD pripojený
Ďalej zahrnieme hlavičkový súbor pre LCD displej. Toto zavolá knižnicu, ktorá obsahuje kód, ako má STM32 komunikovať s LCD. Uistite sa tiež, že funkcia Liquid Crystal je volaná s názvami pinov, ktoré sme práve definovali vyššie.
#include
Vo vnútri funkcie setup () poskytneme iba úvodnú správu, ktorá sa zobrazí na obrazovke LCD. Dozviete sa tu informácie o prepojení LCD s STM32.
lcd.začiatok (16, 2); // Používame 16 * 2 LCD lcd.clear (); // Vymazanie obrazovky lcd.setCursor (0, 0); // V prvom riadku prvý stĺpec lcd.prin t ("CIRCUITDIGEST"); // Vytlačiť tento lcd.setCursor (0, 1); // V nasledujúcom riadku prvý stĺpec n lcd.print ("STM32F103C8"); // Tlač Thi y oneskorenia (2000); // čakať na dva sekundy lcd.clear (); // Vymazanie obrazovky lcd.setCursor (0, 0); // V prvom riadku prvý stĺpec lcd.print ("POUŽÍVANIE ADC IN"); // Vytlačiť tento lcd.setCursor (0,1); // V secoundovom riadku prvý stĺpec lcd.print ("STM32F103C8"); // Vytlačiť toto oneskorenie (2000); // čakať na dva sekundy lcd.clear (); // Vymazanie obrazovky
Nakoniec v našej funkcii nekonečnej slučky () začneme čítať analógové napätie dodávané na pin PA7 z potenciometra. Ako sme už diskutovali, mikrokontrolér je digitálne zariadenie a nedokáže priamo čítať úroveň napätia. Pomocou techniky SAR je úroveň napätia mapovaná od 0 do 4096. Tieto hodnoty sa nazývajú hodnoty ADC. Ak chcete získať túto hodnotu ADC, použite nasledujúci riadok.
int val = analogRead (A7); // načíta hodnotu ADC z kolíka PA 7
Tu sa používa funkcia analogRead () na čítanie analógovej hodnoty kolíka. Nakoniec túto hodnotu uložíme do premennej s názvom „ val “. Typ tejto premennej je celé číslo, pretože do tejto premennej dostaneme iba hodnoty od 0 do 4096, ktoré sa majú uložiť.
Ďalším krokom by bol výpočet hodnoty napätia z hodnoty ADC. Aby sme to dosiahli, máme nasledujúce vzorce
Napätie = (hodnota ADC / rozlíšenie ADC) * Referenčné napätie e
V našom prípade už vieme, že rozlíšenie ADC nášho mikrokontroléra je 4096. Hodnota ADC sa nachádza aj v predchádzajúcom riadku a obsahuje premennú nazvanú val. Referenčné napätie sa rovná napätie, pri ktorom mikrokontrolér je v prevádzke. Keď je STM32 doska napájaná cez USB kábel a potom napájacie napätie je 3,3. Prevádzkové napätie môžete merať aj pomocou multimetra cez Vcc a uzemňovací kolík na doske. Vyššie uvedený vzorec teda zapadá do nášho prípadu, ako je uvedené nižšie
float voltage = (float (val) / 4096) * 3,3; // vzorce na prevod hodnoty ADC na voltag e
Mohli by ste byť zmätení s riadkom float (val). Používa sa na prevod premennej „val“ z dátového typu int na dátový typ „float“. Táto konverzia je potrebná, pretože iba ak dostaneme výsledok val / 4096 v plaváku, môžeme ho vynásobiť 3.3. Pokiaľ je hodnota prijímaná v celých číslach, bude mať vždy hodnotu 0 a výsledok bude tiež nulový. Po vypočítaní hodnoty ADC a napätia zostáva iba zobraziť výsledok na LCD obrazovke, čo je možné vykonať pomocou nasledujúcich riadkov
lcd.setCursor (0, 0); // nastav kurzor na stlpec 0, riadok 0 lcd.print ("ADC Val:"); lcd.print (val); // Zobraziť hodnotu ADC lcd.setCursor (0, 1); // nastaviť kurzor na stĺpec 0, riadok 1 lcd.print ("Napätie:"); lcd.tlač (napätie); // Zobrazovacie napätie
Kompletný kód a demonštračné video sú uvedené nižšie.