Sunteți pe pagina 1din 92

Universitatea “Politehnica” din Bucureşti Facultatea de Electronică, Telecomunicaţii şi Tehnologia Informaţiei

Controlul turaţiei motoarelor de curent continuu folosind microcontroler PIC şi măsurarea tensiunii autoinduse

Lucrare de licenţă

Prezentată ca cerinţă parţială pentru obţinerea titlului de Inginer în domeniul Electronică şi Telecomunicaţii/ Calculatoare şi Tehnologia Informaţiei programul de studii Electronica Aplicata

Conducător ştiinţific

Prof. Dr. Ing. Sever PAŞCA

Absolvent

Alexandru Marius DOBRE

2011

Universitatea “Politehnica” din Bucureşti Facultatea de Electronică, Telecomunicaţii şi Tehnologia Informaţiei Catedra Electronică Aplicată şi Ingineria Informaţiei

Aprobat Şef de Catedră:

Prof. Dr. Ing. D. A. Stoichescu

TEMA LUCRǍRII DE LICENŢǍ a studentului Alexandru Marius DOBRE

  • 1. Titlul temei:

Controlul turaţiei motoarelor de curent continuu folosind microcontroller PIC şi măsurarea

tensiunii autoinduse.

  • 2. Date iniţiale:

    • - Platforma Microchip PICDEM Mechatronics

    • - Motor de curent continuu 5-9 V MABUCHI RS-385PH

    • - Reglajul turaţiei cu ajutorul PWM

    • - Metodă de feedback: tensiunea autoindusă

  • 3. Conţinutul memoriului:

    • - Controlul turaţiei motoarelor de curent continuu

    • - Microcontrolerul PIC16F917

    • - Placa de dezvoltare PICDEM Mechatronics

    • - Proiectare software a aplicaţiei pentru microcontroller folosind limbaj C

    • - Proiectare software a aplicaţiei pentru PC folosind Visual Basic.NET

    • - Rezultate experimentale

    • - Bibliografie

  • 4. Forme de prezentare:

    • - Lucrare de licenţă tipărită şi în format electronic pe CD

    • - Prezentare PowerPoint

    • - Model experimental, surse software

  • 5. Contribuţia studentului:

    • - Sinteză teoretică despre controlul motoarelor de curent continuu

    • - Prezentarea sistemului de dezvoltare PICDEM Mechatronics

    • - Implementare şi testare software Program în limbaj C pentru microcontrollerul PIC16F917 Aplicaţie PC folosind Visual Basic.NET

  • o

    o

    • 6. Lucrarea serveşte ca: autodotare

    • 7. Locul de desfăşurare a activităţii: Facultatea de Electronică, Telecomunicaţii şi Tehnologia Informaţiei, UPB, Leu B324

    • 8. Mijloacele materiale sunt puse la dispoziţie de: UPB

    • 9. Realizarea practică rămane în proprietatea: UPB

    10. Data eliberării temei: 08.10.2010

    CONDUCĂTOR LUCRARE:

    Prof. Dr. Ing. Sever PAŞCA

    STUDENT:

    Alexandru Marius DOBRE

    Declaraţie de onestitate academică

    Prin prezenta declar că lucrarea cu titlul “Titlul complet al proiectului”, prezentată în cadrul Facultăţii de Electronică, Telecomunicaţii şi Tehnologia Informaţiei a Universităţii “Politehnica” din Bucureşti ca cerinţă parţială pentru obţinerea titlului de Inginer/ Master în domeniul Inginerie Electronică şi Telecomunicaţii/ Calculatoare şi Tehnologia Informaţiei, programul de studii Electronica Aplicata este scrisă de mine şi nu a mai fost prezentată niciodată la o facultate sau instituţie de învăţământ superior din ţară sau străinătate.

    Declar că toate sursele utilizate, inclusiv cele de pe Internet, sunt indicate în lucrare, ca referinţe bibliografice. Fragmentele de text din alte surse, reproduse exact, chiar şi în traducere proprie din altă limbă, sunt scrise între ghilimele şi fac referinţă la sursă. Reformularea în cuvinte proprii a textelor scrise de către alţi autori face referinţă la sursă. Înţeleg că plagiatul constituie infracţiune şi se sancţionează conform legilor în vigoare.

    Declar că toate rezultatele simulărilor, experimentelor şi măsurătorilor pe care le prezint ca fiind făcute de mine, precum şi metodele prin care au fost obţinute, sunt reale şi provin din respectivele simulări, experimente şi măsurători. Înţeleg că falsificarea datelor şi rezultatelor constituie fraudă şi se sancţionează conform regulamentelor în vigoare.

    Bucureşti,

    Alexandru Marius DOBRE

    Declaraţie de onestitate academică Prin prezenta declar că lucrarea cu titlul “ Titlul complet al proiectului

    Cuprins

    Capitolul 1. Introducere ...................................................................................................................... 14 1.1 Obiectivul lucrării 14 1.2 Scopul lucrării 14 1.3 Contribuţia studentului
    Capitolul 1. Introducere
    ......................................................................................................................
    14
    1.1
    Obiectivul lucrării
    14
    1.2
    Scopul lucrării
    14
    1.3
    Contribuţia studentului
    14
    Capitolul 2. Prezentare teoretică
    .........................................................................................................
    15
    2.1
    Placă de dezvoltare PICDEM Mechatronics
    15
    2.1.1
    Introducere
    .........................................................................................................................
    15
    2.1.2
    Descrierea plăcii de dezvoltare
    15
    2.1.3
    Facilităţi
    .............................................................................................................................
    16
    2.2
    Microcontrolerul PIC16F917
    18
    2.2.1
    Prezentare generală
    18
    2.2.2
    Organizarea memoriei
    19
    2.2.3
    Porturile I/O
    .......................................................................................................................
    22
    2.2.4
    Modulul oscilator (cu sistem de monitorizare a ceasului)
    22
    2.2.5
    Modulele Timer
    .................................................................................................................
    23
    2.2.6
    Modulul comparator
    24
    2.2.7
    Transmiţător Receptor Sincron Asincron Universal (AUSART)
    25
    2.2.8
    Modulul de comandă al ecranului LCD
    27
    2.2.9
    Convertorul analog digital (ADC)
    28
    2.2.10 Modulul de Stocare/Comparare/PWM (CCP)
    30
    2.3
    Afişaje cu cristale lichide (LCD)
    34
    2.4
    Motorul de curent continuu cu perii
    36
    2.4.1
    Introducere
    36
    2.4.2
    Principiu de funcţionare
    36
    2.4.3
    Tipuri de motoare de curent continuu
    37
    2.4.4
    Modele de circuite de comandă
    38
    2.4.5
    Controlul vitezei
    40
    2.4.6
    Elemente constructive ale motorului de curent continuu cu perii cu magneţi permanenţi
    41
    2.4.7
    Tensiunea electromotoare autoindusă
    42
    Capitolul 3. Proiectare software
    45
    3.1
    Introducere
    45
    3.2
    Proiectarea software pentru microcontroler
    45
    3.2.1
    Introducere
    45
    3.2.2
    Semnificaţia şi funcţiile componentelor:
    46
    3.2.3
    Stabilirea unui protocol de comunicare între microcontroler şi PC
    47
    3.2.4 Descrierea algoritmului şi a codului sursa 48 3.3 Proiectarea software pentru PC 57 3.3.1 Introducere
    3.2.4
    Descrierea algoritmului şi a codului sursa
    48
    3.3
    Proiectarea software pentru PC
    57
    3.3.1
    Introducere
    57
    3.3.2
    Prezentarea interfeţei grafice
    57
    3.3.3
    Descrierea generală a algoritmului
    60
    Capitolul 4. Date experimentale
    62
    4.1
    Introducere
    62
    4.2
    Măsurarea vitezei reale de rotaţie
    62
    4.3
    Tensiunea medie a semnalului PWM
    65
    4.4
    Legătura dintre viteza de rotaţie şi tensiunea electromotoare autoindusă
    66
    Capitolul 5. Concluzii
    Bibliografie
    Capitolul 6. ANEXA 1 – Schema plăcii de dezvoltare PICDEM
    ANEXA 2 – Structura internă a microcontrolerului PIC16F917
    ANEXA 3 – Funcţiile pinilor pentru microcontrolerul
    ANEXA 4 – Schema electrică simplificată a
    ANEXA 5 – Descrierea modulului de comandă pentru ecranul LCD
    ANEXA 6 - Schema ecranului LCD VIM-332
    ANEXA 7 – Codul sursă al aplicaţiei pentru
    ANEXA 8 – Codul sursă al aplicaţiei PC
    71
    73
    75
    76
    77
    78
    79
    79
    80
    86

    Lista figurilor:

    Figura 2.1 Placa de dezvoltare PICDEM Mechatronics[1]................................................................16 Figura 2.2 Harta memoriei de program..............................................................................................20 Figura 2.3 Încărcarea numărătorului de program...............................................................................21 Figura 2.4 Un singur comparator........................................................................................................25 Figura 2.5 Generarea ceasului pentru LCD........................................................................................28 Figura 2.6 Schema bloc a circuitului de conversie analog digitală....................................................29 Figura 2.7 Alinierea rezultatului conversiei A/D...............................................................................30 Figura 2.8 Schema bloc de funcţionare în modul stocare..................................................................31 Figura 2.9 Schema bloc de funcţionare în modul comparare.............................................................32 Figura 2.10 Schema bloc simplificata pentru funcţionarea CCP în modul PWM ..............................33 Figura 2.11 Ieşirea CCP în modul PWM ............................................................................................34 Figura 2.12 Comanda directă a unui afişaj LCD cu un digit ..............................................................34 Figura 2.13 Comanda multiplexata a unui LCD cu 3 digiti folosind 4 plane comune .......................35 Figura 2.14 Schema simplificată a unui motor de curent continuu....................................................36 Figura 2.15 Motor cu magnet permanent ...........................................................................................37 Figura 2.16 Motor cu excitaţie paralelă..............................................................................................37 Figura 2.17 Motor cu excitaţie serie...................................................................................................37 Figura 2.18 Motor cu excitaţie mixtă.................................................................................................38 Figura 2.19 Circuit de comandă de tip A...........................................................................................38 Figura 2.20 Circuit de comandă de tip B............................................................................................39 Figura 2.21 Schema unei punti H.......................................................................................................39 Figura 2.22 Utilizarea senzorului optic..............................................................................................41 Figura 2.23 Utilizarea senzorului Hall...............................................................................................41 Figura 2.24 Măsurarea tensiunii electromotoare autoinduse folosind puntea H................................41 Figura 2.25 Elemente constructive ale motorului de cc. cu magnet permanent[6]............................42 Figura 2.26 T.e.m autoindusă pentru factor de umplere 25%[8]........................................................43 Figura 2.27 T.e.m autoindusă pentru factor de umplere 75%[8]........................................................44 Figura 2.28 T.e.m autoindusă pentru factor de umplere 75% sub sarcină[8].....................................44 Figura 3.29 Diagrama sistemului de reglaj automat...........................................................................45 Figura 3.30 Diagrama buclei principale de program..........................................................................51 Figura 3.31 T.e.m autoindusă pentru factor de umplere 68.62%.......................................................52 Figura 3.32 Diagrama rutinei adjustRPM..........................................................................................53 Figura 3.33 LCD cu 7 segmente .........................................................................................................55 Figura 3.34 Fereastra principală de program......................................................................................59 Figura 3.35 Fereastra informaţii.........................................................................................................60

    Figura 4.36 Osciloscop digital Tektronix TPS2014...........................................................................62 Figura 4.37 Răspunsul senzorului optic pentru un factor de umplere de 62.35%..............................63 Figura 4.38 Răspunsul senzorului optic pentru un factor de umplere de 87.45%..............................63 Figura 4.39 Dependenţa vitezei de rotaţie de lăţimea impulsului PWM............................................64 Figura 4.40 Semnal PWM pentru factor de umplere 24,7%..............................................................65 Figura 4.41 Semnal PWM pentru factor de umplere 68,63%............................................................65 Figura 4.42 Variaţia tensiunii în funcţie de lăţimea impulsului PWM...............................................66 Figura 4.43 T.e.m autoindusă pentru factor de umplere 43.52%.......................................................66 Figura 4.44 T.e.m autoindusă pentru factor de umplere 68.62%.......................................................67 Figura 4.45 Viteza de rotaţie în funcţie de valoarea registrului ADRESH ........................................68

    Lista tabelelor:

    Tabelul 2.1 Selecţia bank-ului de memorie ........................................................................................20 Tabelul 2.2 Sursa ceasului de sistem..................................................................................................24 Tabelul 2.3 Formule de calcul pentru rata de semn............................................................................26 Tabelul 2.4 Tensiuni de polarizare.....................................................................................................28 Tabelul 2.5 Resursele folosite de modulele CCP...............................................................................31 Tabelul 2.6 Interacţiunea dintre cele două module CCP....................................................................31 Tabelul 2.7 Configuraţii de comandă a motoarelor folosind puntea H..............................................40 Tabelul 3.8 Codificarea cifrelor hexazecimale...................................................................................56 Tabelul 4.9 Dependenţa vitezei de rotaţie de lăţimea impulsului PWM............................................63 Tabelul 4.10 Termeni necesari pentru determinarea dreptei de regresie............................................64 Tabelul 4.11 Variaţia tensiunii în funcţie de factorul de umplere al semnalului PWM .....................65 Tabelul 4.12 Viteza de rotaţie în funcţie de t.e.m autoindusă............................................................67

    Lista acronimelor

    IDE

    Integrated Development Environment (Mediu integrat de dezvoltare)

    PWM

    Pulse Width Modulation (Modulatie in durata a impulsurilor)

    RISC

    Reduced Instruction Set Controller (Controler cu set redus de instructiuni)

    SFR

    Special Function Register (Registru de functii speciale)

    GPR

    General Purpose Register (Registru de uz general)

    LCD

    Liquid Crystal Dysplay (Afisaj cu cristale lichide)

    PC

    Program Counter (Numarator de program)

    EEPROM

    Electrically Erasable Programmable Read-Only Memory

    AUSART

    Addressable Universal Synchronous/Asynchronous Receiver/Transmitter

    Capitolul 1.

    Introducere

    Motoarele de curent continuu sunt folosite într-o gamă largă de aplicaţii care necesită controlul turaţiei: aparatura electrocasnică (mixere, maşini de spălat, ventilatoare), aplicaţii din domeniul auto (maşini hibride, controlul electronic al direcţiei, controlul electric al oglinzilor şi al ştergătoarelor de parbriz, etc.), componente de caculator (DVD Player, Hard Disc, Cooler), controlul roboţilor mobili, controlul braţelor robotice folosite în procesele industriale de fabricaţie, componente de caculator (DVD Player, Hard Disc, Cooler) şi altele. Sunt eficiente din punct de vedere al consumului de energie şi pot fi alimentate folosind baterii sau celule solare.

    • 1.1 Obiectivul lucrării

    Obiectivul acestui proiect este de a implementa un sistem de control al turaţiei unui motor de curent continuu cu perii folosind un microcontroler PIC. Sistemul va fi capabil să menţină motorul la o anumită viteza impusă sub influenţa unei sarcini variabile.

    • 1.2 Scopul lucrării

    Pentru a atinge obiectivul impus am folosit microcontrolerul PIC16F917 montat pe placa de dezvoltare PICDEM Mechatronics pentru a controla turaţia unui motor de curent continuu cu perii şi magnet permanent. Viteza reală de rotaţie a motorului este estimată prin măsurarea tensiunii electromotoare autoinduse.

    • 1.3 Contribuţia studentului Proiectarea celor două module software pentru microcontroler şi PC:

      • 1. Programarea microcontrolerlui a fost realizată folosind limbajul C şi mediul de dezvoltare MPLAB IDE al firmei Microchip. Aplicaţia comanda motorul de curent continuu şi afişează rezultatele pe un ecran LCD de pe placa de dezvoltare.

      • 2. Aplicaţie software pentru PC cu rol de interfaţă pentru comanda motorului şi vizualizarea în timp real a rezultatelor (graficul vitezei de rotaţie în funcţie de timp). Interfaţa este realizată folosind limbajul Visual Basic.NET 2010 folosind mediul de dezvoltare Microsoft Visual Studio IDE.

    Comunicaţia între microcontroler şi PC este realizată prin intermediul portului serial folosind standardul RS-232.

    14

    Capitolul 2.

    Prezentare teoretică

    • 2.1 Placă de dezvoltare PICDEM Mechatronics

      • 2.1.1 Introducere

    Placa de dezvoltare PICDEM Mechatronics [1] a fost concepută de firma MICROCHIP pentru a demonstra principiile ce stau la baza implementării sistemelor mecatronice folosind microcontrolere PIC. Mecatronica reprezintă integrarea controlului electronic în sistemele mecanice prin înlocuirea componentelor mecanice cu soluţii electronice. Microcontrolerele PIC sunt ideale pentru sistemele mecatronice datorită dimeniunilor mici, eficienţei ridicate, vitezei crescute şi numărului ridicat de configuraţii periferice. Sistemele mecatronice sunt foarte variate: de la un simplu comutator electromecanic cu ieşire multiplexata, până la controlul complex de stabilizare al unui avion supersonic cu reacţie. Sistemele mecatronice sunt din ce în ce mai des folosite în aparatele electrocasnice precum şi în automobile. De exemplu, maşinile de spălat moderne încorporează microcontrolere pentru a măsura intervalele fiecărui program de spălare, pentru a citi comenzile date de utilizator şi pentru reglarea vitezei de rotaţie a motorului.

    • 2.1.2 Descrierea plăcii de dezvoltare

    Pe placa este montat un microcontroler PIC16F917 într-un soclu de 40 de pini, iar 22 dintre cei 36 de pini de intrare/ieşire reprezintă conexiuni dedicate către diverse componente de pe placă. Ceilalţi 14 pini sunt disponibili utilizatorului pentru a conecta alte componente prin intermediul firele de legătură. Conexiunile dedicate permit accesul la următoarele componente:

    • - Switch 1 – 1 pin: MCLR (Master Clear Reset)

    • - LCD – 17 pini

    • - Conector serial de programare în circuit – 2 pini + MCLR

    • - Port de comunicaţie RS-232 – 2 pini: RX, TX

    Schema placii de dezvoltare este prezentată în ANEXA 1. Pe placa este disponibil şi un soclu de 20 de pini compatibil cu microcontrolerele ce folosesc

    8, 14 sau 20 de pini. Microcontrolerul PIC16F690 poate fi conectat la acest soclu având 5 din cei 18 pini de intrare/ieşire conectaţi la diverse componente de pe placă, iar restul de 13 pini sunt disponibili utilizatorului pentru a conecta alte componente folosind firele de legătură. Conexiunile dedicate pentru acest soclu sunt:

    • - Switch 1 – 1 pin: MCLR (Master Clear Reset)

    • - Conector serial pentru programare în circuit (ICSP): 2 pini + MCLR

    • - Port de comunicaţie RS-232 – 2 pini: RX, TX

    Placa de dezvoltare este descrisă în figură 1 şi are în componenţă următoarele elemente:

    • 1. Soclu cu 40 de pini

    • 2. Soclu cu 20 de pini

    • 3. Regulator de tensiune şi conectori de alimentare

    • 4. 8 LED-uri

    15

    • 5. LCD cu 39 de segmente, conectat la 14 pini ai soclului cu 40 de pini

    • 6. Conector RS-232 şi componente asociate

    • 7. Senzor de temperatură

    • 8. Senzor de lumină

    9.

    Două potenţiometre

    • 17. de

    Detector

    tensiune

    • 10. Oscilator de 32.768 kHz

    electromotoare inversă

    • 11. Patru switch-uri

    • 18. optic

    Senzor

    pentru

    detecţia

     
    • 12. Conector ICD

    vitezei de rotaţie

    a motorului de

    • 13. Conector ICSP

    curent continuu

    • 19. Motor de curent continuu cu perii

    • 14. Circuit de protecte la supracurent cu switch de reset

    • 20. Motor pas cu pas

     

    Terminale

    • 21. cu

    şurub

    pentru

    • 15. Punte H pentru controlul motoarelor

    acţionarea motoarelor

    • 16. Detector de curent

    • 22. Baterie de 9V DC

    9. Două potenţiometre 17. de Detector tensiune 10. Oscilator de 32.768 kHz electromotoare inversă 11. Patru

    Figura 2.1 Placa de dezvoltare PICDEM Mechatronics [1]

    2.1.3 Facilităţi

    Bară de LED-uri

    Cele 8 LED-uri de pe placa ajuta la depanarea programelor scrise permiţând afişarea stării pinilor de ieşire şi afişarea în binar a conţinutului variabilelor folosite.

    Circuitul de protecţie la supracurent

    Circuitul

    de protecţie

    la supracurent inclus în placă opreşte circuitul

    de acţionare

    a

    motoarelor

    în cazul

    în

    care motorul consuma 1.2

    A timp

    de 100ms

    sau mai

    mult. Când este

    16

    introdusă alimentarea plăcii, circuitul de acţionare a motorului este dezactivat, lucru indicat prin aprinderea LED-ului “FAULT”. Pentru a putea alimenta motorul trebuie apăsat butonul “CLEAR FAULT”. Dacă se foloseşte alt motor decât cel furnizat cu placa de dezvoltare, trebuie ţinut cont că placă nu va putea furniza un curent mai mare de 1.2 A.

    Comunicaţia serială

    Comunicaţia serială prin USART se poate realiza prin intermediul pinilor de transmisiune TX şi recepţie RX. Conectorul JP2 permite legarea pinilor RX, TX pentru realizarea transmisiunii seriale pe un singur pin.

    Senzori detaşabili

    Senzorul de temperatură şi senzorul de lumină pot fi detaşaţi pentru a oferi flexibilitate ridicată în utilizarea lor. De exemplu, senzorul de temperatura poate fi poziţionat într-un mediu ostil şi conectat prin fire la placă de dezvoltare.

    Rezistentele de scalare a tensiunii electromotoare autoinduse

    În cazul folosirii unui alt motor de curent continuu cu perii faţă de cel cu care este livrat placă PICDEM Mechatronics, la o tensiune de alimentare mai mare de 5V DC, tensiunea electromotoare autoindusă trebuie adusă în intervalul 0-5V DC. Pentru acest scop se pot poziţiona rezistente pe placa în pozitile R55 şi R56 pentru a crea un divizor de tensiune.

    Detector de curent

    Placa de dezvoltare încorporează un circuit simplu de detecţie a curentului ce poate fi accesat prin pinul J15. Tensiunea măsurată la acest pin este egală cu curentul ± 10%. De exemplu, dacă un motor este pornit şi consuma 0.9A atunci tensiunea măsurată va fi 0.9V (± 10%).

    LCD VIM-332

    PICDEM Mechatronics are încorporat un LCD cu 39 de segmente care poate afişa cifre pe 3 poziti folosind câte 7 segmente, iar pe a patra poziţie poate afişa doar cifra 1. LCD-ul poate afişa punctul zecimal pe 3 poziţii diferite, precum şi alte simboluri.

    17

    2.2

    Microcontrolerul PIC16F917

    PIC16F917 [2] este un microcontroler pe 8 biţi cu memorie flash, construit în tehnologie CMOS şi având încorporat un circuit de comandă pentru LCD. Structura interna a microcontrolerului PIC16F917 este prezentata in ANEXA 2.

    • 2.2.1 Prezentare generală

    Procesor RISC de înaltă performanta:

    o

    Foloseşte doar 35 de instrucţiuni: toate instrucţiunile se execută într-un singur ciclu

    o

    o

    o

    o

    o

    cu excepţia instrucţiunilor de salt Frecventa maximă de operare: 20 MHz

    Posibilitate de citire a memoriei de program

    Mai multe surse de întreruperi

    Stivă hardware cu 8 nivele

    Moduri de adresare: directă, indirectă şi relativă

    Caracteristici speciale ale microcontrolerului

    o

    Oscilator intern de mare precizie

    o

    o

    o

    o

    o

    o

    o

    o

    §

    §

    §

    §

    Calibrat la ±1%

    Frecvenţa de lucru poate fi selectată software între 8MHz şi 125 kHz

    Detecţia lipsei oscilatorului extern pentru aplicaţiile critice

    Schimbarea automată a sursei de ceas în timpul rulării programului pentru

    economisirea energiei Oscilator intern de 31 kHz selectabil prin soft

    Mod cu consum scăzut de energie (Sleep mode)

    Poate opera într-un domeniu larg de tensiuni (2.0V – 5.5V)

    Operare la temperaturi industriale

    Resetare la alimentare (Power-on Reset)

    Watchdog Timer cu activare software

    Protecţia codului de program

    Celula Flash/EEPROM performanta:

    §

    §

    Flash rezistent la 100.000 de scrieri

    EEPROM rezistent la 1.000.000 de scrieri

    Datele pot fi stocate mai mult de 40 ani Caracteristici de economisire a energiei

    §

    o

    o

    Curent de Standby: < 100 nA la 2.0 V

    Curent de funcţionare normală:

    §

    §

    11 μA la 32 kHz şi 2.0 V

    220 μA la 4 MHz şi 2.0 V

    o

    Curentul folosit de Watchdog Timer: 1 μA la 2.0 V

    Periferice Modul LCD:

    o

    o

    §

    §

    Capacitate de a comanda până la 96 de pixeli

    Patru cai comune

    Până la 35 de pini I/O programabili individual

    18

    o

    o

    Programare serială în circuit (ICSP) folosind 2 pini

    Modul comparator analogic

     

    §

    Două comparatoare analogice

    §

    Referinţă internă de tensiune programabilă

    §

    Intrările şi ieşirile comparatoarele sunt accesibile din exterior

    o

    Convertor analog/digital: rezoluţie de 10 biţi şi până la 8 canale analogice

    Timer0: timer/numărător pe 8 biţi cu divizor programabil o Timer1:

    o

     

    §

    Timer/numărător pe 16 biţi cu divizor programabil

    o

    Posibilitatea de numărare a impulsurilor de pe un pin extern Timer2: timer/numărător pe 8 biţi cu divizor anterior şi posterior

    §

    o

    Transmiţător/Receptor Sincron/Asincron Universal (AUSART)

    §

    o

    Două module CCP (Stocare, Comparare, PWM)

    Stocare pe 16 biţi, rezoluţie de 12.5 ns

    §

    §

    Comparare pe 16 biţi, rezoluţie de 200 ns

    PWM pe 10 biţi, frecventa maximă 20 kHz Functiile pinilor microcontrolerului sunt prezentate in ANEXA 3.

    • 2.2.2 Organizarea memoriei

      • 2.2.2.1 Memoria de program

    PIC16F917 are un numărător de program pe 13 biţi capabil să adreseze o memorie de program formată din 14 blocuri a câte 8K (0000h – 1FFFh). Vectorul de Reset se afla la adresa 0000h iar vectorul de întrerupere la adresa 0004h.

    19

    Figura 2.2 Harta memoriei de program 2.2.2.2 Memoria de date Memoria de date este împărţită în

    Figura 2.2 Harta memoriei de program

    • 2.2.2.2 Memoria de date

    Memoria de date este împărţită în mai multe bank-uri care conţin registrele de uz general (GPR) şi registrele pentru funcţii speciale (SFR). Bitii RP0 şi RP1 sunt folosiţi pentru selecţia bank- ului curent.

    RP1

    RP0

    Bank Selectat

    • 0 0

     

    0

    • 0 1

     

    1

    • 1 0

     

    2

    • 1 1

     

    3

    Tabelul 2.1 Selecţia bank-ului de memorie.

    Fiecare bank de memorie conţine 128 octeţi (0h – 7Fh). Locaţiile inferioare ale fiecărui bank sunt rezervate pentru Registrele de Funcţii Speciale. După SFR se găsesc registrele de uz general (GPR) implementate că RAM static. Toate bank-urile de memorie conţin registre de funcţii speciale. Unele registre de funcţii speciale des folosite sunt copiate în toate bank-urile de memorie pentru a permite accesul rapid şi reducerea dimensiunii codului.

    • - Fişierul de registre de uz general

    20

    PIC16F917 are un fişier de registre organizat

    ca

    352

    x

    8

    biţi.

    Fiecare registru poate fi

    accesat direct sau indirect prin intermediul registrului de selecţie (FSR)

    • - Registrele de funcţii speciale

    Registrele de funcţii speciale sunt registre folosite de procesor şi de funcţiile periferice pentru a putea controla operaţia întreprinsă. Aceste registre se afla în memoria ŞRAM. Aceste registre pot fi clasificate în două categorii: nucleu şi periferice.

    • 2.2.2.3 Numărătorul de program şi stivă

    Numărătorul de program (PC) are o lăţime de 13 biţi. Octetul inferior provine din registrul PCL, care poate fi scris şi citit. Octetul superior, care conţine ceilalţi 5 biţi ai numărătorului de program, nu poate fi accesat direct di provine din registrul PCLATH. La Reset numărătorul de program este şters. În Figura 2.3 sunt ilustrate cele două situaţii în care numărătorul de program este încărcat. În partea superioară a figurii este ilustrat cazul scrierii în registrul PCL iar în partea inferioară este descrisă încărcarea numărătorului de program în timpul executării unei instrucţiuni CALL sau GOTO.

    Stiva

    PIC16F917 are o stivă cu adâncime de 8 nivele şi o lăţime de 13 biţi implementată hardware. Spaţiul de memorie al stivei nu face parte nici din memoria de program, nici din memoria de date, iar Indicatorul de stivă nu poate fi citit sau scris. Numărătorul de program este scris în stivă atunci când se execută o instrucţiune CALL sau atunci când o întrerupere produce un salt. Numărătorul de program este scos din stiva atunci când se întâlneşte o instrucţiune RETURN, RETLW sau RETFIE. PCLATH nu este afectat de operaţiile de introducere sau scoatere din stivă.

    PIC16F917 are un fişier de registre organizat ca 352 x 8 biţi. Fiecare registru poate fi

    Figura 2.3 Încărcarea numărătorului de program

    Stivă se comportă ca o memorie circulară. Acest lucru înseamnă că după ce s-au introdus 8 elemente în stivă, a noua scriere în stivă va rescrie prima valoare introdusă.

    • 2.2.2.4 Paginarea memoriei de program

    PIC16F917 este capabil să adreseze un bloc continuu de memorie de 8K. Instrucţiunile CALL şi GOTO pun la dispoziţie doar 11 biţi de adresa pentru a permite saltul în interiorul oricărei

    21

    pagini de memorie de program cu dimensiunea de 2K. La execuţia unei instrucţiuni CALL sau GOTO, cei mai semnificativi 2 biţi ai adresei provin din bitii 4 şi 3 ai registrului PCLATH. În timpul instrucţiunilor CALL sau GOTO, utilizatorul trebuie să se asigure că biţi de selectare a paginii sunt configuraţi astfel încât să se facă adresarea către pagina de memorie de program dorită. În cazul executării unei instrucţiuni de întoarcere după executarea instrucţiunii CALL sau după o rutină de întrerupere, întregul numărător de program de 13 biţi este scos din stivă. Aşadar, în acest caz, modificarea PCLATH<4:3> nu este necesară.

    • 2.2.2.5 Adresarea indirectă, regiştrii INDF şi FSR

    Registrul INDF nu este un registru fizic. Adresarea indirectă este posibilă prin folosirea registrului INDF. Orice instrucţiune care foloseşte registrul INDF va accesa de fapt datele din locaţia de memorie indicată de registrul de selecţie FSR. Citirea valorii lui INDF va rezulta într-o operaţie nulă (NOP).

    • 2.2.3 Porturile I/O

    Microcontrolerul PIC16F917 include 4 registre PORT pe 8 biţi (PORTA, PORTB, PORTC, PORTD) şi un registru PORT pe 4 biţi (PORTE). Fiecărui registru PORT îi corespunde un registru TRIS care permite configurarea că intrare sau ieşire a portului respectiv. Registrul ANSEL este folosit pentru a configura modul de intrare al unui pin I/O ca analogic. Setarea unui bit din ANSEL cu valoarea ‘1’ va determina funcţionarea acelei intrări în modul analogic iar orice citire digitală pe acel pin va avea ca răspuns valoarea ‘0’. Starea biţilor registrului ANSEL nu are nici un efect asupra funcţiile digitale de ieşire. Un pin care are bitul corespunator din registrul TRIS setat cu valoarea ‘1’ iar cel din registrul ANSEL setat cu valoarea ‘0’ va funcţiona ca ieşire digitală dar modul de intrare va fi analogic. Acest lucru poate cauza un comportament neaşteptat atunci când se execută instrucţiuni de tip citire-modificare- scriere asupra acestui port.

    • 2.2.4 Modulul oscilator (cu sistem de monitorizare a ceasului)

    Modulul oscilator oferă o gamă variată de surse de ceas şi posibilităţi de selectare permiţând utilizarea microcontrolerului pentru diverse aplicaţii având o permormanta ridicată şi un consum

    scăzut de energie. Sursele de ceas pot proveni de la oscilatoare externe, rezonatoare cu cristal de cuarţ, rezonatoare cermaice şi circuite RC. În plus, ceasul de sistem poate fi configurat pentru a folosi unul dintre cele două oscilatoare interne cu opţiunea de a selecta frecventa prin software. Caracteristici ale acestui modul:

    • - Sursa ceasului de sistem poate fi selectată prin software şi poate fi internă sau externă

    • - Pornirea ceasului de sistem se face în două etape, minimalizând decalajul dintre pornirea oscilatorului extern şi execuţia codului.

    • - Sistem de monitorizare a ceasului (FSCM) conceput pentru a detecta problemele apărute la sursă externă de ceas şi pentru a face automat trecerea la oscilatorul intern.

    Modulul oscilator poate fi configurat într-unul din cele opt moduri de ceas:

    • - EC – ceas extern cu I/O pe pinul OSC2/CLKOUT

    • - LP – mod de lucru pentru consum redus de energie, 32 kHz

    • - XT – rezonator ceramic sau cristal de cuarţ cu câştig mediu

    22

    • - HS – rezonator ceramic sau cristal de cuarţ cu câştig ridicat

    • - RC – circuit RC extern cu ieşire F OSC /4 pe pinul OSC2/CLKOUT

    • - RCIO – circuit RC extern cu I/O pe pinul OSC2/CLKOUT

    • - INTOSC – oscilator intern cu ieşire F OSC /4 pe pinul OSC2 şi I/O pe pinul OSC1/CLKIN

    • - INTOSCIO – oscilator intern cu I/O pe pinii OSC1/CLKIN şi OSC2/CLKOUT

    Selecţia sursei de ceas se face configurând bitii FOSC<2:0> din Registrul de Configurare (CONFIG). Ceasul intern poate fi generat de două oscilatoare interne: HFINTOSC – oscilator calibrat de înaltă frecvenţă şi LFINTOSC – oscilator necalibrat de frecvenţă joasă.

    • 2.2.5 Modulele Timer

    Microcontrolerul PIC16F917 dispunde de 3 module Timer/Numărător care pot fi folosite în combinaţie cu alte periferice disponibile pentru o gamă largă de aplicaţii.

    • 2.2.5.1 Modulul Timer0

    Timer0 este un timer/numărător pe 8 biţi cu următoarele caracteristici:

    • - Registru timer/counter pe 8 biţi (TMR0)

    • - Divizor anterior de frecvenţă pe 3 biţi programabil

    • - Sursa de ceas internă sau externă programabila

    • - Posibilitate de selecţie a frontului de ceas

    • - Întrerupere la depăşire

    Modul de lucru al Timer0 poate fi selectat prin modificarea bitului T0CS din registrul OPTION. Când T0CS este egal cu 0 Timer0 lucrează în modul Timer iar când T0CS este egal cu 1 Timer0 lucrează în modul Counter. Depăşirea timerului 0 este indicată de bitul T0IF din registrul INTCON. Acest bit trebuie resetat prin software. Timerul 0 este dezactivat atunci când microcontrolerul funcţionează în regim de consum redus de energie.

    • 2.2.5.2 Modulul Timer1

    Timer1 este un timer/counter pe 16 biţi cu următoarele caracteristici:

    • - Pereche de regiştri timer/counter totalizând 16 biţi (TMR1H:TMR1L)

    • - Sursa de ceas internă sau externă programabila

    • - Divizor anterior de frecvenţă pe 3 biţi programabil

    • - Oscilator LP opţional

    • - Mod de operare sincron sau asincron

    • - Poarta timerului 1 poate fi controlată de comparator sau de pinul T1G

    • - Întrerupere la depăşire

    • - Poate scoate microcontrolerul din modul de consum redus (dacă se foloseşte sursă externă de ceas şi modul asincron)

    • - Poate fi folosit ca sursa de ceas pentru modulul LCD

    Timer1 este un counter crescător pe 16 biţi care poate fi accesat prin intermediul perechii de registre TMR1H:TMR1L. Scrierea în TMR1H sau TMR1L actualizează în mod direct counter-ul. Când este folosit cu o sursă de ceas internă, modulul este un timer. Când este folosit cu o sursă de ceas externă, modulul poate fi folosit ca timer sau counter şi poate număra evenimentele externe de pe pinul T1G sau cele date de ieşirea coparatorului C2.

    23

    Sursa de ceas se poate selecta modificând bitul TMR1CS din registrul T1CON astfel:

    Sursa de ceas

    TMR1CS

    F OSC /4

    0

    Pinul T1CKI

    1

    Tabelul 2.2 Sursa ceasului de sistem

    • 2.2.5.3 Modulul Timer2

    Timer2 este un timer pe 8 biţi cu următoarele caracteristici:

    • - Registru timer pe 8 biţi (TMR2)

    • - Registru perioada pe 8 biţi (PR2)

    • - Generează întrerupere atunci când TMR2 şi PR2 au aceeaşi valoare

    • - Divizor anterior de frecvenţă programabil

    • - Divizor posterior de frecvenţă programabil

    Intrarea de ceas a modulului Timer2 este ceasul de sistem F OSC /4. Ieşirea ceasului este introdusă

    în divizorul anterior al timerului 2. Ieşirea acestui divizor este apoi folosită pentru a incrementa registrul TMR2. Valorile registrelor TMR2 şi PR2 sunt comparate în mod continuu pentru a determina dacă acestea sunt egale. TMR2 va fi incrementat plecând de la 00h până când va valoarea sa va fi egală cu cea a registrului PR2. Registrele TMR2 şi PR2 pot fi scrise şi citite. La orice eveniment de reset, registrul TMR2 ia valoarea 00h iar registrul PR2 ia valoarea FFh. Timer2 poate fi activat sau dezactivat prin modificarea bitului TMR2ON din registrul T2CON.

    • 2.2.6 Modulul comparator

    Comparatoarele sunt folosite pentru a face legătura între un circuit analogic şi un circuit digital realizând comparaţia între două tensiuni analogice. Compărătorul produce un semnal digital

    care indică relaţia dintre mărimile celor două semnale analogice de la intrare. Comparatoarele oferă funcţionalitate analogică independentă de execuţia programului şi sunt des folosite în circuitele ce combina semnale analogice şi digitale. Compărătorul analogic are următoarele caracteristici:

    • - Două comparatoare

    • - Mai multe moduri de configurare a comparatoarelor

    • - Ieşirile comparatoarelor sunt disponibile atât intern cât şi extern

    • - Polaritatea ieşirilor este programabila

    • - Lansează o întrerupere la modificarea ieşirii

    • - Poate scoate microcontrolerul din modul de consum redus de energie

    • - Posibiltatea de a determina incrementarea Timerului 1

    • - Ieşirea poate fi sincronizata cu intrarea de ceas a Timerului 1

    • - Referinţă de tensiune programabilă

    În Figura 2.4 este prezentat un comparator şi relaţia dintre semnalele analogice de intrare şi

    semnalul digital format la ieşire.

    24

    Figura 2.4 Un singur comparator Cele opt moduri de funcţionare a comparatorului pot fi selectate prin

    Figura 2.4 Un singur comparator

    Cele opt moduri de funcţionare a comparatorului pot fi selectate prin modificarea biţilor CM<2:0> ai registrului CMCON0.

    • 2.2.7 Transmiţător Receptor Sincron Asincron Universal (AUSART)

    Modulul AUSART este un periferic de I/O pentru comunicaţii seriale. Conţine generatoare de ceas, registre de deplasare şi memorii de date necesare pentru realizară unei transmisiuni sau recepţii seriale de date, independent de execuţia programului. AUSART este cunoscut şi că Interfaţa de comunicaţie serială (SCI) şi poate fi configurata ca sistem duplex asincron sau ca sistem semi- duplex sincron. Modul de lucru duplex este utilizat în comunicaţia cu sisteme periferice cum ar fi terminalele CRT şi calculatoarele personale. Modul semi-duplex sincron este folosit pentru comunicarea cu dispozitive periferice cum ar fi circuitele integrate A/D sau D/A, memoriile seriale

    EEPROM sau alte microcontrolere. În mod normal aceste dispozitive nu au surse interne de ceas pentru a genera rata de semn şi necesită o sursă externă de ceas furnizată de dispozitivul sincron principal. Modulul AUSART are următoarele capabilităţi:

    • - Transmisiune şi recepţie duplex asincrona

    • - Memorie de intrare de 2 caractere

    • - Memorie de ieşire de 1 caracter

    • - Lungimea caracterelor este programabila şi poate avea 8 sau 9 biţi

    • - Detecţia erorii de depăşire a dimensiunii memoriei de intrare Modalitatea de funcţionare a modulului AUSART este stabilită cu ajutorul a doua registre:

    registrul de control şi stare a transmisiunii (TXSTA) şi registrul de control şi stare a recepţiei (RCSTA)

    Funcţionarea AUSART în modul asincron

    Modulul AUSART transmite şi recepţionează date folosind formatul standard NRZ (non- return-to-zero). Formatul NRZ este implementat folosind două nivele: V OH care reprezintă valoarea ‘1’ a unui bit de date şi V OL care reprezintă valoarea ‘0’ a unui bit de date. Acest format presupune că bitii de date de aceeaşi valoare transmişi consecutiv rămân la acelaşi nivel de ieşire al acelui bit fără a se întoarce la un nivel neutru între transmisiunea fiecărui bit. Atunci când nu se transmite informaţie, un port care foloseşte NRZ va fi stabilit la nivelul V OH . Fiecare transmisiune de caracter va fi formată dintr-un bit de start, urmat de opt biţi de date şi în final unul sau mai mulţi biţi de stop. Bitul de start este întotdeauna ‘0’ iar bitii de stop sunt întotdeauna ‘1’. Cel mai întâlnit format de date este cel pe 8 biţi. Fiecare bit de date transmis va avea o perioda de 1/(Rata de semn).

    25

    Pentru a obţine o anumită rata de semn plecând de la oscilatorul sistemului se foloseşte generatorul intern pe 8 biţi al ratei de semn. Transmisiunea şi recepţia prin AUSART începe cu cel mai puţin semnificativ bit. Transmiţătorul şi receptorul modulului AUSART sunt independente din punct de vedere funcţional, însă folosesc acelaşi format de date şi aceeaşi rată de semn. Paritatea nu este implementată hardware dar poate fi calculată prin software şi reţinută în al nouălea bit de date.

    Generatorul ratei de semn

    Generatorul ratei de semn (BRG) este un timer pe 8 biţi care este utilizat atât pentru modul de operare asincron cât şi pentru cek sincron. Registrul SPBRG determina perioada timerului folosit pentru rata de semn. În modul asincron, bitul BRGH din registrul TXSTA determina multiplicatorul perioadei ratei de semn. În modul sincron acest bit este ignorat. Scrierea unei noi valori în registrul SPBRG produce resetarea timerului BRG.

    Biţi de configurare

    Mod de operare

    Formula de calcul a

    SYNC

    BRGH

    ratei de semn

    0

     
    • 0 Asincron

    F OSC /[64(n+1)]

    0

     
    • 1 Asincron

    F OSC /[16(n+1)]

    1

    X

    Sincron

    F OSC /[4(n+1)]

    Tabelul 2.3 Formule de calcul pentru rata de semn

    Calculul erorii ratei de semn pentru frecvenţa de oscilaţie de 8 MHz şi o rată de semn dorită de 9600 în modul asincron:

    Pentru a obţine o anumită rata de semn plecând de la oscilatorul sistemului se foloseşte generatorul
    Pentru a obţine o anumită rata de semn plecând de la oscilatorul sistemului se foloseşte generatorul
    Pentru a obţine o anumită rata de semn plecând de la oscilatorul sistemului se foloseşte generatorul
    Pentru a obţine o anumită rata de semn plecând de la oscilatorul sistemului se foloseşte generatorul

    Pentru configurarea transmisiunii asincrone trebuie parcurşi următorii paşi:

    • - Iniţializarea registrului SPBRG şi a bitului BRGH pentru a obitne rata de semn dorită

    • - Activarea portului serial asincron prin resetarea bitului SYNC şi setarea bitului SPEN

    • - Dacă se foloseşte transmisiunea pe 9 biţi trebuie setat bitul TX9.

    • - Activarea transmisiunii prin setarea bitului de control TXEN. Acest lucru va determina setarea bitului de întrerupere TXIF.

    • - Dacă se doreşte folosirea întreruperilor, trebuie setat bitul TXIE din registrul PIE1. Pentru ca întreruperea să aibă loc trebuie că bitii GIE şi PEIE din registrul INTCON să fie de asemenea setaţi.

    • - Dacă se foloseşte transmisiunea pe 9 biţi, cel de-al nouălea bit trebuie încărcat în bitul TX9D

    • - Scrierea unui octet în registrul TXREG va determina pornirea transmisiunii.

    Pentru configurarea recepţiei asincrone trebuie parcurşi următorii paşi:

    26

    • - Iniţializarea registrului SPBRG şi a bitului BRGH pentru obţinerea ratei de semn dorite

    • - Activarea portului serial prin setarea bitului SPEN. Bitul SYNC trebuie să fie resetat în cazul modului de operare asincron.

    • - Dacă se doreşte folosirea întreruperilor, trebuie setat bitul RCIE din registrul PIE1 şi bitii GIE şi PEIE din registrul INTCON.

    • - În cazul recepţiei pe 9 biţi, trebuie setat bitul RX9.

    • - Activarea recepţiei prin setarea bitului CREN.

    • - Bitul de întrerupere RCIF al registrului PIR1 va fi setat atunci când un caracter este transfrat din registrul de deplasare RSR către memoria de recepţie. O întrerupere va fi declanşată în cazul în care bitul RCIE al registrului PIE1 este setat.

    • - Citirea registrului RCSTA pentru a verifica indicatorii de eroare şi în cazul transmisiunii pe 9 biţi, valoarea celui de-al nouălea bit.

    • - Citirea registrului RCREG va întoarce cei mai puţin semnificativi 8 biţi din memoria de recepţie.

    • - În cazul apariţiei unei erori de depăşire a memoriei de recepţie, trebuie resetat fanionul OERR prin dezactivarea recepţiei prin intermediul bitului CREN.

    • 2.2.8 Modulul de comandă al ecranului LCD Modulul LCD generează semnalele necesare pentru a conduce un dispozitiv LCD static sau

    multiplexat. PIC16F917 poate comanda panouri LCD cu până la patru cai comune şi până la 24 de segmente. Acest modul permite şi controlul matricei de pixeli a LCD-ului. Modulul de comandă al panoului LCD are următoarele caracteristici:

    • - Comanda directă a panoului LCD

    • - Trei surse de ceas cu divizor anterior de frecvenţă programabil

    • - Până la patru cai comune

    o

    Static (o cale comună)

    o

    Multiplexare 1/2 (2 cai comune)

    o

    Multiplexare 1/3 (3 cai comune)

    o

    Multiplexare 1/4 (4 cai comune)

    • - Până la 24 de segmente

    Regiştrii folosiţi pentru configurarea LCD-ului:

    • - Registrul de control (LCDCON)

    • - Registrul de fază (LCDPS)

    • - 4 registre de activare a segmentelor (LCDSE0:CLDSE3)

    • - 12 registre de date (LCDDATA0:LCDDATA11)

    După configurarea modulului, bitul LCDEN din registrul LCDCON este folosit pentru activarea

    şi dezactivarea LCD.

    Selectarea sursei de ceas

    Modulul LCD poate selecta una dintre cele trei surse de ceas disponibile:

    • - F OSC /8192

    • - T1OSC/32

    • - LFINTOSC/32

    Prima sursa de ceas este ceasul sistemului divizat cu 8192. Acest raport de divizare a fost ales pentru a obţine o ieşire de 1 kHz atunci când ceasul sistemului este la 8 MHz. Acest divizor nu este programabil, în schimb se poate modifica divizorul anterior la LCD-ului folosind bitii LP<3:0> din registrul LCDPS.

    27

    Figura 2.5 Generarea ceasului pentru LCD A doua sursa de ceas foloseşte T1OSC/32 şi se obţine

    Figura 2.5 Generarea ceasului pentru LCD

    A doua sursa de ceas foloseşte T1OSC/32 şi se obţine tot o frecvenţă de 1 kHz atunci când se foloseşte un rezonator de 32.768 kHz pentru oscilatorul Timerului 1. Pentru a folosi oscilatorul Timerului 1 ca sursa de ceas, trebuie setat bitul T1OSCEN din registrul T1CON. A treia sursă de ceas este oscilatorul intern de frecvenţă joasă LFINTOSC divizat cu 32 care de asemenea duce la o frecvenţă de 1 kHz.

    Tensiuni de polarizare

    În funcţie de modul de operare, modulul LCD poate folosi mai multe niveluri pentru tensiunea de polarizare:

    • - Polarizare statică (2 niveluri de tensiune: V SS şi V DD )

    • - Polarizare 1/2 (3 niveluri de tensiune: V SS , 1/2 V DD şi V DD )

    • - Polarizare 1/3 (4 niveluri de tensiune: V SS , 1/3 V DD , 2/3 V DD şi V DD ) Tensiunile pe pinii V LCD sunt rezumate în următorul tabel în funcţie de modul de operare ales:

     

    Static

    1/2

    1/3

    V LCD 0

    V

    SS

    V

    SS

    V

    SS

    V LCD 1

    -

    1/2 V DD

    1/3 V DD

    V LCD 2

    -

    1/2 V DD

    2/3 V DD

    V LCD 3

    V

    DD

    V

    DD

    V

    DD

    Tabelul 2.4 Tensiuni de polarizare

    Pentru configurarea modulului LCD trebuie parcurşi următorii paşi:

    • - Selectarea divizorului de ceas cu ajutorul biţilor LP<3:0> din registrul LCDPS

    • - Configurarea registrelor LCDSEn pentru a activa funcţia de comandă a segmentelor

    • - Configurarea registrului LCDCON astfel:

    o

    Modul de multiplexare şi cel de polarizare: bitii LMUX<1:0>

    o

    Sursa de ceas: bitii CS<1:0>

    o

    Modul de consum redus de energie: bitul

    o Modul de consum redus de energie: bitul
    • - Introducerea valorilor de iniţializare în registrele de date LCDDATA0 – LCDDATA11

    • - Resetarea fanionului de întrerupere: bitul LCDIF din registrul PIR2 şi dacă este necesar activarea interuperii cu ajutorul bitului LCDIE din registrul PIE2

    • - Activarea pinilor de polarizare (VLCD<3:1>) prin setarea bitului VLCDEN din registrul LCDCON.

    • - Activarea modulului LCD prin setarea bitului LCDEN din registrul LCDCON.

    • 2.2.9 Convertorul analog digital (ADC)

    28

    Convertorul analog digital permite realizarea conversiei unui semnal analogic de intrare într-o reprezentare binară folsind 10 biţi. Acest dispozitiv foloseşte intrări analogice multiplexate într-un singur circuit de eşantionare şi memorare. Ieşirea cicuitului de eşantionare şi memorare este conectată la intrarea convertorului. Convertorul generează un rezultat pe 10 biţi folosind algoritmul de aproximări succesive şi înregistrează rezultatul în regiştrii ADC (ADRESL şi ADRESH). Referinţă de tensiune folosită de ADC poate fi selectată prin software şi poate fi generată intern sau furnizată din exterior. Convertorul poate genera o întrerupere la finalizarea conversiei. Această întrerupere poate fi utilizată pentru a scoate microcontrolerul din starea de consum redus de energie.

    Convertorul analog digital permite realizarea conversiei unui semnal analogic de intrare într-o reprezentare binară folsind 10

    Figura 2.6 Schema bloc a circuitului de conversie analog digitală Configurarea convertorului trebuie să ţină cont de următoarele funcţii:

    • - Configurarea porturilor

    • - Selecţia canalului

    • - Selecţia referinţei de tensiune

    • - Sursa ceasului de conversie

    • - Controlul întreruperilor

    • - Formatul rezultatelor

    Configurarea porturilor: modulul ADC poate fi folosit pentru a converti atât semnale analogice cât şi digitale. Când se convertesc semnale analogice, pinul de intrare/ieşire trebuie configurat că intrare analogică prin intermediul registrelor TRIS şi ANSEL.

    Selecţia canalului: bitii CHS ai registrului ADCON0 determina care dintre cele 8 canale analogice este conectat la circuitul de eşantionare şi memorare. Când se schimbă canalul, trebuie introdusă o întârziere înainte de a începe o nouă conversie.

    Referinţă de tensiune: tensiunile de referinţă pot fi configurate folosind bitii FCFG din registrul ADCON0. Tensiunea pozitivă poate fi V DD sau o sursă de tensiune externă. Tensiunea negativă poate fi V SS sau o sursă externă de tensiune.

    Ceasul de conversie: sursa ceasului de conversie poate fi selectată prin software cu ajutorul biţilor ADCS din registrul ADCON1. Ceasul de conversie poate avea următoarele surse: F OSC /2,

    29

    F OSC /4, F OSC /8, F OSC /16, F OSC /32, F OSC /64, F RC ). Durata necesară conversiei unui bit este notată cu T AD . O conversie completă pe 10 biţi necesită 11 perioade T AD .

    Întreruperile: modulul ADC poate genera o întrerupere la finalizarea unei conversii analog digitale. Fanionul de întrerupere este dat de bitul ADIF din registrul PIR1. Întreruperea poate fi activată prin setarea bitului ADIE din registrul PIE1. Bitul ADIF trebuie resetat prin software.

    Formatul rezultatului: rezultatul conversiei A/D pe 10 biţi poate fi furnizat în două moduri: cu aliniere la stânga sau cu aliniere la dreapta. Bitul ADFM din registurl ADCON0 controlează formatul rezultatului conversiei. În partea superioară a Figurii 2.7 este prezentat formatul cu aliniere la stânga iar în partea inferioară cel cu aliniere la dreapta.

    F /4, F /8, F /16, F /32, F /64, F ). Durata necesară conversiei unui

    Figura 2.7 Alinierea rezultatului conversiei A/D

    Pentru a realiza o conversie analog digitală folosind ADC trebuie urmaţi următorii paşi:

    • - Configurarea porturilor:

    o

    Dezactivarea ieşirii pe pinul de intrare folosind registrul TRIS

    o

    Configurarea pinului că intrare analogice folosind registrul ANSEL

    • - Configurarea modulului ADC:

    o

    Selectarea ceasului de conversie

    o

    Configurarea referinţei de tensiune

    o

    Selectarea canalului de intrare

    o

    Selectarea formatului rezultatului

    o

    Activarea modulului ADC

    • - Configurarea interuperii ADC (opţional):

    o

    Resetarea fanionului de întrerupere

    o

    Activarea întreruperii ADC

    o

    Activarea interuperilor generate de periferice

    o

    Activarea globală a întreruperilor

    • - Aşteptarea finalizării achiziţiei

    F /4, F /8, F /16, F /32, F /64, F ). Durata necesară conversiei unui
    • - Pornirea conversiei prin setarea bitului .

    F /4, F /8, F /16, F /32, F /64, F ). Durata necesară conversiei unui
    • - Aşteptarea finalizării conversiei prin verificarea bitului sau prin aşteptarea apariţiei întreruperii.

    • - Citirea rezultatului

    • - Resetarea fanionului de întrerupere.

    • 2.2.10 Modulul de Stocare/Comparare/PWM (CCP)

    30

    Modulul CCP este un periferic care permite utilizatorului să cronometreze şi să controleze diferite evenimente. În modul stocare, perifericul permite măsurarea duratei unui eveniment. Modul comparare permite declanşarea unui eveniment extern după trecerea unui interval de timp predeterminat. Modul PWM poate generă un semnal cu modulaţie în durata a impulsurilor cu frecvenţă şi factor de umplere variabil.

    Mod CCP

    Timer

    Stocare

    Timer1

    Comparare

    Timer1

    PWM

    Timer2

    Tabelul 2.5 Resursele folosite de modulele CCP

    Cele două module CCP pot funcţiona în moduri diferite iar interacţiunea dintre acestea este prezentată în Tabelul 2.6:

    Mod CCP1

    Mod CCP2

    Interacţiune

    Stocare

    Stocare

    Aceeaşi configuraţie pentru Timer1

    Stocare

    Comparare

    Aceeaşi configuraţie pentru Timer1

    Comparare

    Comparare

     

    PWM

    PWM

    Aceeaşi configuraţie pentru Timer1 Aceeaşi frecvenţă şi rata de actualizare (întreruperea TMR2). Fronturile crescătoare vor fi aliniate.

    PWM

    Stocare

    Nici una

    PWM

    Comparare

    Nici una

    Tabelul 2.6 Interacţiunea dintre cele două module CCP Modul stocare

    În acest mod registrele CCPRxH:CCPRxL stochează valoarea pe 16 biţi a registrului TMR1 în momentul apariţiei evenimentului pe pinul CCPx. Evenimentele pot fi definite prin modificarea biţilor CCPxM<3:0> ai registrului CCPxCON şi pot fi:

    • - O dată la fiecare front scăzător

    • - O dată la fiecare front crescător

    • - O dată la 4 fronturi crescătoare

    • - O dată la 16 fronturi crescătoare

    Atunci când se face o stocare, se setează bitul de întrerupere CCPxIF al registrului PIRx. Fanionul de întrerupere trebuie resetat din software. Dacă are loc o altă stocare înainte că perechea de registre CCPRxH:CCPRxL să fie citită, vechea valoare este rescrisa cu cea nouă.

    Modulul CCP este un periferic care permite utilizatorului să cronometreze şi să controleze diferite evenimente. În

    Figura 2.8 Schema bloc de funcţionare în modul stocare

    31

    În modul stocare pinul CCPx trebuie configurat că intrare prin setarea bitului din registrul TRIS asociat.

    Modul comparare

    În acest mod valoarea pe 16 biţi a registrului CCPRx este comparată în mod continuu cu

    valoarea aflată în perechea de registre a Timerului 1. Când aceste valori sunt egale, modulul CCPx poate efectua următoarele operaţii:

    • - Complementarea ieşirii modulului CCPx

    • - Setarea ieşiri modulului CCPx

    • - Resetarea ieşirii modulului CCPx

    • - Declanşarea unui eveniment

    • - Generarea unei întreruperi software

    Acţiunea dorită este selectată prin modificarea biţilor CCPxM<3:0> din registrul CCPxCON.

    Toate modurile de comparare pot genera o întrerupere.

    În modul stocare pinul CCPx trebuie configurat că intrare prin setarea bitului din registrul TRIS asociat.

    Figura 2.9 Schema bloc de funcţionare în modul comparare

    Utilizatorul trebuie să configureze pinul CCPx ca ieşire prin resetarea bitului corespunzător din registrul TRIS asociat.

    Modul PWM

    Acest mod generează pe pinul CCPx un semnal cu impulsuri modulate în durată. Factorul de umplere, perioadă şi rezoluţia sunt determinate de următorii regiştri:

    • - PR2

    • - T2CON

    • - CCPRxL

    • - CCPxCON Modulul CCP poate produce o ieşire PWM cu o rezoluţie de până la 10 biţi pe pinul CCPx.

    Deoarece pinul CCPx este multiplexat cu portul de date, registrul TRIS asociat acestui pin trebuie resetat pentru a activa comanda de ieşire.

    32

    Figura 2.10 Schema bloc simplificata pentru funcţionarea CCP în modul PWM. Ieşirea PWM are o perioadă

    Figura 2.10 Schema bloc simplificata pentru funcţionarea CCP în modul PWM.

    Ieşirea PWM are o perioadă şi un interval în care ieşirea ia valoarea ‘1’ logic. Perioada
    Ieşirea PWM are o perioadă şi un interval în care ieşirea ia valoarea ‘1’ logic.
    Perioada PWM este specificata în registrul PR2 al Timerului 2. Perioada poate fi calculată
    folosind următoarea ecuaţie:
    unde
    .
    Atunci
    când
    valoarea
    registrului
    TMR2
    este
    egală
    cu
    cea
    a
    registrului
    PR2,
    au
    loc
    următoarele:
    • - TMR2 este resetat

    • - Pinul CCPx este setat (exceptând cazul în care factorul de umplere este 0%)

    • - Valoarea care determină factorul de umplere este copiată din CCPRxL în CCPRxH

    Durata impulsului PWM este specificata prin scrierea unei valori de 10 biţi astfel: cei mai semnificativi 8 biţi în registrul CCPRxL şi cei mai puţin semnificativi 2 biţi în registrul CCPxCON pe poziţiile 5 şi 4. Registrul CCPRxL şi bitii CCPx<1:0> ai registrului CCPxCON pot fi scrişi la orice moment de timp. Durata impulsului PWM nu este scrisă în CCPRxH decât după trecerea unei perioade PWM. Durata impulsului PWM poate fi calculată cu următoare formulă:

    Figura 2.10 Schema bloc simplificata pentru funcţionarea CCP în modul PWM. Ieşirea PWM are o perioadă

    Factorul de umplere poate fi calculat cu următoarea formulă:

    Figura 2.10 Schema bloc simplificata pentru funcţionarea CCP în modul PWM. Ieşirea PWM are o perioadă

    Registrul TMR2 pe 8 biţi este concatenat cu 2 biţi de la ceasul de sistem sau de la divizor pentru a forma o valoarea pe 10 biţi. Atunci când această valoare pe 10 biţi este egală cu valoarea perioadei PWM se resetează bitul CCPx.

    33

    Figura 2.11 Ieşirea CCP în modul PWM. Rezoluţia PWM determina numărul de durate distincte ale impulsului

    Figura 2.11 Ieşirea CCP în modul PWM.

    Rezoluţia PWM determina numărul de durate distincte ale impulsului PWM care pot fi selectate pentru o anumită perioadă PWM. De exemplu pentru o rezoluţie de 10 biţi vor rezulta 1024 de durate discrete, iar pentru o rezoluţie de 8 biţi vor rezulta doar 256 de durate discrete. Rezoluţia PWM maximă este de 10 biţi atunci când PR2 ia valoarea 255. Rezoluţia este o funcţie care depinde de valoarea registrului PR2 conform următoarei ecuaţii:

    Figura 2.11 Ieşirea CCP în modul PWM. Rezoluţia PWM determina numărul de durate distincte ale impulsului

    În cazul în care durata impulsului este mai mare decât perioadă, ieşirea PWM va rămâne neschimbată.

    • 2.3 Afişaje cu cristale lichide (LCD)

    Dispozitivile LCD utilizează o tehnologie pasivă de afişare a imaginii. Acestea nu emit lumină, ci folosesc lumina ambientală. Prin manipularea acestei lumini, LCD-urile afişează imagini consumând foarte puţină energie. Datorită acestui lucru tehnologia LCD este cea mai utilizată în aplicaţiile care necesită consum redus de energie şi dimensiuni reduse.

    Modalităţi de comandă a dispozitivelor LCD

    Există două tipuri de comandă a afişajelor LCD: directă şi multiplexata [3] . Comanda directă care se mai numeşte şi statică presupune că suprafaţa inferioară a fiecărui segment să fie conectată la un plan comun iar suprafaţa superioară să aibă o conexiune independenta către circuitul de comandă. Astfel de afişaje au un contrast foarte bun funcţionând într-un domeniu larg de temperaturi. LCD-urile comandate static necesita frecvente de comandă între 30 Hz şi 60 Hz. Frecvenţele sub 30 Hz pot provoca fenomenul de pâlpâire a ecranului.

    Figura 2.11 Ieşirea CCP în modul PWM. Rezoluţia PWM determina numărul de durate distincte ale impulsului

    Figura 2.12 Comanda directă a unui afişaj LCD cu un digit.

    Dezavantajul acestui tip de comandă este că în cazul LCD-urilor cu multe segmente, conectarea individuală a fiecărui segment la circuitul de comandă devine impracticabila.

    34

    Afişajele LCD necesita tensiune de comandă alternativă cu componenta continua nulă. Fiecare segment este controlat prin amplitudinea tensiunii alternative aplicată pe acesta. Tensiunea alternativă trebuie aplicată pe toate segmentele întotdeauna pentru a preveni apariţia unei componente continue. Aplicarea unei componente continue poate duce la declanşarea unor procese chimice în interiorul ecranului LCD care vor cauza reducerea vieţii de funcţionare a dispozitivului. Comanda multiplexata [4] poate simplifica schema de interconectare a unui LCD cu număr mare de segmente. Afişajele multiplexate au întotdeauna mai multe plane comune Anumite segmente sunt conectate împreună pentru a forma grupuri care sunt adresate secvenţial cu ajutorul mai multor plane comune. Aceste grupuri sunt organizate într-o matrice cu rânduri şi coloane. Circuitele de comandă generează forme de undă cu amplitudine variabilă, sincronizate în timp pe care le aplică pe liniile şi coloanele matricei de comandă pentru a adresă un anumit segment. Numărul de segmente ce pot fi adresate de un plan comun este dat de raportul de multiplexare. Un raport de multiplexare de 1/4 indică faptul că LCD-ul are 4 plane comune. Reducerea numărului de conexiuni externe îmbunătăţeşte durata de viaţă a LCD-ului şi permite creşterea densităţii acestuia.

    Afişajele LCD necesita tensiune de comandă alternativă cu componenta continua nulă. Fiecare segment este controlat prin

    Figura 2.13 Comanda multiplexata a unui LCD cu 3 digiti folosind 4 plane comune.

    Deoarece această metodă necesita lucrul cu mai multe nivele de tensiune, multiplexarea folosind un număr mare de plane comune poate duce la reducerea domeniului de temperatură în care LCD-ul poate funcţiona corect. De asemenea, multiplexarea necesita folosirea unor circuite de comandă mai complexe sau în cazul folosirii unui microcontroler fără circuit de comandă pentru LCD, a unui software mai elaborat.

    35

    2.4

    Motorul de curent continuu cu perii

    • 2.4.1 Introducere

    Motoarele de curent continuu sunt folosite în diverse aplicaţii pornind de la jucării până la scaune de maşină reglabile electric. Motoarele de curent continuu cu perii sunt ieftine, pot fi comandate uşor şi sunt disponibile în mai multe tipuri şi dimensiuni.

    • 2.4.2 Principiu de funcţionare

    Structura unui motor de curent continuu [5] cu perii simplu este ilustrată în Figura 2.14. Toate motoarele BDC conţin următoarele componente: stator, rotor, perii şi comutator. Statorul generează câmpul magnetic staţionar care înconjoară rotorul. Acest câmp este generat cu ajutorul unui magnet permanent sau au unui electromagnet. Tipurile de motoare BDC se diferenţiază prin modul de construcţie a statorului sau prin modul în care înfăşurările electromagnetului sunt conectate la sursa de alimentare. Rotorul poate avea una sau mai multe înfăşurări. Când aceste înfăşurări sunt alimentate produc un câmp magnetic. Polii magnetici ai câmpului rotorului sunt atraşi de polii opuşi generaţi de stator, determinând mişcarea rotorului. Când motorul se roteşte, înfăşurările sunt alimentate într- o anumită ordine astefel încât polii magnetici generaţi de rotor să nu fie în acelaşi plan cu polii generaţi de stator. Aceasta alternare a câmpului magnetic generat de înfăşurările rotorului se numeşte comutaţie.

    2.4 Motorul de curent continuu cu perii 2.4.1 Introducere Motoarele de curent continuu sunt folosite în

    Figura 2.14 Schema simplificată a unui motor de curent continuu

    Periile şi comutatorul. Spre deosebire de alte tipuri de motoare electrice (BDC fără perii, AC cu inducţie), motoarele BDC nu au nevoie de controler pentru comutaţia curentului în înfăşurări. Comutaţia înfăşurărilor într-un motor BDC este realizată mecanic. O cămaşă de cupru segmentată, numită comutator, este poziţionată pe axul motorului BDC. În timp ce motorul se roteşte, periile de carbon trec peste comutator, intrând în contact cu diferite segmente ale acestuia. Segmentele sunt conectate la înfăşurări distincte ale rotorului, iar atunci când este aplicată tensiune la bornele motorului se generează astfel un câmp magnetic dinamic. Periile şi comutatorul sunt componentele motorului BDC cele mai supuse uzurii.

    36

    2.4.3

    Tipuri de motoare de curent continuu

    Cu magnet permanent

    Motorul cu magnet permanent este cel mai utilizat tip de motor de curent continuu din lume. Aceste motoare folosesc magneţi permanenţi pentru a produce câmpul magnetic al statorului. Motoarele PMDC sunt în general folosite în aplicaţiile de putere mică deoarece în acest caz magneţii permanenţi sunt mai ieftini decât electromagneţii. Dezavantajul acestui tip de motor este că în timp magneţii îşi pierd proprietăţile magnetice. Unele motoare cu magneţi permanenţi au înfăşurări speciale care previn pierderea proprietăţilor magnetice. Curbă de performatna (tensiune- viteza) este foarte liniara în cazul motoarelor de curent continuu cu magneţi permanenţi. De asemenea consumul de curent variază liniar cu cuplul. Aceste motoare răspund foarte rapid la modificarea teniunii deoarece câmpul magnetic al statorului este întotdeauna constant.

    2.4.3 Tipuri de motoare de curent continuu Cu magnet permanent Motorul cu magnet permanent este cel

    Figura 2.15 Motor cu magnet permanent.

    Motor cu excitaţie paralelă

    Motoarele de curent continuu cu câmp magnetic de excitaţie paralel au bobină de excitaţie în paralel cu rotorul. Curentul din bobina şi cel din rotor sunt independenţi. Astfel aceste motoare au un control foarte bun al turaţiei. Acest tip de motor este folosit în aplicaţii de putere mai mare decât cele cu magneţi permanenţi. Spre deosebire de motoarele cu magneţi permanenţi, pierderea proprietăţilor magnetice nu mai este o problemă la acest tip de motor.

    2.4.3 Tipuri de motoare de curent continuu Cu magnet permanent Motorul cu magnet permanent este cel

    Figura 2.16 Motor cu excitaţie paralelă Motor cu excitaţie serie

    Motoarele de curent continuu cu perii cu câmp magnetic de excitaţie serie au bobină de excitaţie în serie cu înfăşurarea rotorica. Aceste motoare sunt ideale pentru aplicaţiile care necesită cuplu ridicat deoarece curenţii din stator şi rotor cresc odată cu creşterea sarcinii. Un dezavantaj al acestui tip de motor este că spre deosebire de motoarele cu magneţi permanenţi şi cele cu excitaţie paralelă, nu permite controlul precis al vitezei.

    2.4.3 Tipuri de motoare de curent continuu Cu magnet permanent Motorul cu magnet permanent este cel

    Figura 2.17 Motor cu excitaţie serie

    37

    Motor cu excitaţie mixtă

    Motoarele cu excitaţie mixtă reprezintă o combinaţie a motoarelor cu excitaţie serie şi a celor cu excitaţie paralelă. După cum se observă în Figura 2.18, aceste motoare au atât o înfăşurare de excitaţie serie cât şi una paralelă. Motoarele cu excitaţie mixtă au cuplu mai mare decât cele motoarele cu excitaţie paralelă şi permit un control al vitezei mai exact decât în cazul motoarelor cu excitaţie serie.

    Motor cu excitaţie mixtă Motoarele cu excitaţie mixtă reprezintă o combinaţie a motoarelor cu excitaţie serie

    Figura 2.18 Motor cu excitaţie mixtă

    • 2.4.4 Modele de circuite de comandă

    Circuitele de comandă sunt folosite în aplicaţiile în care se foloseşte un controler şi este necesar controlul vitezei. Scopul circuitului de comandă este de a permite controlerului să varieze curentul din înfăşurările unui motor de curent continuu cu perii. Circuitele de comandă prezentate în continuare permit controlerului să aplice tensiune motorului folosind modulaţia în durata a impulsurilor (PWM). Din punct de vedere al consumului de putere, acest tip de control al vitezei reprezintă o metodă mult mai eficientă de variaţie a turaţiei decât metodele tradiţionale de control analogic. Controlul analogic necesita folosirea unor rezistente variabile ineficiente în serie cu motorul. Motoarele de curent continuu cu perii sunt comandate în diverse moduri. În unele cazuri motorul are nevoie să se rotească într-o singură direcţie. Figurile 2.19 şi 2.20 ilustrează circuite care permit comanda unui motor BDC într-o singură direcţie. Pentru primul circuit nu este necesară folosirea unui circuit de comandă pentru tranzistorul MOSFET. Circuitul de comandă pentru tranzistor are rolul de a aduce semnalul TTL de comandă la nivelul tensiunii de alimentare, de a furniza curentul necesar pentru comanda tranzistorului şi de a permite schimbarea de nivel în aplicaţiile cu jumătăţi de punte. în amblee circuite este folosită o dioda în paralel cu motorul. Aceasta dioda protejează tranzistorul MOŞ de tensiunea electromotoare autoindusă generată de motor atunci când acesta se învârte. Când tranzistorul este blocat, înfăşurările din motor sunt încă încărcate şi generează un curent invers. Dioda D1 trebuie aleasa astfel încât să disipe acest curent.

    Motor cu excitaţie mixtă Motoarele cu excitaţie mixtă reprezintă o combinaţie a motoarelor cu excitaţie serie

    Figura 2.19 Circuit de comandă de tip A

    38

    Figura 2.20 Circuit de comandă de tip B Rezistentele R1 şi R2 din Figurile 2.19 şi

    Figura 2.20 Circuit de comandă de tip B

    Rezistentele R1 şi R2 din Figurile 2.19 şi 2.20 sunt importante pentru funcţionarea fiecărui circuit. R1 protejează microcontrolerul de supracurent iar R2 permite blocarea tranzistorului atunci când pinul de intrare este configurat în modul tristate. Controlul bidirecţional al motoarelor de curent continuu cu perii presupune folosirea unui circuit numit punte H. Puntea H permite permite circulaţia curentului în amble sensuri prin înfăşurările motorului. Pentru a putea înţelege puntea H, aceasta trebuie descompusă în două părţi numite jumătăţi de punte. În Figura 2.21 tranzistoarele Q1 şi Q2 fac parte din prima jumătate de punte iar Q3 şi Q4 din a doua jumătate. Fiecare dintre aceste jumătăţi de punte poate comută motorul la tensiunea de alimentare sau la împământare. Atunci când Q1 este pornit şi Q2 este blocat, partea stângă a motorului va fi legată la sursa de alimentare. Prin pornirea tranzistorului Q4 şi blocarea tranzistorului Q3 se leagă partea dreaptă a motorului la masă.

    Figura 2.20 Circuit de comandă de tip B Rezistentele R1 şi R2 din Figurile 2.19 şi

    Figura 2.21 Schema unei punti H

    Săgeata marcată I FWD arata sensul curentului în această configuraţie. Tipurile de comandă cu ajutorul punţii H sunt prezentate în Tabelul 2.7. În modurile Direct sau Invers, o parte a punţii este legată la masa iar cealaltă la borna de alimentare. În Figura 2.21 săgeţile indică sensul curenţilor în cazul modurilor Direct şi Indirect. În modul Liber terminalele motorului nu sunt conectate iar acesta se învârte liber până se opreşte. În modul Frânare, terminalele motorului sunt legate la masă. Motorul se comportă ca un generator atunci când se roteşte. Scurtcircuitarea terminalelor motorului se comportă ca o sarcină infinită care opreşte motorul rapid. Săgeata I BRK ilustrează acest lucru.

    39

    Tabelul 2.7 Configuraţii de comandă a motoarelor folosind puntea H 2.4.5 Controlul vitezei Viteza unui motor

    Tabelul 2.7 Configuraţii de comandă a motoarelor folosind puntea H

    • 2.4.5 Controlul vitezei

    Viteza unui motor de curent continuu cu perii este proporţională cu tensiunea aplicată la bornele motorului. În cazul controlului digital, la bornele motorului se aplică un semnal cu modulaţie în durata a impulsurilor pentru a genera o tensiune medie. Deoarece motorul de curent continuu se comportă ca un filtru trece-jos, un semnal PWM de frecvenţă suficient de mare va generă un curent stabil în înfăşurările motorului. Relaţia de legătură între tensiunea medie, tensiunea de alimentare şi factorul de umplere este următoarea:

    Tabelul 2.7 Configuraţii de comandă a motoarelor folosind puntea H 2.4.5 Controlul vitezei Viteza unui motor

    Viteza şi factorul de umplere sunt liniar dependente una de cealaltă. De exemplu, dacă un motor are 15000 RPM la 12 V, atunci acesta va avea 7500 RPM atunci când este alimentat cu un semnal PWM cu factor de umplere 50%. Frecvenţa semnalului PWM reprezintă un factor important. La frecvenţe prea joase, motorul va fi zgomotos la viteze mici şi va răspunde greu la modificarea factorului de umplere. La frecvenţe prea mari scade eficienţa sistemului din cauza pierderilor din dispozitivele de comutaţie. În general este bine să se aleagă o frecvenţă intre peste 4kHz pentru a reduce zgomotul produs de motor. Generarea semnalului PWM cu ajutorul microcontrolerelor PIC se poate face prin software cu ajutorul unui program care alternează starea unui pin între 0 şi 1 sau folosind un microcontroler cu modul hardware CCP. Modulul CCP poate produce un semnal PWM cu rezoluţie de 10 biţi între 0% şi 100%. Este preferata folosirea unui microcontroler cu un astfel de modul deoarece generarea semnalului PWM se face independent şi nu consuma timpul alocat programului principal.

    Modalităţi de măsurare a vitezei (feedback)

    Deşi viteza unui motor de curent continuu cu perii este în general proporţională cu factorul de umplere, nici un motor nu este ideal. Căldura, uzura comutatorului şi sarcina influenţează viteza motorului. În sistemele care necesită controlul precis al vitezei este necesară introducerea unui mecanism de determinare a vitezei reale. Determinarea vitezei se poate face în două moduri: cu ajutorul unui senzor de viteză sau prin măsurarea tensiunii eletromotoare autoinduse a motorului.

    Determinarea vitezei cu ajutorul senzorilor

    Există o gamă largă de senzori folosiţi pentru determinarea vitezei de rotaţie. Senzorii optici presupun montarea unei roţi cu fante pe axul motorului. Pe o parte a roţii este montat un LED infraroşu care trimite lumina către un fototranzistor poziţionat de cealaltă parte a roţii. Când lumina trece printr-o fantă fototranzistorul este activat iar în caz contrar este blocat. Frecvenţa de comutaţie a tranzistorului indica viteza motorului. Folosind senzori optici se poate determina şi poziţia motorului la un moment dat.

    40

    Figura 2.22 Utilizarea senzorului optic Senzorii cu efect Hall folosesc o roată ataşată axului motorului. Pe

    Figura 2.22 Utilizarea senzorului optic

    Senzorii cu efect Hall folosesc o roată ataşată axului motorului. Pe marginea acestei roti sunt montaţi unul sau mai mulţi magneţi. Atunci când un magnet trece prin apropierea sa, senzorul staţionar emite un impuls TTL. În Figura 2.22 sunt prezentate componentele de bază ale unui senzor cu efect Hall.

    Figura 2.22 Utilizarea senzorului optic Senzorii cu efect Hall folosesc o roată ataşată axului motorului. Pe

    Figura 2.23 Utilizarea senzorului Hall

    O altă formă de determinare a vitezei de rotaţie este măsurarea tensiunii electromotoare autoinduse care este proporţională cu viteză. Figura 2.24 arata punctele în care se poate măsura tensiunea electromotoare autoindusă în schema punţii H. Pentru a putea citi tensiunea folosind convertorul analog digital sefoloseste un divizor pentru a aduce tensiunea în intervalul 0-5V. Tensiunea autoindusă este măsurată atunci când alimentarea motorului este întreruptă pentru un scurt moment de timp.

    Figura 2.22 Utilizarea senzorului optic Senzorii cu efect Hall folosesc o roată ataşată axului motorului. Pe

    Figura 2.24 Măsurarea tensiunii electromotoare autoinduse folosind puntea H

    2.4.6

    Elemente

    constructive

    ale

    motorului

    de

    curent

    continuu

    cu

    perii

    cu

    magneţi

    permanenţi

    Motoarele de curent continuu cu perii şi magneţi permanenţi conţin magneţi permanenţi în stator şi înfăşurări în rotor. Capetele înfăşurărilor sunt conectate la segmentele comutatorului care intră în contact cu periile staţionare. Periile sunt conectate la sursa de alimentare de curent continuu. Schimbarea direcţiei de rotaţie poate fi realizată prin inversarea polarităţii tensiunii de alimentare.

    41

    Circulaţia curentului prin bobine creează poli magnetici în rotor care interacţionează cu polii magneţilor permanenţi. Pentru a putea genera cuplu în aceeaşi direcţie, trebuie inversat sensul curentului atunci când polul nord al rotorului trece de polul sud al statorului. Acest lucru este realizat de comutator. Periile sunt fabricate din carbon sau metale preţioase. Periile din metale preţioase sunt folosite la tensiuni joase şi timp de funcţionare îndelungat, au rezistenţa de contact redusă şi produc mai puţin zgomot electromagnetic decât periile din carbon. Periile din carbon sunt folosite la consum mare de putere, viteză mare de rotaţie, porniri frecvente, tensiuni mari.

    Circulaţia curentului prin bobine creează poli magnetici în rotor care interacţionează cu polii magneţilor permanenţi. Pentru

    Figura 2.25 Elemente constructive ale motorului de cc. cu magnet permanent [6]

    Elemente componente:

    • - Rotorul reprezintă partea mobila a motorului şi este poziţionat în interiorul carcasei. Este format dintr-un ax metalic şi o armatură rotorica ce susţine înfăşurările. Capetele înfăşurărilor sunt conectate la comutator care este de asemenea fixat pe ax.

    • - Statorul este partea fixă a motorului şi este format dintr-o carcasa cilindrică în interiorul căreia sunt fixaţi magneţi permanenţi.

    • 2.4.7 Tensiunea electromotoare autoindusă

    Tensiunea electromotoare autoindusă [7] este tensiunea care se opune curentului care o produce. Aceasta tensiune este produsă de un câmp electromagnetic variabil conform legii Lenz a electromagnetismului. Tensiunea apare la motoarele electrice în care există o mişcare relativă între motor şi stator. O aplicaţie practică a acestui fenomen este măsurarea indirectă a vitezei de rotaţie a unui motor. Polaritatea tensiunii autoinduse este întotdeauna opusă polarităţii tensiunii de alimentare. Într-un motor în care rotorul se învârte într-un câmp magnetic, conductoarele intersectează liniile de câmp magnetic. Variaţia intensităţii câmpului magnetic produce o tensiune în bobină, motorul comportându-se ca un generator. Aceasta tensiune se opune tensiunii aplicate iniţial. Deoarece există o tensiune mai mică pe rotor, curentul care intră în înfăşurările motorului este redus.

    Deoarece tensiunea electromotoare autoindusă creşte rezistenta aparentă a circuitului prin generarea unei tensiuni de sens opus, un motor electric care este deja în mişcare de rotaţie consuma

    42

    mai puţină energie decât unul care tocmai porneşte sau care îşi schimbă direcţia. Pentru a maximiza acest efect, înfăşurările motorului ar trebuie fabricate din cupru, argint sau orice material (de obicei metalic) care are o rezistivitate electrică redusă, iar componentele fixe ale motorului ar trebui să nu conţină fier, majoritatea tipurilor de oţel sau orice material cu histerezis pronunţat. Tensiunea generată de un motor aflat în mişcare poate fi folosită pentru a determina viteza de rotaţie a acestuia. Acest lucru poate fi folosit în algoritmii de control al turaţiei pentru a determina viteza de mişcare a unui robot mobil. În mod obişnuit un motor consuma energie electrică şi o transformă în energie mecanică sub forma unei mişcări de rotaţie. În cazul unui generator acest fenomen este inversat. Un generator preia energie mecanică şi o converteşte în energie electrică. Majoritatea motoarelor pot fi şi generatoare dacă sunt rotiţe de o forţă exterioară lor. Atunci când se doreşte utilizarea tensiunii electromotoare autoinduse în sistemele de reglaj al turaţiei, motorul este alimentat aproape continuu, însă pentru intervale de timp foarte scurte de timp tensiunea de alimentare este întreruptă iar motorul este lăsat în gol, timp în care se realizează măsurarea tensiunii generate de acesta. Tensiunea măsurată atunci când motorul se învârte în gol este direct proporţională cu viteza de rotaţie a motorului. Acest lucru este folosit pentru a determina viteza motoarelor atunci când nu este disponibil un senzor optic sau un senzor cu efect Hall. Determinarea vitezei unui motor folosind măsurarea tensiunii autoinduse [8] se realizează în două etape care se succed repetat. Întâi motorul este alimentat pentru o perioadă de timp. Alimentarea se poate face prin PWM pentru a putea varia viteza motorului. A doua etapă implica deconectarea alimentării şi lăsarea motorului să se rotească în gol. Inerţia motorului îi permite acestuia să se rotească pentru un interval de timp suficient de lung pentru a putea măsura tensiunea generată de motor. În general aceste etape se alternează cu o frecvenţă de aproximativ 50Hz. Timpul necesar unui motor pentru a trece în starea de generator depinde de sarcină inductivă stocată în înfăşurări. Acest interval de timp este de obicei de ordinul unei milisecunde sau două.

    mai puţină energie decât unul care tocmai porneşte sau care îşi schimbă direcţia. Pentru a maximiza

    Figura 2.26 T.e.m autoindusă pentru factor de umplere 25% [8]

    În Figura 2.26 se observă o tensiune electromotoare autoindusă pentru un semnal PWM cu factor de umplere 25%. Tensiunea PWM urca până la ¼ din valoarea maxim posibilă iar apoi se stabilizează. Dacă intervalul de măsurare a tensiunii electromotoare autoinduse este prea mare, motorul va începe să încetinească. În Figura 2.27 se observă un o tensiune electromotoare corespunzătoare unui factor de umplere de 75%.

    43

    Figura 2.27 T.e.m autoindusă pentru factor de umplere 75% Figura 2.28 ilustrează cazul în care motorul

    Figura 2.27 T.e.m autoindusă pentru factor de umplere 75% [8]

    Figura 2.28 ilustrează cazul în care motorul funcţionează la un factor de umplere de 75% dar este în sarcina. Deoarece atunci când este în sarcina motorul are o energie inductivă ridicată în înfăşurări, intervalul de timp necesar atingerii nivelului de stabilizare este mai mare. Într-o aplicaţie de control al turaţiei trebuie determinat intervalul minim de timp necesar măsurării tensiunii electromotoare autoinduse.

    Figura 2.27 T.e.m autoindusă pentru factor de umplere 75% Figura 2.28 ilustrează cazul în care motorul

    Figura 2.28 T.e.m autoindusă pentru factor de umplere 75% sub sarcină [8] Limitări

    Spre deosebire de senzorii optici sau cu efect Hall, tensiunea electromotoare autoindusă nu poate reda poziţia absolută a motorului la un anumit moment de timp, ci doar viteza acestuia. Deoarece măsurarea tensiunii autoinduse necesita decuplarea motorului de la sursa de alimentare pentru intervale scurte de timp, această metodă de determinare a vitezei de rotaţie reduce factorul de umplere care poate fi maxim obţinut.

    44

    Capitolul 3.

    Proiectare software

    • 3.1 Introducere

    Proiectul a fost realizat în două etape. În prima etapă a fost scris programul în limbaj C pentru microcontrolerul PIC16F917 folosind MPLAB IDE şi compilatorul HITECH-C, iar în cea de-a doua etapă a fost realizată aplicaţia pentru PC în limbajul Visual Basic .NET folosind Visual Studio IDE.

    Sistemul de reglaj al turaţiei are următoarele funcţii:

    • - Permite modificarea directă a factorului de umplere al semnalului PWM prin intermediul potenţiometrului P2 de pe placa de dezvoltare sau prin comanda PC prin portul serial.

    • - Măsoară tensiunea electromotoare autoindusă a motorului de curent continuu

    • - Reglează automat viteza motorului, aflat sub sarcină variabilă, la o anumită valoare indicată de potenţiometrul P2 sau primită de la aplicaţia PC

    • - Afişarea vitezei curente precum şi a altor parametrii pe ecranul LCD şi cu ajutorul LED- urilor de pe placa de dezvoltare.

    • - Aplicaţia pentru PC reprezintă grafic variaţia turaţiei motorului în funcţie de timp.

    • - Informaţiile de pe placa de dezvoltare (LCD, LED-uri, valorile variabilelor de control) sunt disponibile şi în aplicaţia software pentru PC, starea acestora fiind sincronizata prin transmisiune bidirecţională prin portul serial. Diagrama sistemului de reglaj automat al turaţiei este ilustrată în Figura 3.1.

    Capitolul 3. Proiectare software 3.1 Introducere Proiectul a fost realizat în două etape. În prima etapă

    Figura 3.29 Diagrama sistemului de reglaj automat

    • 3.2 Proiectarea software pentru microcontroler

    3.2.1 Introducere

    Componentele hardware alese aduc anumite avantaje importante în ceea ce priveşte algoritmul implementat. Microcontrolerul PIC16F917 conţine un modul CCP care permite generarea independentă a semnalului PWM (fără a reduce performanta sistemului) precum şi un

    45

    circuit de comandă pentru afişajul LCD. Placa de dezvoltare PICDEM Mechatronics are incorporată o punte H care permite controlul bidirecţional al motorului de curent continuu şi măsurarea tensiunii electromotoare autoinduse. Schema electrică simplificată a proiectului este ilustrată în ANEXA 4. Pentru a rula programul trebuie realizate următoarele conexiuni pe placa de dezvoltare:

    • - AN0 (J13) la POT2(J4)

    • - AN1(J13) la BACK EMF(J16)

    • - RA3(J13) la D4(J14)

    • - RA4(J13) la SW3(J4)

    • - RA5(J13) la D7(J14)

    • - RD1(J13) la SW2(J4)

    • - RD7(J10) la P1(J1)

    • - RD6(J10) la D0(J14)

    • - RD5(J10) la D1(J14)

    • - RD4(J10) la SW4(J4)

    • - CCP2(J10) la N2(J10)

    • 3.2.2 Semnificaţia şi funcţiile componentelor:

      • - Potenţiometrul P2 are un dublu rol o dacă reglajul automat al turaţiei este dezactivat, atunci tensiunea convertită de la potenţiometrul P2 controlează direct factorul de umplere al semnalului PWM în caz contrar variaţia tensiunii de la potenţiometrul P2 în intervalul 0-5V este tradusă într-o variaţie a variabilei setRPM în intervalul 0 – 2000RPM conform caracteristicii Viteza_de_rotaţie=f(Tensiune_electromotoare_autoindusă) verificată experimental.

    o

    • - Switch-ul 2 activează sau dezactivează funcţia de reglaj automat al turaţiei. La fiecare apăsare a acestui buton se complementează variabilă AUTO care controlează funcţia de reglaj automat al turaţiei. Modificarea este transmisă imediat către aplicaţia PC pentru a menţine sincronizarea interfeţei grafice cu starea microcontrolerului.

    • - Switch-ul 3 controlează informaţia afişată pe ecranul LCD. Cât timp acest buton este ţinut apăsat, pe ecranul LCD este afişată viteza de rotaţie impusă (cu ajutorul potentiometurlui P2 sau prin comanda de la PC), iar în caz contrar (butonul este relaxat) este afişată valoarea curentă a turaţiei motorului de curent continuu.

    • - Switch-ul 4 permite dezactivarea controlului software (controlul prin aplicaţia PC). Cât timp controlul software este activ, potentiometurl P2 este dezactivat, iar comenzile de control al turaţiei sunt date de aplicaţia PC. Acest buton trebuie apăsat atunci când controlul software este activ şi se doreşte modificarea turaţiei cu ajutorul potenţiometrului P2.

    • - LED-ul D0 – atunci când reglajul automat al turaţiei este activ LED-ul 0 indică (aprins) realizarea unei corecţii pozitive a tensiunii aplicate motorului de curent continuu (creşterea factorului de umplere al semnalului PWM).

    • - LED-ul D1 are funcţionalitate complementară LED-ului 0 aprinzându-se în momentul aplicării unei corecţii negative asupra tensiunii de alimentare a motorului (descreşterea factorului de umplere al semnalului PWM)

    46

    • - LED-ul D4 indica sursa curentă de control a turaţiei: când LED-ul este stins, viteza de rotaţie a motorului de curent continuu este controlată de pe placa de dezvoltare prin intermediul potenţiometrului P2 (control hardware), iar când LED-ul este stins comenzile de control al turaţiei sunt date de aplicaţia PC.

    • - LED-ul D7 indica starea de activare/dezactivare a funcţiei de control automat al turaţiei. Atunci când LED-ul este stins controlul automat al turaţiei este dezactivat, iar aplicarea unei sarcini duce la scăderea turaţiei fără ca programul să încerce aplicarea unei corecţii (creşterea tensiunii aplicate – factor de umplere mai mare al semnalului PWM). Dacă LED- ul este aprins atunci algoritmul încearcă să păstreze o viteză constantă atunci când se aplică o sarcină variabilă pe motorul de curent continuu.

    • - Ecranul LCD este folosit pentru afişarea vitezei de rotaţie curente sau a celei dorite în funcţie de starea Switch-ului 3. De asemenea se foloseşte simbolul special “A” pentru a indica starea funcţiei de reglaj automat.

    • 3.2.3 Stabilirea unui protocol de comunicare între microcontroler şi PC

    Comunicaţia este realizată cu un o rată de semn de 9600, cu 8 biţi de date, 1 bit de start, 1 bit de stop şi fără control de paritate.Comunicarea prin portul serial se face trimiţând informaţii sub forma unui şir de valori pe 8 biţi (valori între 0 şi 255). Pentru a putea transmite şi primi comenzi prin portul serial, pe lângă configurarea modului USART trebuie stabilit un protocol. Pentru ca cele două dispozitive să “se înţeleagă” trebuie formulat un set de comenzi predefinite (mesaje) şi formatul acestora. Structura acestor mesaje trebuie cunoscută de ambele aplicaţii. Am ales un protocol simplu în care informaţia dintr-un pachet de comunicaţie (atât la transmisie cât şi la recepţie) are 5 octeţi dintre care 3 sunt identificatori de comandă (3 caractere ASCII) iar ultimii doi sunt date asociate acelei comenzi (viteza de rotaţie, factorul de umplere al semnalului PWM, starea parametrilor (reglaj automat, comanda software)).

    Mesajele trimise de microcontroler către PC sunt (fiecare caracter este trimis sub formă de cod ASCII (un octet); ↑ - concatenare):

    • - “PWMM” ↑ Factor_de_umplere (un octet) – ultimul octet conţine valoarea curentă a factorului de umplere (variabilă DutyCycle) al semnalului PWM.

    • - “SET” ↑ Viteza_de_rotaţie_dorită (doi octeţi) – ultimii doi octeţi conţin valoarea variabilei setRPM (viteza de rotaţie impusă). Cel de-al 4-lea octet conţine biţii cei mai semnificativi ai variabilei setRPM (pe 16 biţi) iar ultimul octet conţine biţii cei mai puţini semnificativi.

    • - “RPM” ↑ Viteza_de_rotaţie_curentă (doi octeţi) - ultimii doi octeţi conţin valoarea variabilei RPM (viteza de rotaţie curentă, stabilită prin măsurarea tensiunii autoinduse). Cel de-al 4-lea octet conţine biţii cei mai semnificativi ai variabilei RPM (pe 16 biţi) iar ultimul octet conţine biţii cei mai puţini semnificativi.

    • - “INI” ↑ Reglaj_automat (un octet) ↑ Control_Software (un octet) – acest mesaj este transmis ca răspuns la o cerere de sincronizare din partea aplicaţiei PC. Când aplicaţia PC se conectează la portul de comunicaţie şi detectează prezenţa microcontrolerului – primeşte mesaje pe care le poate identifica pe baza protocolului predefinit – trimite un mesaj către

    47

    acesta prin care cere informaţii despre starea funcţiei de Reglaj Automat şi a celei de Control Software. Astfel conectarea aplicaţiei PC poate fi realizată în orice moment de timp, indiferent de starea microcontrolerului. Starea celor două funcţii este stocată pe câte un bit de informaţie, însă pentru a păstra o lungime constantă a mesajului (5 octeţi) se transmite câte un octet pentru fiecare bit.

    • - “LOOP” ↑ Reglaj_automat (un octet) – atunci când funcţia de reglaj automat este activată/dezactivată folosind Switch-ul 2 de pe placa de dezvoltare, nouă valoare este trimisă către aplicaţia PC pentru a păstra sincronizarea. Ultimul octet conţine valoarea variabilei AUTO din programul microcontrolerului.

    • - “REMOT” – Acest mesaj este trimis atunci când se dezactivează controlul software prin apăsarea Switch-ului 4 de pe placa de dezvoltare. Controlul software este reactivat automat atunci când microcontrolerul primeşte de la aplicaţia PC o comandă de modificare a factorului de umplere al semnalului PWM sau o nouă valoare pentru viteza de rotaţie impusă. Starea funcţiei de reglaj automat poate fi modificată şi din aplicaţia software indiferent de starea funcţiei de control automat. Mesajele trimise de aplicaţia PC către microcontroler sunt (fiecare caracter este trimis

    sub formă de cod ASCII (un octet); ↑ - concatenare):

    • - “LOOP” ↑ Reglaj_automat (un octet) – acest mesaj este trimis atunci când funcţia de reglaj automat al turaţiei este activată/dezactivată prin intermediul aplicaţiei PC.

    • - “RPM” ↑ Viteza_de_rotaţie_impusă (doi octeţi) – cei mai semnificativi biţi ai variabilei setRPM sunt stocaţi în penultimul octet iar cei mai puţin semnificativi în ultimul octet.

    • - “PWMM” ↑ Factor_de_umplere (un octet) – când microcontrolerul primeşte această comandă, o introduce în variabilă DutyCycle, care este mai apoi scrisă în registrele CCPR2L şi CCP2CON (biţii 5-4) pentru a modifica factorul de umplere al semnalului PWM.

    • - “INITT” – acest mesaj este trimis de aplicaţia PC atunci când este detectat microcontrolerul şi reprezintă prima etapă (cererea de informaţii) de sincronizare. Microcontrolerul va răspunde la acest mesaj cu informaţii legate de starea (activat/dezactivat) funcţiilor de Reglaj Automat şi Control Software.

    • 3.2.4 Descrierea algoritmului şi a codului sursa Codul sursa al aplicatiei pentru mirocontroler este prezentat integral in ANEXA 7.

    3.2.4.1

    Iniţializarea

    În etapa de iniţializare a programului se configurează modul de lucru al microcontrolerului (configurarea porturilor de intrare/ieşire, analogice/digitale, selectarea oscilatorului şi configurarea frecvenţei de sistem), perifericele folosite (convertor analog/digital, modul CCP, Timer0, Timer1, Timer2, USART), afişajul LCD, se activează întreruperile.

    Configurarea ceasului de sistem la frecvenţa de 8 MHz se face prin setarea biţilor 6-4 din registrul OSCCON. Configurarea porturilor de intrare/ieşire se face prin setarea biţilor din registrele TRIS asociate porturilor iar pentru selectarea intrărilor analogice se foloseşte registrul ANSEL.

    • - Ieşiri digitale:

    48

    o

    RA3 – LED-ul D4

    o

    RA4 – Switch-ul 3

    o

    RA5 – LED-ul D7

    o

    RD1 – Switch-ul 2

    o

    RD2 – Ieşirea modulului CCP

    o

    RD4 – Switch-ul 4

    o

    RD5 – LED-ul D1

    o

    RD6 – LED-ul D0

    o

    RD7 – comanda tranzistorului nMOS

    • - Intrări analogice:

    o

    AN0 – tensiunea electromotoare autoindusă de la pinul BACK EMF

    o

    AN1 – tensiunea controlată de potenţiometrul P2

    Configurarea modulului USART. În această aplicaţie am folosit o rată de semn de 9600, 8 biţi de date, un bit de start, un bit de stop, fără control de paritate. Având în vedere că am configurat oscilatorul intern la 8MHz trebuie determinată valoarea registrului SPBRG pentru o rată de semn de 9600:

    o RA3 – LED-ul D4 o RA4 – Switch-ul 3 o RA5 – LED-ul D7 o
    o RA3 – LED-ul D4 o RA4 – Switch-ul 3 o RA5 – LED-ul D7 o

    Verificam eroarea de cuantizare astfel:

    o RA3 – LED-ul D4 o RA4 – Switch-ul 3 o RA5 – LED-ul D7 o
    o RA3 – LED-ul D4 o RA4 – Switch-ul 3 o RA5 – LED-ul D7 o

    Eroarea relativă de 0.16% este suficient de mică astfel încât să nu afecteze comunicaţia prin portul serial. Acest lucru se dovedeşte şi în testele practice. Următorul pas în iniţializarea USART este activarea recepţiei (registrul RCSTA) şi a transmisiunii seriale (registrul TXSTA). Recepţia este indicată prin setarea fanionului RCIF iar finalizarea unei transmisiunii prin setarea fanionului TXIF. Atât transmisiunea cât şi recepţia pot fi configurate pentru a lansa o întrerupere.

    Configurarea convertorului analog/digital. Conversia analog-digitala are o rezoluţie de 10 biţi, iar rezultatul conversiei este aliniat la stânga în registrele ADRESH şi ADRESL. Frecvenţa convertorului este f = F OSC /16 = 8MHz / 16 = 500 kHz. Perioada de bit este T AD = 1/f = 2 μs, iar conversia durează 11 perioade de bit, adik 11 * T AD = 22 μs. Configurarea se face din registrele ADCON1 şi ADCON0. Registrul ADCON0 permite selectarea intrării analogice care va furniza semnalul ce trebuie convertit. În această aplicaţie se folosesc pinii AN0 (tensiune electromotoare autoindusă) şi AN1 (tensiunea controlată de potenţiometrul P2).

    Configurarea modulului CCP. Pentru o valoare de 63 a registrului PR2, acest modul va genera în modul PWM un semnal dreptunghiular cu frecvenţa de 31.25 kHz căruia îi corespunde o perioadă de 32 μs ce poate fi calculată astfel:

    o RA3 – LED-ul D4 o RA4 – Switch-ul 3 o RA5 – LED-ul D7 o

    49

    Rezoluţia PWM maximă este de 10 biţi atunci când PR2 ia valoarea 255. Rezoluţia este o

    Rezoluţia PWM maximă este de 10 biţi atunci când PR2 ia valoarea 255. Rezoluţia este o funcţie care depinde de valoarea registrului PR2 conform următoarei ecuaţii:

    Rezoluţia PWM maximă este de 10 biţi atunci când PR2 ia valoarea 255. Rezoluţia este o

    Pentru PR2 = 63, rezoluţia semnalului PWM va fi de 8 biţi, suficientă pentru această aplicaţie.

    Configurarea Timer-ului 0. Depăşirea timer-ului 0 este folosită ca baza de timp pentru execuţia buclei principale de program. Divizorul timer-ului este selectat la valoarea 256 prin modificarea registrului OPTION_REG.

    Activarea întreruperilor. În acest program am folosit întreruperea pentru recepţie a modulului USART. Aceasta se activează prin setarea bitului RCIE din registrul PIE1, activarea întreruperilor pentru periferice (bitul PEIE din registrul INTCON) şi în final activarea globală a întreruperilor (bitul GIE din registrul INTCON).

    Iniţializarea ecranului LCD este realizată prin apelarea funcţiei initLCD. Această funcţie este definită într-un fişier de cod separat.

    • 3.2.4.2 Bucla principală de program

    Baza de timp folosită pentru bucla principală de program este dată de depăşirea generată de Timerul 0 al microcontrolerului. Instrucţiunile din interiorul buclei se execută la fiecare depăşire a Timerului 0 sau la intervale care sunt multipli ai bazei de timp. Timerul 0 este configurat să genereze o depăşire o dată la 32,768 ms conform formulei:

    Rezoluţia PWM maximă este de 10 biţi atunci când PR2 ia valoarea 255. Rezoluţia este o

    Instrucţiunile din bucla principală:

    • - La fiecare întrerupere a Timer-ului 0 se verifică starea switch-urilor 2 şi 4. Un buton este detectat ca apăsat dacă acesta îşi păstrează starea (apăsat) timp de 32ms (intervalul dintre două depăşiri consecutive ale Timer-ului 0). Acest interval asigura depăşirea perioadei în care butonul poate face un contact imperfect (debounce). Variabilă “pushed” de tip bit este setată atunci când se detectează pentru prima oară apăsarea unui buton. Dacă la apariţia următoarei întreruperi butonul este tot apăsat (variabilă “pushed” fiind setată) se ia în considerare apăsarea butonului şi se resetează variabila.

    • - Fanionul care indică depăşirea Timer-ului 0 (T0IF) trebuie resetat prin software.

    • - Variabila Contor este incrementata iar în funcţie de valoarea ei se vor executa anumite instrucţiuni la intervale egale cu multipli ai bazei de timp.

    -

    Este

    apelată

    rutina

    ReadBackEMF

    electromotoare autoinduse.

    care citeşte şi memorează valoarea tensiunii

    50

    Figura 3.30 Diagrama buclei principale de program 51

    Figura 3.30 Diagrama buclei principale de program

    51

    -

    După măsurarea tensiunii autoinduse, în cazul în care funcţia de Reglaj Automat este activă, este apelată rutina adjustRPM care calculează eroarea de viteză şi modifică factorul de umplere în cazul în care eroarea nu se încadrează între anumite limite impuse. În acest caz funcţia primeşte ca parametru viteza de rotaţie calculată ca media ultimelor 4 valori înregistrate pentru tensiunea electromotoare autoindusă.

    -

    La fiecare interval mai mare de 64 de ori decât baza de timp se calculează viteza de rotaţie folosind media ultimelor 64 de valori ale tensiunii electromotoare autoinduse măsurate. Această viteză de rotaţie obţinută este afişată pe ecranul LCD folosind funcţia DisplayRPM iar variabila Contor este resetată. După afişarea turaţiei bucla principală de program se reia.

    3.2.4.3

    Descrierea subrutinelor principale

    ReadBackEMF

    Această subrutina efectuează conversia analog digitală a tensiunii electromotoare autoinduse şi reţine ultimele 64 de rezultate ale conversiei. Media acestor valori va da o estimare mai bună a vitezei de rotaţie reducând zgomotul. În Figura 3.3 se observă tensiunea autoindusă pentru un factor de umplere de 68.62%. După întreruperea alimentării, atunci când motorul se află sub sarcină, intervalul de timp necesar tensiunii autoinduse pentru a ajunge în zona de stabilizare este mai mare. Folosind osciloscopul am determinat că acest interval nu depăşeşte valoarea de 400μs.

    - După măsurarea tensiunii autoinduse, în cazul în care funcţia de Reglaj Automat este activă, este

    Figura 3.31 T.e.m autoindusă pentru factor de umplere 68.62%

    Convertorul analog-digital este configurat pentru a converti semnalul de pe pinul AN0 (regisrtul ADCON0 – biţii 2-0). Astfel, pentru măsurarea tensiunii autoinduse, se întrerupe alimentarea motorului, se dezactivează modulul PWM pentru 400μs apoi se fac 4 conversii analog/digitale consecutive la intervale de 40 μs, iar media acestor 4 valori este trecută în variabila insantEMF. Acesta este un prim pas în încercarea de a reduce zgomotul. Valorile astfel obţinute sunt trecute într-un vector cu 64 de valori (EMFVector). Acest vector este accesat circular folosind ca index variabilă Pointer care ia valori inrte 0 şi 63, trecând din 63 în 0 la incrementare. Tot în această subrutină este calculată suma ultimelor 4 valori citite (microEMFSum) precum şi suma tuturor celor 64 de valori (EMFSum). Deoarece valorile sunt memorate într-un

    52

    vector suma poate fi recalculată prin simpla adunare a noii valori citite şi scăderea celei mai vechi valori din vector. Media ultimelor 4 valori citite va fi folosită pentru a aplica o corecţie rapidă, semnificativă a turaţiei atunci când eroarea are valori mari. Media pe 64 de valori este folosită pentru corecţia fină atunci când eroarea scade şi se încearcă stabilizarea turaţiei în apropierea celei impuse. Chiar şi după luarea tuturor acestor măsuri de reducere a zgomotului, turaţia nu ajunge întotdeauna exact la viteza de rotaţie impusă ci doar în vecinătatea acesteia. Pentru o performanţă mai bună trebuie folosită altă metodă de măsurare a turaţiei reale (feedback): senzor optic sau senzor cu efect Hall.

    adjustRPM

    Aceasta subrutină realizează corecţiile necesare asupra factorului de umplere al semnalului PWM pentru menţinerea unei viteze de rotaţie constante în condiţiile unei sarcini variabile.

    Argumentele importante cu care se apelează aceste funcţii sunt:

    • - cRPM – viteza curentă de rotaţie exprimată în rotaţii pe minut

    • - threshold – marja de eroare. Dacă diferenţa dintre viteza impusă (setRPM) şi cRPM este mai mare în modul decât acest argument atunci va avea loc o corecţie

    • - gain – valoarea cu care se va modifica factorul de umplere (variabilă DutyCycle) în cazul aplicării unei corecţii. În cazul în care se aplică o corecţie, se aprinde LED-ul D0 (corecţie negativă, scăderea factorului de umplere) sau LED-ul D1 (corecţie pozitivă, creşterea factorului de umplere). Apelarea acestei subrutine se face la fiecare depăşire a timer-ului 0 (32 ms) pentru corecţii rapide şi semnificative (erori mari) sau la fiecare 16 depăşiri (0.5s) pentru corecţii mai puţin semnificative bazate pe eroarea calculată pe baza mediei tuturor celor 64 de valori ale tensiunii autoinduse memorate.

    vector suma poate fi recalculată prin simpla adunare a noii valori citite şi scăderea celei mai

    Figura 3.32 Diagrama rutinei adjustRPM

    53

    SetMotorSpeed

    Întâi se citeşte tensiunea de la potenţiometrul P2 realizând o conversie analog/digitală după selectarea canalului de intrare AN1 (ADCON0 bitul 0). În cazul în care controul software este dezactivat (SOFT=0, viteza comandată de microcontroler), viteza de rotaţie impusă (setRPM, dată în acest caz de potenţiometrul P2) este calculată în funcţie de rezultatul conversiei. Am observat experimental că viteza de rotaţie nu este perfect liniară şi poate fi aproximată mai bine printr-o funcţie pătratică de forma

    ∑ SetMotorSpeed Întâi se citeşte tensiunea de la potenţiometrul P2 realizând o conversie analog/digitală după selectarea

    Unde

    x

    este

    rezultatul

    conversiei analog/digitale. Dacă funcţia de Reglaj Automat este activă, atunci cei mai semnificativi 8 biţi ai conversiei sunt copiaţi în variabilă DutyCycle. În final cei mai semnificativi 6 biţi ai factorului de umplere (variabilă DutyCycle) sunt copiaţi în registrul CCP2CON (biţii 5-0) iar cei mai puţin semnificativi 2 biţi sunt copiaţi în registrul CCP2CON (bitii 5-4).

    DisplayRPM

    Această procedură este apelată o dată la fiecare 500 ms şi afişează viteza de rotaţie curentă pe ecranul LCD. În cazul în care switch-ul 3 este ţinut apăsat, pe ecran va fi afişată valoarea variabilei setRPM (viteza impusă). Tot aici, viteza curentă de rotaţie, viteza impusă şi valoarea factorului de umplere sunt transmise către PC prin intermediul subrutinei “transmit”. Afişarea pe ecranul LCD se realizează cu o serie de funcţii definite într-un alt fişier C. Aceste funcţii permit afişarea cifrelor cu 7 segmente pe cele trei poziţii ale LCD-ului, precum şi afişarea punctului zecimal pe una din cele 3 poziţii disponibile sau activarea altor simboluri conform ANEXEI 6.

    SendTXT

    Subrutina SendTXT efectuează transmisiunea în ordine a tuturor caracterelor dintr-un şir constat primit ca argument. Pentru fiecare caracter se trimite codul său ASCII (un octet). Transmisiunea poate fi începută prin scrierea unui octet în registrul TXREG. Fanionul de întrerupere TXIF este resetat hardware atunci când transmisiunea este finalizată.

    Transmit

    Această procedură primeşte ca argument un şir constant de trei caractere ce reprezintă codul mesajului ce trebuie transmis către PC. Acest şir de caractere este comparat cu întreaga listă de comenzi definite în protocolul de comunicaţie şi efectuează transmisiunea unui pachet de 5 octeţi care conţine un cod de comandă şi informaţia ataşată. Descrierea comenzilor posibile este făcută la începutul acestui capitol.

    checkCMD

    Funcţia checkCMD primeşte ca argument un şir constant de 3 caractere pe care îl compară cu primele 3 caractere din vectorul de recepţie rcvBuffer. În cazul unei potriviri funcţia returnează valoarea 1 şi 0 în caz contrar.

    54

    Uart_int

    Această este rutină de întrerupere folosită în program pentru a recepţiona datele primite prin portul serial. Datele primite sunt împărţite în pachete de 5 octeţi şi apoi verificate conform protocolului de comunicare (lista de comenzi predefinită). Microcontrolerele din familia PIC16 au un singur vector de întreruperi, deci o singură rutină de răspuns la întreruperi. În acest program am folosit o singură întrerupere pentru recepţia datelor prin modulul USART. Dacă se folosesc mai multe surse de întrerupere trebuie verificat prin cod care este perifericul care a generat întreruperea.

    • 3.2.4.4 Implementarea funcţiilor pentru afişajul LCD

    După cum se poate observa în ANEXA 5, circuitul de comandă pentru afişaje LCD al microcontrolerului PIC16F917 permite comandarea LCD-urilor cu până la 96 de segmente folosind 24 de de pini de segment şi până la 4 căi comune. Starea (aprins/stins) fiecărui segment de pe LCD poate fi modificată folosint biţii celor 12 registre LCDDATA0-11. Pentru LCD-ul cu 39 de segmente VIM-332 montat pe placa de dezvoltare se folosesc doar 10 pini de segment şi 4 căi comune însă biţii de stare ai segmentelor sunt răspândiţi în toate cele 12 registre LCDDATA. Schema ecranului LCD VIM-332 este prezentata in ANEXA 6. Pentru a uşura modalitatea de afişare a informaţiilor pe LCD am implementat o serie de funcţii care primesc ca parametru un şir de octeţi (cifre hexazecimale) şi afişează cifrele respective pe LCD modificând automat registrele LCDDATA. Pentru fiecare dintre cele 3 poziţii de pe LCD în care se pot afişa cifre am identificat cele 7 segmente în ordine conform Figurii 3.5.

    ∑ Uart_int Această este rutină de întrerupere folosită în program pentru a recepţiona datele primite prin

    Figura 3.33 LCD cu 7 segmente.

    Am plecat de la ideea declarării câte unui vector cu 7 valori (corespunzătoare celor 7 segmente ale unei cifre) în care să reţin adresele biţilor din registrele LCDDATA care controlează segmentele fiecărei cifre în ordinea ABCDEFG. Deoarece compilatorul HI-TECH C nu permite adresarea indirectă a variabilelor de tip bit,

    am folosit câte o pereche de vectori pentru fiecare poziţie:

    • - Vectorii “pos” reţin adresele registrelor LCDDATA în care se afla bitii corespunzători segmentelor.

    • - Vectorii “mask” reţin poziţiile biţilor respectivi în interiorul registrelor LCDDATA Astfel se poate face o adresare indirectă a registrelor LCDDATA, iar din valoarea adresată se citeşte bitul cu numărul corespunzător din vectorul “mask”. După memorarea adreselor fiecărui segment pentru fiecare dintre cele 3 poziţii, trebuie făcută o legătură între cifrele care vor fi afişate şi segmentele care le compun. Astfel cifra “2” este compusă din segmentele ABDEG. Dacă reprezentăm segmentele care fac parte din reprezentarea unei cifre cu 1 iar segmentele care nu fac parte cu 0, atunci pentru ordinea de parcurgere ABCDEFG, cifra 2 va avea reprezentarea 1101101. Astfel se pot reprezenta toate cifrele hexazecimale. La cei 7 biţi se mai adăugă bitul cel mai puţin semnificativ cu valoarea 0. Vectorul “digits” conţine codurile corespunzătoare cifrelor hexazecimale, conform Tabelului

    3.1:

    55

    Cifra Hex.

    A

    B

    C

    D

    E

    F

    G

    Rezultat↑0

    0

    1

    1

     

    1

    1

    1

    0

    • 1 11111100

    1

    1

    1

     

    0

    0

    0

    0

    • 0 01100000

    2

    1

    1

     

    1

    1

    0

    1

    • 0 11011010

    3

    1

    1

     

    1

    0

    0

    1

    • 1 11110010

    4

    0

    1

     

    0

    0

    1

    1

    • 1 01100110

    5

    1

    0

     

    1

    0

    1

    1

    • 1 10110110

    6

    1

    0

     

    1

    1

    1

    1

    • 1 10111110

    7

    1

    1

     

    0

    0

    0

    0

    • 1 11100000

    8

    1

    1

     

    1

    1

    1

    1

    • 1 11111110

    9

    1

    1

     

    1

    0

    1

    1

    • 1 11110110

    A

    1

    1

     

    0

    1

    1

    1

    • 1 11101110

    b

    0

    0

     

    1

    1

    1

    1

    • 1 00111110

    C

    1

    0

     

    1

    1

    1

    1

    • 0 10011100

    d

    0

    1

     

    1

    1

    0

    1

    • 1 01111010

    E

    1

    0

     

    1

    1

    1

    1

    • 0 10011110

    F

    1

    0

     

    0

    1

    1

    1

    • 0 10001110

    Tabelul 3.8 Codificarea cifrelor hexazecimale

    Atunci când se doreşte afişarea unei cifre algoritmul este următorul:

    • - Cifra respectivă este folosită ca index pentru vectorul “digits” pentru a afla codul acesteia.

    • - Se parcurg vectorii pos şi mask iar la fiecare valoare de la adresele din vectorul pos se atribuie bitului cu ordinul corespunzător din vectorul mask, valoarea bitului corespunzător din codul cifrei.

    Fişierul LCDLib.c conţine următoarele subrutine:

    • - initLCD – iniţializează afişajul LCD prin activarea pinilor de segment (registrele LCDSE2- 0) şi resetarea biţilor de segment (resetarea registrelor LCDDATA11-0). Registrul LCDCON este folosint pentru activarea modulului de comandă LCD şi selectarea sursei de ceas F OSC /8192 aproximativ egală cu 1 kHz.

    • - DisplayDP – în funcţie de valoarea argumentului “k”, această procedură afişează punctul zecimal pe una din cele trei poziţii posibile.

    • - DisplayDIGIT1 – primeşte ca argument un număr între 0 şi 15 şi afişează pe cifra hexazecimală corespunzătoare pe poziţia 1 a LCD-ului (prima de la dreapta la stânga).

    • - DisplayDIGIT2 – primeşte ca argument un număr între 0 şi 15 şi afişează pe cifra hexazecimală corespunzătoare pe poziţia 2 a LCD-ului (a doua de la dreapta la stânga).

    • - DisplayDIGIT3 – primeşte ca argument un număr între 0 şi 15 şi afişează pe cifra hexazecimală corespunzătoare pe poziţia 3 a LCD-ului (a treia de la dreapta la stânga).

    • - DisplaySymbol – se ocupă de afişarea celorlalte simboluri ce pot fi afişate pe LCD. Aceste simboluri sunt definite în ANEXA 5. Subrutina primeşte ca argument un şir de caractere ce reprezintă denumirea simbolului (“V”, “K”, “BATT”, “-“, etc…) şi un al doilea argument care va lua valoarea 0 sau 1 reprezentând starea dorită a simbolului (0 – stins, 1 – aprins).

    56

    3.3

    Proiectarea software pentru PC

    • 3.3.1 Introducere

    Aplicaţia software pentru microcontroler îndeplineşte cerinţele proiectului, permiţând controlul turaţiei motorului de curent continuu cu posibilitatea de a menţine viteză constantă atunci când motorul se află sub sarcină. Cu toate acestea, posibilităţile plăcii de dezvoltare de a afişa rezultatele sunt limitate:

    ecranul LCD poate afişa doar 3 caractere cu 7 segmente fiecare. Am considerat necesară implementarea unei aplicaţii software pentru PC care să poată controla turaţia motorului, oferind în plus posibilitatea afişării în timp real a datelor primite de la microcontroler pe un grafic în funcţie de timp. Aplicaţia a fost realizată în Visual Studio 2010 folosind limbajul Visual Basic.NET 2010. Interfaţa grafică a aplicaţiei PC este intuitivă şi permite observarea variaţiei în timp a turaţiei motorului.

    • 3.3.2 Prezentarea interfeţei grafice

    Funcţionalitatea elementelor de interfaţă.

    Grupul Informaţii Conexiune:

    • - Port serial – Lista tuturor porturilor disponibile pe PC-ul pe care rulează aplicaţia. În mod implicit la pornirea programului primul port din lista este selectat automat.

    • - Conectare – După selectarea portului serial corespunzător la care este conectată placa de dezvoltare, se apasă acest buton pentru a deschide portul. Dacă portul a fost deschis cu succes acest buton este dezactivat împreună cu lista de selecţie a porturilor, iar butonul Deconectare devine activ.

    • - Deconectare – Închide portul de comunicaţie. După apăsare butonul este dezactivat, iar lista de selecţie a porturilor şi butonul Conectare devin active.

    • - În partea dreaptă a acestui chenar sunt prezentate alte detalii privitoare la parametrii conexiunii seriale (rata de semn, control paritate, număr de biţi de stop, număr de biţi de date).

    Grupul Date Recepţionate:

    • - Viteza curentă – turaţia motorului de curent continuu primită de la microcontroler la intervale de 500 ms.

    • - Viteza impusă – turaţia care trebuie menţinută atunci când funcţia de Reglaj Automat este activată. Atunci când Controlul Soft este activ această valoare este aceea introdusă în căsuţa text Viteză din grupul Comenzi Microcontroler. Dacă turaţia este controlată de placă de dezvoltare (Control Soft dezactivat) atunci Viteza impusă este indicată de potenţiometrul P2.

    57

    • - Factor de umplere PWM – Atunci când Reglajul Automat este activ, microcontrolerul modifica factorul de umplere pentru a menţine turaţia constantă atunci când motroul este sub sarcină. Dacă Reglajul Automat este inactiv atunci Factorul de umplere este constant. Aceeaşi valoare este indicată şi în graficul PWM din partea dreaptă colorat cu un gradient de la albastru la roşu, albastru corespunzând valorii 0 şi roşu valorii 100.

    Grupul Comenzi Microcontoler:

    • - PWM – căsuţa text în care se pot introduce numere între 0 şi 100 reprezentând factorul de umplere dorit. Prin apăsarea tastei Enter atunci când căsuţa text este selectată, sau prin apăsarea butonului Trimite, nouă valoare a factorului de umplere este trimisă către microcontroler. Această comandă va activa Controlul Soft şi va dezactiva funcţia de Reglaj Automat.

    • - Viteza – se introduce o valoare între 0 şi 2000 de rotaţii pe minut, reprezentând viteza impusă. Această valoare este trimisă către microcontroler după apăsarea tastei Enter sau apăsarea butonului Trimite corespunzător. Această comandă va activa Controlul Soft şi funcţia de Reglaj Automat.

    • - Reglaj Automat – la apăsarea acestui buton starea funcţiei de Reglaj Automat este activată/dezactivată. Această comandă este independentă de starea Controlului Soft.

    Alte elemente de interfaţă:

    • - Indicatorul Control Soft – arată starea curentă a funcţiei Control Soft. Culoarea Verde indică faptul că turaţia este controlată de aplicaţia PC iar culoarea Rosie arata că pentru controlul turaţiei este folosit potenţiometrul P2 de pe placa de dezvoltare.

    • - Indicatorul Reglaj Automat – culoarea Verde semnifică activarea Reglajului Automat (microcontrolerul modifică automat semnalul PWM pentru a menţine turaţia constantă) iar culoarea Rosie indică faptul că funcţia de Reglaj Automat este inactivă.

    • - Lupa – modifică domeniul de valori care este afişat pe axa verticală a graficului. Dacă această funcţie este bifată, graficul va afişa un domeniu de 300 RPM centrat pe valoarea curentă a vitezei de rotaţie. Dacă funcţia Lupa este debifată, atunci domeniul de valori de pe axa verticală va fi întotdeauna 0-2000 RPM.

    • - Netezire – permite modificarea modalităţii de afişarea a graficului. Dacă această funcţie este dezactivată, punctele de pe grafic (recepţionate la intervale de 500ms) vor fi interconectate prin linii drepte. Dacă funcţia netezire este activă atunci punctele intermediare valorilor eşantionate sunt aproximate cu funcţii “spline”, graficul având un aspect mai bun.

    Graficul în funcţie de timp

    Acest grafic este poziţionat în partea de jos a interfeţei şi se redimensionează automat odată cu fereastra principală de program. Pe grafic sunt afişate ultimele 46 de valori ale vitezei de rotaţie totalizând 23 de secunde. Axa orizontală este împărţită în intervale de 1 secundă cu etichete de marcare la fiecare 5 secunde. Domeniul afişat pe axa verticală se modifică în funcţie de starea opţiunii Lupa. Când Lupa este dezactivată, sunt afişate valori între 0 şi 2000 RPM cu linii de marcaj la interval de 200

    58

    RPM. Dacă funcţia Lupa este activa se afişează un domeniu de 300 RPM în jurul valorii curente a vitezei de rotaţie. În acest caz, liniile de marcaj sunt afişate la intervale de 50 RPM. Atunci când funcţia Reglaj Automat este activă, în partea dreaptă a axei verticale este indicată valoarea vitezei de rotaţie impuse. Realizarea unui Dublu-Click pe suprafaţa graficului activează/dezactivează funcţia Lupa.

    RPM. Dacă funcţia Lupa este activa se afişează un domeniu de 300 RPM în jurul valorii

    Figura 3.34 Fereastra principală de program

    Reprezentarea grafică a factorului de umplere

    În partea dreaptă sus a interfeţei este reprezentată grafic valoarea factorului de umplere al

    semnalului PWM folosind o schemă de culori care variază gradual de la Albastru (factor de umplere 0%) către Roşu (factor de umplere 100%).

    Acest grafic are funcţie dublă:

    • - Afişează valoarea curentă a factorului de umplere trimis de microcontroler.

    • - Dacă se efectuează un click în interiorul dreptughiului marcat, în funcţie de înălţimea cursorului faţă de marginea de jos a graficului este calculată o valoare între 0 şi 100 care este apoi trecută în căsuţa text PWM din grupul Comenzi Microcontroler şi apoi această comandă este trimisă prin portul serial.

    Prezentarea bării de meniu:

    • - Fişier

    59

    o Conectare o Deconectare o Ieşire

    • - Opţiuni o Lupă Reglaj Automat o Netezire

    o

    • - Ajutor o Despre

    Opţiunea Despre din meniul Ajutor va afişa informaţii despre tema proiectului, autor şi coordonator.

    o Conectare o Deconectare o Ieşire - Opţiuni o Lupă Reglaj Automat o Netezire o -

    Figura 3.35 Fereastra informaţii

    • 3.3.3 Descrierea generală a algoritmului

    Codul sursa al aplicatiei pentru PC este prezentat integral in ANEXA 8. Visual Basic Net este un limbaj de programare de nivel înalt orientat pe obiecte. Orice acţiune pe care programul o întreprinde este declanşată de un eveniment cum ar fi: apăsarea unui buton, mişcarea cursorului, Click, Dublu-Click. Blocuri importante de program:

    frmMain_Load

    Se execută la rularea programului. Aici se pot face iniţializări precum încărcarea listei de

    porturi disponibile şi starea iniţială a diferitelor elemente de interfaţă (butonul Deconectare dezactivat, lista de porturi activă, …)

    btnSendPWM_Click

    Se execută la apăsarea pe butonul Trimite din dreptul căsuţei text PWM din grupul Comenzi Microcontroler. Verifică dacă valoarea introdusă în căsuţa text este între 0 şi 100 iar în caz contrar afişează un mesaj de avertizare. Dacă valoarea se încadrează în domeniul stabilit atunci se trimite către microcontroler comanda “PWMM” urmată de nouă valoare a factorului de umpere.

    btnSendRPM_Click

    Se execută la efectuarea unui click pe butonul Trimite din dreptul căsuţei text Viteza. Se verifică dacă valoarea se încadrează în intervalul 0-1950 şi în caz afirmativ se trimite către microcontroler comanda “RPM” urmată nouă valoare a turaţiei impuse.

    60

    SerialPort1_DataReceived

    Este echivalentul unei întreruperi pentru microcontroler. Este executată atunci când prin portul serial s-au primit cel puţin 5 octeţi de informaţie. Din această procedură se apelează rutina ReceivedText.

    ReceivedText

    Aceasta este rutina de răspuns la întreruperea generată la primirea unui pachet prin portul serial. Se compară primii 3 octeţi din pachet cu toate comenzile din protocolul predefinit. În cazul unei potriviri se execută o secvenţă de cod specifică prin care se modifica elementele de interfaţă.

    În cazul comenzilor de tip “SET” sau “RPM” se apelează comanda pbGraph.Invalidate care forţează redesenarea graficului în funcţie de timp.

    pbGraph_DoubleClick

    Se execută la efectuarea unui dublu-click în aria graficului. Are ca efect complementarea

    stării funcţiei Lupă.

    pbGraph_Paint

    Aceasta este rutina în care am implementat afişarea graficului. Am definit zona de tip dreptunghi (Area) în care se realizează desenul. Întâi se desenează axele de coordonate, apoi valorile vitezei de rotaţie stocate în vectorul rpmValues sunt desenate şi unite prin linii. Vectorul rpmValues este actualizat la primirea fiecărei noi valori (o dată la 500ms). Procedeul de desenare a graficului este destul de complex, aceasta fiind procedura cu cele mai multe linii de cod. Am folosit funcţii şi proprietăţi ale clasei Graphics din cadrul domeniului System.Drawing al Framework-ului .NET.

    pbPWM_Paint

    Asemănător cu pbGraph_Paint această procedură este folosită pentru redesenarea reprezentării grafice a factorului de umplere al semnalului PWM. Acest grafic este poziţionat în partea superioară dreaptă a ferestrei principale de program. Şi aici am folosit clasa Graphics pentru a desena toate elmentele care apar pe grafic.

    btnLoop_Click

    Se execută la apăsarea pe butonul Reglaj Automat şi modifică starea acestei funcţii trimiţând apoi nouă valoare către microcontroler.

    btnConnect_Click

    Este apelata la apăsarea pe butonul Conectare şi are ca efect deschiderea portului serial de comunicare şi stabilirea parametrilor de comunicare (rata de bit, paritate, biţi de stop, biţi de start). În cazul în care portul care se încearcă a fi deschis este folosit de o altă aplicaţie windows, programul afişează un mesaj de avertizare.

    btnDisconnect_Click

    Această procedură se execută la apăsarea butonului Deconectare şi are ca efect închiderea portului de comunicaţie serială şi readucerea variabilelor de program şi a interfeţei grafice la starea iniţială de dinainte de conectare.

    61

    Capitolul 4.

    Date experimentale

    • 4.1 Introducere

    Spre deosebire de senzorii optici sau senzorii cu efect Hall, tensiunea electromotoare autoindusă nu este la fel de precisă în ceea ce priveşte determinarea vitezei de rotaţie. Însă această metodă nu implică un cost ridicat şi poate fi folosită şi în anumite situaţii în care montarea unui senzor optic sau cu efect Hall nu este posibilă din cauza lipsei spaţiului necesar. Pentru a putea implementa sistemul automat de reglare a turaţiei motorului de curent continuu folosind măsurarea tensiunii electromotoare autoinduse trebuie observată dependenta acestei tensiunii de viteza reală de rotaţie. Pentru efectuarea măsurătorilor am folosit osciloscopul digital Tektronix TPS2014.

    Capitolul 4. Date experimentale 4.1 Introducere Spre deosebire de senzorii optici sau senzorii cu efect Hall,

    Figura 4.36 Osciloscop digital Tektronix TPS2014

    • 4.2 Măsurarea vitezei reale de rotaţie

    Pentru determinarea vitezei reale la diferite valori ale tensiunii de alimentare am folosit senzorul optic de pe placa de dezvoltare PICDEM Mechatronics. Intru-cat motorul are ataşată o roată cu două fante, senzorul optic va genera câte două impulsuri la fiecare rotaţie completă. Pentru frecventa PWM aleasa f = 31.25 kHz şi frecvenţa de sistem f OSC = 8MHz, valoarea registrului perioadă PR2 este calculată astfel:

    Capitolul 4. Date experimentale 4.1 Introducere Spre deosebire de senzorii optici sau senzorii cu efect Hall,

    Pentru această perioadă se poate calcula rezoluţia semnalului PWM:

    Capitolul 4. Date experimentale 4.1 Introducere Spre deosebire de senzorii optici sau senzorii cu efect Hall,

    Aşadar se pot defini 256 de valori distincte ale lăţimii impulsului. Pentru determinarea dependenţei lăţime impuls – viteză de rotaţie am variat lăţimea impulsului în domeniul 15 – 255 cu increment 16 (folosind MPLAB IDE şi compilator C) şi am măsurat cu osciloscopul frecventa impulsurilor date de senzorul optic. Împărţind această frecvenţă la 2 şi apoi înmulţind cu 60 se poate determina viteza reală de rotaţie.

    62

    Figura 4.37 Răspunsul senzorului optic pentru un factor de umplere de 62.35% Figura 4.38 Răspunsul senzorului

    Figura 4.37 Răspunsul senzorului optic pentru un factor de umplere de 62.35%

    Figura 4.37 Răspunsul senzorului optic pentru un factor de umplere de 62.35% Figura 4.38 Răspunsul senzorului

    Figura 4.38 Răspunsul senzorului optic pentru un factor de umplere de 87.45%

    Lăţime

    Frecvenţa

    Viteza de

    Lăţime

    Frecvenţa

    Viteza de

    impuls

    rotaţie

    impuls

    rotaţie

    15

     
    • 0 0

    143

    29.67

    890.1

    31

     
    • 0 0

    159

    33.83

    1014.9

    47

     
    • 0 0

    175

    39.11

    1173.3

    63

     
    • 0 0

    191

    44.99

    1349.7

    79

     
    • 10.06 301.8

    207

    50.47

    1514.1

    95

     
    • 15.42 462.6

    223

    55.27

    1658.1

    111

     
    • 20.12 603.6

    239

    60.15

    1804.5

    127

     
    • 24.99 749.7

    255

    65.42

    1962.6

    Tabelul 4.9 Dependenţa vitezei de rotaţie de lăţimea impulsului PWM

    Atunci când se activează reglajul automat iar controlul soft este dezactivat, tensiunea de la potenţiometrul P2 este cea care controlează turaţia. Cei mai semnificativi 8 biţi ai rezultatului conversiei tensiunii de la potenţiometrul P2 formează un număr care ia valori între 0 şi 255. Acest număr trebuie convertit într-o turaţie impusă cu valori între 0 şi 2000. Pentru a putea realiza acest lucru trebuie calculată ecuaţia dreptei de regresie pentru graficul de mai jos. Calculul ecuaţiei dreptei de regresie pentru lăţimea impulului între 79 şi 255.

    Dreapta de regresie are forma:

    Figura 4.37 Răspunsul senzorului optic pentru un factor de umplere de 62.35% Figura 4.38 Răspunsul senzorului

    unde:

    Figura 4.37 Răspunsul senzorului optic pentru un factor de umplere de 62.35% Figura 4.38 Răspunsul senzorului

    63

    Figura 4.39 Dependenţa vitezei de rotaţie de lăţimea impulsului PWM x y x*y x 79 301.8
    Figura 4.39 Dependenţa vitezei de rotaţie de lăţimea impulsului PWM x y x*y x 79 301.8

    Figura 4.39 Dependenţa vitezei de rotaţie de lăţimea impulsului PWM

    x

    y

    x*y

    x

    2

    79

    301.8

    23842.2

     

    6241

    95

    462.6

    43947

     

    9025

     
    • 111 603.6

    66999.6

     

    12321

     
    • 127 749.7

    95211.9

     

    16129

     

    890.1

    • 143 127284.3

     

    20449

     
    • 159 1014.9

    161369.1

     

    25281

     
    • 175 1173.3

    205327.5

     

    30625

     
    • 191 1349.7

    257792.7

     

    36481

     
    • 207 1514.1

    313418.7

     

    42849

     
    • 223 1658.1

    369756.3

     

    49729

     
    • 239 1804.5

    431275.5

     

    57121

     
    • 255 1962.6

    500463

     

    65025

     

    Σ(x)

    Σ(y)

    Σ(x*y)

     

    Σ(x 2 )

    2004

    13485.6

    2596687.8

     

    371276

    Tabelul 4.10 Termeni necesari pentru determinarea dreptei de regresie (Σ(x)) 2 = 4016016

    n=12

    Figura 4.39 Dependenţa vitezei de rotaţie de lăţimea impulsului PWM x y x*y x 79 301.8
    Figura 4.39 Dependenţa vitezei de rotaţie de lăţimea impulsului PWM x y x*y x 79 301.8

    Ecuaţia dreptei de regresie este:

    Figura 4.39 Dependenţa vitezei de rotaţie de lăţimea impulsului PWM x y x*y x 79 301.8

    64

    4.3

    Tensiunea medie a semnalului PWM

    4.3 Tensiunea medie a semnalului PWM Figura 4.40 Semnal PWM pentru factor de umplere 24,7% Figura

    Figura 4.40 Semnal PWM pentru factor de umplere 24,7%

    4.3 Tensiunea medie a semnalului PWM Figura 4.40 Semnal PWM pentru factor de umplere 24,7% Figura

    Figura 4.41 Semnal PWM pentru factor de umplere 68,63%

    Lăţime impuls

    (0-255)

    Durata impuls [μs]

    Factor de umplere (Lăţime

    Factor de

    umplere

    Tensiune

    Măsurată [mV]

    impuls/255)

    măsurat

    0

    0

    0

    0

    0

    15

    1878

    0.05882353

     
    • 0.0588162 296

    31

    3874

    0.12156863

     
    • 0.1213279 606

    47

    5880

    0.18431373

     
    • 0.1841528 916

    63

    7878

    0.24705882

     
    • 0.2467272 1230

    79

    9861

    0.30980392

     
    • 0.3088318 1540

    95

    11860

    0.37254902

     
    • 0.3714375 1840

    111

    13860

    0.43529412

     
    • 0.4340745 2170

    127

    15850

    0.49803922

     
    • 0.4963984 2580

    143

    17840

    0.56078431

     
    • 0.5587222 2990

    159

    19840

    0.62352941

     
    • 0.6213592 3290

    175

    21850

    0.68627451

     
    • 0.6843094 3600

    191

    23840

    0.74901961

     
    • 0.7466333 3910

    207

    25840

    0.81176471

     
    • 0.8092703 4220

    223

    27820

    0.8745098

     
    • 0.8712809 4530

    239

    29820

    0.9372549

     
    • 0.9339179 4840

    255

    31800

    1

     
    • 0.9959286 5150

    Tabelul 4.11 Variaţia tensiunii în funcţie de factorul de umplere al semnalului PWM.

    65

    .

    . Figura 4.42 Variaţia tensiunii în funcţie de lăţimea impulsului PWM 4.4 Legătura dintre viteza de

    Figura 4.42 Variaţia tensiunii în funcţie de lăţimea impulsului PWM

    • 4.4 Legătura dintre viteza de rotaţie şi tensiunea electromotoare autoindusă

    Pentru măsurarea tensiunii electromotoare autoinduse am conectat osciloscopul la pinul Back EMF al plăcii de dezvoltare. Apoi am variat lăţimea impulsului PWM folosind aceleaşi valori din intervalul 15-255 cu increment 16.

    . Figura 4.42 Variaţia tensiunii în funcţie de lăţimea impulsului PWM 4.4 Legătura dintre viteza de

    Figura 4.43 T.e.m autoindusă pentru factor de umplere 43.52%

    66

    Figura 4.44 T.e.m autoindusă pentru factor de umplere 68.62% Lăţime impuls Tensiune autoindusa Rezultatul conversiei Viteza

    Figura 4.44 T.e.m autoindusă pentru factor de umplere 68.62%

    Lăţime impuls

    Tensiune autoindusa

    Rezultatul conversiei

    Viteza de rotaţie

    (0-255)

    Măsurată [mV]

    tensiunii autoinduse

    măsurată [rpm]

    0

    0

     
    • 0 0

    15

    0

     
    • 0 0

    31

    0

     
    • 0 0

    47

    0

     
    • 0 0

    63

    0

     
    • 0 0

    79

    720

    35

    301.8

    95

    1040

    51

    462.6

    111

    1440

    70

    603.6

    127

    1760

    86

    749.7

    143

    2160

     
    • 106 890.1

    159

    2480

     
    • 122 1014.9

    175

    2640

     
    • 129 1173.3

    191

    3120

     
    • 153 1349.7

    207

    3520

     
    • 173 1514.1

    223

    3680

     
    • 181 1658.1

    239

    4080

     
    • 200 1804.5

    255

    4480

     
    • 220 1962.6

    Tabelul 4.12 Viteza de rotaţie în funcţie de t.e.m autoindusă

    67

    Figura 4.45 Viteza de rotaţie în funcţie de valoarea registrului ADRESH. Calculul ecuatiei dreptei de regresie:

    Figura 4.45 Viteza de rotaţie în funcţie de valoarea registrului ADRESH. Calculul ecuatiei dreptei de regresie:

    x – valoarea registrului ADRESH – cei mai semnificativi 8 biţi ai rezultatului conversiei tensiunii electromotoare autoinduse y – viteza de rotaţie

    x

     

    y

    x*y

    x

    2

    0

     

    0

    23842.2

     

    6241

    35

     

    301.8

    43947

     

    9025

    51

     

    462.6

    66999.6

     

    12321

    70

     

    603.6

    95211.9

     

    16129

    86

     

    749.7

    127284.3

     

    20449

    106

     

    890.1

    161369.1

     

    25281

    122

     

    1014.9

    205327.5

     

    30625

    129

     

    1173.3

    257792.7

     

    36481

    153

     

    1349.7

    313418.7

     

    42849

    173

     

    1514.1