Proiect de diplomă: PETER Iosif Program de studii: Electronică Aplicată [308268]
PROIECT DE DIPLOMĂ
Absolvent: [anonimizat]: Ș.L. dr.ing. Stanca Aurel Cornel
BRAȘOV
2016
Comanda senzorizată a unui motor BLDC
Absolvent: [anonimizat]: Ș.L. dr.ing. Stanca Aurel Cornel
BRAȘOV
2016
FIȘA PROIECTULUI DE DIPLOMĂ
Cuprins
1. Scopul proiectului
Scopul proiectului este acela de a realiza un circuit de control senzorizat al unui motor BLDC cu puterea nominală de 200W (regim intermitent), care să îndeplinească următoarele cerințe:
Comanda sensului de rotație;
Comanda vitezei de rotație;
Oprirea la punct fix.
2. Obiectivele proiectului
Pentru realizarea scopului enunțat s-a urmărit îndeplinirea următoarele obiective:
Proiectarea circuitului de control senzorizat al motorului BLDS având ca nucleu microcontrolerul PIC 16F1825.
Realizarea circuitului de control senzorizat al motorului BLDS proiectat.
Realizarea programului de control al circuitului electronic implementat.
Verificarea funcționării și ajustarea parametrilor.
Stadiul actual în domeniu și noutatea adusă de proiect
În Fig.1 este prezentată construcția simplificată a unui motor BLDC. El conține un magnet permanent drept rotor și un număr de înfășurări statorice. Energia electrică este convertită în energie mecanică prin forțele de atracție dintre magnetul permanent și câmpul magnetic rotativ produs în bobinele statorice.
În exemplul din Fig.1 sunt 3 înfășurări conectate în stea. Fiecare bobină este întreruptă în centru pentru a permite rotorului să se miște în centrul câmpului magnetic indus. Cele mai multe motoare BLDC au 3 înfășurări statorice în totpologie stea. Un motor cu o astfel de topologie este rotit prin alimentarea în același timp a 2 faze. Alinierea din Fig.1 – stânga a rotorului este realizată prin alimentarea bobinelor A și B așa după cum indică sensul 1 din schema din Fig.1 – dreapta. Pentru a roti motorul cu 60˚ în sensul acelor de ceasornic de la alinierea A-B se alimentează bobinele C și B, sensul 2 din Fig.1 – stânga. Aliniamentul sugerat în Fig.1 este utilizat pentru vizualizarea comprehensivă a funcționării. [anonimizat] 90˚ față de direcția câmpului magnetic al bobinelor statorice.
Esențial pentru comutația motorului BLDC este detecția poziției rotorului și astfel controlul alimentării fazelor ce vor produce cel ami mare cuplu. Rotorul se deplasează cu 60˚ electrice la fiecare pas. Calea de curent potrivită pentru înfășurările statorice este activată când rotorul este aliniat la 120˚ față de câmpul magnetic curent al statorului și se deactivează când rotorul se află la 60˚ față de alinierea curentă. [anonimizat].
Controlul senzorizat al motorului BLDC
Cea mai simplă modalitate de a cunoaște momentul corect pentru comutarea curenților prin bobinele statorice este prin intermediul senzorilor de poziție. Mulți fabricanți de motoare BLDC livrează motoare cu 3 senzori de poziție cu efect Hall. Fiecare senzor prezintă la ieșire nivel ridicat pentru 180˚ electrice. Fiecare senzor prezintă un offset față de ceilalți de 60˚ electrice a.î. fiecare senzor este aliniat cu unul din circuitele electromagnetice. Diagrama temporală din Fig.2. Arată relația dintre ieșirile senzorilor și tensiunile de alimentare ale celor 3 faze.
În Fig.3 este prezentată schema de conectare a celor 3 [anonimizat] caz.
Controlul nesenzorizat al motorului BLDC
Este posibil să se determine când trebuie realizată comutația prin măsurarea tensiunii electromotoare la bornele bobinei nealimentate. Evident că avantajul acestei metode este costul redus datorat eliminării senzorilor. Există însă unele dezavantaje:
Motorul trebuie adus la turația minimă ce asigură generarea unei tensiuni suficiente pentru a fi sesizate;
Schimbarea bruscă a sarcinii motorului poate duce la blocare;
Metoda poate fi folosită doar pentru viteze ale motorului în limite ce asigură comutarea ideală tensiunii aplicate;
Comutarea la turații mai mari decât turația ideală va duce la funcționară discontină a motorului.
Tensiunea pe faza A, nealimentata, este data de relația de mai jos:
unde ABEMF este tensiunea electromotoare pe faza A, nealimentată iar CBEMF este tensiunea electromotoare pe faza C pusă la masă.
Noutatea adusă de proiect
Sistemul propus în prezentul proiect are două caracteristici cu caracter de originalitate:
Implementarea principiului de control al al motorului BLDC într-o schemă electronică cu componente cu cost redus;
Conceperea și implementarea algoritmului de control pentru oprirea motorului BLDC la punct fix.
Descrierea sistemului
În Fig.5 este prezentată schema bloc a sistemului de control a motorului BLDC. Nucleul sistemului este reprezentat de un microcontroler pe 8 biți din familia PIC ce are ca intrări:
Potențiometrul pentru prescrierea vitezei (intrarea analogică);
Comutator selecție sens de rotație (intrarea numerică);
3 senzori cu efect Hall de poziție, pentru determinarea poziției rotorului (intrări numerice);
Ieșirile din microcontroler sunt:
PWM pentru comanda turației motorului BLDC;
6 ieșiri numerice pentru generarea semnalului de alimentare trifazat trapezoidal al motorului BLDC.
În microcontroler rulează 2 algoritmi de control. Unul pentru comanda comutației și controlul sensului și vitezei de rotație (reglare tradițională) și altul pentru oprirea rotorului la punct fix.
Identificarea detaliilor constructive ale motorului BLDC
Dezvoltatea sistemului s-a făcut pe unul (din cele două motoare BLDC) fără senzoristică, ale unui actuator dedicat cutiilor de viteză automate ale autovehiculelor, Fig.6.
Configurația motorului BLDC din Fig.6 a fost determinată experimental. Numărul de înfășurări statorice ce sunt vizibile, este de 12. Așadar fiecare fază a motorului are un număr de 4 înfășurări dispuse la 90˚. Evident, decalajul între faze este de 120˚.
Identificarea numărului de poli magnetici ai rotorului s-a făcut printr-un set de determinări astfel: s-au alimentat câte două borne (cu tensiunea de 1,5V pentru a limita curentul prin bobine, asigurându-se totuși un cuplu suficient pentru roritrea în gol a rotorului) cu o anumită polaritate și s-a urmărit efectul. Asocierea polaritate, pereche de borne și rotația rotorului este prezentată în Fig. 7.
În urma determinărilor făcute s-a realizat schema constructivă a celor două motoare prezente pe modulul de test, Fig.8.
Determinarea semnalelor date de senzorii Hall așezați la 60˚ pentru fiecare din pozițiile ocupate de rotor este prezentată în Tab.1, pentru sensul de rotație în sensul acelor de ceasornic și în Tab.2 pentru sensul de rotație trigonometric.
Tab.1. Semnalele date de senzorii Hall în cazul succesiunii alimentării fazelor corespunzătoare sensului de rotație în sensul acelor de ceasornic.
Tab.2. Semnalele date de senzorii Hall în cazul succesiunii alimentării fazelor corespunzătoare sensului de rotație în sensul trigonometric.
Proiectarea și realizarea modulului electronic
Proiectarea circuitului electronic
S-a analizat în primă fază necesarul de componente cu capabilități corespunzătore aplicației propuse. A rezultat că următoarele componente satisfac aceste cerințe:
Microcontrolerul PIC 16F1825
Este folosit ca nucleu al sistemului de control. În Fig.9 este prezentată capsula microcontrolerului PIC 16F1825 [W1]. Fiecărui pin îi este asociată lista de funcționalități selectabile soft. Dintre caracteristicile puse la dispoziție, în aplicație sunt exploatate următoarele:
Oscilator intern de 32MHz calibrat în fabrică,cu o precizie de ±1%; frecvența de lucru poate fi ajustată de către utilizator în faza de proiectare sau în timpul rulării programului, în domeniul 31kHz-32MHz;
Tensiunea de alimentare într-un domeniu larg: 1,8V-5,5V;
Capabilitatea de programare serială în circuit (ICSP) prin pinii ICSPDAT și ICSPCLK;
12 pini ce pot fi utilizați ca intrări/ ieșiri digitale;
8 pini ce pot fi utilizați ca intrări analogice;
Ieșire PWM.
Lista completă a funcționalităților microcontrolerului 16F1825 este dată în Tab.3.
Driver-ul IR2101
Circuitul IR2101 este un driver de tensiune înaltă (max 600V) și mare viteză de comutare (ton/toff 130/90ns), utilizat pentru comanda tranzistoarelor MOSFET și IGBT de putere [W3].
Schema tipică de conectare a acestui circuit este prezentată în Fig.10.
Circuitul permite comanda independentă a canalelor inferior (LIN) și superior (HIN).
Intrările logice sunt compatibile cu ieșirile CMOS sau LSTTL standard.
Canalul flotant (high side) poate fi utilizat pentru comanda unui tranzistor MOSFET sau IGBT de putere.
Tab.3. Lista funcționalităților pinilor microcontrolerului PIC 16F1825
Tranzistorul IRF2807
Tranzistorul IRF 2807, Fig.11, este de tipul HEXFET – MOSFET de putere cu o rezistență în conducție extrem de mică și o viteză de comutație foarte mare [W6].
Principalele caracteristici în regim nominal de funcționare sunt prezentate în Tab.4.
Tab.4. Caracteristicile tranzistorului IRF2807 în regim nominal de funcționare.
Circuitul integrat CDB408
Circuitul integrat CDB408 conține 4 porți logice ȘI cu câte 2 intrări. Configurația pinilor circuitului este prezentată în Fig.12, [B1], iar în Tab.5 condițiile optime de funcționare [W5].
Tab.5. Condițiile de funcționare optimă ale circuitului CDB408.
Circuitul SS441 – senzor Hall
Circuitul integrat SS441, Fig.13. este un senzor cu efect Hall, de dimensiuni reduse, versatil, cu ieșire digitală. Este proiectat pentru a răspunde la alternanța polilor Nord și Sud ale unui magnet permanent sau electromagnet.
Funcționează la tensiuni de alimentare între 3,8V și 30V, și consumă pe ieșire, în regim continuu, 20mA și 50mA în regim ciclic.
Ieșirea sa digitală de tip open-colector (după cum se poate observa în Fig.14) permite conectarea la o mare varietate de dispozitive [W4].
Stabilizatorul de tensiune LM7805
Circuitul integrat LM7805 este un stabilizator de tensiune fixă de 5V, Fig.15. El poate furniza la ieșire un curent de până la 1,5mA.
Circuitul este imun la suprasarcină fiind prevăzut cu circuite interne de limitare a curentului și de protecție la supratemperatură.
Acest stabilizator poate furniza și tensiune reglabilă la ieșire utilizând componente externe ajustabile.
Schema electronică a circuitului
În Fig.16 este prezentată schema circuitului electronic al sistemului de control a motorului BLDC. Nucleul este un microcontroler PIC 16F1825 ale cărui capabilități multiple l-a calificat drept cel mai potrivit aplicației.
Alimentarea motorului BLDC se face prin intermediul unei punți trifazate realizată cu tranzistoare MOSFET de putere IRF2807, comandate prin intermediul driverelor IR2101.
Doar tranzistoarele din partea superioră a punții sunt comandate cu semnal PWM. Semnalul PWM aplicat acestor intrări este distribuit de la ieșirea PWM a microcontrolerului prin intermediul unor porți ȘI (integratul CDB408).
Realizarea circuitelor electronice
La implementarea schemei de control s-a optat pentru varianta unui modul pe placuță imprimată de test. Aceasta a oferit flexibilitatea necesară diverselor variante funcționale pe parcursul experimentelor.
O parte din conexiuni s-au realizat prin trasee pe placuță, cealaltă parte, care a suferit multe modificări configurații a fost realizată din fire cu conectori.
Software aplicație
Algoritmul de control
Mai jos este prezentat algoritmul de control al motorului BLDC. Algoritmul evidențiază opțiunile de alegere a sensului de rotație și modificarea turației precum și mecanismele de comutație și de monitorizare a poziției rotorului.
Pentru realizarea comutației se citesc senzorii Hall și, funcție de sensul de rotație, se comandă deschiderea tranzistoarelor pentru alimentarea înfășurărilor statorice a.î. rotorul să se rotească până în poziția următoare.
Algoritmul a fost implementat în limbaj de asamblare și este prezentat integral în Anexă.
Mediile de dezvoltare utilizate
Editarea, asamblarea și depanarea programelor au fost făcute în mediul de dezvolatre MPLAB v8.85 (freeware). În Fig.17 este prezentată o instanță a programului ce rulează pe microcontrolerului PIC 16F1825, în mediul MPLAB.
Programatorul utilizat pentru încărcarea programului în memoria microcontrolerului este de tip PICkit2 conectat la PC/ laptop pe magistrala USB, Fig. 18.
Software-ul utilizat pentru programarea microcontrolerului a fost PICkit2 v2.61 (freeware). O instanță a programluiu în cod mașină (HEX) este surprinsă în Fig.19.
Testarea sistemului
Au fost efectuate foarte multe teste pe parcursul dezvoltării sistemului. După punerea la punct a acestuia, diagramele temporale de funcționare sunt următoarele:
În Fig.20 semnalele de pe cele 3 senzori de proximitate cu efect Hall: pe CH1 (galben) semnalul de pe senzorul corespunzăto fazei U a motorului BLDC; pe CH2 (albastru) semnalul de pe senzorul corespunzăto fazei V a motorului BLDC; pe CH2 (mov) semnalul de pe senzorul corespunzăto fazei W a motorului BLDC;
În Fig.21 semnalele pe cele 3 faze – U, V, W / CH1 (galben), CH2 (albastru), CH3 (mov) pentru o turație mare a motorului (cca 90% din turația maximă);
În Fig.22 semnalele pe cele 3 faze – U, V, W / CH1 (galben), CH2 (albastru), CH3 (mov) pentru o turație mică a motorului (cca 20% din turația maximă).
Concluzii si dezvoltări ulterioare.
Sistemul proiectat și realizat funcționează în conformitate cu scopul propus:
Schimbarea sensului de rotație a motorului BLDC se face eșecuri;
Modificarea turației motorului BLDC se face de asemenea fără eșecuri;
Oprirea la punct fix a motorului BLDC se face cu o foarte bună probabilitate (cca 80%); s-a încercat reducerea procentului de eșecuri (ce era mare inițial, aproape 50%) prin ameliorări software ce vizat parametrii: frecvență PWM, întârziere comandă, viteză minimă. Cele mai bune rezultate s-au obținut prin forțarea unei viteze minime la sesizarea unei prescrieri sub un prag minim și micșorarea în acest fel a inerției rotorului (care ar fi, se pare, principala cauză a ratării opririi la punct fix).
Alte cauze de eșec pot fi identificate ulterior prin experimente extinse.
O îmbunătățire a sistemului poate fi aceea de completare cu un algoritm de reglare automată a turației în situația antrenării unor sarcini cu dinamică mare.
Bibliografia
[B1] * * *, Catalog "Circuite integrate digitale", IPRS Baneasa, 1985.
Webografia
[W1] http://ww1.microchip.com/downloads/en/DeviceDoc/41440B.pdf
[W2] https://www.fairchildsemi.com/datasheets/LM/LM7805.pdf
[W3] http://www.infineon.com/dgdl/ir2101.pdf?fileId=5546d462533600a4015355c7a755166c
[W4] http://sensing.honeywell.com/honeywell-sensing-ss400-series-product-sheet-009050-3-en.pdf
[W5] http://www.nxp.com/documents/data_sheet/74HC_HCT08.pdf
[W6] http://www.infineon.com/dgdl/irf2807pbf.pdf?fileId=5546d462533600a4015355dea79e18f2
Anexa
Listingul programului (realizat în limbaj de asamblare)
;Comanda senzorizata a motorului BLDC
;
;Faze motor: U, V, W
;Tranzistori punte: –––––––––––-
;Faza U: Q1 sus/ Q4 jos
;Faza V: Q2 sus/ Q5 jos
;Faza W: Q3 sus/ Q6 jos
;Functionare IR2101 –––––––––––
;HIN-LIN/HO-LO
;0_0/0_0
;0_1/0_1
;1_0/1_0
;1_1/1_1
;Succesiune comenzi sens rotire direct: –––––
;1 – U=hz/V=1/W=0 => Q1=0, Q2=1, Q3=0 | Q4=0, Q5=0, Q6=1
; HOU_HOV_HOW_LOU_LOV_LOW
; HINU_HINV_HINW_LINU_LINV_LINW
; 0 1 0 0 0 1 ;comanda pas 1
;2 – U=1/V=hz/W=0 => Q1=1, Q2=0, Q3=0 | Q4=0, Q5=0, Q6=1
; HOU_HOV_HOW_LOU_LOV_LOW
; HINU_HINV_HINW_LINU_LINV_LINW
; 1 0 0 0 0 1 ;comanda pas 2
;3 – U=1/V=0/W=hz => Q1=1, Q2=0, Q3=0 | Q4=0, Q5=1, Q6=0
; HOU_HOV_HOW_LOU_LOV_LOW
; HINU_HINV_HINW_LINU_LINV_LINW
; 1 0 0 0 1 0 ;comanda pas 3
;4 – U=hz/V=0/W=1 => Q1=0, Q2=0, Q3=1 | Q4=0, Q5=1, Q6=0
; HOU_HOV_HOW_LOU_LOV_LOW
; HINU_HINV_HINW_LINU_LINV_LINW
; 0 0 1 0 1 0 ;comanda pas 4
;5 – U=0/V=hz/W=1 => Q1=0, Q2=0, Q3=1 | Q4=1, Q5=0, Q6=0
; HOU_HOV_HOW_LOU_LOV_LOW
; HINU_HINV_HINW_LINU_LINV_LINW
; 0 0 1 1 0 0 ;comanda pas 5
;6 – U=0/V=1/W=hz => Q1=0, Q2=1, Q3=0 | Q4=1, Q5=0, Q6=0
; HOU_HOV_HOW_LOU_LOV_LOW
; HINU_HINV_HINW_LINU_LINV_LINW
; 0 1 0 1 0 0 ;comanda pas 6
;Corespondenta uC_port/pin-IR2103_IN/pin-tranzistor –––––
;RC0/pin10-HIN/pin2-Q1/HINU
;RC1/pin9-HIN/pin2-Q2/HINV
;RC2/pin8-HIN/pin2-Q3/HINW
;RC3/pin7-LIN'/pin3-Q4/LOU
;RC4/pin6-LIN'/pin3-Q5/LOV
;RC5/pin5-LIN'/pin3-Q6/LOW
;Pini intrare senzori Hall –––––––––
;RA2/pin11 – HallU
;RA3/pin4 – HallV
;RA4/pin3 – HallW
;––––––––––-
;RA5/CCP2/pin2 – iesire PWM
;––––––––––-
;RA1/pin12/AN1 – intrarea analogica
;RA0/pin13/AN0 – intrarea analogica
;Pini programare: ––––––––-
;RA0/pin13/ICSPDAT
;RA1/pin12/ICSPCLK
;RA3/pin4/VPP
;pin1/VDD
;pin14/VSS
;
PROCESSOR 16f1825
#include <p16F1825.inc>
;
__CONFIG _CONFIG1 , _FOSC_INTOSC & _WDTE_OFF & _PWRTE_OFF & _MCLRE_OFF & _CP_OFF & _CPD_OFF & _BOREN_OFF & _CLKOUTEN_OFF & _IESO_OFF & _FCMEN_OFF
__CONFIG _CONFIG2 , _WRT_OFF & _PLLEN_OFF & _STVREN_OFF & _BORV_LO & _LVP_OFF
;
;
; –––- Registre –––-
;
;
Cblock 0x020 ;Inceput RAM
FLAGS ;fanioane
rCmd ;registru comanda tranzistoare
rSz ;registru senzori
rSzOLD
rStart ;registru cu configuratia de start a senzorilor
rCuadr ;registru cuadratura
rVit ;registru viteza – memoreaza factorul de umplere
R0 ;registri de manevra
R1
R2
Endc
;
;––– Porturi ––––
;
#define iSpeed PORTA,2 ;RA0/AN2/pin11 uC – controlul vitezei
#define iSens PORTA,0 ;RA0/AN2/pin11 uC – controlul sensului
;
;––– Fanioane –––––
;
#define fStop FLAGS,0 ;fanion semnalizare procedura STOP
;
;––– Constante ––––-
;comenzi ===
;0_0_LINW_LINV_LINU_HINW_HINV_HINU
#define cCmd1 B'00100010' ;pas 1
#define cCmd2 B'00100001' ;pas 2
#define cCmd3 B'00010001' ;pas 3
#define cCmd4 B'00010100' ;pas 4
#define cCmd5 B'00001100' ;pas 5
#define cCmd6 B'00001010' ;pas 6
;senzori ===
; 0__SW_SV_SU_0__0 senzori
#define cSz1 B'00010100' ;pas 1 senzori
#define cSz2 B'00010000' ;pas 2 senzori
#define cSz3 B'00011000' ;pas 3 senzori
#define cSz4 B'00001000' ;pas 4 senzori
#define cSz5 B'00001100' ;pas 5 senzori
#define cSz6 B'00000100' ;pas 6 senzori
#define cStop .40 ;prag Stop
#define cPasi .8
ORG 0
GOTO MAIN
;
ORG 4 ;––– rutina de intrerupere de timp –––– GOTO MAIN
;
Speed
BANKSEL ADCON0
movlw b'00000101' ;bit7 = 0 – Aliniere la stanga,
;bit6 = 0 – Vref = VDD,
;bit5 =0 neimplementat
;bits4:2 = 001 – AN1,
;bit1 = 0 – nu este conversie,
;bit0 =1 – start acquisition
movwf ADCON0
;Temporizare necesara achizitiei
movlw .20
movwf R0
decfsz R0
goto $-1
;
BSF ADCON0,GO ;Start conversie
BTFSC ADCON0,GO ;Gata coversie?
GOTO $-1 ;Nu, retestare
BANKSEL ADRESH ;
MOVF ADRESH,W ;Citeste bitul superior
BANKSEL rVit
movwf rVit
return
;
Delay
movlw .7
movwf R1
movlw .50
movwf R2
decfsz R2
goto $-1
decfsz R1
goto $-5
return
;
; *** PROGRAMUL PRINCIPAL***
;
MAIN
;invalideaza CCP1
BANKSEL CCP1CON
clrf CCP1CON
;definire I/O
BANKSEL PORTA
clrf PORTA
clrf PORTC
BANKSEL TRISA
movlw B'00011111' ;
movwf TRISA
clrf TRISC
;setare frecventa oscilatorului intern
BANKSEL OSCCON
movlw B'01101010' ;4MHz
movwf OSCCON
;
;Setare intrare analogica
BANKSEL ANSELA
clrf ANSELA
clrf ANSELC
bsf ANSELA,ANSA1
;setare frecventa CAN
BANKSEL ADCON1
movlw b'01100000' ;Fosc/64
movwf ADCON1
;
BANKSEL APFCON1
clrf APFCON1
bsf APFCON1,CCP2SEL ;CCP2 asigant lui RA5
;
;Configurare modul CCP pentru operatii PWM:
;1. Invalideaza pinul alocat PWM (CCP2)prin setarea bitului corespunzator din TRIS.
BANKSEL TRISA
bsf TRISA,5 ;CCP2 pin (pin2 uC)
;2. Seteaza perioada PWM prin incarcarea registrului PR2.
BANKSEL PR2
movlw .250
movwf PR2
;3. Configureaza modulul CCP pentru modul PWM prin incarcarea registrului CCP2CON
;cu valoarea potrivita.
BANKSEL CCP2CON
movlw b'00001100'
;bit 7-6, Daca CCP2M<3:2> = 11
; 00 = Iesire unica; P2A modulat; P2B, P2C, P2D asigante ca porturi I/O
;bit 5-4 DC2B<1:0>=00 PWM cei mai putini semnificativi 2 biti pentru DC.PWM
;bit 3-0 PWM mode: 1100 = PWM mode: P2A, P2C active-sus; P2B, P2D active-sus
movwf CCP2CON
;4. Seteaza DC pentru PWM prin incarcarea registrului CCPR2L si bitii CCP2 din regidtrul CCP2CON.
BANKSEL CCPR2L
movlw .10
movwf CCPR2L
;5. Configureaza si starteaza Timer2:
;• Sterge fanionul pentru intrrupere TMR2IF din registrul PIR1.
BANKSEL PIR1
bcf PIR1,TMR2IF
;• Seteaza valuarea prescalerului pt Timer2 prin incarcarea bitilor T2CKPS din registrul T2CON.
;• Valideaza Timer2 bitului TMR2ON din registrul T2CON.
BANKSEL T2CON
movlw b'00000100';
;bit 6-3 TOUTPS<3:0>=1001=10 bitii Postscaler-ului reg Timer2
;bit 2 TMR2ON=1 (on) Timer2
;bit 1-0 T2CKPS<1:0>=00=1 bitii Prescaler-ului reg Timer2
;T2=250*1*1*1us=250us(4kHz) (Fosc=4MHz => Tcicl=1us)
movwf T2CON
;6. Valideaza iesirea PWM output
;• asteapta pana cand apare depasire pt Timer2 (bitul TMR2IF din registrul PIR1 este setat).
BANKSEL PIR1
btfss PIR1,TMR2IF
goto $-1
;• Valideaza pinul de iesire CCP1 prin stergerea bitului corespunzator din TRIS
BANKSEL TRISA
bcf TRISA,5
;
movlw B'00010000'
BANKSEL rStart
movwf rStart ;configuratia senzorilor la pornire
movlw cPasi
movwf rCuadr ;initializare registru cuadratura
clrf rSzOLD
;
MAIN0 ;====================== sectiunea programului principal
call Speed ;citeste viteza prescrisa de la potentiometru
;
movlw cStop
BANKSEL rVit
subwf rVit,W
btfsc STATUS,C ;Vit(rVit)<Vit_min(W)?
goto FUNCT
;
btfsc fStop ;motor in miscare?
goto STOP ;nu
movlw cStop ;da
movwf rVit ;asigura viteza minima
bsf fStopi ;procedura de stop initializata
BANKSEL OSCCON
movlw B'01010010' ;500kHz
movwf OSCCON
goto MAIN1
;
FUNCT ;functionare
bcf fStop
bcf fStopi
BANKSEL OSCCON
movlw B'01101010' ;4MHz
movwf OSCCON
MAIN1
BANKSEL rVit
movfw rVit
BANKSEL CCPR2L
movwf CCPR2L ;stabileste viteza
BANKSEL PORTA
movfw PORTA
andlw B'00011100' ;mascare, in W se afla configuratia actuala
BANKSEL rSz
movwf rSz ;incarcare configuratie curenta senzori
xorwf rSzOLD,W ;compara config.actuala cu cea veche, W se altereaza
btfsc STATUS,Z ;configuratie diferita?
goto MAIN0
;
movfw rSz
movwf rSzOLD ;actualizarea configuratie senzori
xorwf rStart,W ;comparare configuratie curenta senzori cu cea initiala
btfss STATUS,Z ;este aceasi? rSz(W)=rStart?
goto DIR ;nu
decfsz rCuadr ;da; Pozitia initiala?
goto DIR ;nu
movlw cPasi ;da, rCuadr=0
movwf rCuadr
btfss fStopi ;procedura de oprire motor?
goto DIR
STOP
clrf rVit
BANKSEL CCPR2L
clrf CCPR2L ;opreste motorul
;
DIR
btfss iSens
goto INV
Pas1
movfw rSz
xorlw cSz1
btfss STATUS,Z
goto Pas2
call Delay
movlw cCmd2
movwf PORTC
goto MAIN0
Pas2
movfw rSz
xorlw cSz2
btfss STATUS,Z
goto Pas3
call Delay
movlw cCmd3
movwf PORTC
goto MAIN0
Pas3
movfw rSz
xorlw cSz3
btfss STATUS,Z
goto Pas4
call Delay
movlw cCmd4
movwf PORTC
goto MAIN0
Pas4
movfw rSz
xorlw cSz4
btfss STATUS,Z
goto Pas5
call Delay
movlw cCmd5
movwf PORTC
goto MAIN0
Pas5
movfw rSz
xorlw cSz5
btfss STATUS,Z
goto Pas6
call Delay
movlw cCmd6
movwf PORTC
goto MAIN0
Pas6
movfw rSz
xorlw cSz6
btfss STATUS,Z
goto MAIN0
call Delay
movlw cCmd1
movwf PORTC
goto MAIN0
;
INV
movfw rSz
xorlw cSz1
btfss STATUS,Z
goto Pas2r
call Delay
movlw cCmd6
movwf PORTC
goto MAIN0
Pas2r
movfw rSz
xorlw cSz2
btfss STATUS,Z
goto Pas3r
call Delay
movlw cCmd1
movwf PORTC
goto MAIN0
Pas3r
movfw rSz
xorlw cSz3
btfss STATUS,Z
goto Pas4r
call Delay
movlw cCmd2
movwf PORTC
goto MAIN0
Pas4r
movfw rSz
xorlw cSz4
btfss STATUS,Z
goto Pas5r
call Delay
movlw cCmd3
movwf PORTC
goto MAIN0
Pas5r
movfw rSz
xorlw cSz5
btfss STATUS,Z
goto Pas6r
call Delay
movlw cCmd4
movwf PORTC
goto MAIN0
Pas6r
movfw rSz
xorlw cSz6
btfss STATUS,Z
goto MAIN0
call Delay
movlw cCmd5
movwf PORTC
goto MAIN0
END
Copyright Notice
© Licențiada.org respectă drepturile de proprietate intelectuală și așteaptă ca toți utilizatorii să facă același lucru. Dacă consideri că un conținut de pe site încalcă drepturile tale de autor, te rugăm să trimiți o notificare DMCA.
Acest articol: Proiect de diplomă: PETER Iosif Program de studii: Electronică Aplicată [308268] (ID: 308268)
Dacă considerați că acest conținut vă încalcă drepturile de autor, vă rugăm să depuneți o cerere pe pagina noastră Copyright Takedown.
