Controlul turației unui motor DC [307592]
[anonimizat]. Însă progresul remarcabil din ultimele decenii își are originea în primele descoperiri tehnice: roata, becul, telefonul.
Motoarele electrice au schimbat complet modul în care societatea noastră funcționează. [anonimizat], devenind o parte foarte importantă dintr-o multitudine de obiecte care sunt utilizate zilnic și care asigură confortul și starea de bine a oamenilor, cum ar fi: [anonimizat], frigiderele, ba chiar și mașinile de spălat. [anonimizat]-[anonimizat], vapoarelor și a avioanelor.
Societatea nu ar fi ajuns în stadiul prezent de dezvoltare fără motoarele electrice. [anonimizat] a oamenilor nu ar mai fi la fel fără toate dispozitivele care funcționează cu ajutorul motoarele electrice.
Folosirea motoarelor electrice la scară industrială a [anonimizat], dezvoltarea și cercetarea lor.
[anonimizat] a [anonimizat].
Astfel, în acest proiect am încercat să creăm un test pentru motorul DC. Obiectivul principal a fost reprezentat de realizarea sarcinii propuse printr-o [anonimizat]. [anonimizat] 2. Prin intermediul acestei aplicații putem verifica dacă motorul DC atinge numărul de rotații indicate în intervalul de timp optim sau dacă acesta efectuează rotațiile cu viteza potrivită.
Deoarece plaja de valori a tensiunii de alimentare este una relativ mare: 6 – 25 [anonimizat], [anonimizat].
PLACA INTEL GALILEO
Placa Intel Galileo este o platformă cu microcontroler care poate fi utilizată pentru dezvoltarea diferitor aplicații interactive: telecomenzi, [anonimizat].
[anonimizat], dezvoltată de Intel, a căror porturi sunt compatibile atât din punct de vedere hardware cât și software cu platforma de dezvoltare software Arduino și bibliotecile corespunzătoare acestuia. Printre avantajele acestei plăcuțe se numără: [anonimizat]; sistemul RTC care permite urmărirea timpului chiar și când placa este oprită; [anonimizat]-Go care permite utilizarea bibliotecii Arduino USB ca tastatură sau mouse pentru alte computere. [anonimizat] a plăcii este o [anonimizat]bilitatea conectării chipurilor Wi-Fi, Bluetooth, GSM sau chiar unități SSD pentru a putea beneficia de mai mult spațiu de stocare. Astfel, se constată că Intel Galileo poate fi privit precum un mini calculator portabil pe care se poate instala orice sistem de operare cu ajutorul portului de card SD.
Informația este captată prin intermediul elementelor de intrare: senzori, comutatoare; apoi după procesarea sa în interiorul microcontrolerului, este transmisă către elementele de ieșire: leduri, motoare, acumulatoare etc.
În cadrul acestui proiect este utilizată placa Intel Galileo Gen 2. Aceasta față de generațiile anterioare are avantaje evidente din punct de vedere a performanțelor. Și anume, placa dispune de o memorie suplimentară de 256 MB DDR3 RAM și 8 MB de Flash utilizată pentru stocarea firmware-urilor și a schițelor Arduino. În plus, datorită noului reglator de bord, placa Intel Galileo Gen 2 poate fi alimentată cu o sursă variabilă care se încadrează în intervalul 7 – 15 VDC.
Placa Intel Galileo Gen 2 este dotată cu porturi de intrare și de ieșire. Anume:
Serial: 0 (RX) și 1 (TX).
Intrările/ Ieșirile digitale: pinii de la 0 la 13.
Intrările/ Ieșirile analogice: pini de la A0 la A5.
PWM: pinii 3, 5, 6, 9, 10 și 11.
Pini digitali funcționează la 5 V, iar curentul furnizat de aceștia este cuprins în gama de valori: 10 – 25 mA. Pentru a utiliza pinii respectivi ca intrări sau ca ieșiri, folosim funcțiile: pinMode(), digitalRead(), digitalWrite(). Pinii PWM furnizează ieșiri pe 8/12 biți.
Pentru contorizarea turațiilor motorului DC s-a utilizat un senzor de tip Hall, care a fost introdus în circuit prin intermediul pinilor digitali și de putere. Anume pinii: pinul 2 configurat ca intrare digitală, alimentarea de 5V și GND. Mai mult, un rezistor de 10 K este conectat între pinii VCC și Vout ai senzorului Hall. Aceasta se face pentru a scoate la ieșire senzorul efect Hall la 5V. În cadrul proiectului, LCD-ul este folosit pentru afișarea numărului de turații efectuate de motor. LCD-ul utilizat este unul cu 16 pini. Iar cei 16 conectori au fost lipiți la LCD înainte ca acesta sî fie conectat la placă. LCD-ul este introdus în circuit prin intermediul plăcii Intel Galileo Gen 2 prin intermediul pinilor:
LCD RS la pinul digital 12;
LCD Enable la pinul digital 11;
LCD D4 la pinul digital 5;
LCD D5 la pinul digital 4;
LCD D6 la pinul digital 3;
LCD D7 la pinul digital 2;
Conceptul Arduino afirmă că orice individ, având cunoștințe minime sau în dezvoltare, legate de programare și/sau electronică poate să folosească tehnologia oferită de către plăcuța Intel Galileo. Pentru a fi realizabil este nevoie de un sistem de operare al plăcii care să fie capabil să interpreteze limbaje de programare simple, iar pentru utilizarea lor să fie necesară doar includerea unor biblioteci. În plus, modul de comunicare dintre utilizator și hardware trebuie să fie cât mai simplu. Software-ul care încarcă pe plăcuță codul și îndeplinește toate condițiile menționate mai sus, rulează cu ajutorul Arduino IDE (Integrated Development Environment), mediu de dezvoltare ce poate folosi limbaje uzuale de programare, ca de exemplu C/C++. Compilatorul inclus în cadrul aplicației poate înțelege aceste limbaje, pe care le traduce în limbaj mașină și le trimite către placa de dezvoltare. Un beneficiu al Arduino IDE mai este faptul că spre deosebire de alte programe de verificat și compilat cod, acesta funcționează fără nici o problemă pe orice sistem de operare care rulează pe calculatoare: Windows, Mac OS X sau diverse versiuni de Linux.
Arduino IDE vine, de asemenea, integrat cu o librărie software “Wiring”, care conține foarte multe funcții ce sunt utilizate pentru citirea informațiilor de la pinii plăcii sau pentru trimiterea diferitor semnale către celelate componente/device-uri constituente ale circuitului.
Cele mai simple programe în limbajul C/C++ ce pot fi rulate pe Arduino, conțin două funcții de bază, remarcabil de importante și obligatorii, care sunt compilate și unite între ele în cadrul unei alte funcții main():
setup() – o funcție ce rulează o singură dată la pornirea programului și inițializează parametrii de lucru ai programului ce urmează să fie pus în aplicare;
loop() – o funcție ce este în continuu reluată, până când placa de dezvoltare nu mai este alimentată;
Fig 1a: Plăcuța Intel Galileo vizualizată din față Fig 1b: Plăcuța Intel Galileo vizualizată din spate
3. HARDWARE
3.1 Schema electrică a circuitului
3.2 Descrierea componentelor hardware utilizate
Circuitul principal este format din 2 subcircuite și anume: sursa variabilă de tensiune și circuitul pentru monitorizarea turațiilor motorului DC. Chiar din titlu se subînțelege că elementul fundamental în realizarea proiectului este motorul electric de curent continuu. Însă pe lângă acesta am mai utilizat: senzorul de tip Hall, timerul 555, tranzistorul de putere, LCD -ul.
Motorul electric, numit și electromotor este un dispozitiv electromecanic care transformă energia electrică în energie mecanică. Indiferent de tipul motorului, acesta este alcătuit din două părți componente: rotor și stator. Motorul utilizat în cadrul proiectului este un motor de curent continuu (DC). Motorul de curent continuu are pe stator poli magnetici și bobine polare concentrate care creează câmpul magnetic de excitație. Pe axul motorului este situat un colector care schimbă sensul curentului prin înfășurarea rotorică astfel încât câmpul magnetic de excitație să exercite în permanență o forță față de rotor. Înfășurarea rotorică parcursă de curent va avea una sau mai multe perechi de poli magnetici echivalenți. Rotorul se deplasează în câmpul magnetic de excitație până când polii rotorici se aliniază în dreptul polilor statorici opuși. În același moment, colectorul schimbă sensul curenților rotorici astfel încât polaritatea rotorului se inversează, iar rotorul va continua deplasarea până la următoarea aliniere a polilor magnetici.
Fig. 2: Variației PWM – ului, când factorul de umplere este modificat
Turația motorului este direct proporțională cu tensiunea aplicată înfășurării rotorice și invers proporțională cu câmpul magnetic de excitație. Turația se reglează prin varierea tensiunii aplicată motorului până la valoarea nominală a tensiunii, iar turații mai mari se obțin prin slăbirea câmpului de excitație. Ambele metode vizează o tensiune variabilă ce poate fi obținută folosind un generator de curent continuu. Astfel, pentru a controla turațiile trebuie să controlăm tensiunea de intrare a motorului. O modalitate de realizare a variației este constituită de utilizarea tehnicii foarte cunoscute numită PWM (pulse with modulation) – Modularea Lățimii Pulsului. PWM este o metodă prin care se poate genera o tensiune variabilă prin activarea și/sau oprirea puterii care este transmisă dispozitivului electronic cu o rată rapidă. Tensiunea medie depinde de ciclul de sarcină al semnalului sau de timpul în care semnalul este pornit, față de timpul în care semnalul este oprit într-o singură perioadă de timp, după cum poate fi observat în figura Fig 2.
Dispozitivul capabil să genereze un PWM este timer-ul 555. Datorită simplității sale relative, a ușurinței de utilizare și a costului scăzut, timerul a fost utilizat în mii de aplicații și încă este disponibil la nivel industrial. Cele mai uzuale funcții ale circuitului integrat 555 sunt: cronometrul în modul monostabil și oscilatorul generator de semnal dreptunghiular în modul astabil. În cadrul proiectului, IC 555 a fost utilizat având drept funcție generarea unui semnal dreptunghiular. Timerul prezintă în componența sa 8 pini: GND, Trigger, Output, Reset, Control Voltage, Threahold, Discarge și VCC.
Senzorul cu efect Hall (traductoarul Hall), ilustrat în figura 3, este un senzor de poziție/deplasare care își bazează principiul de măsură pe Efectul lui Hall. Tensiunea de ieșire Hall este direct proporțională cu intensitatea câmpului magnetic. Deoarece valoare tensiunii este foarte mică, toți senzorii de tip Hall au integrați amplificatoare electronice și circuite de reglare pentru a ridica tensiunea de ieșire în jurul valorii de +5V. Senzorii Hall sunt senzori digitali care produc un semnal de ieșire cu doar două valori: 0 și 5V, iar curentul de ieșire este de intensitate 300mA. Cu cât frecvența de variație a câmpului magnetic este mai mare, cu atât durata semnalului de ieșire este mai mică, deci turația discului este mai mare. Calculatorul de injecție preia semnalul digital de la senzor și-l transformă în informație referitoare la turație sau poziție, în funcție de frecvență.
Fig 3 : Senzor de proximitate cu efect Hall
Fig 4: Legenda pinilor LCD
Pentru afișarea turațiilor măsurate prin intermediul senzorului de proximitate cu efect Hall, am folosit un LCD alfanumeric 16×2, care conține un afișaj cu cristale lichide și un potențiometru pentru reglarea luminozității. LCD-ul contine 3 blocuri de memorie:
DDRAM Display Data RAM (se folosește pentru stocarea caracterelor afisate pe ecran și poate memora 80 caractere, din care o parte sunt cele afișate direct ecran.);
CGRAM Character Generator ROM (conține un set standard de caractere);
CGROM Character Generator RAM (conține un set standard de simboluri grafice);
3.3 Sursă variabilă de tensiune
Pentru realizarea sursei variabile de tensiune am utilizat schema electrică din figura 5, unde sunt ilustrate conexiunile existente între elementele constituente.
Din schemă prezentată în figura putem observa că cele mai importante componente ale circuitului sunt: LM317L și Tranzistorul TIP147.
LM317L este un circuit electronic utilizat pentru conversia tensiunii curentului de la un nivel ridicat la un nivel mai scazut. Mai exact acest circuit integrat este un stabilizator de tensiune. Tot odată, LM317L are rol și de protecție a circuitului, acesta fiind dotat și cu un radiator, care disipă cantitatea de căldură.
Tranzistorul TIP147 este un tranzistor de putere, de tip Darlington – pnp. Acesta în cadrul sursei variabile este utilizat pentru a amplifica curentul care intră în stabilizatorul LM317L de la 100mA la 5A. În plus, acesta mai are rol de protecție, disipând surplusul cantității de căldură.
Ca alimentare sunt utilizate trei baterii de tensiune 12V și curent 27 A, conectate în serie, furnizând în acest fel o tensiune de alimentare de 36 V ce va fi reglată ulterior prin intermediul stabilizatorului de tensiune LM317L.
Fig 5 : Schema electrică a sursei variabile de tensiune
4. SOFTWARE
4.1 Diagrama logică a circuitului
4.2 Codul Sursă
În cele ce urmează, este prezentat codul și explicată semnificația fiecărei funcții.
#include<LiquidCrystal.h>
În aceste două linii de cod au fost incluse cele două biblioteci utilizate în cadrul proiectului. LiquidCrystal.h ne permite să lucrăm cu LCD-ul.
const int rs = 12, en = 11, d4 = 5, d5 = 4, d6 = 3, d7 = 2;
LiquidCrystal lcd(rs, en, d4, d5, d6, d7);
long startTime = 0;
int state, prevState = 0;
int sensor = 0;
long counter = 0;
Se inițializează pinii LCD-ului, fiecare având drept corespondent un pin digital de pe plăcuță:
LCD RS pinul digital 7
LCD Enable pinul 6
LCD D4 pinul 5
LCD D5 pinul 4
LCD D6 pinul 3
LCD D7 pinul 2
Al șaptelea pin este pinul de la potentiometrul de reglare a luminozității LCD-ului. După ce au fost inițializați toți parametrii care vor fi utilizați ulterior, se scriu funcțiile de bază pentru Arduino: setup() și loop().
În cadrul funcției setup(), care este rulată doar o singură dată, se pornește inițializează pinul digital 8 ca fiind pin de INPUT, primind informații de la senzorul Hall.
void setup()
{
Serial.begin(9600);
pinMode(8, INPUT_PULLUP);
//este setat numărul de rânduri și de coloane ale LCD-ului
lcd.begin(16,2);
}
În cadrul funcției loop() , care este în continuu rulată, până la întreruperea alimentării plăcuței de dezvoltare Intel Galileo Gen 2, pe ecranul LCD-ului va fi afișat numărul de rotații per minut ale motorului, determinate cu ajutorul stării senzorului Hall.
void loop()
{
lcd.display();
//comanda” În așteptare…” este afișat pe ecran, înainte să înceapă măsurătorile
lcd.print("În așteptare…");
sensor = 0;
state = 0;
prevState = 0;
counter = 0;
//se inițializează starea curentă și starea anterioară senzorului Hall.
//funcția millis() returnează momentul curent de timp
startTime = millis();
delay(10);
//verificăm dacă a trecut 1 minut pentru a putea efectua măsurătorile
while((millis() – startTime) < 60000)
{
//este citită informația de pe pinul 8
sensor = digitalRead(8);
//în cadrul buclei logice if este verificată starea senzorului : dacă senzorul detectează o //regiune metalică, atunci se consideră ca fiind LOW(nivelul 0) de aici rezultând valoare //stării curente(1 pentru LOW și 0 pentru HIGH)
if (sensor==LOW){
state = 1;
}
else {
state = 0;
}
//se compară starea curentă cu starea anterioară și pe bază valorilor acestora se ia decizia de //a incrementa sau nu numărătorul, care semnifică de fapt RPM-ul
if(state != prevState)
{
//numărăm turațiile efectuate de motor
counter++;
//setăm cursorul la coloana 0, rândul 1
lcd.setCursor(0,1);
//afisăm textul „RPM=” pe rândul 1 al LCD-ului
lcd.print(“RPM=“);
//printăm numărul de turații ale motorului
lcd.print(counter/2);
//starea curentă devine starea anterioară
prevState = state;
}
}
digitalWrite(8,LOW);
//se resetează LCD-ul
Serial.write(12);
delay(1000);
//ștergem de pe LCD informațiile vechi
lcd.clear();
}
5. CONCLUZII
Acest proiect a fost primul proiect cu adevărat palpabil, care ne-a inițializat în lumea ingineriei. Proiectul în cauză a reprezentat o provocare, care cu timpul a scos la iveală, o pasiune spre nou. Chiar dacă la început nu dispuneam de cunoștințele necesare pentru a putea realiza proiectul, impedimentele întâlnite, atât hardware, cât și softare, ne-au provocat să cercetăm mai mult și să expermentăm.
Datorită acestui proiect, am învățat că rezolvarea problemelor este mult mai dificil de efectuat la nivel practic decât la nivel teoretic, iar problemele cu care te confrunți sunt mai numeroase decât te-ai putea aștepta.
Prima problemă cu care ne-am confruntat a fost realizarea sursei variabile de tensiune. La început, dispuneam de un transformator care funcționa până la limita de 202V, însă noi aveam nevoie de unul care să fie capabil să transforme 220V în 25V. Fiind un transformator deja utilizat și în alte aplicații nu mai aveam la dispoziție datasheet-ul, astfel informația respectivă a fost descoperită mai târziu. Apoi, la acel transformator, am unit un ștecher care avea 3 fire, 2 dintre ele fiind de aceeași culoare. Astfel, am crezut că este absolut normal să fie unite împreună. Însă, în acest fel, noi am unit firul de alimintare cu cel al fazei, provocând o eroare majoră de funcționare. Toate acestea, plus lipiturile care nu erau izolate bine, au dus la distrugerea circuitului ce constituia sursa variabilă de tensiune. O încercare de a rezolva problema, a fost înlocuirea transformatorului cu unul care atinge limita de 220V. Însă, cum circuitul sursei variabile era construit pe breadboard, nu putea suporta cantitatea de căldură disipată, chiar dacă în componența sa exista și un radiator. Am rezolvat problema prin construirea unei surse variabile de tensiune într-o gamă mai mică: 5 – 36V, fară transformator, dar cu ajutorul unui stabilizator LM317L și a unui tranzistor de putere TIP147.
A doua problemă întâmpinată a fost datorată senzorului cu efect Hall. Acesta nu capta informația de la motor referitoare la turațiile sale, deoarece a fost configurat, mai întâi ca pin analogic, ulterior fiind reconfigurat. Problema a fost rezolvată foarte rapid, efectuându-se schimbarea pinilor.
Evident ne-am confruntat și cu alte impedimente, doar că acestea erau minore, de tipul: lipsei unor anumitor componente de pe site-urile distribuitoare de componente, de exemplu, negăsind tranzistoare de putere CMOS, am fost nevoiți să schimbăm schema inițială, folosind ulterior un tranzistor de putere de tip bipolar TIP122; conectarea LCD-ului cu placuța Intel Galileo nu a fost efectuată cu succes prima dată, pentru că aveam un fir defect. Verificând conductivitatea firelor cu ajutorul milivoltmetrului, am depistat firul defect din fabrică și l-am înlocuit. O altă problemă minoră cu care ne-am confruntat a fost reprezentată de unirea plăcii Intel Galileo Gen 2 cu laptopul, prin intermediul unui cablu USB defect.
Datorită acestor probleme, am înțeles că în procesul practic mereu te poți confrunta cu situații imprevizibile. Cel mai important este să nu renunți și să încerci să faci mai multe schimbări, din aproape în aproape, chiar și minore: fire, componente, cod, pentru că anume acelele schimbări pot aduce o performanță ridicată proiectului. Extrem de important este ca înainte de toate să se consulte teoria din nou pentru a se efectua verificări. În plus, acest proiect ne oferă oprtunitatea de a lucra în echipă, de a învăța să accepăm ideile altora și de a ne „plia” după alte persoane cu care colaborăm pentru a rezolva cât mai eficient problemele întâlnite.
Privind per ansamblu, proiectul realizat, l-am putea considera un adevărat succes, nu doar pentru funcționalitatea sa, dar și pentru multitudinea de aplicațiile în care acesta ar fi util. Un exemplu foarte sugestiv, ar fi folosirea acestui proiect în cadrul testării motoarelor de avion, care cu siguranță trebuie să treacă prin multe teste riguroase pentru a oferi siguranță pasagerilor.
BLIOGRAFIE
https://www.arduino.cc
https://www.arduino.cc/en/Reference/LiquidCrystal
http://www.alldatasheet.com
https://wiki.eprolabs.com/index.php?title=EPro_Labs_Home
https://assefair.ro/home
https://www.robotshop.com/community
http://electronics-diy.com
ACRONIME
1) IC – Integrated Circuit (Circuit Integrat)
2) IDE – Integrated Development Environment (Mediu de Dezvoltare)
3) PCI – Peripheral Component Interconnect (Componente Periferice Interconectate)
4) PWM – Pulse With Modulation (Modularea Lățimii Pulsului)
5) RAM – Random Access Memory
6) ROM – Read-Only Memory
7) RPM – Rotations Per Minute (Rotații Per Minut)
8) RTC – Real Time Clock
9) SD – Secure Digital
10) SSD – Solid State Drive
11) USB – Universal Serial Bus
ANEXA 1
#include<LiquidCrystal.h>
const int rs = 12, en = 11, d4 = 5, d5 = 4, d6 = 3, d7 = 2;
LiquidCrystal lcd(rs, en, d4, d5, d6, d7);
long startTime = 0;
int state, prevState = 0;
int sensor = 0;
long counter = 0;
void setup()
{
Serial.begin(9600);
pinMode(8, INPUT_PULLUP);
lcd.begin(16,2);
}
void loop()
{
lcd.display();
lcd.print("În așteptare …");
sensor = 0;
state = 0;
prevState = 0;
counter = 0;
startTime = millis();
delay(10);
while((millis() – startTime) < 60000)
{
sensor = digitalRead(8);
if (sensor==LOW) state = 1;
else state = 0;
if(state != prevState)
{
counter++;
lcd.setCursor(0,1);
lcd.print("RPM=");
lcd.print(counter/2);
prevState = state;
}
}
digitalWrite(8,LOW);
Serial.write(12);
delay(1000);
lcd.clear();
}
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: Controlul turației unui motor DC [307592] (ID: 307592)
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.
