Controlul embedded al motoarelor de curent continuu fără perii [309070]

Controlul embedded al motoarelor de curent continuu fără perii

PROIECT DE DIPLOMĂ

Autor: Diana-Roxana Rusu

Conducător științific: Conf. Dr. Ing. Mirela DOBRA

Autor: Diana-Roxana RUSU

Controlul embedded al motoarelor de curent continuu fără perii

Enunțul temei: Acestă lucrare prezintă un sistem de control al turației motoarelor de curent continuu fără perii. Algoritmul este explicat pe parcursul lucrării de față.

Conținutul proiectului: [anonimizat], [anonimizat], Introducere, [anonimizat], Proiectare, Implementare, Concluzii, Bibliografie.

Locul documentației: [anonimizat]:

Data emiterii temei:

Data predării:

Semnătura autorului

Semnătura conducătorului științific

Declarație pe proprie răspundere privind

autenticitatea proiectului de diplomă

Subsemnatul(a) Diana-[anonimizat](ă) cu CI seria SX nr. 324453, CNP [anonimizat], autorul lucrării: [anonimizat] a [anonimizat] , [anonimizat], sesiunea a anului universitar 2017-2018, [anonimizat], [anonimizat], și în bibliografie.

Declar, [anonimizat] a convențiilor internaționale privind drepturile de autor.

Declar, [anonimizat] a mai fost prezentată în fața unei alte comisii de examen de licență.

In cazul constatării ulterioare a [anonimizat], respectiv, anularea examenului de licență.

[anonimizat]

(semnătura)

SINTEZA

proiectului de diplomă cu titlul:

Controlul embedded al motoarelor de curent continuu fără perii

Autor: Diana-Roxana RUSU

Conducător științific: Conf. Dr. Ing. Mirela DOBRA

1. Cerințele temei: Analiza, proiectarea și implementarea unui sistem de control al turației unui motor de curent contrinuu fără perii folosind microcontrolerul dsPIC33EP256MC506 și placa de dezvoltare dsPICDEM MCLV-2.

2. Soluții alese: În urma analizei s-a ales implementarea unui algoritm de control al comutației care nu se bazează pe traductoare de poziție. Algorimul are la bază detecția trecerii tensiunii contraelectromotoare de pe fazele motorului BLDC prin 0.

3. Rezultate obținute: S-[anonimizat], mediul de dezvoltare și s-a implementat algoritmul de control în mediul de dezvoltare MPLAB X. Algoritmul funționează conform planificării făcute.

4. Testări și verificări: Testarea și verificarea corectitudinii implementării a fost făcută prin descărcarea aplicației pe microprocesor și viziualizarea semnalelor de pe două faze ale motorului și a semnalelor oferite senzorii Hall pe un osciloscop.

5. Contribuții personale: Alegerea algoritmului de control implementat și implementarea acestuia în mediul de dezvoltare MPLAB X.

6. Surse de documentare: [anonimizat] înglobate (engl. Embedded Systems). Aceste sisteme sunt o combinație de hardware (microprocesor sau microcontroler) și software specializat, proiectat să îndeplinească o anumită funcție sau un anumit set de sarcini, de obicei în timp-real. Noțiunea de timp-real nu are o definiție consacrată, dar putem spune că se referă la capacitatea unui sistem de a prelucra datele primite și de a furniza date de ieșire corecte respectând constrângerile temporare impuse sistemului.

Sistemele cu microprocesoare au început să se răspândească din ce în ce mai mult datorită unei serii considerabile de avantaje cum ar fi: dimensiunile lor reduse, fiabilitatea ridicată, funcționarea nepretențioasă din punctul de vedere al condițiilor de mediu, viteza de lucru comparabilă (din ce in ce mai mare pe măsură ce apar noi tipuri și arhitecturi de microprocesoare), prețul în scădere etc. Aceste sisteme sunt fabricate să îndeplinească mai multe sarcini care trebuie să se execute aproape simultan, astfel, sarcinile sunt izolate în entități software numite fire de execuție (engl. thread). Datorită împărțirii programului în fire de execuție, procesorul este distribuit între acestea, prioritară fiind respectarea constrângerilor temporale.

Sisteme CAD/CAM

Deși controlul analogic al mașinilor unelte a oferit soluții robuste, existau anumite dezavantaje datorită îmbătrânirii componentelor analogice și dificultății de modificare a logicii de control. Odată cu dezvoltarea sistemelor de control numerice, mașinile unelte au început să fie controlate cu ajutorul microprocesoarelor de înaltă performanță. Printre avantajele acestora se numără reprogramabilitatea, nemaifiind necesară înlocuirea echipamentului hardware pentru a aduce modificări algoritmului de control, respectiv capacitatea de a implementa regulatoare și filtre de ordin mult mai mare. Din acest motiv, proiectarea si fabricarea asistate de calculator s-au dezvoltat simultan în ultimii ani, datorită legăturii naturale care există între procesul de proiectare și cel de manufacturare.

Proiectarea asistată de calculator (engl. Computer-Aided Design – CAD) poate fi definită ca activitatea prin care un sistem de calcul este folosit pentru proiectarea, modificarea, analiza și optimizarea procesului de proiectare. Folosind CAD se pot implementa programe dedicate funcțiilor inginerești care pot realiza analiza stărilor, tensiuni și deformații ale unor elemente din sistem, analiza dinamică a mecanismelor, calculul schimbului de căldură, controlul numeric etc. Programele aplicative variază de la un utilizator la altul, în funcție de tipul liniei de producție, de procesul de fabricare și de piața de desfacere.

Fabricarea asistată de calculator (engl. Computer-Aided Manufacturing – CAM) se definește ca utilizarea unui sistem de calcul în activitatea de planificare, monitorizare și control a unui sistem.

Obiective

Obiectivul principal al proiectului de față este proiectarea și implementarea unui sistem de control pentru un motor de curent continuu fără perii (BLDC), folosind microprocesorul dsPIC33EP256MC506, realizat de Microchip. În acest sens, s-a folosit mediul de dezvoltare MPLAB X, mediu realizat tot de compania mai sus menționată.

Alte obiective:

cunoașterea și familiarizarea cu familia de procesoare dsPIC33EP realizată de Microchip;

monitorizarea turației și a comutației senzorilor Hall;

familiarizarea cu mediul de dezvoltare MPLAB X și cu limbajul de programare Embedded C.

Specificații

În lucrarea de față se dorește obținerea unui sistem de control numeric robust, stabil și cu o eficiență ridicată. De asemenea, se pot monitoriza turația, respectiv comutația senzorilor Hall folosind interfața grafică pusă la dispoziție de mediul de dezvoltare MPLAB X.

Studiu Bibliografic

Motoare electrice

Motoarele electrice au o istorie foarte lungă care începe cu invenția primului motor electric în secolul al XIX-lea, când Michael Faraday a descoperit în anul 1821 că poate folosi curentul electric pentru a genera mișcare. Acesta a descoperit că dacă trece curent electric printr-un fir care este pus lângă un magnet, atunci firul se rotește în jurul magnetului. Mai apoi, în 1861, James Clerk Maxwell, pune bazele matematice ale descoperirii lui Faraday și explică cu acest prilej fenomenul de electromagnetism. După această descoperire care a marcat lumea științei, motoarele electrice au început să se dezvolte din ce în ce mai tare și să se răspândească în industrie, înlocuind motoarele pe bază de carburanți, precum și cele cu cilindri hidraulici. Aproximativ 40% din producția totală anuală de electricitate este, de fapt, folosită pentru a pune în funcțiune aceste motoare, procent care este în continuă creștere.

Motorul de curent continuu fără perii

Fundamentare teoretică

Motorul de curent continuu fără perii (fără colector), în engleză Brushless DC electric motor, prescurtat BLDC motor, este un motor electric de curent continuu, la care comutația căilor de curent necesară învârtirii rotorului se realizează electronic. Elementele comutatoare de putere sunt dispuse într-o configurație de punte (două comutatoare de putere pentru o bobină), pentru a permite curentului electric să circule în ambele sensuri prin bobinele înfășurării rotorice. Aceste motoare sunt foarte des întâlnite în industria automobilelor, aerospațială, medicală, a echipamentelor de automatizare sau în sisteme de poziționare. Motoarele BLDC fac parte din categoria mașinilor electrice sincrone, acest lucru însemnând că viteza de rotație a fluxului magnetic al statorului coincide cu viteza mecanică a rotorului. Rotorul acestor mașini electrice este un magnet permanent, iar statorul este bobinat de obicei în trei faze cu un număr variat de perechi de poli magnetici .

Printre avantajele folosirii motoarelor BLDC se enumeră:

costul redus de fabricare datorat construcției simple și robuste;

putere mare pe unitatea de volum;

lipsa periilor comutatoare a dus la creșterea duratei de viață ;

caracteristica bună viteză-cuplu mecanic;

zgomot redus;

complexitatea sistemelor de control a fost redusă odată cu apariția pe piață a microprocesoarelor și a circuitelor integrate specializate pe comutația electrică a motoarelor BLDC.

Conform legii lui Faraday care guvernează circuitul închis al motoarelor BLDC, în timpul comutației eltectrice, de pe fazele statorului se poate colecta așa-numita tensiune contraelectromotoare. Există două variante de înfășurare a bobinajului statorului: având caracteristica trapezoidală sau sinusoidală a tensiunii contraelectromotoare. Această diferențiere se face pe baza interconectării bobinelor aflate în stator pentru a oferi cele două tipuri de tensiune contraelectromotoare după cum puntem vedea în figurile 1 și 2. Deoarece curentul de fază are aceeași natură precum tensiunea corespunzătoare, cuplul de ieșire al motoarelor sinusoidale este mult mai neted decât la motoarele trapezoidale. Din păcate, acest avantaj crește costul de producție al motoarelor cu caracteristică sinusoidală, în general alegându-se utilizarea motoarelor trapezoidale.

Rotorul acestor motoare este realizat dintr-un magnet permanent și poate avea un număr variabil de perechi poli cuprins între doi și opt. Magnetul permanent se alege în funcție de densitatea câmpului magnetic necesară în rotor. Magneții de ferită sunt utilizați în mod tradițional pentru realizarea magneților permanenți, dar pe măsură ce tehnica de manufacturare avansează, magneții realizați din diferite aliaje câștigă popularitate. Deși sunt mult mai costisitori, magneții din aliaj au o densitate magnetică ridicată și nu există pierderi în cuplu. De asemenea, acești magneți îmbunătățesc raportul mărime-greutate și generează un cuplu mai mare decât în motoarele cu magneții din ferită de caracteristici echivalente.

Caracteristica cuplu/viteză

Există doi parametri de cuplu folosiți pentru a defini un motor BLDC: cuplul maxim dezvoltat (engl. peak torque) și cuplul nominal (engl. rated troque). Cuplul rămâne constant pentru un interval de viteză până la viteza nominală. Motorul poate să fie încărcat până la viteza maximă care poate să fie de până la 150% din valoarea nominală, dar cuplul o să scadă.

Această caractristică este foarte importantă, deoarece trebuie să fie compatibilă cu caracteristica similară a sarcinii. Anumite sarcini, de exemplu, compresoare, macarale și conveiere au un cuplu de sarcină care nu variază cu viteza. Alte sarcini au un cuplu care crește proporțional cu pătratul vitezei: tipic pentru pompe centrifugale, ventilatoare și suflante. Unele sarcini, în schimb, necesită o acționare la cuplu constantă până la o anumită viteză de bază și o acționare la putere constantă la viteze mari (de exemplu la vehiculele electrice).

Controlul motoarelor de curent continuu fără perii

Principiul de comandă al motoarelor BLDC este de a acționa fazele statorului printr-o secvență de comutație prestabilită. Această secvență este necesară pentru a face curentul să intre prin una din faze, respectiv să iasă prin a doua, iar cea de-a treia fază va rămâne neutră.

Tranzistoarele de putere ale invertorului trebuie să primească comenzi de conducție și de blocare de la un sistem de comandă care să se sincronizeze cu poziția rotorului. Pentru a citi poziția rotorului s-au propus diferite tipuri de traductoare, cum ar fi: resolver-ul, encoder-ul optic sau traductorul cu efect Hall.

Resolver-ul

Resorver-ul furnizează o rezoluție foarte fină a semnalului de poziție a arborelui. Ieșirea acestuia este un semnal cu două faze (sinus/cosinus) la frecvența purtătoarei, modulat sinusoidal cu rotația rotorului față de stator. Această ieșire poate fi convertită într-un tren de impulsuri cu ajutorului unui convertor resolver – digital (engl. Resolver Digital Convertor). Se obțin, astfel, între 1000 și 4000 de impulsuri pe rotație. Acest traductor este folosit mai des în aplicații care necesită informații suplimentare față de cele necesare pentru impulsurile de comutație, informații necesare pentru turație sau aplicații care necesită un semnal foarte precis de poziționare a arborelui.

Deși este mai scump decât celelalte două tipuri de traductoare, resolver-ul are avantajul suplimentar al rigditații și poate să fie folosit în medii cu temperaturi înalte sau la viteze ridicate (cel puțin 40.000 rot/min).

Encoder-ul optic

Encoder-ul optic este format dintr-un set de perechi de fototranzistoare și surse de lumină concentrată folosite împreună ca un disc encoder de sticlă sau de metal. Fantele prezente pe disc definesc frecvența și forma de undă a trenurilor de impulsuri care sunt produse de fototranzistoare.

Există două mari tipuri de encodere: asolute (Figura 3. a)) și incrementale (Figura 3 b)). Ieșirea unui encoder absolut indică poziția curentă a rotorului, astfel acesta fiind un traductor unghiular. Encoder-ul incremental, în schimb, furnizează o ieșire care oferă informații privind mișcarea rotorului care este procesată și folosită pentru a determina poziția și viteza rotorului.

Encoder-ul optic este folosit într-o gamă largă de aplicații care necesită monitorizare sau control. Acestea sunt folosite în domenii precum: controlul industrial, industria automobilelor, industria aeronautică, robotică etc.

Producerea directă a impulsurilor face encoder-ul optic atractiv pentru conectarea cu circuitele digitale de comutație, dar, din păcate, acestea sunt limitate, deoarece nu pot lucra la temperaturi la fel de înalte ca și resolver-ul. De asemenea, encoder-ul incremental necesită o secvență de inițializare care poate să fie evitată prin folositea unui encoder absolut, dar acesta este mult mai scump.

Traductorul cu efect Hall

Acesta este cel mai simplu traductor de poziție electronic utilizat pentru aflarea poziției rotorului. Un traductor Hall este un comutator semiconductor care se închide și se deschide când este plasat într-un camp magnetic mai mare decât o anumită limită. Acestea se bazează pe efectul Hall, care constă în apariția unui câmp electric transversal și a unei diferențe de potențial într-un metal sau semiconductor parcurse de un curent electric, atunci când ele sunt introduse într-un câmp magnetic perpendicular pe direcția curentului.

Traductoarele Hall furnizează impulsuri compatibile cu circuitele TTL (engl. Transistor-Transitor Logic). Pentru motoarele BLDC se aranjează trei traductoare Hall decalate cu 60° sau 120° electrice și montate pe carcasa statorului. Pentru a funcționa este necesară montarea unui magnet separat în apropierea traductoarelor, sau pentru a evita folosirea unui magnet suplimentar, comutatoarele Hall se pot monta suficient de aproape de magneții rotorului pentru a fi energizați de fluxul înlănțuit în poziția corespunzătoare rotorului.

Din păcate, aceste componente suplimentare necesare în citirea poziției arborelui cresc inevitabil costul sistemului și pot scădea siguranța, pentru că sunt relativ fragile și sunt predispuse la defecte sau funcționare incorectă în condiții de mediu nefavorabile (temperaturi ridicate, praf, ulei, vibrații, șocuri etc.).

Datorită acestor dezavantaje majore, în ultimii ani s-au făcut eforturi pentru a elimina traductorul de poziționare al arborelui. În urma cercetărilor, în prezent, mai multe companii oferă soluții pentru comutația fără niciun senzor suplimentar montat pe motor. Aceasa este numită comanda fără senzori (engl. sensorless control), utilizată și în lucrarea de față.

Comanda fără senzori a motoarelor BLDC

Dacă privim îndeaproape cele trei faze ale motoarelor BLDC se poate explica cum algoritmul de control fără senzori poate calcula poziția rotorului [4].

În cazul unui semnal de măsură a tensiunii contraelectromotoare trapezoidale (semnalul de măsură al motorului folosit în lucrare), o fază trece în nivel superior, o altă fază în nivel inferior, iar cea de-a treia fază este inactivă. La fiecare trecere a rotorului printr-o fază, magnetul permanent aflat pe rotor induce un curent de fază, ceea ce conduce la nașterea tensiunii electromotoare. Aceasta este dependentă de numărul de rotații ale fiecărei faze, de viteza unghiulară a rotorului și de tăria magnetului permanent al rotorului. Această formă de undă este în directă legătură cu poziția rotorului, de aceea putând fi folosită pentru determinarea poziției. Există numeroase metode care folosesc tensiunea contraelectromotoare pentru a determina poziția rotorului, una dintre cele mai conoscute și robuste fiind detecția trecerii prin zero (engl. zero-corssing detection).

Atunci când unul din semnalele trapezoidale culese de pe fază trece prin zero, controlerul trebuie să comute fazele conform unei secvențe de comutație prestabilită. Pentru a păstra avansul rotorului trebuie să existe un decalaj între punctul la care apare trecerea prin zero și momentul comutației. Pentru a realiza acest lucru, se dorește calcularea și compensarea acestuia de către controler. Cea mai simplă metodă de implementare a acestei compensări este prin a considera apariția trecerii prin zero de fiecare dată cănd tensiunea de pe fiecare fază atinge jumătate din valoarea maximă absolută.

În aplicațiile care folosesc această metodă de control, tensiunea de prag la trecerea prin zero variază considerabil. Din fericire, această tensiune de prag este egală cu punctul neutru al motorului, deoarece aceasta este media tensiunilor electromotoare de pe toate cele trei faze. Astfel, de fiecare dată când tensiunea contraelectromotoare este egală cu punctul neutru al motorului, apare un eveniment de trecere prin zero, iar microcontrolerul trebuie să comute. Pentru a realiza această comutație putem folosi fie un ansamblu de rezistențe și amplificatoare, fie modulul ADC (engl. Analog to Digital Converter) și un program implementat pe microcontroler.

Avantajele folosirii controlului fără senzori:

nu sunt necesari senzori suplimentari montați pe motor;

prin eliminarea senzorilor sistemul devine mult mai robust;

costurile totale ale sistemului de control sunt mai reduse;

sistemul devine mai fiabil existând mai puține componente predispuse defectelor.

Dezavantaje în utilizarea controlului fără senzori:

la viteze mici valoarea tensiunii electromotoare este foarte mică și greu de detectat; în acest sens, de obicei, pornirea mașinii electrice se face în buclă deschisă;

zgomotul produs de comutația MOSFET-urilor este detectat de către modulul ADC, fiind necesară și implementarea unui filtru pentru eliminarea zgomotului.

Odată aflată poziția rotorului mai trebuie să luăm în calcul anumite performanțe pe care trebuie să le îndeplinim pentru proiectarea unui sitem de control al motoarelor BLDC. Aceste performanțe vizează timpul de răspuns, suprareglajul, eroarea staționară la poziție și domeniul de varianță al comenzii. Gândindu-ne la faptul că un motor de curent continuu fără perii este un sistem electric, putem spune că timpul de răspuns este relativ mic (de ordinul milisecundelor), deci nu este un factor care să ridice probleme foarte mari în calculul sistemului de control. De asemenea, un motor de curent continuu se poate aproxima cu un element de ordinul I (de o constantă de timp care înglobează atât dinamica electrică și mecanică) deci răspunsul acestuia la intrare de tip treaptă poate fi considerat ca o exponențială amortizată simplă, fără suprareglaj.

Se pune problema utilizării unui element de control din cauza erorii staționare la poziție. Acesta este necesar pentru a aduce eroarea staționară la poziție în banda de variație acceptată. Aceasta presupune ca răspunsul sistemului în regim staționar să fie cu 2% mai mare sau mai mic decât referința prescrisă. De exemplu, dacă avem ca și referință a motorului o viteză de 2500 de rotații/minut, răspunsul sitemului trebuie să fie mereu între 2450 și 2550 de rotații/minut. Desigur, aceste mărimi trebuie convertite în semnal unificat de tensiune ([-5, 5], [-10, 10], [0, 5], [0, 10] V) pentru a putea fi interpretate de microcontroler. Elementul de control mai este folosit și pentru respingerea perturbațiilor apărute în sistem. În cazul în care, de exemplu, pe rotorul motorului se aplică o forță care duce la scaderea curentului , implicit ducând la scăderea cuplului, comanda trebuie să crească astfel încât eroarea staționară la poziție să tindă din nou la 0.

În prezent, cele mai utilizate elemente de control în cazul motoarelor de curent continuu fără perii sunt regulatoarele automate de tip proporțional-integral-derivativ (PID). Acestea au rolul de a calcula un semnal de comandă, folosindu-se de diferența dintre semnalul de referință prescris și semnalul obținut la ieșirea sistemului (denumit abatere sau eroare), semnal de comnadă care o să modifice factorul de umplere a semnalului PWM (engl. Pulse-width modulation signal) care acționează tranzistoarele responsabile cu comutația celor trei faze.

Regulatoarele PID

Aceste regulatoare se găsesc implementate în diferite forme: proporționale (P), proporțional-integratoare (PI), proporțional-derivative (PD) sau proporțional-integral-derivative (PID).

În figura 5 se poate observa o structură simplă de control a unui proces tehnologic unde:

r este referința sistemului;

yr este mărimea de ieșire a procesului;

ɛ este eroarea;

u este mărimea de comandă.

Referința intră cu plus în blocul sumator, iar ieșirea procesului tehnologic intră cu minus. Diferența celor două mărimi este semnalul de eroare care o să servească ca și intrare a regulatorului. Informația primită o să fie procesată de către algoritmul de reglare, iar la ieșirea acestuia o să fie comanda care o să acționeze elementul de execuție.

Pentru unele aplicații suficient de simple, unde nu se urmărește obținerea unei erori staționare la poziție care tinde la 0, un regulator proporțional este suficient, deoarece acesta va crește ieșirea sistemului cu ajutorul semnalului de eroare înmulțit cu valoarea constantei de proporționalitate ().

Uneori, în locul factorului de proporționalitate se folosește o constantă denumită bandă de proporționalitate a integratorului, notată BP. Aceasta este definită de relația (2.1):

(2.1)

Acestă relație se folosește în cazul în care domeniul de variație al mărimii de comandă u este egal cu domeniul de variație al erorii ɛ. Dacă cele domenii de variație intrare-ieșire diferă, banda de proporționalitate este definită de relația (2.2):

(2.2)

În aplicații în care necesită o eroare staționară la poziție care tinde la 0 este necesară folosirea unui regulator cu acțiune proporțional-integrală (PI). Acesta introduce în plus față de constanta de proporționalitate , integrala după timp a semnalului de eroare, ceea ce în domeniul complex reprezintă un element de ordinul I cu pol în origine, numit integrator cu o anumită constantă de timp, numită constantă de timp de integrare (). Pe lângă avantajul de a avea eroarea staționară la poziție egală cu 0, acest tip de regulator face sistemul rezistent la pertubații. Este des utilizat în industrie tocmai din acest motiv. Relația prin care definim un regulator cu acțiune proporțional-integrală în domeniul Laplace:

(2.3)

Un dezavantaj major în folosirea regulatoarelor de tip PI este creșterea riscului de instabilitate. Acesta introduce o întârzire de fază, respectiv scade marginea de fază față de punctul critic (-1+0j).

Dacă se dorește un regim tranzitoriu mai scurt, deci, un timp de răspuns mai bun se utilizează un regulator cu acțiune proporțional-derivativă (PD). Acesta are o componentă de proporționalitate similară cu cea a a regulatoarelor PI, dar are și o componentă derivativă, D, care ponderează diferența dintre mărimea de referință și cea de ieșire. Relația care definește un regulator de tip PD în domeniul complex:

(2.4)

Coeficientul se numește constantă de timp de derivare.

Precum s-a stabilit mai sus, regulatoarele PD sunt necesare în cazul în care se dorește un regim tranzitoriu mai mic, dar, din păcate, acestea nu asigură o eroare la poziție egală cu 0 și pot introduce oscilații. Un alt dezavantaj major al acestui tip de regulator este faptul că nu sunt implmentabile practic, fiind necauzale, utilizarea lor într-o aplicație reală necisitând introducerea unui filtru adițional. Astfel, relația (2.4), în practică, se rescrie astfel:

(2.5)

unde N este, în general, egal cu .

Regulatoarele PID (proporțional-integral-derivativ) sunt mai complexe, asigurând performanțe de reglare superioare. Ele înglobează toate efectele menționate mai sus, marele dezavantaj fiind dificultatea de calcul a celor trei constante: și . Relația care definește un regulator de tip PID:

(2.6)

Pentru calculul celor trei constante, s-au propus de-a lungul timpului diferite metode de calcul. Putem alege una din aceste metode ținând cont de performanțele pe care dorim să le respecte sistemul și de dificultatea matematică a metodei folosite. De exemplu, dacă inpunem anumite performanțe specifice putem folosi metoda plasării polilor în bucla închisă (Guillemin-Truxal) sau putem să folosim metode bazate pe metode frecvențiale utilizând diagramele Bode (amplitudine și fază) ale funcției de transfer a procesului. Dacă, în schimb, se dorește o metodă rapidă de calcul a celor trei constante se pot folosi metode experimentale precum Ziegler–Nichols sau Cohen-Coon. Aceste metode rapide de calcul, din păcate, nu garanteză performanțele impuse. Acestea se folosesc, în special, în industrie în cazul unei defecțiuni apărute la unul din regulatoare, pentru a păstra deschise liniile de producție până la restaurearea regulatorului. Metodele acestea experimentale se pretează, mai ales, controlului de turație și poziție a mașinilor electrice, deoarece nu produc efecte distructive asupra mașinii sau asupra elementului de execuție.

Odată cu dezvoltarea industriei producătoare de microcontrolere, multe firme și-au îndreptat atenția spre dezvoltarea de PID-uri discrete pentru a le putea implementa pe acestea. Principalele avantaje în luarea acestei decizii au fost costul mult mai redus al microprocesoarelor, continua lor dezvoltare, capacitatea lor de a îndeplini operații multiple și de a fi reprogramabile.

În figura 2.6 se poate observa o structură simplă de reglare folosind un regulator numeric. În primul rând, avem referința r[k] care intră cu semnul plus în regulatorul numeric și ieșirea discretizată a procesului cu ajutorul convertorului analog-numeric, y[k], care intră în regulator cu semnul minus. Regulatorul numeric calculează semnalul de eroare necesar algoritmului de reglare și oferă la ieșire un semnal discret de comandă, u[k]. Acest semnal de comandă va fi transformat de către blocul convertor numeric-analogic în semnalul continuu, notat în figură cu u[t]. Aceast ultim semnal va fi semnalul de comandă al procesului. Blocurile de conversie sunt necesare pentru transformarea semnalelor din semnale continue în semnale discrete (în cazul semnalului de răspuns y[t]) și vice-versa, din semnale discrete în semnale continue (în cazul semnalului de comandă u[k]).

Primul pas în realizarea unui regulator numeric este transformarea procesului continuu în proces discret. Pentru acest lucru este necesară alegerea unui perioade de eșantionare, notată cu Te. Aceasta se alege astfel încât să se respecte teorema eșantionării (teorema Nyquis-Shannon). Această teoremă a eșantionării garanteză că semnalele cu o bandă de frecvență finită pot fi reconstruite perfect din versiunea lor eșantionată, daca rata de eșantionare este cel puțin de două ori mai mare decât dublul frecvenței maxime a procesului, respectiv eșantioanele sunt echidistante în timp. Astfel, perioada de eșantionare se va calcula folosind formula (2.7):

(2.7)

unde f este frecvența maximă a procesului eșantionat.

Odată aleasă perioada de eșantionare putem folosi mai multe metode de discretizare a procesului. Printre cele mai folosite se pot enumera: folosirea unui element de de reținere de ordinul 0 (engl. zero-order hold), metoda trapezelor (Tustin), metoda dreptunghiurilor înainte (engl. Forward Euler) și metoda dreptunghiurilor înapoi (engl. Backward Euler).

Folosirea elementului de reținere de ordinul 0 se pretează cel mai bine atunci când procesul este controlat de un calculator. Avantajul utilizării acestui element este dată de implementarea lui ușoară din punct de vedere practic, deoarece valoarea calculată este menținută constantă pe durata unei perioade.

Funcția de transfer a elementului de reținere de ordinul 0 este:

(2.8)

Dintre cele patru metode, matoda draptunghiurilor înainte (engl. Forward Euler) este cea care oferă cea mai scăzută acuratețe, cu avantajele obținerii unui model mai simplu și o execuție mai rapidă. Pentru o acuratețe ridicată se pot folosi metoda dreptunghiurilor înapoi (engl. Bacwards Euler) sau metoda trapezelor (engl. Tustin method).

Pentru aceste trei metode, pentru a trece din spațiul „s” în spațiul „z”, constanta „s” trebuie efectuate următoarele înlocuiri:

, în cazul metodei dreptunghiurilor înainte; (2.9)

, în cazul metodei dreptunghiurilor înapoi; (2.10)

, în cazul metodei trapezelor. (2.11)

Astfel, formula echivalentă a regulatorului PID discret are următoarea structură:

(2.12)

unde termenii IF(z) și DF(z) reprezintă componenta integratoare, respectiv derivativă a regulatorului. În funcție de metoda de discretizare considerată pot avea următoarele forme:

, în cazul metodei dreptunghiurilor înainte;

, în cazul metodei dreptunghiurilor înapoi;

Pentru mai multe detalii legate de regulatoarele PID se pot găsi în [2] pentru regulatoarele analogice sau în [3] pentru cele regulatoarele numerice.

Analiză, proiectare, implementare

După câte am putut vedea mai sus, motoarele de curent continuu fără perii sunt utilizate în diferite aplicații, iar controlul acestora este o problemă mereu prezentă în industrie. Marile companii producătoare de microcontrolere au deja soluții de control pentru motoarele BLDC, dar această lucrare se concentrează pe soluțiile oferite de Microchip. În acest sens, pentru realizarea aplicației de control s-a utilizat placa de dezvoltare dsPICDEM MCLV-2 și microcontrolerul dsPIC33EP256MC506.

Placa de dezvoltare dsPICDEM MCLV-2

Această placă de dezvoltare este special făcută de dezvoltatorii de la Microchip pentru controlul motoarelor de curent continuu fără perii sau pentru controlul motoarelor sincrone cu magnet permanent (engl. Permanent Magnet Synchronous Motor, PMSM) în aplicații de control care folosesc sau nu senzori. Din fericire, această placă de dezvoltare, pe lânga raportul foarte bun calitate-preț, este flexibilă, deci poate să fie configurată în diferite moduri pentru a obține rezultate cât mai performante în funcție de tipul aplicației.

Placa de dezvoltare include diferite circuite pentru realizarea următoarelor funcții:

acționarea unui invertor trifazat (punte H cu trei ramuri) care efectuează transferul de energie către înfașurările motorului;

măsurarea semnalelor de răspuns (tensiune și curenți de fază) și obținerea unui semnal de eroare corespunzător;

interfață de comunicare cu senzori Hall sau cu encoder optic pentru controlul folosind senzori de detecție a poziției;

comunicație cu un calculator gazdă sau dispozitive externe prin: CAN, LIN, USB sau interfața RS-232.

Placa suportă motoare care au tensiunea de alimentare maximă de 48V și 15A.

În figura 4 este ilustrată placa de dezvoltare dsPICDEM MCLV-2, unde sunt notate componentele care alcătuiesc această placă.

Alimentarea plăcii se face prin conectarea unei surse de curent continuu de 24V prin punctele J2 sau BP1-BP2.

Magistrala CAN (J4)

Placa este echipată cu o magistrală CAN (engl. Controller Area Network) MCP2551 de mare viteză. Aceasta este conectată la microcontroler prin intermediul punctelor de legătură (engl. jumpers) JP4 și JP5. Transmiterul CAN convertește semnalul diferențial de pe magistrala CAN în semnal digital pentru modulul ECAN (elng. Enhanced Controller Area Network). De asemenea, transmitatorul CAN convertește semnalul de ieșire digital produs de modulul ECAN în semnal diferențial pentru magistrala CAN.

Interfața LIN (J1)

De asemenea, placa, este echipată cu un transmiter LIN (engl. Local Interconnect Network) MCP2021 de mare viteză. Acesta este conectat la microcontrler tot prin punctele (engl. jumpers) JP4 și JP5. Interfața LIN monitorizează magistrala LIN, controlează semnalele care ajung pe această magistrală și le transmite mai departe la modulul UART (engl. Universal Asynchronous Receiver-Transmitter).

Interfața USB (J8)

Echipamentul de dezvoltare folosit pentru construirea aplicației are încorporat o interfața PIC18 ca și protocol de comunicare între intrarea USB (engl. Universal Serial Bus) și modulul UART. Cele două componente sunt conectate tot prin pnctele JP4 și JP5.

IDC 3 Connector (J11-J12)

Punctul de conectare J11 este parte a conectorului ICD 3 de tip mamă și conctează mediul de dezvoltare MPLAB de microcontrolerul dsPIC33EP256MC506 folosit în lucrare. Conectorul ICD 3 poate să fie conectat de placă și prin punctul J12 cu ajutorul unui ICSP (engl. In Circuit Serial Programming ) de 6 pini.

Conectorii motorului BLDC (J7)

Partea care conectează placa de dezvoltare dsPICDEM MCLV-2 de motorul de curent continuu fără perii folosit în apicație are 12 terminale fiecare cu o funcționalitate specifică. Teminalul „+” se conectează la sursa externă de curent continuu și terminalul „-” reprezintă masa (engl. ground). Mai departe, avem terminalele „M1”, „M2”și „M3” care sunt conectate la cele trei faze ale motorului. „G” este un alt terminal de masă. Apoi avem două terminale necesare alimentării senzorilor Hall sau encoder-ului optic, respectiv terminalul „+5V” și terminalul „GND”. Apoi avem cele trei terminale care colectează semnalele de răspuns de pe senzorii Hall, „HALLA”, „HALLB” și „HALLC”. Dacă se dorește vizualizarea diferitelor semnale prezente în aplicație, se pot folosi punctele de test prezentate în tabelul 3.1.

Tabel 3.1 : Punctele de test pentru diferite mărimi necesare controlului motorului BLDC [8]

Un avantaj important în folosirea acestei plăci de dezvoltare este compatibilitatea ei cu modulul de amplificatoare operaționale folosite ca și comparatoare în controlul fară senzori al motorului de curent continuu fără perii dezvoltat în aplicația din lucrarea de față. Acest modul este esențial în dezvoltare, deoarece se utilizează strategia de control a detecției trecerii prin zero a tensiunilor prezente pe fazele motorului. De asemenea acest modul, numit Internal Op amp, este compatibil și cu microcontrolerul folosit în aplicație.

Microcontrolerul dsPIC33EP256MC506

Microcontrolerul dsPIC33EP256MC506 este fabricat de compania Microchip și face parte din familia de microcontrolere dsPic33EP. În continuare se vor prezenta specificațiile care au dus la alegerea acestui microcontroler.

Condițiile de operare

Alegerea unui microcontroler pentru o aplicație necesită o analiză atentă și a condițiilor de mediu în care aplicația urmează sa fie folosită. Această familie de microcontrolere poate să lucreze la temperaturi cuprinse între -40°C și 85°C și să îndeplineasca aproximativ 70 de milioane de instrucțiuni pe secundă, iar dacă creștem temperatura până la 125°C, numarul de instrucțiuni executate intr-o secundă scade la 60 de milioane.

Unitatea centrală de procesare pe 16 biți

Procesarea codului implementat pe acest microcontroler este eficientă datorită unității centrarele de procesare pe 16 biți. De asemnea, alte avantaje pe care le oferă acestă unitate centrală de procesare sunt: doi regiștri acumulatori cu lungimea de 40 de biți, un multiplicator care suportă operații pe 32 de biți și instrucțiuni rapide care se execută într-un singur ciclu de ceas datorită unității aritmetico-logice performante (engl. Arithmetic Logic Unit).

Module pentru managementul semnalelor de ceas

Din acest punct de vedere, microcontrelerul vine echipat cu: un oscilator intern, un circuit PLL (engl. Phase-locked loop) care este un sistem de control care generează un semnal de ieșire care are faza apropiată de faza unui semnal de intrare, un semnal de ceas care monitorizează defectele (engl. Fail-Safe Clock Monitor, FSCM) și un circuit WDT (engl. Independent Watchdog Timer) care este responsabil cu detecția și alarmarea sistemului în cazul în care se produce o defecțiune la nivelul hardware sau software.

Generator de semnale PWM de mare viteză

Unul din cele mai importante aspecte în controlul motoarelor de curent continuu fără perii este capabilitatea microcontrolerului de a genera semnale PWM. Din acest punct de vedere, echipamentul electronic prezentat mai sus vine echipat cu posibilitatea de a genera trei semnale PWM independente în timp unul față de altul. Rezoluția acestor esmale este de 7.15 ns, în condițiile în care există un timp mort pentru comutația fronturilor crescătoare și descrescătoare.

Performanțe analogice avansate

Acest microcontroler pune la dispoziția utilizatorului un convertor analog-digital (engl. Analog to Digital Converter, ADC) fie pe 10 biți fie pe 12 biți, folosit în funcție de nivelul de precizie solicitat al aplicației și de cerințele de proiectare. De asemnea, cum am specificat și mai sus, acest microcontroler este compatibil cu modulul Internal Op amp, necesar în comanda fără senzori a motorului de curent continuu. Mai mult, acest modul este direct conectat la modulul ADC, făcând mult mai ușoară utilizarea acesuia în implementarea strategiei de control utilizate în această lucrare.

De asemenea, microcontrolerul pune la dispoziție 12 module de tip Timer. Patru din ele sunt timere pe 16 biți, două sunt pe 32 de biți și se pot folosi fie ca și timere, fie ca și numărătoare, patru sunt de tip OC (engl. Output Compare) configurabile ca și timere sau numărătoare, un modul PTG (engl. Peripheral Trigger Generator) care are 2 timere configurabile și ultimul este interfața encoder-ului în cuadradură care poate să fie configurat pentru a funcționa ca și un timer sau ca și un numărător.

În figura 3.9 putem observa în detaliu configurația celor 64 de pini prezenți în construcția acestui microcontroler. Desigur, sunt mulți pini care nu au fost prezentați amănunțit în lucrare deoarece nu sunt neapărat necesari în implementarea aplicației prezentate. Se tine cont de faptul că acest microcontroler este construit pentru a putea fi implementate variate tipuri de aplicații utilizate în industrie.

Datorită specificațiilor prezentate mai sus, putem spune că este avantajos să folosim combinația dintre placa de dezvoltare dsPICDEM MCLV-2 și microcontrolerul dsPIC33EP256MC506, deoarece acestea se potrivesc suficient de bine cerințelor necesare pentru implementarea aplicației de control fără senzori a motoarelor de curent continuu fără perii. Desigur, se puteau folosi și alte componente electronice pentru realizarea acesteia, posibil mai simple sau mai complexe din punct de vedere constructiv, dar se poate considera alegerea acestor componente o cale de mijloc. Ținând cont că placa este cu rol de cercetare și experimentare, cuprinde mai multe module hardware, iar odată stabilită utilizarea acestora în etapa de proiectare, se poate comanda eșantionul de microprocesoare specializate pentru a fi utilizate în etapa de producție pentru a minimiza costurile.

Un alt instrument necesar în implementarea și dezvoltarea aplicației a fost mediul de dezvoltare al produselor software, MPLAB X, pus la dispoziție de compania Microchip.

Mediul de dezvoltare MPLAB X

În primul rând, pentru a instala mediul de dezvoltare MPLAB X, trebuie să avem instalat mediul de programare integrată MPLAB (engl. Integrated Programming Enviroment, IPE). IPE este o aplicație software care asigură o interfață simplă care permite accesarea rapidă a principalelor funcționalitați de programare.

Mediul de programare integrată folosește mediul de dezvoltare MPLAB X, baza de date Microchip Debugger (MDB), interfețele componentelor hardware și driver-ele necesare pentru a asigura programarea oricărui dispozitiv programabil produs de Microchip.

În figura 3.10 se poate observa structura mediului de programare IPE. Acesta permite selectarea familiei de microcontrolere, microcontrolerul și libraria folosite pentru realizarea aplicației. Se observă că acesta este configurat specific pentru aplicația prezentată în această lucrare. Dacă microcontrolerul este conectat la calculator prin intermediul echipamentului ICD3 Connector, respectiv nu apar erori în conexiune, un LED verde apare în dreptul etichetei „Device”. Butonul „Program” încarcă proiectul deschis în „Source” în memoria microcontrolerului, iar butonul de „Erase” curăță memoria microcontrolerului. În fereastra „Output” vor apărea observații referitoare la conexiunea dintre calculator și microcontroler sau la mersul programului.

Un sistem de dezvoltare pentru microcontrolerele embedded este un sistem de programare care rulează pe un calculator și ajută la scrierea, editarea și depanarea codului care urmează să fie implementat pe microcontroler. MPLAB X IDE este un asemenea sistem și conține toate elementele necesare proiectării și implementării unei aplicații embedded.

Pentru a proiecta o aplicație embedded optimă, înainte de începerea implementării trebuie să se analizeze atent aplicația care urmează să fie implementată și să se aleagă echipamentele care se potrivesc aplicației în cauză. Odată alese echipamentele electronice, trebuie stabilite și echipamentele periferice și pinii necesari dezvoltării, iar apoi se poate scrie programul software. Deoarece microcontrolerele înțeleg doar instrucțiuni de tip cod mașină, iar mediul de dezvoltare permite scrierea programului în limbajul de programare Embedded C, este necesară utilizarea unui compilator care să transforme codul în secvențe de biți pentru a putea fi interpretare de microcontroler.

După faza de proiectare și implementare, urmează faza de testare. De obicei, un program complex este predispus erorilor de logică, erori care trebuie corectate pentru a obține rezultatul final dorit. Pentru a urmări programul și a găsi erorile de logică prezente, IDE-ul pune la dispoziția utilizatorului un depanator (engl. debugger) care permite trecerea prin cod pas-cu-pas (engl. step-by-step).

Odată verificat și validat codul, acesta se poate descărca pe microcontroler, urmând să se testeze practic dacă rezultatele sunt cele așteptate. În cazul în care nu sunt, se revine la etapa de implementare.

În figura 2.11 se poate obcerva interfața mediului de dezvoltare MPLAB X.

Pentru a descărca programul implementat în mediul de dezvoltare MPLAB X trebuie instalat plugin-ul CC8E Toolchain. Acesta se poate instala direct din mediul de dezvoltare urmând calea Tools -˃ Plugins. Astfel, se va deschide fereasta Plugins (figura 3.12), de unde din tab-ul Availabe Plugins se poate descărca plugin-ul CC8E Toolchain.

Monitorizarea datelor în timp real

Majoritatea aplicațiilor embedded existente cer instrumente de depanare sofisticate și complexe, pentru a reduce timpul necesar procesului de dezvoltare și testare. În acest scop, mediul de dezvoltare MPLAB asigură o interfață, de vizualizare a variabilelor existente. Această interfață se numește MPLAB DCMI și se instalează similar cu plugin-ul menționat mai sus.

Structura ferestrei DCMI se poate vedea în figura 3.13. Cu ajutorul acestei interfețe se pot urmări diferite variabile. Dacă se dorește vizualizarea evoluției unei variabile, în tab-ul „Dynamic Data View” se poate urmări evoluția lor grafică. Dacă, în schimb, se dorește cunoașterea valorii unei variabile într-un anumit moment de timp, fără a opri programul cu ajutorul debugger-ului, acestea se pot monitoriza în tab-urile „Dynamic Data Controls” și „Dynamic Data Inputs”.

Monitorizarea datelor în timp real scade timpul de dezvoltare al unei aplicații, deoarece nu mai este neapărat necesară oprirea programului în debugger pentru a se monitoriza datele. De asemnea, urmărind datele direct pe calculator, se reduce costul de monitorizare al aplicației, deoarece nu mai este necesară achiziționarea altor echipamente de monitorizare, cum ar fi achiziționarea unui osciloscop, acestea fiind adesea destul de costisitoare.

Analiză

Lucrarea de față propune implementarea unui algoritm de control de turație al unui motor BLDC. S-a încercat implementarea acestei strategii de control fără folosirea senzorilor Hall sau a unui encoder. Prin urmare, algoritmul se bazează pe strategia de control fără senzori. Algoritmul de control al motorului are patru părți mari:

eșantionarea semnalelor trapezoidale culese de pe cele trei faze ale motorului utilizând convertorul analog-numeric (engl. Analog-to-Digital Converter, ADC);

compararea tensiunilor contraelectromotoare de pe cele trei faze cu jumătatea tensiunii maxime pentru a detecta punctele de trecere prin zero (engl. zero crossing points);

filtrarea semnalelor care vin de la comparator utilizând un filtru cu funcție majoritară;

implementarea unui regulator de tip proporțional-integrativ (PI).

Metoda de detecție a trecerii tensiunii contraelectromotoare prin zero a fost aleasă pentru implementare deoarece:

poate să fie utilizată pe o gamă largă de motoare;

poate să fie folosită, teoretic, atât pentru motoarele trifazate cu conexiune în Y (stea), cât și pentru motoarele cu conexiune de tip delta (triunghi);

nu necesită o cunoaștere amănunțită a caracteristicilor motorului;

este relativ neafectată de variațiile de toleranță ale motorului.

Comutația în șase pași

Comutația motorului se face în șase pași (comutație la 120°). Fiecare pas este echivalentul a 60° electrice, șase pași fiind echivaentul unei rotații complete.

Comutația în șase pași:

Pasul 1:

înfășurarea A este energizată pozitiv;

înfășurarea C este energizată negativ;

înfășurarea B nu este energizată.

Pasul 2:

înfășurarea C rămâne energizată pozitiv;

înfășurarea A este energizată negativ;

înfășurarea B nu este energizată.

Pasul 3:

înfășurarea C este energizată pozitiv;

înfășurarea B este energizată negativ;

înfășurarea A nu este energizată.

Pasul 4:

înfășurarea C rămâne energizată pozitiv;

înfășurarea A este energizată negativ;

înfășurarea B nu este energizată.

Pasul 5:

înfășurarea B este energizată pozitiv;

înfășurarea A este energizată negativ;

înfășurarea C nu este energizată.

Pasul 6:

înfășurarea B este energizată pozitiv;

înfășurarea C este energizată negativ;

înfășurarea A nu este energizată.

Faptul că la fiecare pas una din înfășurări nu este străbătută de un curent electric este o caracteristică importantă, deoarece permite controlul fără senzori a turației motorului.

Tensiunea contraelectromotoare

În timpul funcționării unui motor BLDC, pe înfășurările A, B și C, corespunzătoare celor trei faze, se generează o tensiune contraelectromotoare care se opune tensiunii electromotoare care alimentează înfășurările.

Tensiunea contraelectromotoare este dependentă de următorii parametrii:

numărul de spire ale înfășurărilor din stator;

viteza unghiulară a rotorului;

câmpul magnetic generat de magneții permanenți ai rotorului.

Astfel, tensiunea contraelectromotoare (TCE) se calculează după formula:

, (3.12)

unde: N este numărul de spire ale înfășurărilor din stator, l este lungimea rotorului, r este raza internă a rotorului, B este câmpul magnetic al rotorului și este viteza unghiulară.

Cele mai importante aspecte de reținut pentru a putea înțelege acest tip de control sunt:

amplitudinea tensiunii contraelectromotoare este proporțională cu viteza;

frecvența semnalului TCE este egală cu viteza de rotație înmulțită cu numărul de prechi de poli al motorului (cinci în cazul de față);

cuplul motorului este proporțional cu curentul (la temperaturi constante);

tensiunea de alimentare a motorului este egală cu tensiunea contraelectromotoare la care se adună căderea de tensiune de pe fiecare înfășurare.

Filtrarea digitală utilizând funcția majoritară

Filtrul digital sau numeric este un sistem discret care scalează și/sau defazează în mod selectiv componentele spectrale ale unui semnal discret de intrare, oferind la ieșire un semnal discret optim pentru scopul dorit. Scopul utilizării unui filtru digital în această aplicație este de a reduce zgomotul produs de comutația PWM care afectează tensiunea contraelectromotoare.

Funcția majoritară este o funcție binară care ia un număr n de intrări binare și returnează valoarea cea mai comună din secvența de intrări.

Proiectarea regulatorului PI

Pentru a obține o aplicație robustă, în care perturbațiile să aibă efecte neglijabile și cu un răspuns suficient de bun în regim staționar, este necesară proiectarea unui regulator proporțional-integrativ (PI). Pentru descrierea lui amănunțită se poate vedea Studiul Bibliografic, 2.1.2, 2.1.2.5.

Performanțele impuse sitemului în buclă închisă sunt:

suprareglajul de maximum 1%;

timpul de răspuns să fie redus cu 10% în bucla închisă.

Pentru a determina constanta de proporționalitate și constanta de integrare s-a folosit mediul de dezvoltare MATLAB prin realizarea unei simulări a procesului în Simulink.

Pentru a simula sistemul în buclă deschisă, trebuie cunoscute constantele km și Tm. Acestea au fost luate din documentația motorului BLDC folosit, deoarece procesul este considerat a fi liniar pe domeniul util de funcționare. Astfel: km = 110 și Tm = 0.06 s, constanta electrică de timp a procesului fiind destul de mică încat să poate fi neglijată.

Pentru aflarea constantei de propoționalitate și a constantei de integrare s-a folosit tool-ul PID Tuner pus la dispoziție de mediul de dezvoltare Matlab. Acesta este foarte util pentru realizarea rapidă a unui regulator cu performanțele impuse în cerințele aplicației. Astfel, s-au determinat constantele: Kp = 0.00233 și Ki = 36.535. Ecuația regulatorului:

(3.13)

Implementare

Implementarea programului software utilizat pentru controlul fără senzori al motorului BLDC a fost implementat în mediul de dezvoltare MPLAB X, iar limbajul de programare în care a fost implementat codul este Embedded C. Pentru început, codul a fost structurat în fișiere antet (engl. header files) și fișiere sursă (engl. source files), unde au fost implementate funcțiile definite în fișierele antet.

Pentru a putea implementa funcțiile necesare aplicației, în faza de analiză, stabilim constantele folosite pentru dezvoltare. Astfel, s-a definit fișierul „defs.h”. Cele mai importante constante definte aici sunt:

FCY = 70 MHz – frecvența de tact a microprocesorului, respectiv de execuție a unei instrucțiuni de program;

FPWM = 2 MHz – frecvența semnalului PWM;

STARTUP_RPM = 1000 rot/min – după pornirea motorului, numărul minim de rot/min;

STARTUP_START_T = 20 ms;

STARTUP_T_RAMP = 1000 ms;

MAX_RPM = 3300 rot/min – viteza maximă la care ajunge motorul;

POLEPAIRS = 5 – numărul de perechi de poli.

Constantele STARTUP_START_T și STARTUP_T_RAMP sunt folosite pentru că la pornirea motorului se aplică o rampă care rămâne activă din momentul STARTUP_START_T până la STARTUP_T_RAMP. Acestă implementare asigură pornirea lină a motorului și este necesară, deoarece la turații mari impuse când motorul este în repaus, acesta nu poate porni, deoarece cuplul este mult prea mic. În figura 3.16 se observă, printre altele, caracteristica cuplu-turație a motorului Hurst-Emerson considerat în lucrare. În această caracteristică se observă că viteza și cuplul sunt invers proporționale, astfel, la cuplu mare viteza este mică, iar la cuplu mic, viteza este mare.

În fișierul „defs.c” sunt declarate alte constante. Acestea se găsesc în [4]. De asemenea, în acest fișier avem implementate două funcții importante necesare dezvoltării aplicației: funcția OpenLoopControl care implementează aplicația în buclă deschisă și funcția SpeedPILoopController care face aplicația să funcționeze în bucla închisă. Aceasta, din urmă, implementează și un regulator propoțional-integrativ (PI).

Odată ințializate aceste valori, se poate trece la inițializarea componentelor hardware folosite. În acest sens, în codul implementat există funțiile Init_Ports și Init_Motor.

Funcția Init_Ports este folosită pentru a inițializa modulul de conversie analog-numeric (ADC), modulul PWM, porturile de intrare al butoanelor de Reset (S1) și Start (S3) și timer-ele folosite în aplicație. Această funcție este declarată în fișierul antet „periph.h” și implementată în fișierul sursă „periph.c”. Un aspect important declarat în acest fișier este implementat de „CORCONbits.SATA” care se asigură că depășirea numarului de biți va fi manevrată ușor și că nu va provoca probleme majore în cadrul programului.

Pe de altă parte, funcția Init_Motor o folosim pentru a inițializa motorul. În această funcție se setează semnalele PWM pentru comutația corectă a celor șase tranzitoare. De asemenea, în această funcție se generează rampa necesară pentru pornirea lină a motorului din repaus, în cazul în care viteza impusă este mare.

Implementarea regulatorului proporțional-integrativ (PI) se poate vedea în fișierul „pi.c”. Funția CalcPI este cea responsabilă pentru calcularea comenzii. Aceasta funcționeaza astfel:

Se calculează valoarea erorii (Eroarea = Referința – Măsura)

Se calculeaza suma erorilor de integrare (SumI = SumI + Eroarea);

Se calculeaza ieșirea regulatorului (Comanda = Kp * Eroarea + Ki * SumI).

Deoarece parametrul integral al regulatorul PI însumează continuu factorul de eroare, este posibilă apariția fenomenului de „wind-up”. Acesta are loc atunci când din cauza erorilor acumulate, semnalul măsurat depășește referința dorită. Pentru a evita apariția acestui fenomen este necesară scalarea comenzii. Astfel:

Dacă valoarea comenzii calculate depășește limita superioară, comanda va fi saturată la limita superioară;

Dacă valoarea comenzii calculate este mai mică decât limita inferioară, comanda va fi saturată la limita inferioară;

Daca valoarea comenzii se află în domeniul dintre limita inferioară și cea superioară, valoarea comenzii rămâne neschimbată.

Fișierul „main.c” este fișierul de bază al programului. Fără funcția main conținută în acesta, programul poate funcționa. În primul rând, se apelează funcția Init_Ports discutată mai sus, pentru a inițializa compontele hardware. Apoi urmează un ciclu infinit în care este rutina după care se desfășoară programul. Odată intrat în acest ciclu infinit, la apăsarea butonului „S3” rotorul motorului va începe să se rotească. Odată apăsat acest buton, va intra în execuție rutina de întreruperi a modulului PWM. Dacă motorul este pornit din repaus, mai întâi se va apela funcția Init_Motor pentru a inițializa motorul, iar odată inițializat, se va apela funcția Start_Motor. În această funcție are loc prima comutație, după care se vor seta cele trei semnale PWM pentru comutația următoare. Rutina de întreruperi a modului ADC este responsabilă, în cea mai mare parte de întreaga funcționare a aplicației. Aceasta funcționează în urmatorul fel:

Se citesc valorile celor 3 faze ale motorului (MotorPhaseA, MotorPhaseB, MotorPhaseC);

Se calculează punctul neutru al motorului (MotorNeutralVoltage = (MotorPhaseA + MotorPhaseB + MotorPhaseC) / 3) ;

Pentru primele 50 de comutații ale semnalelor PWM nu se va întâmpla nimic, deoarece fiind o tensiune contraelectromotoare mică, se pot detecta treceri prin zero false;

După trecerea acestor 50 de comutații începe compararea celor trei tensiuni contraelectromotoare cu punctul neutru al motorului;

Semnalul va fi filtrat cu ajutorul unui filtru care folosește funcția majoritară;

Dacă se detectează o trecere prin zero, adică jumătate din tensiunea contraelecromotoare este egală cu punctul neutru are loc următoarea comutație;

Mai departe, se calculează viteza curentă și în cazul în care aceasta nu coincide cu viteza dorită, va intra în funcțiune regulatorul PI.

În rutina de întrerupere a timer-elor are loc schimbarea canalului modului ADC și trecerea la următorul pas al comutației.

Ultima funcție declarată în main este cea de Stop_Motor care are loc ori atunci când apăsăm pe butonul „Reset” (S1), ori în cazul unui defect apărut. Această funcție are rolul de a reseta modulul ADC și PWM și timer-ele folosite. Toate sunt aduse înapoi la 0 și rămân în această stare până la repornirea motorului.

Rezultate și validare

După finalizarea și testarea implementării cu ajutorul debugger-ului pus la dispoziție de mediul de dezvoltare MPLAB X, programul realizat a fost descărcat pe microcontroler. După acest pas, funcționalitatea programului implementat a fost înca odată verificată.

În figura 3.17 se poate observa conexiunea dintre calculator, microcontroler, motor și osciloscop în faza de testare. S-au conectat la osciloscop două faze ale motorului, pentru a se observa tensiunea contraelectromotoare de formă trapezoidală și semnalele produse de cei trei senzori Hall. Programul implementat pentru controlul turației unui motor de curent continuu fără perii, după câte se poate vedea în figura de mai sus este corect implementat. Pe cele două canale analogice ale osciloscopului se vor vedea cele doua tensiuni contraelectromotoare, care sunt, într-adevar sub formă trapezoidală, iar pe primele trei canale digitale ale osciloscopului se pot vedea semnalele celor trei senzori Hall.

După testarea asistată de calculator, rezultatele obținute fiind satisfăcătoare, se poate renunța la folosirea calculatorului deoarece programul se găsește în memoria microcontrolerului. Programul a fost testat atât în buclă deschisă, cât și după adăugarea regulatorului proporțional-integrativ și închiderea buclei. Rezultatele sunt vizibile în practică. După implementarea regulatorului, timpul de răspuns s-a îmbunătățit simțitor, iar în cazul în care asupra axului motorului este aplicată o forță menită să încetinească viteza, regulatorul PI mărește comanda corespunzător pentru a reuși să se învingă acea forță. Desigur, daca factorul de umplere dat la intrare este mic, tensiunea contraelectromotoare culeasă de pe cele trei faze scade și în cazul în care este aplicată o forță asupra axului motorului, acesta se va opri. Acest lucru se datorează dezavantajului de a folosi algoritmul de control bazat pe trecerea tensiunii electromotoare prin 0. Cum s-a menționat anterior în lucrare, algoritmul nu funcționează bine în cazul în care bunul mers al aplicației necesită ca viteza motorului să fie mică.

În figura 3.19 se poate observa mult mai bine forma trapezoidală a tensiunii contraelectromotoare pe care se bazează întreaga strategie de control prezentată în această lucrare. Tensiunea contraelectromotoare maximă este de aproximativ 25 V, astfel comutația are loc atunci când tensiunea contraelectromotoare ajunge la jumătate din tensiunea maximă, adică 12.5 V. De asemenea, în această figură, se poate observa că, intr-adevăr, decalajul dintre faze este de 120°.

Figura 3.20 arată cum se modifică semnalele în funcție de factorul de umplere al semnalului PWM. În partea stânga avem un factor de umplere de 50%, deci viteza motorului este de aproximativ 1650 de rot/min. În partea dreaptă, factorul de umplere este de 100%. Iar viteza motorului este de aproximativ 3300 de rot/min. Se observă că tensiunea contraelectromotoare culeasă de pe fazele motorului la viteză maximă are este mult mai lină, deoarece frecvența de comutație este mare (279 Hz). Comutația rapidă este vizibilă și din semnalele culese de pe senzorii Hall. În graficul din dreapta se poate vizualiza chiar o rotație completă, deoarece sunt cinci perioade ale unui semnal produs de un senzor Hall reprezintă o rotație completă (numărul de perioade ale unul semnal produs de un senzor Hall care reprezintă o rotație completă este egal cu numărul de perechi de poli ai rotorului, cinci în cazul de față).

În figura 3.21 se poate urmări și comutația în șase pași prezentatî în lucrare. De asemnea, această figură este împărțită încât să arate comportamentul motorului atunci când factorul de umplere este de 50% și când factorul de umplere este de 100%. Se face aceată comparație, deoarece se dorește vizualizarea schimbării comportamentului motorului de la un factor de umplere la altul. Frecvența de comutație crește simțitor, de la 112 Hz la 278 Hz, iar forma trapezoidală a semnalelor culese de pe fazele motorului este mult mai vizibilă la frecvențe mai mari.

În următoarea figura 3.24 se poate observa caracteristica de transfer dintre factorul de umplere aplicat la intrare și viteza motorului, în buclă închisă. Pentru a realiza această caracteristică s-a măsurat semnalul produs de senzorii Hall la fiecare creștere de zece procente a factorului de umplere. În acest scop, s-a folosit un osciloscop digital, ELAB-080. Datele achiziționate s-au vizualizat apoi în mediul de dezvoltare MATLAB și se pot vizualiza în figura 3.22. Un astfel de grafic există pentru fiecare factor de umplere dat la intrare.

Pentru a calcula viteza motorului la pentru fiecare factor de umplere este necesară calcularea perioade de comutație a senzorului Hall. Perioada unui senzor Hall este timpul din două fronturi crescătoare. Această identificare s-a făcut ca și în figura 3.23. În acest fel, se determină numărul de date citit într-o perioadă de comutație. Acest număr de date se înmulțește cu inversul frecvenței folosite pentru achiziționarea datelor, în cazul de față 8 kHz, iar rezultatul este perioada de comutație a senzorului Hall. După aflarea acestei perioade, știm că cinci impulsuri Hall reprezintă o rotație completă. Astfel, putem să calculăm turația după următoarea formulă:

(3.14)

Acest procedeu de identificare a fost utilizat pentru a determina viteza pentru fiecare factor de umplere. Această caracteristică, prezentată în figura 3.24, este, după câte se poate oberva, liniară. Acest lucru arată că numărul de rotații pe minut este direct proporțional cu factorul de umplere dat la intrarea punții de tranzistoare. Desigur, nu este o dreaptă perfectă din cauza zgomotului prezent în cadrul procesului de achiziționare de date și din cauza calculului folosind maximum două zecimale.

Un prim aspect interesant de observat la această caracteristică este faptul că la factor de umplere de 1% motorul are totuși o viteză de rotație de 1000 rot/min. Acest lucru se datorează faptului că în codul programului este setată viteza minimă de funcționare a motorului la 1000 rot/min. După pornirea motorului, indiferent de factorul de umplere dat la intrare, rampa folosită pentru pornirea acestuia va duce motorul în prima secundă la 1000 rot/min, iar motorul rămâne la această viteză până la modificarea factorului de umplere. După câte s-au explicat și mai sus în lucrare, implementarea în acest fel este necesară pentru a porni motorul lin și atunci când este în repaus.

Al doilea aspect pe care îl putem remarca în caracteristica de mai sus este facpul că viteza ajunge la valoarea maximă la un factor de umplere de 90%. Din acest motiv, sectorul dintre factorul de umplere de 90% și factorul de umplere de 100% este saturat. Această saturație este implementată în program pentru a evita defecțiunile sau mersul disfuncțional al motorului. Implementarea unei scalări este necesară, deoarece fiecare motor are o viteză maximă de funcționare caracteristică. Dacă se depășește, motorul este mult mai expus defecțiunilor.

Concluzii

Concluzii

Mictrocontrolerele vor fi, cu siguranță, folosite din ce în ce mai mult în industrie, datorită dezvoltării lor continue. Se pot folosi în diverse aplicații, în diferite subdomenii, fiind o alegere avantajoasă, deoarece costurile de achiziționare sunt destul de reduse și sunt exhipamente electronice reprogramabile. Viteza mare de calcul, respectiv posibilitatea de a îndeplini mai multe task-uri practic simultan, sunt alte avantaje pentru a alege un microcontroler.

Un dezavantaj al folosirii microcontrolerelor este durata relativ mare de timp necesară etapelor de analiză, proiectare, implementare și testare. În cazul în care testele nu sunt satisfăcătoare trebuie să se revină la etapa de analiză, iar tot procesul se va relua până la obținerea unor rezultate satisfăcătoare. Etapa de analiză este costisitoare din punct de vedere al timpului, deoarece fiecare microcontroler are specificații diferite, astfel, înainte de a începe proiectarea și implementarea codului trebuie să se parcurgă fișa tehnică a microcontrolerului și să se stabilească configurația necesară aplicației. Pe de altă parte, etapa de implementare este costisitoare atât ca și timp, deoarece este posibil ca programatorul să fie nevoit să lucreze cu un mediu de dezvoltare nou, cât și din punct de vedere al dificultății de implementare. Limbajul de programare Embedded C nu este un limbaj la fel de ușor precum limbajele de programare nou-apărute. De asemenea, nivelul de cunoștințe necesar implementării unui program pentru un microcontroler este mai mare, deoarece înglobează atât elemente software, cât și noțiuni de hardware și electronică. Programatorul trebuie să fie pregătit pentru diferite dificultăți, cum ar fi: implementarea rutinelor de întreruperi, setarea corespunzătoare a timer-elor, testarea software decuplată de testarea hardware etc.

Lucrarea de față este făcută pentru a ușura această muncă în vederea implementării unui program de control al turației unui motor de curent continuu fără perii. S-a obținut un program optim, care poate să antreneze motorul atât în buclă deschisă, cât și in buclă închisă (include regulatorul proporțional-integrativ).

S-a ales implementarea unui algoritm de comutație bazat pe tensiunea contraelectromotoare, deoarece s-a dorit un sistem robust, care să nu depindă de senzori de măsură. Aplicația nu va fi folosită la viteze suficient de mici încât tensiunea contraelectromotoare să nu poată fi detectată, iar zgomotul produs de ADC la comutația MOSFET-urilor a fost atenuat prin folosirea unui filtru digital care utilizează funcția majoritară, astfel dezavantajele utilizării acestei metode au fost rezolvate.

După cum am văzut în capitolul anterior, în subcapitolul de rezultate și validare, acest program își îndeplinește scopul pentru care a fost produs. Obiectivelor care au fost propuse la începutul lucrării au fost îndeplinite.

În opinia mea, cea mai grea parte în dezvoltarea programului a fost partea de documentare. Controlul motoarelor de curent continuu fără perii neutilizând senzori este mai dificil de înțeles comparativ cu un algoritm care utilizează senzori Hall, spre exemplu. În plus, a trecut o perioadă destul de lungă de timp până am reușit să mă familiarizez cu limbajul de programare Embedded C și cu mediul de dezvoltare MPLAB X.

Un avantaj major pe care l-am găsit eu în utilizarea echipamentelor electronice puse la dispozite de Microchip și al mediului de dezvoltare MPLAB X este documentația foarte atent realizată a acestor echipamente și a mediului de dezvoltare. Acest lucru a ajutat la reducerea timpului de documentare.

Dezvoltări ulterioare

O extindere a acestei lucrări de licență ar fi dată de implementarea unui program de control folosind senzori Hall, respectiv compararea rezultatelor și a performanțelor între cele două metode. Acest lucru ar ajuta la stabilira avantajelor și dezavantajelor exacte ale celor două metode.

O altă extindere care ar avea un impact major asupra aplicației ar fi utilizarea monitorului de date în timp real pus la dispoziție de mediul de dezvoltare MPLAB X. Acest lucru ar face mult mai ușoară vizualizarea semnalelor și variabilelor din program. Odată reușită configurarea necesară pentru utilizarea acestui monitor, osciloscopul nu va mai fi necesar, monitorizarea aplicației făcându-se direct pe calculator. Ar fi un pas important în dezvoltarea aplicațiilor, deoarece acestea ar deveni mult mai mobile, și mai avantajoase din punct de vedere al costului total de implementare și testare a aplicației.

De asemenea, pentru proiectarea unui regulator proporțional-integrativ mai bun este necesară o identificare în buclă deschisă pentru a determina funcția de transfer care definește motorul. Deocamdată factorul de amplificare și constanta de timp mecanică folosite în lucrare sunt cele din documentația motorului, dar acestea trebuie schimbate odată cu îmbătrânirea motorului.

Similar Posts