25
Lucrarea de laborator 4 Scopul acestei lucrări este realizarea unei initieri in comanda si controlul unui motor de curent continuu utilizand microcontrolere din familia PIC. Motorul folosit este motorul de curent continuu care se găsește inclusă pe placa Mechatronics Demo Board. Acest motor are statorul realizat dintr-un un magnet permanent, iar rotorul este bobinat. Alimentarea bobinei se realizează prin intermediul unor perii (brushed) aflate în contact mecanic permanent cu colectorul motorului(unde sunt aconectate infasuarile rotorice). Schema constructivă a motorului se regăsește în figura 1: Fig.1: Elementele constructive ale motorului Aplicațiile în care se regăsesc astfel de motoare aparțin unei diversități mari de domenii cum ar fi: jucării, ștergătoarele de parbriz, blocatoare de yale, mașini de găurit pe acumulatori, antenele telescopice automate etc. Desigur, dimensiunile, formele și caracteristicile motoarelor diferă în funcție de domeniul și cerințele fiecărei aplicație în parte.

Scopul acestei lucr ă ș ă a motorului se regă ș · 2011. 12. 5. · Scopul acestei lucrări este realizarea unei initieri in comanda si controlul unui motor de curent continuu

  • Upload
    others

  • View
    7

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Scopul acestei lucr ă ș ă a motorului se regă ș · 2011. 12. 5. · Scopul acestei lucrări este realizarea unei initieri in comanda si controlul unui motor de curent continuu

Lucrarea de laborator 4

Scopul acestei lucrări este realizarea unei initieri in comanda si controlul unui motor de curent continuu utilizand microcontrolere din familia PIC. Motorul folosit este motorul de curent continuu care se găsește inclusă pe placa Mechatronics Demo Board. Acest motor are statorul realizat dintr-un un magnet permanent, iar rotorul este bobinat. Alimentarea bobinei se realizează prin intermediul unor perii (brushed) aflate în contact mecanic permanent cu colectorul motorului(unde sunt aconectate infasuarile rotorice). Schema constructivă a motorului se regăsește în figura 1:

Fig.1: Elementele constructive ale motorului

Aplicațiile în care se regăsesc astfel de motoare aparțin unei diversități mari de domenii cum ar fi: jucării, ștergătoarele de parbriz, blocatoare de yale, mașini de găurit pe acumulatori, antenele telescopice automate etc.

Desigur, dimensiunile, formele și caracteristicile motoarelor diferă în funcție de domeniul și cerințele fiecărei aplicație în parte.

Page 2: Scopul acestei lucr ă ș ă a motorului se regă ș · 2011. 12. 5. · Scopul acestei lucrări este realizarea unei initieri in comanda si controlul unui motor de curent continuu

Din acest motiv, pentru proiectarea circuitului trebuie avut în vedere în primul rând dacă caracteristicile motorului se potrivesc aplicației. Toți producătorii furnizează caracteristicile produsului într-un document atașat acestuia numit „data sheet”. Orice inginer trebuie să aibă aptitudinile necesare citirii unui astfel de document. Pentru acest motor, specificațiile se regăsesc în figura 2 și sunt furnizate de Mabuchi Motor, producătorul acestui motor.

 

Fig. 2. Caracteristicile motorului de curent continuu

Page 3: Scopul acestei lucr ă ș ă a motorului se regă ș · 2011. 12. 5. · Scopul acestei lucrări este realizarea unei initieri in comanda si controlul unui motor de curent continuu

Controlul si actionarea motorului se poate realiza direct prin tensiunea si curentul de alimentare. Solutiile de comanda sunt extrem de simple, pentru acest tip de motor.

O prima varianta de comanda, controlabila prin intermediul unui microcontroler, face apel la utilizarea unui comutator realizat prin intermediul unui tranzistopr MOSFET. Acest tranzistor, activat prin semnalul furnizat de microcontroler, asigura alimentarea motorului prin activarea caii de curent pozitive sau negative, in functie de configuratie. Dupa cum se observa comanda este unidirectionala - motorul se roteste doar intr-un singur sens, nefiind posibila reversarea de sens. Se reaminteste ca dioda montata in antiparalel cu motorul are rolul de a proteja elementele electronice de autoinductia masinii electrice.

Structura completa a comenzii unidirectionale face apel si la un set de condensatori care realizeaza reducerea zgomotului electric datorat comutatiei perii-coletor (deparazitare)

Page 4: Scopul acestei lucr ă ș ă a motorului se regă ș · 2011. 12. 5. · Scopul acestei lucrări este realizarea unei initieri in comanda si controlul unui motor de curent continuu

Pentru comanda bidirectionala se apeleaza la utilizarea montajului in punte - H-bridge. Denumirea se datorează faptului că elementele active (în număr de 4) sunt dispuse pe două laturi paralele, iar între acestea se conecteaza elementul comandat. Modul de conexiune se poate observa în figura 3.

Fig. 3. Model de punte H cu tranzistori bipolari NPN

Schema completa, utilizata de Microchip Mechatronics kit , pentru comanda motorului, asigurandu-se si reversarea de sens, este:

 Atentie: RD7,RD6,RD4,RD3 reprezinta conexiunile circuitului de comanda al motorului de curent 

continuu cu portul D al microcontrolerului 

Page 5: Scopul acestei lucr ă ș ă a motorului se regă ș · 2011. 12. 5. · Scopul acestei lucrări este realizarea unei initieri in comanda si controlul unui motor de curent continuu

Un prim exemplu de program propune rotirea motorului într-o singură direcție atunci când circuitul este alimentat. Comanda de pornit/oprit se va da prin intermediul softului de programare care va acționa asupra microcontrolerului. Acesta va comanda mai departe închiderea/deschiderea tranzistoarelor corespunzătoare punții de comandă.

Schema cu conexiunile necesar a fi realizate este prezentată în figura 4 (RD7→P1, RD4→N2 și cele două alimentări ale motorului la DRIVE1 și DRIVE2).

Conexiunea echivalentă obținută prin conectarea pinilor este prezentată în figura 5 (de notat că schema logică a punții este asemănătoare figurii 3, diferența constând în faptul că, în loc de tranzistori bipolari avem tranzistori MOSFET).

Modul de funcționare este simplu:

- Pinii RD4 și RD7 atunci când sunt în „1” logic, furnizează o diferență de potențial suficient de mare pentru a deschide circuitul prin cei doi tranzistori MOSFET. În acest mod, circuitul este practic închis, ca și cum motorul ar fi alimentat direct.

Page 6: Scopul acestei lucr ă ș ă a motorului se regă ș · 2011. 12. 5. · Scopul acestei lucrări este realizarea unei initieri in comanda si controlul unui motor de curent continuu

- Atunci când unul din pini este în „0” logic, tranzistorul corespunzător își schimbă starea, apărând practic o rezistență infinită, iar circuitul se comportă ca și cum nu ar fi închis.

Fig. 5. Conexiunea echivalentă obținută

Programul aferent acestui circuit și care trebuie scris în memoria microcontrolerului, va fi:

---------------------- rotirea motorului într-un singur sens -------------------

#include "16F917.h" 

#use delay(clock=8000000) 

void main() 

output_high(PIN_D7); 

output_high(PIN_D4); 

//sau in loc de cele doua instructiuni: output_D(0x90); 

------------------------------------ END -----------------------------------------------

Page 7: Scopul acestei lucr ă ș ă a motorului se regă ș · 2011. 12. 5. · Scopul acestei lucrări este realizarea unei initieri in comanda si controlul unui motor de curent continuu

Fig. 4. Conexiunile pentru rotirea motorului într-o singură direcție

Page 8: Scopul acestei lucr ă ș ă a motorului se regă ș · 2011. 12. 5. · Scopul acestei lucrări este realizarea unei initieri in comanda si controlul unui motor de curent continuu

Se reaminteste ca microcontrolerul 16F877 dispune de urmatoarele porturi digitale de intrari/iesiri (digital I/O port):

Port A RA0–RA5 - 6 bits Port B RB0–RB7 - 8 bits Port C RC0–RC7 - 8 bits Port D RD0–RD7 - 8 bits Port E RE0–RE2 - 3 bits

Totalul intrarilor/iesirilor digitale disponibile este de 33.

Din configurarea placii Microchip Mechatronics kit se observa ca motorul este conectat la portul D. Prin urmare comenzile acestuia vor tine cont de conexiunile realizate si de porturile ce vor fi activate:

Bit7 Port D Bit6 Port D Bit5 Port D Bit4 Port D Bit3 Port D Bit2 Port D Bit1 Port D Bit0 Port D

RD7 RD6 RD5 RD4 RD3 RD2 RD1 RD0

Deci out_D(0x90) reprezinta:

Bit7 Port D Bit6 Port D Bit5 Port D Bit4 Port D Bit3 Port D Bit2 Port D Bit1 Port D Bit0 Port D

RD7 RD6 RD5 RD4 RD3 RD2 RD1 RD0

1 0 0 1 0 0 0 0

Cerința 1: Modificați programul anterior astfel încât motorul să pornească dacă este apăsat switch-ul 2 și să se oprească atunci când acesta este eliberat!

Comenzi noi care apar în acest laborator:

- Nume_etichetă: instrucțiune;  

... ;  

goto  Nume_etichetă; → are ca efect saltul necondiționat la adresa instrucțiunii unde s-a definit „Nume_etichetă”. Adresa instrucțiunii, deoarece instrucțiunile sunt puse într-o stivă și în timpul executării programului sunt extrase pe rând, va fi apelată prin intermediul „goto”.

Page 9: Scopul acestei lucr ă ș ă a motorului se regă ș · 2011. 12. 5. · Scopul acestei lucrări este realizarea unei initieri in comanda si controlul unui motor de curent continuu

Următorul program are ca scop rotirea motorului într-un sens atunci când este apăsat switch-ul SW2 și în sens invers atunci când acesta nu este apăsat. Pentru acest program se vor lega în plus față de programul anterior și pinii: SW2→RA4, RD6→P2 și RD3→N1.

-------------------- Rotirea motorului în ambele sensuri -------------------

#include "16F917.h" 

#use delay(clock=8000000) 

main() 

dinnou: output_D(0x00);//adăugarea unei etichete și oprirea motorului 

delay_ms(500);//protejarea motorului la inversarea sensului de rotație  

while(!input(PIN_A4)) //Test switch 

output_D(0x90);//activare RD7 și RD4 

output_D(0x00); 

delay_ms(500); 

while(input(PIN_A4)) //Test switch 

output_D(0x48);//activare RD6 și RD3 

goto dinnou; 

---------------------------------------End------------------------------------

Portul D va fi deci activat, in functie de comenzile programului astfel:

Page 10: Scopul acestei lucr ă ș ă a motorului se regă ș · 2011. 12. 5. · Scopul acestei lucrări este realizarea unei initieri in comanda si controlul unui motor de curent continuu

Bit7 Bit6  Bit5  Bit4  Bit3  Bit2  Bit1  Bit0  Echivalent zecimal

RD7 RD6 RD5 RD4 RD3 RD2 RD1 RD0

1 0 0 1 0 0 0 0 90

0 1 0 0 1 0 0 0 48

Mai departe vom realiza un program prin care să putem observa numărul de rotații pe secundă a motorului de curent continuu. Pentru aceasta avem nevoie de un furnizor de semnal la fiecare rotație și de un pin pentru citirea și memorarea numărului de semnale furnizate. În acest sens, placa de dezvoltare a fost dotată cu un set emițător-receptor optic (OPTICAL INTERRUPTER) care furnizează 2 impulsuri la fiecare rotație a axului motor.

Conexiunile necesare a fi realizate pentru următorul program sunt:

SW4→RA4, J7→RC5, RD7→P1, RD4→N2 și cele două alimentări ale motorului la DRIVE1 și DRIVE2 (RC5 reprezintă un pin al microcontrolerului care are și utilizare de timer extern, iar în programul nostru îl vom utiliza ca și numărător).

-------------------------------- numărarea rotațiilor ----------------------------------

#include "16F917.h" 

#use delay(clock=8000000) 

#define DIG1 COM0+22,COM0+23,COM2+23,COM3+22,COM2+22,COM1+22,COM1+23 

#define DIG2 COM0+06,COM0+21,COM2+21,COM3+6,COM2+6,COM1+6,COM1+21 

#define DIG3 COM0+03,COM0+11,COM2+11,COM3+3,COM2+3,COM1+3,COM1+11 

byte const DigMap[10]={0xFD,0x60,0xDB,0xF3,0x66,0xB7,0xBF,0xE0,0xFF,0xE7}; 

void main()  

int8 huns=0, tens=0, ones=0;  

int16 count=0;  

setup_lcd(LCD_MUX14,0);  

Page 11: Scopul acestei lucr ă ș ă a motorului se regă ș · 2011. 12. 5. · Scopul acestei lucrări este realizarea unei initieri in comanda si controlul unui motor de curent continuu

setup_timer_1(T1_EXTERNAL); //setarea timerului

while(1)  

while(!input(PIN_A4))// programul va începe să numere când se apasă SW4 

set_timer1(0);//setarea timerului la 0

output_D(0x90); 

delay_ms(1000);// citirea timp de o secundă 

output_D(0x00); 

count=get_timer1();//citirea numărului de rotații 

count=count/2;// împărțirea la 2 deoarece sunt două impulsuri/revoluție 

huns=tens=ones=0;  

while (count>99)  

{ count=count‐100; huns++; }  

while (count>9)  

{ count=count‐10; tens++; } 

ones=count; 

lcd_symbol(DigMap[ones],DIG1);  

lcd_symbol(DigMap[tens],DIG2); 

lcd_symbol(DigMap[huns],DIG3); 

-------------------------------------------- End ----------------------------------------

Page 12: Scopul acestei lucr ă ș ă a motorului se regă ș · 2011. 12. 5. · Scopul acestei lucrări este realizarea unei initieri in comanda si controlul unui motor de curent continuu

Următorul program are ca scop familiarizarea cu circuitele de control a turației PWM (pulse with modulation). Aceste circuite realizează interfața între comanda în impulsuri pe care o putem obține de la microcontroler și comanda în valoare nominală a tensiunii necesare reglării turației. Privind din nou figura 2 se poate observa că motorul nu are o caracteristică liniară, deci micșorând tensiunea nu vom obține și o scădere proporțională a turației! Formula uzuală prin care se calculează tensiunea de ieșire din circuit este: U=tON/tOFF x VCC, unde tON reprezintă durata timpului în care semnalul de comandă este „1” logic, tOFF reprezintă durata timpului în care semnalul de comandă este „0” logic și VCC reprezintă valoarea nominală de alimentare.

Placa de dezvoltare are pe lângă pinii P1, P2, ... P4, N4 și pinii PWM1 ... PWM4, pini pe care se poate aplica semnal codificat în durată. De fapt, aceste circuite au ieșirile legate direct la comanda MOSFET-ului, comandându-i de fapt acestuia o rezistență internă care apare ca o rezistență serie în circuit, automat apărând și o cădere de tensiune suplimentară (vezi figura 5).

Programul prin care vom evidenția acest lucru este prezentat mai jos. Conexiunile hardware rămân ca și la programul precedent, și vom mai adăuga o conexiune RD6→PWM2 (pinul PWM este legat pe același circuit cu pinul N, adică având legat N2, automat va trebui să folosim PWM2).

-------------------------------- modificarea turației -----------------------------------

#define DIG2 COM0+06,COM0+21,COM2+21,COM3+6,COM2+6,COM1+6,COM1+21 

#define DIG3 COM0+03,COM0+11,COM2+11,COM3+3,COM2+3,COM1+3,COM1+11 

byte const DigMap[10]={0xFD,0x60,0xDB,0xF3,0x66,0xB7,0xBF,0xE0,0xFF,0xE7}; 

void main()  

int8 huns=0, tens=0, ones=0;  

int16 count=0;  

setup_lcd(LCD_MUX14,0);  

setup_timer_1(T1_EXTERNAL);  

Page 13: Scopul acestei lucr ă ș ă a motorului se regă ș · 2011. 12. 5. · Scopul acestei lucrări este realizarea unei initieri in comanda si controlul unui motor de curent continuu

while(1)  

while(!input(PIN_A4)) 

int i; 

set_timer1(0); 

output_D(0x90); 

for(i=0;i<20;i++)//(3ms+47ms)x20=1000ms

output_high(PIN_D6); 

delay_ms(3); 

output_low(PIN_D6); 

delay_ms(47); 

}  

output_D(0x00); 

count=get_timer1(); 

count=count/2; 

huns=tens=ones=0;  

while (count>99)  

{ count=count‐100; huns++; }  

while (count>9)  

{ count=count‐10; tens++; } 

ones=count; 

lcd_symbol(DigMap[ones],DIG1);  

lcd_symbol(DigMap[tens],DIG2); 

Page 14: Scopul acestei lucr ă ș ă a motorului se regă ș · 2011. 12. 5. · Scopul acestei lucrări este realizarea unei initieri in comanda si controlul unui motor de curent continuu

lcd_symbol(DigMap[huns],DIG3); 

}}} 

---------------------------------------------End--------------------------------------------

Cerință: Modificați valorile tON/tOFF (păstrând cu ajutorul buclei for timpul de înregistrare de o secundă) și ridicați caracteristica număr de rotații/secundă în funcție de tensiunea de alimentare!

Page 15: Scopul acestei lucr ă ș ă a motorului se regă ș · 2011. 12. 5. · Scopul acestei lucrări este realizarea unei initieri in comanda si controlul unui motor de curent continuu

Lucrarea de laborator 4.1

Scopul acestei lucrări este familiarizarea cu aplicațiile de comandă și control a unui motor pas cu pas. Motorul folosit este motorul pas cu pas care se găsește inclus pe placa Mechatronics Demo Board. Acest motor este un motor cu magnet rotoric permanent multipol și cu două bobine de inducție pe rotor (dispuse la 90º una față de cealaltă. Alimentarea bobinelor se realizează prin intermediul a patru conductori. Schema constructivă a motorului se regăsește în figura 1:

Fig.1: Elementele constructive ale motorului

Aplicațiile în care se regăsesc astfel de motoare: reglaje fine de relanti (la motoarele termice), jucării, reglajul oglinzilor, recircularea gazelor de ardere etc.

Specificațiile acestui tip de motor se regăsesc în figura 2 și sunt furnizate de Nippon Pulse Motor, producătorul acestuia.

Page 16: Scopul acestei lucr ă ș ă a motorului se regă ș · 2011. 12. 5. · Scopul acestei lucrări este realizarea unei initieri in comanda si controlul unui motor de curent continuu

FFig. 2. Caracteristicile motorului pas cu pas

Page 17: Scopul acestei lucr ă ș ă a motorului se regă ș · 2011. 12. 5. · Scopul acestei lucrări este realizarea unei initieri in comanda si controlul unui motor de curent continuu

Pentru funcționarea motorului, este necesară conectarea acestuia la o sursă de alimentare care să creeze câmpul magnetic necesar. După cum reiese din figura 1, rotorul multipol se va alinia, cu cei mai apropiati doi poli, câmpului magnetic realizat de infășurarea activă. Se poate observa, de asemenea că, atunci când rotorul este aliniat cu una dintre înfășurări, axa celeilalte înfășurări va face un unghi α cu axa celorlalți doi poli cei mai apropiați de ea (vezi figura 3):

Fig. 3. Modul de comandă a Mpp. Ceea ce e scris cu galben reprezintă comanda curentă, iar cea scrisă cu verde este comanda viitoare.

α reprezintă pasul motorului pas cu pas. Desigur, prin aplicarea asupra celor două seturi de bobine a unei alimentări diferite și în același timp, se poate micșora pasul.

Această posibilitate o oferă o punte H prin intrarea PWM despre care am vorbit laboratorul trecut.

Page 18: Scopul acestei lucr ă ș ă a motorului se regă ș · 2011. 12. 5. · Scopul acestei lucrări este realizarea unei initieri in comanda si controlul unui motor de curent continuu

Având două înfășurări, avem nevoie de două punți H, fiecare dintre ele alimentând o bobină. Placa de dezvoltare Mechatronics Demo Board ne oferă această facilitate prin intermediul P3, P4, N3, N4, PWM3, PWM4 ca intrări și DRIVE3, respectiv DRIVE4 ca ieșiri (pe lângă cele folosite laboratorul precedent).

Așa cum ați remarcat, din figura2, pasul motorului în cazul nostru, este de 7,5º, ceea ce înseamnă că la o rotație completă vom avea 48 de pași (360º/7,5º=48).

De asemenea, se poate observa din fig. 3 că, pentru rotirea axului este nevoie să se creeze o rotire a câmpului magnetic prin cele două înfășurări. Astfel, vom fi nevoiți să comandăm înfășurările pe rând, într-un sens și în altul, prin intermediul unor întârzieri. În primul exemplu vom folosi o întârziere de 200ms între pași. De aici rezultă că o rotație completă se va realiza în 48x100ms=4,8s.

Pentru primul program este nevoie să se realizeze următoarele conexiuni: DRIVE1→Maro, DRIVE2→Orange, DRIVE3→Roșu, DRIVE4→Galben, RD7→P1, RD6→N1, RD5→P2, RD4→N2, RD3→P3, RD2→N3, RD1→P4, RD0→N4. Vezi figura 4:

Fig. 4. Schema cu conexiunile pentru programul 1

Page 19: Scopul acestei lucr ă ș ă a motorului se regă ș · 2011. 12. 5. · Scopul acestei lucrări este realizarea unei initieri in comanda si controlul unui motor de curent continuu

Evident, comanda se va da pe tot registrul D conform tabelului 1:

RD7

(P1)

RD6

(N1)

RD5

(P2)

RD4

(N2)

RD3

(P3)

RD2

(N3)

RD1

(P4)

RD0

(N4)

Cuvântul

1 0 0 1 0 0 0 0 0x90

0 0 0 0 0 1 1 0 0x06

0 1 1 0 0 0 0 0 0x60

0 0 0 0 1 0 0 1 0x09

Tabelul 1. Dispunerea biților în registrul D de-a lungul celor 4 faze de comandă (pentru edificarea noțiunilor vedeți și figura 5

Programul aferent acestui circuit și care trebuie scris în memoria microcontrolerului, va fi:

------------ rotirea motorului într-un singur sens cu un pas de 7,5º -------------

#include "16F917.h"

#use delay(clock=8000000)

void main(){

while(1)

{ output_D(0x90); //drive1

delay_ms(100);

output_D(0x06); //drive2

delay_ms(100);

output_D(0x60); //drive3

delay_ms(100);

output_D(0x09); //drive4

delay_ms(100);

}}

------------------------------------ END -----------------------------------------------

Page 20: Scopul acestei lucr ă ș ă a motorului se regă ș · 2011. 12. 5. · Scopul acestei lucrări este realizarea unei initieri in comanda si controlul unui motor de curent continuu

Cerința 1: Modificați programul anterior astfel încât motorul să pornească dacă este apăsat switch-ul 2 și să se oprească atunci când acesta este eliberat!

Următorul program are ca scop rotirea motorului într-un sens atunci când este apăsat switch-ul SW4 și în sens invers atunci când acesta nu este apăsat. Pentru acest program se vor lega în plus față de programul anterior și pinul: SW4→RA4.

-------------------- Rotirea motorului în ambele sensuri -------------------

#include "16F917.h"

#use delay(clock=8000000)

void main()

{

while(1)

{ while(!input(PIN_A4))

{ output_D(0x09); //drive4

delay_ms(100);

output_D(0x60); //drive3

delay_ms(100);

output_D(0x06); //drive2

delay_ms(100);

output_D(0x90); //drive1

delay_ms(100); }

output_D(0x90); //drive1

delay_ms(100);

output_D(0x06); //drive2

delay_ms(100);

output_D(0x60); //drive3

delay_ms(100);

output_D(0x09); //drive4

Page 21: Scopul acestei lucr ă ș ă a motorului se regă ș · 2011. 12. 5. · Scopul acestei lucrări este realizarea unei initieri in comanda si controlul unui motor de curent continuu

delay_ms(100);}

}

---------------------------------------End------------------------------------

În următoarea figură se va evidenția modul de legare a pinilor (schematic, desigur) corespunzători punții H și Drive-relor. Totodată se va explica și ce rol au jumperii în conexiunile J1 și J2 (Connect for Full Bridge):

Fig. 5. Legarea schematică a pinilor punții și a DRIVE-urilor

Se poate observa din figura de mai sus că, dacă legăm jumperii, practic nu vom face decât să activăm două elemente active ale punții în același timp. Desigur,

Page 22: Scopul acestei lucr ă ș ă a motorului se regă ș · 2011. 12. 5. · Scopul acestei lucrări este realizarea unei initieri in comanda si controlul unui motor de curent continuu

activarea se va face pe diagonala punții din considerentele explicate în laboratorul precedent (sensul curentului prin înfășurări).

În această ipoteză, vom monta jumperii corespunzători (adică P1cu N2, N1 cu P2, P3 cu N4 și N3 cu P4). Astfel nu vom mai avea nevoie de întregul registru pentru activarea punții, ci doar de 4 pini pentru conexiunile cu P1(îl vom conecta cu RD7), P2(îl vom conecta cu RD6), P3(îl vom conecta cu RD5) și P4(îl vom conecta cu RD4). Acum, atunci când vom avea pinul RD7 activ, acesta va activa și pinul P1 și pinul N2. Similar se întâmplă și pentru restul conexiunilor.

Prin următorul program se dorește familiarizarea cu funcțiile (alta decât main) și modificarea sensului de rotație atunci când se apasă SW2. Pentru aceasta, pe lângă conexiunile de la paragraful anterior, vom conecta SW2→RA2.

-------------------- Rotirea motorului în ambele sensuri 2 -------------------

#include "16F917.h"

#use delay(clock=8000000)

void inainte() //crearea functiei INAINTE

{

output_D(0x80); //drive4

delay_ms(100);

output_D(0x10); //drive3

delay_ms(100);

output_D(0x40); //drive2

delay_ms(100);

output_D(0x20); //drive1

delay_ms(100);

}

void inapoi() // crearea functiei INAPOI

{

output_D(0x20); //drive1

Page 23: Scopul acestei lucr ă ș ă a motorului se regă ș · 2011. 12. 5. · Scopul acestei lucrări este realizarea unei initieri in comanda si controlul unui motor de curent continuu

delay_ms(100);

output_D(0x40); //drive2

delay_ms(100);

output_D(0x10); //drive3

delay_ms(100);

output_D(0x80); //drive4

delay_ms(100);

}

void main() // crearea functiei principale

{

while(1)

{

while(input(PIN_A2)) { inainte(); } //apelarea functiei 'inainte'

delay_ms(10); //protejarea motorului la intoarcerea brusca

while(!input(PIN_A2)){};

while(input(PIN_A2)) { inapoi(); } //apelarea functiei 'inapoi'

delay_ms(10);

while(!input(PIN_A2)){};

}

}

---------------------------------------End------------------------------------

Mai departe vom realiza un program prin care să putem mări și micșora numărul de pași (evident pentru aceasta vom micșora/mări timpul de pauză între activările înfășurărilor) și totodată să putem schimba sensul de rotație.

Conexiunile necesare a fi realizate pentru următorul program sunt:

Page 24: Scopul acestei lucr ă ș ă a motorului se regă ș · 2011. 12. 5. · Scopul acestei lucrări este realizarea unei initieri in comanda si controlul unui motor de curent continuu

SW2→RA4, SW3→RA3, SW4→RA2, conexiunile P1...P4 descrise mai sus și cele patru alimentări ale motorului la DRIVE1...DRIVE4.

--------------- program incrementare/decrementare pași și inversare sens --------------

#include "16F917.h"

#use delay(clock=8000000)

int8 timp=16; //viteza initiala

void viteza() //functia viteza

{

if(!input(PIN_A3))

{ delay_ms(10);

if(timp!=1)timp=timp/2; //daca timpul nu este minim

}

while(!input(PIN_A3)){};

if(!input(PIN_A4))

{ delay_ms(10);

if(timp!=128)timp=timp*2; //daca timpul nu este maxim

}

while(!input(PIN_A4)){};

}

void inainte()

{

viteza();

output_D(0x20); delay_ms(timp); //DRIVE 1

output_D(0x40); delay_ms(timp); //DRIVE 2

output_D(0x10); delay_ms(timp); //DRIVE 3

output_D(0x80); delay_ms(timp); //DRIVE 4

}

Page 25: Scopul acestei lucr ă ș ă a motorului se regă ș · 2011. 12. 5. · Scopul acestei lucrări este realizarea unei initieri in comanda si controlul unui motor de curent continuu

void inapoi()

{

viteza();

output_D(0x80); delay_ms(timp); //DRIVE 4

output_D(0x10); delay_ms(timp); //DRIVE 3

output_D(0x40); delay_ms(timp); //DRIVE 2

output_D(0x20); delay_ms(timp); //DRIVE 1

}

void main() //functia principala

{

while(1)

{

while(input(PIN_A2)) { inainte(); } //apelarea functiei 'inainte'

delay_ms(10);

while(!input(PIN_A2)){};

while(input(PIN_A2)) { inapoi(); } //apelarea functiei 'inapoi'

delay_ms(10);

while(!input(PIN_A2)){};

}

}

-------------------------------------------- End ----------------------------------------

Cerință: Modificați programul anterior astfel încât să afișați pe LCD numărul de pași pe secundă (indicație: nr.pași=1000/timp și folosiți punctul zecimal)!