UAMT VUT FEKT Curve Tracer s mikrokontrolérem STM32 BROB Vedoucí práce: František Burian Autoři: Michal Kalina (154757), Václav Kabátník (154754) V Brně květen 2014
UAMT VUT FEKT
Curve Tracer s mikrokontrolérem STM32
BROB
Vedoucí práce: František Burian
Autoři: Michal Kalina (154757), Václav Kabátník (154754)
V Brně květen 2014
Zadání projektu:
Seznamte se se základními grafickými parametry aktivních i pasivních diskrétních součástek.
Seznamte se s mikrokontroléry rodiny STM32. Navrhněte schéma i plošný spoj zařízení, které je
schopno měřit grafické charakteristiky součástek dle zadání vedoucího. Jako řídicí obvod využijte
mikrokontrolér rodiny STM32. Pro odesílání naměřených dat do počítače sloužícího jako vizualizační
nástroj použijte rozhraní USB.
Obsah: 1) Co je to Curve Tracer ....................................................................................................................... 3
1.1. Curve Tracer, který realizujeme .............................................................................................. 3
2) Program na straně mikrokontroléru ............................................................................................... 3
2.1. Nastavení USB portu ............................................................................................................... 3
2.2. Nastavení frekvence vnitřního oscilátoru ............................................................................... 3
2.3. Nastavení vstupů a výstupů .................................................................................................... 4
2.4. Nastavení DAC ......................................................................................................................... 4
2.5. Nastavení ADC ......................................................................................................................... 4
2.6. Nastavení přerušení ................................................................................................................ 4
2.7. Obsluha ADC ............................................................................................................................ 4
2.8. Funkce main ............................................................................................................................ 4
2.9. Obsluha přerušení s hlavní smyčkou, která proměřuje charakteristiky .................................. 4
3) Program na straně PC ...................................................................................................................... 5
3.1. Graf .......................................................................................................................................... 5
3.2. Tlačítko START ......................................................................................................................... 5
3.3. Kulatá tlačítka Forward a Reverse ........................................................................................... 5
3.4. Tlačítko Draw ........................................................................................................................... 5
3.5. Tlačítko Clear chart .................................................................................................................. 5
3.6. Progress bar ............................................................................................................................. 6
3.7. Hodnota Set max voltage ........................................................................................................ 6
3.8. Hodnota Set COM .................................................................................................................... 6
3.9. Rozbalovací menu File ............................................................................................................. 6
3.9.1. Save chart as… ................................................................................................................. 6
3.9.2. Save data ......................................................................................................................... 6
3.9.3. Exit ................................................................................................................................... 6
3.10. Neviditelné položky: ............................................................................................................ 6
3.10.1. Port .................................................................................................................................. 6
3.10.2. Další části programu ........................................................................................................ 6
3.11. Příjem dat ............................................................................................................................ 6
4) Návrh DPS ........................................................................................................................................ 6
4.1. Funkční schéma ....................................................................................................................... 6
4.1.1. Proudové posilnění výstupu DAC .................................................................................... 7
4.1.2. Oblast měření .................................................................................................................. 7
4.1.3. Zesilovací stupeň ............................................................................................................. 7
4.2. Schéma zapojení ...................................................................................................................... 7
4.3. DPS ........................................................................................................................................... 8
4.4. Seznam použitých součástek pro DPS ..................................................................................... 8
5) Naměřené charakteristiky ............................................................................................................... 9
5.1. Propustný směr LED ................................................................................................................ 9
5.2. Propustný směr diody přes odpor 270Ω ................................................................................. 9
5.3. Propustný i závěrný směr diody přes 270 Ω .......................................................................... 10
6) Měřící zapojení na nepájivém poli ................................................................................................ 10
7) Závěr .............................................................................................................................................. 11
1) Co je to Curve Tracer
Curve Tracer je v podstatě elektronické zařízení, které je schopné měřit a zobrazovat
voltampérové charakteristiky diskrétních součástek, jako je například dioda, tranzistor, tyristor atp.
Jedná se tedy o jakýsi osciloskop, který obsahuje i zdroje proudu či napětí.
1.1. Curve Tracer, který realizujeme Naše zařízení, je schopno měřit voltampérové charakteristiky diody. Uživatel má možnost
nastavit si maximální povolený proud měřenou součástkou, dále vykreslovat její charakteristiky do
grafu, který je možno ukládat jako obrázek ve formátu .jpg. Uživatel má taky možnost tisknout
změřené hodnoty proudu a napětí do textového souboru ve formátu .txt.
2) Program na straně mikrokontroléru
Pro řízení celého procesu používáme 32-bitový mikrokontrolér STM32F4, usazený na kitu od
firmy STMicroelectronics s jádrem ARM Cortex. Jako debugger využíváme Black Magic Probe,
namísto původního STlinku.
Knihovna, kterou jsme pro tento projekt použili se jmenuje libopencm3 a obsahuje všechny
potřebné části pro nás projekt. Program byl napsán ve vývojovém prostředí Code::Blocks v jazyce C#.
Samotný program v mikrokontroléru se skládá z několika částí:
2.1. Nastavení USB portu Pro nastavení USB portu jsme využili již dostupné nastavení z knihovny libopencm3.
2.2. Nastavení frekvence vnitřního oscilátoru Frekvenci oscilátoru jsme nastavili na 120Mhz.
2.3. Nastavení vstupů a výstupů V prvé řadě jsme povolili oscilátor na port A, který budeme využívat. Poté jsme
nastavili pin PA4 jako analogový výstup, jelikož se jedná o výstup DAC a porty PA0 a PA1 jako
analogové vstupy, jelikož se jedná o kanály 0 a 1 ADC.
2.4. Nastavení DAC Toto nastavení je velice jednoduché, jelikož stačí pouze povolit oscilátor pro DAC a
poté povolit samotný DAC. Používáme kanál č. 1 a mód RIGHT 12 (resp. 12-bitová hodnota
zarovnaná doprava).
2.5. Nastavení ADC Opět v prvé řadě povolujeme oscilátor pro ADC, následně zakážeme scan mode
(nepoužíváme více kanálu najednou). Nastavíme single conversion mode (dochází k odečtení
pouze jedné hodnoty), poté nastavíme vzorkování a zapneme ADC.
2.6. Nastavení přerušení Nastavujeme hodnotu přerušení 100Hz (100 přerušení za sekundu) a poté ho jen
povolujeme a zapínáme čítač.
2.7. Obsluha ADC ADC obsluhuje jednoduchá funkce, která má jeden vstupní parametr, a to číslo kanálu
ADC, ze kterého chceme číst. Poté odečteme hodnotu na vstupu ADC a tato hodnota je
návratovou hodnotou funkce.
2.8. Funkce main Ve funkci main se postupně projdou všechny nastavovací funkce a v nekonečné
smyčce se stále dokola spouští funkce usbd_poll, která musí být volána alespoň jednou za
1ms a udržuje nám komunikaci přes druhé USB.
2.9. Obsluha přerušení s hlavní smyčkou, která proměřuje
charakteristiky Toto je jádro celého programu mikrokontroléru. Beží zde smyčka, která inkrementuje
hodnotu pomocné proměnné x, která se odesílá na vstup DAC a tedy určuje výstupní napětí
DAC. V každém kroku se taktéž odečítá hodnotu vstupů kanálu 0 a 1 ADC. Kanál 0 určuje
hodnotu vstupního napětí na ose x a kanál 1 určuje výstupní proud (resp. výstupní napětí,
které se přepočítává na proud) měřené součástky.
Během programování se vyskytly problémy s odesíláním dat do PC, kde na stranu PC
došlo vždy něco kolem 20-50 bajtů. Proto jsme se rozhodli odesílat maximálně 8 bajtu naráz.
Jelikož jedna 12-bitová hodnota zabere 2 bajty, mohou se tedy odeslat 4 hodnoty naráz.
Proto se každé čtyři kroky splní podmínka if která odešle poslední 4 hodnoty a tak stále
dokola. V posledním kroku se odešlou zbývající hodnoty, bez ohledu na jejich počet.
3) Program na straně PC
Program byl napsán v programu MS Visual Studio 2013 v jazyce C#. Jedná se o
jednoduchou formulářovou aplikaci (viz. Obrázek 1)
3.1. Graf
Celé aplikaci dominuje velký graf, ve kterém se budou zobrazovat změřené
charakteristiky.
3.2. Tlačítko START
Tímto tlačítkem spustíte celý proces měření. Mikrokontroléru se odešle pokyn pro to,
aby začal měřit a zároveň se mu odešle hodnota maximálního napětí , který nesmí překročit.
3.3. Kulatá tlačítka Forward a Reverse Těmito tlačítky si vybíráte režim měření, tzn. zda-li měříme v propustném či
závěrném směru. Zvolený režim se zobrazí i v pravé horní části okna.
3.4. Tlačítko Draw
Po spuštění programu je toto tlačítko neaktivní. Aktivuje se až poté, co program
obdrží všechny požadované hodnoty od mikrokontroléru. Tímto tlačítkem vykreslíte do grafu
naměřené hodnoty
3.5. Tlačítko Clear chart
Tímto tlačítkem vymažete všechny křivky v grafu a nastavíte ho do základního
vzhledu.
Obrázek 1 Formulářová aplikace Curve Tracer
3.6. Progress bar
Malý progress bar mezi tlačítky START a Draw, který indikuje průběh měření. Nad
tímto prvek se zároveň zobrazí text oznamující přijímání dat a následná informace, že byli
data úspěšně přijaty.
3.7. Hodnota Set max voltage
Tímto prvkem nastavíte maximální povolené napětí měřenou součástkou. Zvolené
napětí se zobrazí i v pravé horní části okna.
3.8. Hodnota Set COM
Tímto prvkem můžete nastavit COM port, na kterém máte připojeno rozhraní USB
pro komunikaci s mikrokontrolérem.
3.9. Rozbalovací menu File
Toto rozbalovací menu obsahuje tři další prvky:
3.9.1. Save chart as… Tato položka umožňuje uložit právě zobrazovaný graf do obrázkového
souboru .jpg.
3.9.2. Save data Tato položka umožňuje uložit právě změřená data do textového souboru .txt.
3.9.3. Exit Touto položkou ukončíte celou aplikaci
3.10. Neviditelné položky:
3.10.1. Port Jedná se o pouhé nastavení portu pro komunikace s mikrokontrolérem.
Nastavuje se zde rychlost, velikost zásobníku (buffer) a další důležité věci.
3.10.2. Další části programu Jedná se například o inicializaci proměnných, chybové hlášky a další
vyskakující okna.
3.11. Příjem dat Data se přijímají dvěma funkcemi. Jedna obsahuje funkci while, která se vykonává do
té doby, dokud jsou dostupná data ke čtení nebo dokud není ukončena příkazem break.
V této funkci se v každém kroku volá druhá funkce, která načte do zásobníku dva bajty (2
bajty = jedna 12-bitová hodnota) a tyto dva bajty jsou návratovou hodnotou pro původní
funkci. Poté co se načtou všechny hodnoty je cyklus ukončen příkazem break.
V této funkci se také inkrementuje progress bar (viz. 3.6)
4) Návrh DPS
4.1. Funkční schéma Funkční schéma obsahuje tři části, které nadále rozepisujeme.
4.1.1. Proudové posilnění výstupu DAC Jelikož výstup DAC není schopen vyprodukovat více jak 25mA, bylo potřeba
jeho výstup proudově posílit. To jsem vyřešil tak, že jsem na výstup DAC připojil
operační zesilovač v neinvertujícím zapojení, který vstupní signál z DAC zesiluje
dvakrát. Jako další stupeň jsou použity 2 tranzistory (NPN a PNP), které mají zajistit
proudové zesílení signálu.
4.1.2. Oblast měření Zde se na svorky připojuje měřené zařízení do série s měřícím odporem
10mΩ, na kterém se měří úbytek napětí a výpočtem se získává hodnota proudu.
4.1.3. Zesilovací stupeň Jelikož úbytek napětí na tak malém odporu (10mΩ) je velmi malý, musí být
tento úbytek patřičně zesílen. Zde je zesílen šestkrát, to stačí pro to, aby byl tento
signál měřitelní ADC převodníkem.
4.2. Schéma zapojení
4.3. DPS
4.4. Seznam použitých součástek pro DPS
Označení Název Hodnota
T1 BD441 NPN
T2 BD442 PNP
U1 NE5532 -
R1 rezistor 1kΩ
R2 rezistor 1kΩ
R3 rezistor 10mΩ
R4 rezistor 200Ω
R5 rezistor 1kΩ
C1 kondenzátor 10μF
C2 kondenzátor 10μF
IC1 TC7660SCPA -
D.U.T měřená součástka Device Under Test Tabulka 1 Seznam součástek
5) Naměřené charakteristiky
5.1. Propustný směr LED
Obrázek 2 VA charakteristika LED
5.2. Propustný směr diody přes odpor 270Ω
Obrázek 3 VA charakteristika diody v propustném směru
5.3. Propustný i závěrný směr diody přes 270 Ω
Obrázek 4 VA charakteristika diody v obou směrech
6) Měřící zapojení na nepájivém poli
7) Závěr
Když jsem si vybíral tuto semestrální práci, neviděl jsem nějaký větší problém v její
praktické realizace. Od začátku jsem měl nějakou ucelenou představu a té jsem se držel.
V prvé řadě jsem se musel seznámit s vývojovým prostředím Code::Blocks a řešit
mnoho problému s komunikací. To nebylo zrovna nejjednodušší vzhledem k tomu, že kit
STM32F4 velmi rád přestával komunikovat a bylo zapotřebí restart celého počítače
k opětovnému navázání komunikace.
Dále jsem se zaměřil na knihovnu libopencm3. Vzhledem k tomu, že jsem nikdy
takovéto aplikace v jazyce C neprogramoval (jen lehké aplikace v jazyce assembler), začátky
byli velmi obtížné. Po pár týdnech zkoušení, testovaní, ‚googlování‘ a konzultaci, se mi
povedlo zprovoznit první část programu, a to digitálně-analogový převodník (DAC).
Dalším krokem bylo zprovoznění čtení hodnoty z analog-digitálního převodníku
(ADC). Vzhledem ke zkušenostem z DAC pro mě bylo toto už jednodušší. Součástí tohoto
kroku bylo i napsání funkce, která proměří charakteristiky v celém rozsahu.
V další části jsem se zaměřil na napsání programu v PC. Využil jsem program Visual
Studio Professional 2013. Soustředil jsem se na vytvoření jednoduché, uživatelsky přístupné
formulářové aplikace, která je popsána v sekci 3) Program na straně PC.
Následně bylo třeba vytvořit komunikaci. K tomu jsem využil dostupný example
(příklad) od knihovny libopencm3. Tato část mi zabrala velmi mnoho času, jelikož jsem opět
neměl žádné zkušenosti s komunikace přes rozhraní USB. Ale podařilo se a mikrokontrolér
komunikoval s PC a byl schopný odesílat i přijímat data.
V posledním kroku bylo třeba navrhnout desku plošných spojů (DPS). Měl jsem
představu, že budu měřit pouze úbytek napětí na malém odporu (10mΩ), který budu patřičně
zesilovat, aby byl měřitelný, a výpočtem budu získávat hodnotu proudu. Bohužel se objevil
problém, který jsem neočekával. Mikrokontrolér má maximální výstupní proud 25mA a to
bylo velmi málo pro moji aplikaci. Proto bylo třeba vytvořit proudové posilnění výstupu DAC,
které je blíže popsáno v sekci 4.1.1 Proudové posilnění výstupu DAC. To se neobešlo bez
větších potíží, jako například zničené tranzistory, diody, odpory atp. Opět se jedná o oblast,
ve kterém nemám praktické zkušenosti a tak mi tento problém zabral asi nejvíce času a i kvůli
tomu jsem nestihl dotáhnout tuto aplikaci do podoby, která by mi vyhovovala.
Vzhledem k tomu, že jsem se prakticky zasekl při návrhu DPS a ztratil tak velmi moc
cenného času nebyl jsem schopný dotáhnout aplikaci do úplné finální podoby tak, jak jsem si
to představoval. A to, uživatelsky nastavitelné omezení proudu měřenou součástkou,
zpřesnění měření, schopnost měřit různé druhy součástek a mnoho dalšího co jsem si
představoval. Zároveň se mi nepodařilo fyzicky realizovat plošný spoj, opět kvůli nedostatku
času.
Ve výsledku si myslím, že finální podoba není tak zlá a do budoucna by se dala
dotáhnout do dokonalosti při dostatku času a snahy. I přes všechny problémy, které nastaly,
jsem získal mnoho cenných zkušeností, které se mi do budoucna budou velmi hodit.
Závěrem bych chtěl poděkovat inženýru Františku Burianovi, za mnoho cenných
informací, které mi sdělil a za čas, který mi věnoval v průběhu celého semestru.