- Ce este un servomotor?
- Interfațarea servomotorelor cu microcontrolere:
- Programarea servomotorului cu microcontroler PICF877A PIC:
- Diagrama circuitului:
- Simulare și configurare hardware:
Acesta este al 11-lea tutorial despre învățarea microcontrolerelor PIC folosind MPLAB și XC8. În acest tutorial vom învăța cum să controlăm servomotorul cu microcontroler PIC. Dacă ați lucrat deja cu servomotoare, puteți sări peste prima jumătate a acestui tutorial, dar dacă sunteți nou la servomotor, continuați să citiți.
Până acum, am acoperit multe tutoriale de bază, cum ar fi LED-urile care clipesc cu PIC, cronometrele în PIC, interfața LCD, interfața pe 7 segmente, ADC folosind PIC etc. Dacă sunteți un începător absolut, vă rugăm să vizitați lista completă a tutorialelor PIC aici și începe să înveți.
În tutorialul nostru anterior am învățat cum să generăm semnale PWM folosind microcontrolerul PIC, semnalele au fost generate pe baza valorii citite din potențiometru. Dacă ați înțeles toate programele, Felicitări, ați codificat deja și un servomotor. DA, motoarele servo răspund la semnalele PWM (pe care le creăm folosind temporizatoare aici) vom afla de ce și cum în acest tutorial. Vom simula și construi configurarea hardware pentru acest proiect și puteți găsi videoclipul detaliat la sfârșitul acestui tutorial.
Ce este un servomotor?
Un servomotor este un tip de actuator (în cea mai mare parte circular) care permite controlul unghiular. Există multe tipuri de servomotoare disponibile, dar în acest tutorial permiteți-ne să ne concentrăm asupra servomotorelor hobby prezentate mai jos.
Servo-urile hobby sunt populare deoarece sunt metoda ieftină de control al mișcării. Acestea oferă o soluție de raft pentru majoritatea necesităților R / C și ale hobby-ului robotizat. De asemenea, elimină necesitatea proiectării personalizate a unui sistem de control pentru fiecare aplicație.
Majoritatea servomotorelor hobby au un înger de rotație de 0-180 °, dar puteți obține și servomotor 360 ° dacă sunteți interesat. Acest tutorial utilizează un servomotor de 0- 180 °. Există două tipuri de servomotoare bazate pe angrenaj, unul este motorul cu angrenaje din plastic și celălalt este motorul cu angrenaje din metal. Angrenajele metalice sunt utilizate în locurile în care motorul este supus unei uzuri mai mari, dar vine doar la un preț ridicat.
Servomotorele sunt evaluate în kg / cm (kilogram per centimetru) majoritatea servomotorelor hobby sunt evaluate la 3 kg / cm sau 6 kg / cm sau 12 kg / cm. Acest kg / cm vă spune cât de multă greutate poate ridica servomotorul dvs. la o anumită distanță. De exemplu: Un servomotor de 6 kg / cm ar trebui să poată ridica 6 kg dacă sarcina este suspendată la 1 cm distanță de arborele motoarelor, cu cât distanța este mai mare, cu atât este mai mică capacitatea de încărcare. Aflați aici elementele de bază ale motorului servo.
Interfațarea servomotorelor cu microcontrolere:
Interfațarea servomotorelor hobby cu MCU este foarte ușoară. Servo-urile au trei fire care ies din ele. Din care două vor fi utilizate pentru alimentare (pozitiv și negativ) și una va fi utilizată pentru semnalul care urmează să fie trimis de la MCU. În acest tutorial vom folosi un servomotor MG995 Metal Gear, care este cel mai frecvent utilizat pentru mașinile RC roboți umanoizi etc. Imaginea MG995 este prezentată mai jos:
Codarea culorilor servomotorului dvs. poate diferi, prin urmare verificați fișa tehnică respectivă.
Toate servo-motoarele funcționează direct cu șinele de alimentare de + 5V, dar trebuie să fim atenți la cantitatea de curent pe care ar consuma-o motorul, dacă intenționați să utilizați mai mult de două servo-motoare, ar trebui proiectat un scut servo adecvat. În acest tutorial vom folosi pur și simplu un servomotor pentru a arăta cum să programăm PIC MCU pentru a controla motorul. Verificați linkurile de mai jos pentru interfața Servo Motor cu alt microcontroler:
- Interfață servomotor cu microcontroler 8051
- Control servomotor folosind Arduino
- Tutorial Raspberry Pi Servo Motor
- Servomotor cu microcontroler AVR
Programarea servomotorului cu microcontroler PICF877A PIC:
Înainte de a putea începe programarea pentru servomotor, ar trebui să știm ce tip de semnal trebuie trimis pentru controlul servomotorului. Ar trebui să programăm MCU pentru a trimite semnale PWM către firul de semnal al motorului Servo. Există un circuit de comandă în interiorul servomotorului care citește ciclul de funcționare al semnalului PWM și poziționează arborele servomotorelor în locul respectiv așa cum se arată în imaginea de mai jos
Fiecare servomotor funcționează pe frecvențe PWM diferite (frecvența cea mai frecventă este de 50 HZ, care este utilizată în acest tutorial), astfel încât să obțineți foaia tehnică a motorului dvs. pentru a verifica perioada pe care PWM funcționează servomotorul dvs.
Detaliile despre semnalul PWM pentru Tower pro MG995 sunt prezentate mai jos.
Din aceasta putem concluziona că motorul nostru funcționează cu o perioadă PWM de 20ms (50Hz). Deci, frecvența semnalului nostru PWM ar trebui să fie setată la 50Hz. Frecvența PWM pe care o setasem în tutorialul nostru anterior a fost de 5 KHz, folosind același lucru nu ne va ajuta aici.
Dar avem o problemă aici. PIC16F877A nu poate genera semnale de joasă frecvență PWM utilizând modulul PCC. Conform fișei tehnice, cea mai mică valoare posibilă care poate fi setată pentru frecvența PWM este de 1,2 KHz. Deci, trebuie să renunțăm la ideea de a folosi modulul CCP și să găsim o modalitate de a crea propriile noastre semnale PWM.
Prin urmare, în acest tutorial vom folosi modulul timer pentru a genera semnalele PWM cu frecvența de 50Hz și le vom varia ciclul de funcționare pentru a controla îngerul servo-motorului. Dacă sunteți începător al temporizatorilor sau al ADC cu PIC, vă rugăm să reveniți la acest tutorial, deoarece voi ignora majoritatea lucrurilor, deoarece le-am acoperit deja acolo.
Ne inițializăm modulul Timer cu un prescaler de 32 și îl facem să se revărseze pentru fiecare 1us. Conform fișei noastre de date, PWM ar trebui să aibă o perioadă de numai 20 ms. Deci, timpul nostru și timpul liber împreună trebuie să fie exact egal cu 20 ms.
OPTION_REG = 0b00000100; // Timer0 cu frecvență externă și 32 ca prescaler TMR0 = 251; // Încărcați valoarea timpului pentru 1us delayValue poate fi între 0-256 doar TMR0IE = 1; // Activați bitul de întrerupere a temporizatorului în registrul PIE1 GIE = 1; // Activați Global Interrupt PEIE = 1; // Activați întreruperea periferică
Deci, în interiorul funcției noastre de rutină de întrerupere, pornim pinul RB0 pentru timpul specificat și îl oprim pentru timpul de alezare (20ms - on_time). Valoarea timpului de pornire poate fi specificată utilizând modulul Potentiometer și ADC. Întreruperea este afișată mai jos.
oid interrupt timer_isr () {if (TMR0IF == 1) // Timer a survolat {TMR0 = 252; / * Încărcați valoarea temporizatorului, (Notă: Timervalue are 101 instaed of 100 deoarece TImer0 are nevoie de două cicluri de instrucțiuni pentru a începe incrementarea TMR0 * / TMR0IF = 0; // Ștergeți temporizatorul de întrerupere a contorului ++;} if (count> = on_time) { RB0 = 1; // completează valoarea pentru clipirea LED-urilor} if (count> = (on_time + (200-on_time))) {RB0 = 0; count = 0;}}
În bucla noastră de timp , citim doar valoarea potențiometrului folosind modulul ADC și actualizăm timpul de pornire al PWM folosind valoarea citită.
while (1) {pot_value = (ADC_Read (4)) * 0,039; on_time = (170-pot_value); }
În acest fel, am creat un semnal PWM care are o perioadă de 20 ms și are un ciclu de funcționare variabil care poate fi setat folosind un potențiometru. Codul complet a fost dat mai jos în secțiunea codului.
Acum, să verificăm ieșirea folosind simularea proteus și să trecem la hardware-ul nostru.
Diagrama circuitului:
Dacă ați întâlnit deja tutorialul PWM, schemele acestui tutorial vor fi aceleași, cu excepția căreia vom adăuga un servomotor în locul luminii LED.
Simulare și configurare hardware:
Cu ajutorul simulării Proteus putem verifica semnalul PWM folosind un osciloscop și, de asemenea, putem verifica îngerul rotativ al motorului Servo. Câteva instantanee ale simulării sunt prezentate mai jos, unde îngerul rotativ al servomotorului și ciclul de funcționare PWM pot fi observate pentru a fi schimbat pe baza potențiometrului. Verificați în continuare videoclipul complet, de rotație la diferite PWM, la sfârșit.
După cum putem vedea, îngerul de rotație servo se schimbă pe baza valorii potențiometrului. Acum, să trecem la configurarea hardware-ului nostru.
În configurarea hardware tocmai am îndepărtat placa LED și am adăugat motorul Servo așa cum se arată în schemele de mai sus.
Hardware-ul este prezentat în imaginea de mai jos:
Video de mai jos arată modul în care motorul servo reacționează la diferitele poziții ale potențiometrului.
Aia este!! Am interfațat un servomotor cu un microcontroler PIC, acum vă puteți folosi propria creativitate și puteți afla aplicații pentru acest lucru. Există o mulțime de proiecte care folosesc un servomotor.