Achizitii de Date cu Microcontrolerul Stm32f103cbt6

Achiziții de date cu microcontrolerul STM32F103CBT6

Listă figuri

Listă tabele

Cuprins

Introducere

Seria de microcontrolere de mare performanță STM32F103XX, produsă de ST Microcontrollers, este dispozitivul de inaltă calitate, cu o eficiență crescută și cu un consum redus de energie, care a fost și tema acestei lucrări de diplomă. Aceste microcontrolere sunt soluția perfectă pentru cei ce doresc o eficiență crescută cu cel mai mic consum de energie sau doar un procesor din gama ARM Cortex M3 de densitate medie.

Chiar dacă acest proiect se bazează pe o platformă Open103C deja asamblată, acest procesor poate fi comandat și separat și necesită doar un cristal de 32 kHz și o sursă de tensiune de 3.3V.

Programarea acestui dispozitiv, chiar dacă pare ușoară, nu este chiar așa. Se poate programa prin porturile USART1 sau prin SWD cu programatorul ST-link v2. IDE-ul folosit de mine este Keil uVision 4.0 si am folosit atât limbajul Assembly cât și limbajul C dar și PHP și HTML.

După multe cercetări, opinia mea despre acest microcontroler fabricat de ST este următoarea: chiar dacă programarea lui este puțin mai dificilă decât la AVR, PIC, etc. și rezultatele sunt pe măsură.

Capitolul 1 – Platforma Open103C

Această lucrare de licență se bazează pe placa de dezvoltare Open 103C, produsă de WaveShare. Această platformă este o soluție perfectă pentru cei ce vor să experimenteze capabilitățile microcontrolerelor STM.

În această lucrare platforma (ilustrată în figura 1.1) constituie elementul principal, fiind folosită în locul unui microcontroler obișnuit.

Figura 1.1 Platforma Open103C

Platforma se bazează pe microprocesorul STM32F103CBT6, cu arhitectură ARM Cortex M3, care cuprinde:

un nucleu pe 32 de biți, lucrând la o frecvență de 72 MHz;

37 de pini de intrare/ieșire;

20kb de RAM;

128kb memorie flash;

două convertoare analog-digitale;

tensiunea de operare de 2…3.6 V.

Aici se regăsesc toate tipurile de porturi de comunicare: câte două porturi SPI, USART, I2C, USB și CAN. Programarea microcontrolerului se face prin conectorul JTAG/SWD aflat și el pe platformă. Microprocesorul funcționeaza corect, la frecvența de 72 MHz, numai cu ajutorul cristalului de 8 kHz inclus și el pe placă.

Pe această placă se mai întâlnește si regulatorul de tensiune AMS1117 care convertește tensiunea logică de 5V de la USB in tensiunea de operare a microcontrolerului de 3.3V dar și indicatoare LED roșii, buton de reset și butonul utilizatorului care poate fi programat de către acesta pe o anumită funcție de intrare sau pentru declanșarea întreruperilor, un joystick și comutatoare pentru setarea tensiunii. Pentru a conecta o tastatură, motoare, etc. se folosesc cei 8 pini de intrare/ieșire ușor accesibili.

Platforma dispune și de pini de conectare cu un GLCD Touch Screen, de o mufă de alimentare 5v DC dar și de conectori pentru toți pinii microcontrolerului poziționați lateral față de acesta. Mai există și comutatoare pentru toate perifericele conectate la microcontroler: joystick, LED-uri, butoane, tensiune externa de 5V, LCD, etc.

Placa dispune și de o multitudine de accesorii care facilitează anumite funcții: conectare la internet, redare sunete și melodii MP3, testarea pinilor de intrare/ieșire, etc.

Accesoriile sunt prezentate în figura următoare (figura 1.2):

Figura 1.2 Accesorii utilizate în realizarea proiectului de diplomă

Accesoriile cu care sosește placa sunt: un LCD touchscreen, o plăcuță de test ADC, o placă de conectare la rețea cu integratul ENC28J60, o placă MP3, una CAN, un adaptor microSD card, cabluri USB de conectare, un adaptor DC 220 – 5V și un cablu de internet.

Capitolul 2 – Microcontrolerul STM32F103CBT6

2.1 Prezentare generală a microcontrolerului

2.1.1 ARM

Pe platforma descrisă mai sus (Capitolul 1) este inclus un procesor STM32F103XBT6, procesor ce face parte din gama ARM Cortex M3 fiind cea mai nouă generație de MCU de acest gen. Acest microprocesor a fost dezvoltat pentru a oferi utilizatorului un microcontroler low-cost, cu număr mic de pini și cu un consum redus de energie pentru ca acesta să pună în aplicare ideile sale.

Această gamă de produse dispune de performanțe remarcabile de calcul și de un răspuns rapid al sistemului la intreruperi.

ARM Cortex M3 beneficiază de o memorie RAM și Flash de înaltă calitate și de o arhitectură RISC pe 32 de biți. Familia de procesoare STM32F103XX, în care este inclus și microcontrolerul STM32F103CBT6, are la interior un nucleu ARM, deci prin urmare este compatibil cu orice unealtă hardware și software de la ARM. Figura 2.1 ilustrează în acest scop schema bloc generală a acestei familii de microprocesoare.

Figura 2.1 Schema bloc STM32F103XX

2.1.2 Memorie Flash / SRAM și CRC incluse

Aceste microcontrolere includ printre alte opțiuni și o memorie SRAM de 20 kb.

Pe STM32F103CBT6 se mai întâlnește și memoria de stocare Flash foarte încăpătoare de 128 kb dar și unitatea de calcul specifică procesoarelor ARM Cortex, denumită CRC (Controlul Redutanței Ciclice). Aceasta se utilizează pentru conversia datelor la 32-bit dar și pentru verificarea transmisiei de date și a integrității dispozitivului. CRC poate verifica printre altele și integritatea memoriei Flash/SRAM, temperatura dispozitivului sau tensiunea de alimentare (VCC). Acest sistem ajută la crearea unei semnături unice a softwoare-ului, permițând astfel rularea a mai multor aplicații în același timp (Multi-Tasking).

2.1.3 Controlul întreruperilor și regiștrilor (NVIC)

Noua linie de performanță STM32F103CXX încorporează un controler flexibil de întreruperi Vectored Imbricate în masură să se ocupe de 43 de canale de întreruperi plus cele 16 linii de întrerupere incluse în nucleul ARM Cortex M3.

NVIC este capabil să controleze până la 16 nivele de prioritate pentru fiecare canal sau linie de întreruperi. Acest sistem avansat oferă o procesare de bună calitate a întreruperilor cu cea mai mică latență posibilă (aproximativ 0.12 secunde).

NVIC este responsabil de AWK (Auto-Wake-Up), funcție folosită pentru a aduce microcontrolerul din modul de stand-by, la o întrerupere stabilită de utilizator din software (prestabilit pe butonul utilizatorului de pe platforma Open103C).

In funcție de tipul microcontrolerului, NVIC poate suporta până la 240 de întreruperi externe și până la 256 de grade prioritare care pot fi stabilite în mod dinamic, din software. Acesta sprijină de asemenea și înlanțuirea de întreruperi.

2.1.4 Control de evenimente (EXIT)

Este format din 19 linii de detectoare marginale utilizate pentru generarea cererilor. Fiecare linie poate fi configurată în mod independent pentru a selecta corespunzător evenimentul de declanșare al întreruperii.

EXIT poate detecta o linie de întreruperi externă cu o durată a impulsului mai mică ca cea a ceasului intern. Un registru stochează statutul cererilor de întrerupere, așezate pe grade de prioritate.

La cele 16 linii de întrerupere pot fi conectate până la 80 de GPIO-uri. Fiecarui canal sau linie de întrerupere îi revine o mască setată din software (prestabilit dezactivată).

2.1.5 Ceasuri de pornire/Temporizare și WatchDogs

Selecția ceasului de sistem se face de la început, încă din BOOT, cu toate acestea oscilatorul RC este selctat implicit ca ceasul MCU-ului. Un ceas extern de 4…16MHz poate fi selectat în cazul în care este detectată o defecțiune de ceas intern. Dacă CRC detctează defecțiunea, sistemul comută automat la ceasul extern. În caz că acesta nu există, CPU-ul se întoarce la ceasul intern RC. O întrerupere generată software va verifica cesul intern în caz că acesta nu funcționează, dar numai dacă este activată. De asemenea o întrerupere declanșată de PLL, numită întreruperea de management sistem, poate verifica un sistem extern (cristal, rezonator, oscilator, etc.) fară a fi nevoie de intervenție software. Frecvența ceasului extern trebuie cuprinsă între 36…72 MHZ.

MCU-ul STM32F03CBT6 din familia de microprocesoare STM32F103XX include și un temporizator avansat de control, trei cronometre de uz general, două cronometre WatchDog și un cronometru SysTick.

Cronometrul SysTick este dedicat sistemelor de operare care pot fi instalate pe acest microcontroler (Java, Android, Linux, etc.), însă ar putea fi de asemenea utilizat ca un cronometru standard, foarte avansat. Acesta dispune de o largă varietate de funcții speciale, cum ar fi: un contor de 24 – biți, capacitate de resetare automată, sitemul de generare automată de întreruperi atunci când contorul ajunge la zero și o sursă de ceas programabilă software (între intern și extern).

2.1.6 RTC (ceas în timp real) / Regiștrii de rezervă

Regiștrii de rezervă sunt în număr de zece fiecare având 16 biți utilizați pentru a stoca 20 de bytes de date aplicate de utilizator atunci când alimentarea VDD nu este prezentă.

Ceasul în timp real (RTC) oferă un set de contori care rulează continuu și care pot fi utilizați de un program software corespunzător pentru a asigura o funcție de calendar / ceas și o întrerupere de alarmă sau o întrerupere periodică. Este cronometrat cu ajutorul unui cristal extern de 32.768 MHz, unui rezonator sau cu oscilatorul intern de mică putere. Acest oscilator intern are o frecvență tipică de 40kHz, neîndeajuns pentru RTC, recomandându-se un cristal extern.

RTC poate fi calibrat cu ajutorul unei ieșiri externe de 512Hz pentru a compensa orice abatere naturală de cristal. Acesta dispune de un contor programabil pe 32 de biți pentru măsurare pe termen lung, folosind capabilitatea sistemului de a genera o întrerupere de alarmă.

Un divizor de 20 de biți este utilizat pentru ceasul de timp de bază și este implicit configurat pentru a genera o bază de timp de 1 secundă la un ceas extern de 32.7685kHz.

2.1.7 DMA

Controlerul flexibil, cu 7 canale, capabil să gestioneze cmunicații dintre memorii și periferice, inclus în MCU-urile din familia STM32F103XX, inclusiv pe acest microcontroler (STM32F103CBT6), a fost numit de catre ST Mirocontrollers ca DMA (Dynamic Memory Access).

Fiecare canal este conectat la cererile DMA hardware specifice, cu suport pentru software-ul de declanșare pe fiecare canal.

Configurarea sistemului DMA se face printr-un program software. Orice transfer de mărimi între sursă și destinație este independent față de celelalte transferuri de date.

DMA este capabil să lucreze cu toate perifericele principale aflate pe MCU, în acest caz și pe platforma de dezvoltare Open103C. Aceste periferice trebuie să fie obligatoriu compatibile cu una din tehnologiile suportate (SPI, I2C, USART, ADC, USB, cronometru).

2.1.8 USART

Microprocesorul STM32F103CBT6 și toată familia sa au încorporată tehnologia USART. Una din aceste interfțe USART poate comunica la viteze de până la 4.5 Mbit/secundă. Celelalte sunt capabile și ele la comunicații de până la 2.25 Mbit/secundă.

Ele oferă management hardware a semnalelor CTS și RTS, precum și suport IrDA, SIR sau ENDEC. Acestea sunt compatibile ISO7816 și au capacitatea de Master/Slave. Toate interfețele USART pot fi controlate de controlerul DMA.

2.1.9 SPI (Serial Peripheral Interface)

Famila de MCU-uri de la ST Microcontrollers STM32F103XX au suport pentru tehnologia SPI (interfața serială periferică). Până la două interfețe SPI sunt capabile să comunice cu viteză de până la 18 Mbit/secundă în modurile slave sau master în full-duplex sau simplex.

Cei 3 biți prescaler oferă 8 frecvențe în modul master, însă cadrul poate fi configurat la 8 sau 16 biți. Ambele porturi SPI pot fi controlate de către controlerul DMA.

2.1.10 Interfața I2C

Pe microcontrolerul STM32F103CBT6 produs de ST Microcontrollers sunt disponibile două interfețe I2C capabile să funcționeze în multiple moduri de master și slave. Aceste interfețe pot să sprijine modurile standard și rapid.

Interfețele I2C susțin 2 adrese slave de 7 biți dar și abordarea în modul master de 7/10 biți. Ambele pot servii atât controlerului DMA precum și pentru SM/PM Bus 2.0.

2.a un ceas extern de 32.7685kHz.

2.1.7 DMA

Controlerul flexibil, cu 7 canale, capabil să gestioneze cmunicații dintre memorii și periferice, inclus în MCU-urile din familia STM32F103XX, inclusiv pe acest microcontroler (STM32F103CBT6), a fost numit de catre ST Mirocontrollers ca DMA (Dynamic Memory Access).

Fiecare canal este conectat la cererile DMA hardware specifice, cu suport pentru software-ul de declanșare pe fiecare canal.

Configurarea sistemului DMA se face printr-un program software. Orice transfer de mărimi între sursă și destinație este independent față de celelalte transferuri de date.

DMA este capabil să lucreze cu toate perifericele principale aflate pe MCU, în acest caz și pe platforma de dezvoltare Open103C. Aceste periferice trebuie să fie obligatoriu compatibile cu una din tehnologiile suportate (SPI, I2C, USART, ADC, USB, cronometru).

2.1.8 USART

Microprocesorul STM32F103CBT6 și toată familia sa au încorporată tehnologia USART. Una din aceste interfțe USART poate comunica la viteze de până la 4.5 Mbit/secundă. Celelalte sunt capabile și ele la comunicații de până la 2.25 Mbit/secundă.

Ele oferă management hardware a semnalelor CTS și RTS, precum și suport IrDA, SIR sau ENDEC. Acestea sunt compatibile ISO7816 și au capacitatea de Master/Slave. Toate interfețele USART pot fi controlate de controlerul DMA.

2.1.9 SPI (Serial Peripheral Interface)

Famila de MCU-uri de la ST Microcontrollers STM32F103XX au suport pentru tehnologia SPI (interfața serială periferică). Până la două interfețe SPI sunt capabile să comunice cu viteză de până la 18 Mbit/secundă în modurile slave sau master în full-duplex sau simplex.

Cei 3 biți prescaler oferă 8 frecvențe în modul master, însă cadrul poate fi configurat la 8 sau 16 biți. Ambele porturi SPI pot fi controlate de către controlerul DMA.

2.1.10 Interfața I2C

Pe microcontrolerul STM32F103CBT6 produs de ST Microcontrollers sunt disponibile două interfețe I2C capabile să funcționeze în multiple moduri de master și slave. Aceste interfețe pot să sprijine modurile standard și rapid.

Interfețele I2C susțin 2 adrese slave de 7 biți dar și abordarea în modul master de 7/10 biți. Ambele pot servii atât controlerului DMA precum și pentru SM/PM Bus 2.0.

2.1.11 CAN (Controller Area Network)

CAN (zona controlerului de rețea), disponibil și el pe STM32F103CBT6, este în conformitate cu specificațiile 2.0A/2.0B (activ), cu o rată de transfer de până la 1 Mbit/secundă. Se pot primii și transmite cadre standard, cu identificatori de 11 biți, precum și cadre extinse cu identificatori de 29 de biți. Această interfață are 3 zone de transmisie, două primesc FIFO-uri cu trei trepte și 14 zone de filtru scalabile.

2.1.12 USB (Universal Serial Bus)

Linia de performanță maximă STM32F103XX încorporează și un dispozitiv periferic USB compatibil cu USB 3.0 full-speed cu o viteză de transmitere a datelor de până la 12 Mbit/secundă. Starea interfeței USB este configurabilă obiectiv software și suportă/suspendă CV-ul.

2.1.13 Moduri de încărcare

La pornirea sistemului, pinii de încărcare se folosesc pentru a selecta corespunzător una din cele trei opțiuni de încărcare:

încărcare din memoria Flash a utilizatorului;

încărcare din memoria sistemului;

încărcare din memoria SRAM încorporată.

Registrul Boot este situat în memoria de sistem. Asesta este utilizat pentru a reprograma memoria flash folosind USART1 sau SWD/JTAG.

2.2 Alimentare

2.2.1 Scheme de alimentare

Acest MCU complex (STM32F103CBT6) nu necesită alimentare specială deoarece consumul său de energie este extrem de redus. Pentru o funcționare crectă se recomndă utilizarea unei scheme stricte de alimentare.

VDD (tensiune cuprinsă între 2…3.6 V) – reprezintă sursa de alimentare I/O și reglementare internă.

VSSA, VDDA (tensiune cuprinsă între 2…3.6 V) – constituie sursa de alimentare externă, analogică, folosită pentru resetare blocuri, ADC (tensiunea minimă trebuie să fie 2.4V atunci când este folosit ADC-ul), CRC, DMA, PLL și toate sistemele interne.

Observație: VSSA și VDDA trebuie neapărat conectate la VSS, respectiv VDD, deoarece pe acești pini se va măsura de către CRC tensiune de intrare în MCU și astfel va putea fi reglată corespunzător.

VBA (tensiune cuprinsă între 1.8…3.6 V) – este sursa de alimentare pentru RTC, ceas extern de 32kHz, registrele de rezervă, atunci când VDD nu este prezent.

Figura 2.2 Configurația pinilor MCU STM32F103CBT6

2.2.2 Controlul sursei de alimentare

MCU-ul STM3F103CBT6 este singurul microcontroler din famlia sa care are un sistem de control pentru sursa de alimentare. Dispozitivul dispune de un sistem complex de resetare a circuitelor integrate în funcție de tensiunea de alimentare. Există un reset pentru tensiune de alimentare prea mare (POR) și un reset pentru tensiune de alimentare prea mică (PDR). Acestea aigură funcționarea normală a circuitelor integrate, păstrând tensiunea între 2…3.65 V, astfel evitând deteriorarea acesora.

Atunci când CRC detectează o tensiune anormală pe pinul VDD trimite un impuls către NVIC care trimite o întrerupere către nucleu, punând dipozitivul într-o stare de reset continuă. MCU-ul iese din starea de rest atunci când VDD revine la o tensiune normală.

Sisteml este echipat cu un detector de tensiune programabil (PVD) care monitorizează sursa de alimentare (VDD/VDDA) și compară tensiunea cu un prag VPVD. O întrerupere este generată automat atunci când VDD scade sub VPVD sau crește peste acesta. Întreruperea reprezintă un mesaj care va pune procesorul în modul de reset. VPVD poate fi configurat și setat numai software.

2.2.3 Regulator de tensiune

Regulatorul de tensiune din microcontrolerul STM32F103CBT6, este creeat pentru a lucra împreună cu CRC pentru a ține tensiunea la 1.8V. CRC măsoră tensiunea de intrare (VDD) pe pinul VDDA și în funcție de aceasta setează regulatorul de tensiune la un nivel mai ridicat sau mai scăzut. Astfel tensiunea pentru nucleu este menținută la 1.8V constant.

Regulatorul de tensiune de pe acest dispozitiv are trei moduri de operare:

modul principal (MR);

modul consum redus de energie (LPR);

modul de putere joasă.

MR este utilizat în mod normal tot timpul funcționarii dispozitivului iar LPR este utilizat atunci când se intră în modul de oprire.

Modul de putere joasă este utilizat în modul de așteptare: acest mod de ieșire este de impedanță mare: circuitul nucleului este, oprit inducând consumul zero, însă conținutul registrelor se pierde. Acest mod de ieșire este activat întodeauna în timp de reset. După resetare regulatorul iese din acest mod și revine la cel normal.

De asemena regulatorul de tensiune are modul normal și de consum redus.

2.2.4 Modurile de consum redus de energie

Linia de performanța STM32F103XX oferă trei moduri de consum redus de energie pentru a obține cel mai bun rezultat și cel mai mic compromis între economisirea energiei, obținearea performanțelor maxime, un timp de pornire scurt și disponibilitarea de auto-wake-up la întreruperi.

Cele trei moduri de economisire de energie sunt:

Modul Veghe: în acest mod (sleep) numai nucleul este oprit, restul perifericelor continuă să funcționeze în mod normal. Procesorul va porni la o întrerupere/un eveniment.

Modul Oprire: acest mod atinge cel mai mic consum de energie posibil în același timp pastrând conținutul memoriei SRAM și al registrelor. Toate ceasurile din domeniul 1.8V sunt oprite inclusiv PLL, toate oscilatoarele și cristalul HSE.

Modul în așteptare: este folosit pentru a obține cel mai mic consum de energie. Regulatorul de tensiune intern este oprit, astfel încât întregul domeniu de 1,8 V este oprit. PLL, HSI RC și oscilatoarele de cristal HSE sunt, de asemenea, oprite. După intrarea în modul așteptare, memoriea SRAM și conținutul registrelor sunt pierdute, cu excepția registrelor din domeniul de rezervă și din circuitul în așteptare. Dispozitivul iese din modul Stand-By atunci când are loc o resetare externă.

2.3 Caracteristici electrice

2.3.1 Valori tipice / Raportare la parametri

Familia STM32F103XX, este o familie de procesoare creeată pentru a rezista la orice condiții de mediu. În orice situații de temperatură în care a fost testat (cuprinsă între -25…95 grade Celsius) dispozitivul a funcționat complet normal.

Fiecare dispozitiv din familie a fost testat separat, iar fiecare lot de produse de asemenea. Un procent de 95% din acestea au funcționat normal în aceste condiții de testare. Valorile tipice înegistrate au fost de 3.3V în orice condiții. Dacă nu se specifică altfel toate tensiunile sunt raportate la VSS.

2.3.2 Încărcarea condensatorilor/măsurare tensiune de intrare și consum de energie

MCU-ul STM32F103CBT6 conține un sistem foarte avansat de gestionare a sistemului electric, numit CRC (controlul redutanței ciclice), capabil să măsoare tensiunea și consumul de curent de pe fiecare pin, dar și să încarce sau descarce capacitorii într-un mod relativ eficient.

Condițiile de încărcare utilizate pentru măsurarea parametrilor AC sunt prezentate în figura 2.3, măsurarea tensiunii de intrare pe un PIN al dispozitivului este descrisă in figura 2.4, iar măsurarea consmului de energie este ilustrată in figura 2.5.

2.3.3 Maxime absolute

Caracteristicile termice pot provoca deteriorarea permanentă a dispozitivului. Acestea sunt doar evaluări de stres și de funcționare ale aparatului. Expunerea la condiții de maximă evaluare pentru perioade lungi de timp poate afecta fiabilitatea dispozitivului. Maximele absolute sunt prezentate în tabelul următor (Tabelul 1.1).

Tabelul 1.1 Maxime absolute de funcționare

Capitolul 3 – Aplicații cu STM32F103CBT6

3.1 Joc de LED-uri cu JoyStick

3.1.1 Noțiuni generale

MCU-ul STM32F103CBT6 din seria de mare performanță STM32F103xx este capabil de o gestiune foarte eficientă a intrărilor și ieșirilor. Acești pini de I/O au fost numiți GPIO (general propose input-output). Folosind acești pini, microprocesorul poate să comunice cu dispozitive simple, din exterior: butoane, motoare, LED-uri, relee, etc. Însă GPIO-urile sunt capabile să gestioneze decât un consum de 15 mA/pin. Așadar conectat direct la un pin putem controla decât un LED. Folosind un tranzistor putem folosi și alți consumatori ca releele sau motoarele. Această aplicație folosește exact această abilitate de I/O a pinilor procesorului. MCU-ul gestionează aici 6 pini ca intrare și 4 pini ca ieșire.

3.1.2 Materiale folosite și scheme electrice

Materialele necesare sunt incluse pe platforma de dezvoltare Open 103C. Astfel că folosim: un JoyStick cu 5 poziții (A, B, C, D, + centru), un buton și STM32F103CBT6.

Conexiunea dintre MCU și dispozitivele de intrare este ilustrată în următoarea figură (Figura 3.1).

Figura 3.1 Conexiunea dintre MCU și dispozitivele de intrare

JoyStick-ul reprezintă un dispozitiv alcătuit dintr-o articulație sferică mobilă, ale cărei deplasări unghiulare sunt transformate în semnale electrice analogice. Modelul de joystick aflat pe platformă are 8 pini, dintre ei folosiți numai 6, restul de 2 pini fiind duși în GND. Fiecare pin este trecut printr-un jumper pentru a putea fi dezactivat când nu este nevoie de el. Astfel că pinul 1 sau A ajunge în pinul PB0, pinul 2 sau CTR (centru) ajunge în pinul PB9, pinul 3 sau C ajunge în pinul PB3, pinul 4 sau B ajunge în PB2, pinul 5 sau COM ajunge în GND (masă) iar pinul 6 sau D ajunge în PB8.

Butonul folosit aici este butonul inclus pe platforma de dezvoltare. În schemă el este trecut printr-un jumper și dus în pinul PA0.

Dispozitivele de ieșire folosite aici sunt 4 LED-uri conectate potrivit schemei alăturate (Figura 3.2).

Figura 3.2 Conectarea LED-urilor

3.1.3 Funcționalitate și software

Pe platformă este încărcat pe memoria flash internă un software care monitorizeză constant GPIO-urile potrivite și când are loc un eveniment execută funcția potrivită.

Schema bloc a acestei aplicații este prezentată în figura de mai jos (Figura 3.3).

Figura 3.3 Schemă bloc aplicația 1

3.1.4 Implementarea aplicației cu STM32F103CBT6

După ce totul a fost conectat și software-ul a fost încărcat a venit timpul să testăm aplicația. Aplecând joystick-ul spre stânga LED-ul numărul 2 începe să licărească foarte rapid (Figura 3.4), spre dreapta LED-ul numărul 3 licărește, în sus LED-ul numărul 1 licărește, în jos LED-ul numărul 4 (Figura 3.4) iar în centru toate LED-urile se aprind (Figura 3.5). De asemenea apăsând pe butonul utilizatorului, notat pe placă cu WAKEUP, se aprind LED-urile 3 și 4 (Figura 3.6).

Figura 3.4 Implementare aplicația 1 apăsare joystick

Figura 3.5 Implementare aplicația 1 apăsare WAKEUP

3.2 GLCD

3.2.1 Noțiuni generale

Platforma de dezvoltare Open 103C cu STM32F103CBT6 are printre accesorii și un GLCD cu o diagonală de 2,4 inch (aproximativ 6 cm) capabil de operațiuni touchscreen. MCU-ul poate să execute și acțiuni abișnuite pentru un GLCD (să afișeze un text, o imagine, forme geometrice, etc.) însă deasupra LCD-ului normal este atașată o folie care poate detecta obiectele ce ating ecranul și poate verifica locația acestora.

Cu ajutorul acestui LCD am putut creea o aplicație asemanătoare Paint-ului din Micrsoft Windows, însă am afișat și un text deasupra zonei de desenat.

3.2.2 Elemente necesare și scheme electrice

Această aplicație folosește doar câteva componente. Acestea sunt două: GLCD 22 TOUCHSCREEN cu diagonala de 2,4 inch și platforma de dezvoltare Open 103C cu STM32F103CB.

Conexiunile realizate urmăresc schema electrică de mai jos (Figura 3.6).

Figura 3.6 Schemă electrică

3.2.3 Funcționalitate și software

Software-ul încărcat în memoria flash a microcontrolerului este unul relativ simplu care inițializeză LCD-ul, afișează pe centrul ecranului o mostră de text: “Student/Masterand: Dorin Safta, U. Valahia, Târgoviște” iar apoi generează o buclă infinită care analizeză foița TouchScreen și de fiecare dată când detectează că un obiect nou atinge ecranul calculează coordonatele (x, y) acestuia și creează un punct negru acolo unde a fost detectată atingerea.

Schema bloc a aplicației este afișată în figura de mai jos (figuar 3.7).

Figura 3.7 Schemă bloc aplicația 2

3.2.4 Implementarea aplicației cu STM32F103CBT6

După ce software-ul a fost încărcat pe platforma Open 103C cu ajutorul programatorului ST-Link v2 și după ce toate conexiunile au fost realizate în mod corespunzător s-a trecut la testarea prototipului.

Am început a desena cu mai multe instrumente: PEN TouchScreen, pix, creion, etc. însă cel mai bun instrument pentru a desena a fost o scobitoare de masă din lemn.

Primul lucru observat a fost că există o oarecare deviație a punctului negru față de locul atingerii. Am încercat corectarea software a deviației, însă nu am reușit decât într-o proporție destul de mică.

În al doilea rând fundalul a fost schimbat de la verde la roșu deoarece punctul nu era destul de bine vizibil. Pentru a face această modificare am intervenit din nou la modificarea software-ului.

Forma finală a aplicație poate fi observată în figura de mai jos (figura 3.8).

Figura 3.8 Implementare aplicația 2

3.3 Mouse USB cu JoyStick

3.3.1 Noțiuni generale

Microcntrolerul STM32F103CBT6 este capabil de a funcționa ca un dispozitiv HID (Human Interface Devices). Spre exemplu el poate funcționa ca o tastatură sau în această aplicație ca un mouse pe USB. Pentru a putea funcționa este necesară instalarea driverului special, care vine împreună cu platforma Open 103C.

Procedeul HID este des întâlnit la dispozitivele care interacționează cu oamenii spre exemplu tastatura sau mouse-ul. Majoritatea dispozitivelor capabile HID sunt bazate pe MCU-uri din familia AVR și ARM.

În această aplicație am folosit JoyStick-ul aflat pe platforma Open 103C pentru a controla cursorul mouse-ului unui PC cu sistemul de operare Microsoft Windows.

3.3.2 Elemente necesare și scheme electrice

Pentru această aplicație am folosit JoyStick-ul pentu a controla cursorul doar din cauză că acesta oferă un grad ridicat de libertate, astfel că am putut controla mouse-ul în orice direcție.

Schema electrică de conectare a joystick-ului este prezentată în figura de mai jos (figura 3.9).

Figura 3.9 Schemă electrică

În schema de mai sus este ilustrată conexiunea realizată pentru joystick-ul de pe platformă, care are 8 pini, numai 6 dintre ei folosiți, restul fiind legați la GND. Astfel că pinul 1 sau A ajunge în pinul PB0, pinul 2 sau CTR (centru) ajunge în pinul PB9, pinul 3 sau C ajunge în pinul PB3, pinul 4 sau B ajunge în PB2, pinul 5 sau COM ajunge în GND (masă), iar pinul 6 sau D ajunge în PB8.

3.3.3 Software și funcționalitate

Software-ul din memoria flash a MCU-ului este relativ simplu. Acesta inițializează la început procedeul HID pe USB iar apoi intră într-o buclă infinită. În această buclă sunt monitorizați pinii la care este conectat joystick-ul, iar dacă o modificare este detectată trimite o comandă pe USB prin care mută mouse-ul cu 2 pixeli în direcția corespunzătoare sau dacă este apăsat joystick-ul în centru atunci cursorul va face click stânga.

În figura alăturată (figura 3.10) este ilustrată schema bloc a aplicației.

Figura 3.10 Schemă bloc aplicația 3

3.3.4 Implementarea aplicației cu STM32F103CBT6

La începerea testării rezultatele au fost fost foarte bune. Am încercat la început să controlez cursorul cu ajutorul joystick-ului cu programatorul ST-Link v2 conectat la placă. După câteva eșecuri am realizat că atâta timp cât programatorul este conectat la platformă aplicația nu va funcționa. După cercetări mi-am dat seamă că motivul erorilor era faptul că atât USB-ul cât și programatorul folosesc interfața USART1. După deconectarea programatorului totul a funcționat în mod normal.

Fiecare direcție a joystick-ului a fost testată și chiar și funcția click. Am observat că nu există latență în mișcarea cursorului, însă acesta rămâne puțin blocat spre stânga. Spre exemplu simularea apasării butonului stâng al mouse-ului (click stânga) este vizibilă în figura 3.11, unde este deschis folderul “Folder Test ” cu ajutorul joystick-ului.

Figura 3.11 Implementare aplicația 3

Figura 3.12 Ce se întâmplă pe ecran

3.4 Server Web găzduit de STM32F103CBT6

3.4.1 Noțiuni generale

STM32F103CBT6 este unul din cele mai complexe MCU-uri existente. Acesta are foarte multe căi de comunicare și mai ales puterea de a le gestiona. Exact de aceste caracterstici se folosește această aplicație, de comunicarea SPI și de capacitatea CPU-ului de a prelucra imensa cantitate de informație ce este recepționată sau transmisă prin aceasta.

Se folosește un adaptor de internet bazat pe ENC28J60 care comunică pe SPI pentru a configura și găzduii una sau mai multe pagini web complete.

3.4.2 Elemente folosite și scheme electrice

Materialele necesare acestei aplicații sunt: platforma de dezvoltare Open 103C, adaptorul de internet ENC28J60, cabluri de rețea, un router de internet (nu contează compania producătoare sau provider-ul de internet) și o sursă de alimentare externă.

Singura conexiune efectuată este conectarea adaptorului cu ENC28J60 la platformă prin interfața SPI. Această conexiune este ilustrată în figura 3.13.

Figura 3.13 Conectare adaptor ENC28J60 la platformă

După ce adaptorul a fost conectat trebuie ca acesta să fie legat la un router de internet și neapărat tot dispozitivul (Open 103C + ENC28J60) trebuie alimentat. Eu am ales să alimetez sistemul de la portul USB al router-ului deoarece a fost mult mai convenabil.

Conexiunile realizate sunt ilustrate în figura de mai jos (figura 3.14).

Figura 3.14 Conexiune Open 103C, ENC28J60 la router de internet

3.4.3 Software și funcționalitate

Această aplicație are cel mai complicat software dintre toate cele prezentate. Acesta ocupă peste 99% din memoria flash (127,72Kb din 128Kb).

Acest software inițializează modulul cu ENC28J60 și legătura prin SPI cu acesta iar apoi intră într-o buclă infinită. În această buclă este creeat un server web și apoi se așteaptă clienții.

Dacă un client este detectat acesta este condus spre pagina de conectare. Pentru a te conecta este nevoie de o parolă (“licenta”). Dacă parola este introdusă greșit clientul este redirecționat spre o pagină care îl avertizează că parola introdusă este greșită și că pentru a continua trebuie să reîncerce să introducă parola corectă. Dacă parola este introdusă corect atunci clientul este redirecționat către o pagină web numită panou de control sau pagină principală. Din această pagină se poate controla un contor cu valori HEX. Pe pagină este afișat mai mult text, iar tot de aici utilizatorul se poate deconecta. Dacă acesta apasă pe butonul “Deconectare” va fi redirecționat către prima pagină sau pagina de pornire.

Schema bloc a aplicației este ilustrată în figura de mai jos (figura 3.15).

Figura 3.15 Schema bloc aplicația 4

3.4.4 Implementarea aplicației cu STM32F103CBT6

Primul lucru testat a fost pagina de conectare. Pentru a accesa prima pagină se deschide un web browser (ex: Google Chrome, Internet Explorer, Mozilla Firefox, etc.) și se scrie în bara de adrese adresa IP a platformei (192.168.1.50) urmat de portul serverului (80). Adresa finală va fi: http://192.168.1.50:80. Accesarea adresei este ilustrată în figura de mai jos.

Figura 3.16 Accesarea adresei IP

Pagina de pornire conține text și instrucțiunii de conectare. Pentru a te conecta trebuie să introduci în bara de adrese a browserului adresa IP urmată de parolă (http://192.168.1.50/licență). Pagina de logare este afișată în figura alăturată.

Figura 3.17 Pagina de pornire (conectare)

Dacă parola corectă (“licență”) a fost introdusă corect clientul va fi redirecționat către pagina principală (panoul de control) ilustrat în figura de mai jos (figura 3.18).

Figura 3.18 Panoul de control

De aici putem incrementa valoarea contorului cu valori HEX, cu ajutorul butonului “+1” dar și ne putem deconecta cu ajutorul butonului “Deconectează-te” care redirecționează clientul către pagina de start.

În caz că parola introdusă este greșită utilizatorul este redirecționat către pagina de eroare, parola greșită. Această pagină poate fi vizualizată în figura 3.19.

Figura 3.19 Parolă greșită

3.5 Controler ADC

3.5.1 Noțiuni generale

O funcție foarte importantă a oricărui microcontroler este funcția de ADC sau PWM (Pulse With Modulation) și de sigur că o asemenea funcție nu poate lipsii MCU-ului STM32F103CBT6.

Folosindu-se de o interfață serială (USART1) și de un LED aplicația următoare demonstrează capabilitățile procesorului de a gestiona PWM-ul și funcțiile analogice. Pentru a interpreta semnalele USART este folosit un modul de conversie USB-Serial cu integratul PL2303. Software-ul folosit pe PC poate fi orice serial monitor, chiar și cel din Arduino IDE, însă eu am ales să folosesc Serial Port Monitor ediția Free.

Valoarea ADC citită de pe primul rezistor variabil este afișată pe Serial Monitor la fiecare 2 secunde iar valoarea citită de pe rezistorul al doilea este transformată în PWM cu ajutorul căruia este controlată luminozitatea primului LED.

3.5.2 Materiale folosite și scheme electrice

Materialele folosite de acestă aplicație sunt destul de puține. Singurul element care iese în evidență este modulul cu PL2303 care convertește semnalele seriale în semnale USB și invers. Se mai folosește și o placuță de teste ADC și de sigur platforma de dezvoltare Open 103C.

Conexiunea realizată pentru LED este ilustrată în figura următoare (figura 3.20) iar conexiunile pentru ADC în figura 3.21.

Figura 3.20 Conexiune LED

Figura 3.21 Conexiunile pentru ADC

3.5.3 Software și funcționalitate

Software-ul încărcat pe platforma de dezvoltare Open 103C este relativ simplu. Acesta monitorizează constant doi pini cu capabilitați PWM (ADC) și la fiecare schimbare acesta actualizează starea LED-ului de pe placă sau comunicația serială de pe USART1. În caz că nu este detectată nicio schimbare la fiecare jumătate de secundă pe serial este transmis un mesaj ce conține datele citite de pe pinul monitorizat.

Schema bloc a aplicației este ilustrată în figura următoare (figura 3.22).

Figura 3.22 Schema bloc aplicația 5

3.5.4 Implementarea aplicației cu STM32F103CBT6

Primul lucru observat imediat după începerea testelor a fost faptul că configurarea portului serial este puțin cam dificilă, așa că iată configurația mea: am folosit software-ul Serial Port Monitor produs de Eltima Software, versiunea 5.0 pentru a citii datele de la USART iar ca convertor USB-Serial și invers am folosit un modul cu PL2303.

După ce am reușit să configurez totul am încercat să văd mesajul pe serial monitor. Această încercare a mea este ilustrată în figura de mai jos (figura 3.23).

Figura 3.23 Captură de ecran

Iar încercarea mea de a controla luminozitatea unui LED cu ajutorul unui rezistor variabil (potențiometru) este ilustrată în figura 3.24.

Figura 3.24 Controlul luminozității unui LED

3.6 MicroSD MMC (Memory Card)

3.6.1 Noțiuni generale

Lucrul de care este cel mai capabil MCU-ul STM32F103CBT6 este să comunice. Această comunicare pe care o realizează microcontrolerul poate fii extrem de diversă, însă cel mai întâlnit mijloc de comunicare este SPI. În lume există extrem de multe dispozitive ce comunică pe această interfață.

SPI (Serial Peripherical Interface) este cel mai des folosit pe partea unde este necesar transferul rapid de informații relativ mari, fiind capabilă de transfer de date până la 5 MB/s.

În această aplicație am folosit interfața SPI ca mijloc de comunicare între MCU și un modul de citire/scriere microSD, pentru a afișa pe Serial Monitor, prin interfața USART1, capacitatea în MB a nui card microSD și pentru a efectua un mic test de scriere/citire.

3.6.2 Materiale folosite și scheme electrice

Pentru această aplicație am folosit pe lângă platforma de dezvoltare Open103C și un modul de citire/scriere microSD, un modul de conversie USB → Serial (USART) și invers cu integratul PL2303 și un microSD de 1.9 GB.

Conexiunile au fost relativ simplu de realizat: modulul microSD la interfața SPI1 de pe platformă iar modulul de conversie la interfața USART1. Figura de mai jos (figura 3.25) ilustrează aceste conexiuni.

Figura 3.25 Conexiune microSD la interfața SPI1 și USART1

3.6.3 Software și funcționalitate

Software-ul acestei aplicații este simplu. Acesta nu face decât să inițializeze modulul microSD apoi să intre într-o buclă infinită unde, verifică dacă există sau nu un card introdus iar dacă da să afișeze pe USART1 un mesaj cu capacitatea memoriei în MB să scrie pe primul sector al SD pe toți cei 512 biți cifra 0 iar apoi să citească de pe card primul bit din sector, să-l afișeze pe serial monitor, apoi să-l compare cu ceea ce a scris iar dacă aceste două informații coincid să afișeze un mesaj cu textul “Corect!:)”.

Shema bloc este prezentată în figura de mai jos (figura 3.26).

Figura 3.26 Schema bloc aplicația 6

3.6.4 Implementarea aplicației cu STM32F103CBT6

Pentru început, după ce am terminat de programat platforma, am vrut să văd ce se întâmplă dacă modulul nu era introdus, se pare că mesajul afișat pe USART era același pe care l-am programat pentru lipsa SD cardului. Acest mesaj era repetat la fiecare 2 secunde exact cum mă așteptam să se întâmple. O captură de ecran cu acest mesaj este ilustrată în figura de mai jos.

Figura 3.27 Captură ecran afișare mesaj

După aceea am hotărât să asamblez totul și să introduc și un card de memorie. Ansamblul final este ilustrat în figura 3.28.

Figura 3.28 Ansamblu final

După asamblare am deschis serial monitorul și am privit cum totul funcționa perfect. A trebuit să dau un reset scurt MCU-ului pentru a reafișa datele deoarece placa era pornită dinaintea deschiderii software-ului. O captură de ecran cu acest lucru este prezentată în figura de mai jos.

Figura 3.29 Captură ecran afișare mesaj citire-scriere microSD a unui caracter

După aceea am decis că ar fi mult mai concludent să folosesc în loc de o banală cifră un text. Textul pe care l-am folosit (“Safta Dorin – Proiect de diploma, STM32F103CBT6”) are 47 de caractere și ocupă tot atâția biți în blocul de date numărul 1. O altă captură de ecran ilustrând acest lucru este cea din figura de mai jos (figura 3.30).

Figura 3.30 Captură ecran afișare mesaj citire-scriere microSD a unui text

Rezultate și concluzii

S-a prezentat un MCU din gama ARM Cortex M3 produs de către ST Microcontrollers ce permite o eficiență crescută cu cel mai mic consum de energie electrică. Acest microcontroler se numește STM32F103CBT6 și face parte din familia STM32F103XX.

Familia STM32F103XX este capabilă de o largă varietate de acțiuni complexe. Cele mai interesante au fost ilustrate în aplicațiile de mai sus (Capitolul 3). Pentru a putea folosii aceste capabilități ale microcontrolerului în aceste aplicații am folosit o platformă de dezvoltare echipată cu acest procesor. Unele din acțiunile complexe de care este capabil MCU-ul deci și platforma Open 103C sunt: gestionarea rapidă, eficientă și multiplă a întreruperilor pe pinii GPIO (General Propose I/O), stocarea datelor în regiștrii de rezervă, folosirea procedeului HID pe USB, etc.

S-au utilizat produse hardware și software ale companiei ST Microcontrollers: Software: Keil uVision 4, iar Hardware: MCU-ul STM32F103CBT6.

Rezultatele au fost următoarele:

un program software ce permite aprinderea/stingerea unor LED-uri în funcție de gestiunea joystick-ului facută de MCU pentru a putea testa abilitatea de control I/O a acestei familii de microcontrolere;

un program software ce funcționează împreună cu un GLCD touchscreen și ce permite desenarea pe ecran cu ajutorul unui stilou touch sau a oricărui obiect ce nu daunează GLCD-ului;

un program software care folosește funcția procesorului de HID și care poate controla cursorul mouse-ului cu ajutorul joystick-ului;

un program software care cu ajutorul modulului ENC28J60 poate gestiona conexiuni de rețea; în aplicația prezentată MCU-ul gazduiește o pagină WEB completă relativ complicată, cu sistem de conectare/deconectare, panou de control și pagină de start;

un program software ce permite testarea și folosirea funcțiilor ADC ale MCU-ului STM32F103CBT6;

un program software cu ajutorul căruia se poate verifica capacitatea memoriei unui microSD.

Contribuțiile autorului sunt:

studiul în domeniu asupra temei alese;

realizarea a 4 aplicații, toate creeate în Keil uVision 4, ce pot fi utilizate pentru lucrările de laborator la disciplina Sisteme cu microcontrolere aferentă celor 2 specializări din domeniul Electronică și Telecomunicații, anul IV, sau la studiile de masterat;

creearea paginilor WEB necesare ultimei aplicații cu ajutorul limbajelor de programare HTML, CSS, PHP.

În afară de aplicațiile prezentate cu acest tip de MCU (STM32F103CBT6) se pot realiza și altele mai complexe ca:

realizarea unei conexiuni pe toate tipurile posibile (SPI, I2C, CAN, USART, USB, etc.) în același timp;

încărcarea unui sistem de operare bazat pe Java sau Linux;

implementarea unui sistem de tip “Casă Inteligentă” (conectarea unei plăci cu relee la diferiți pini GPIO și apoi realizarea unei pagini WEB pentru a controla diverse dispozitive electrice ce lucrează la tensiunea de 220V);

dezvoltarea procedeului HID pentru a creea o tastatură avansată;

redarea/înregistrarea sunetelor cu ajutorul modului MP3.

BIBLIOGRAFIE

Cărți, articole de specialitate, lucrări de licență/disertație

Geoffrey Brown,Discovering the STM32 Microcontroller, 2014;

M. Dăbâcan, Bazele sistemelor de achiziție de date, Editura Casa Cărții de Știință, Cluj-Napoca, 2004;

G.Predușcă, Bazele sistemelor de achiziție de date, notițe de curs, Târgoviște, 2014;

Florian Ion, Sisteme cu microcontrolere, notițe de curs, Târgoviște, 2014;

Open 103C, STM32F103CBT6

STM32F103CBT6 – Datasheet

The Insider’s Guide To The STM32, Hitex, 2009;

Wave Share, Open 103C Manual

Keil uVision 4,

http://www.keil.com/uvision/;

Anexă

BIBLIOGRAFIE

Cărți, articole de specialitate, lucrări de licență/disertație

Geoffrey Brown,Discovering the STM32 Microcontroller, 2014;

M. Dăbâcan, Bazele sistemelor de achiziție de date, Editura Casa Cărții de Știință, Cluj-Napoca, 2004;

G.Predușcă, Bazele sistemelor de achiziție de date, notițe de curs, Târgoviște, 2014;

Florian Ion, Sisteme cu microcontrolere, notițe de curs, Târgoviște, 2014;

Open 103C, STM32F103CBT6

STM32F103CBT6 – Datasheet

The Insider’s Guide To The STM32, Hitex, 2009;

Wave Share, Open 103C Manual

Keil uVision 4,

http://www.keil.com/uvision/;

Similar Posts