Cum Servo Motor Funcționează și Cum de A Controla Servo folosind Arduino

În acest tutorial vom învăța cum servo motoare de muncă și cum să-servo control folosind Arduino și PCA9685 PWM driver. Puteți viziona următorul videoclip sau puteți citi tutorialul scris mai jos.

Prezentare generală

există multe tipuri de servomotoare și principala lor caracteristică este capacitatea de a controla cu precizie poziția arborelui lor. Un servomotor este un sistem cu buclă închisă care utilizează feedback-ul poziției pentru a-și controla mișcarea și poziția finală.,

În tip industrial servo motoare poziția feedback-ul senzorului este de obicei o precizie ridicată encoder, în timp ce în cele mai mici RC sau hobby servo senzorul de poziție este, de obicei, un simplu potentiometru. Poziția reală capturată de aceste dispozitive este alimentată înapoi la detectorul de erori unde este comparată cu poziția țintă. Apoi, în funcție de eroare, controlerul corectează poziția reală a motorului pentru a se potrivi cu poziția țintă.,

în acest tutorial vom arunca o privire detaliată la hobby servo motors. Vom explica cum funcționează aceste servo-uri și cum să le controlăm folosind Arduino.

Hobby servo sunt mici în mărime de acționare utilizate pentru controlul jucarii RC masini, barci, avioane, etc. Ele sunt, de asemenea, folosite de studenții de inginerie pentru prototiparea în robotică, crearea de brațe robotizate, Roboți inspirați biologic, roboți umanoizi și așa mai departe.,

Cum RC / Hobby Servo Munca

în Interiorul unui hobby servo există patru componente principale, un motor, o cutie de viteze, un potențiometru și un circuit de control. Motorul DC are viteză mare și cuplu redus, dar cutia de viteze reduce viteza la aproximativ 60 RPM și, în același timp, crește cuplul.

potențiometrul este atașat la angrenajul final sau la arborele de ieșire, astfel încât motorul se rotește potențiometrul se rotește, producând astfel o tensiune care este legată de unghiul absolut al arborelui de ieșire., În circuitul de comandă, această tensiune potențiometru este comparată cu tensiunea provenită de la linia de semnal. Dacă este necesar, controlerul activează o punte h integrată care permite motorului să se rotească în ambele direcții până când cele două semnale ating o diferență de zero.un servomotor este controlat prin trimiterea unei serii de impulsuri prin linia de semnal. Frecvența semnalului de control ar trebui să fie 50Hz sau un impuls ar trebui să apară la fiecare 20ms., Lățimea impulsului determină poziția unghiulară a servo-ului și aceste tipuri de servo-uri se pot roti de obicei la 180 de grade (au limite fizice de deplasare).

în General impulsuri cu 1ms durata corespund la 0 grade poziția, 1.5 ms durata de 90 de grade și 2ms la 180 de grade. Deși durata minimă și maximă a impulsurilor poate varia uneori cu diferite mărci și pot fi 0.5 ms pentru 0 grade și 2.5 ms pentru poziția de 180 de grade.,

Arduino Servo Motor Control

să punem cele de mai sus pentru a testa și a face un exemplu practic de control al unui servo hobby folosind Arduino. Voi folosi mg996r, care este un servo cu cuplu mare, cu angrenaj metalic cu cuplu de stand de 10 kg-cm. Cuplul ridicat vine la un preț și acesta este curentul de oprire al servo-ului care este 2.5 A. curentul de funcționare este de la 500mA la 900mA, iar tensiunea de funcționare este de la 4.8 la 7.2 V.,

evaluările curente indică faptul că nu putem conecta direct acest servo la Arduino, dar trebuie să folosim o sursă de alimentare separată pentru acesta. Iată Schema circuitului pentru acest exemplu.

Ne-am pur și simplu nevoie pentru a conecta control pin-ul de la servo la orice pin digital de pe placa Arduino, conectați la Sol și pozitive fire extern de 5V de alimentare, și, de asemenea, conectarea la Arduino sol la servo sol.,puteți obține componentele necesare pentru acest exemplu de la link-urile de mai jos:

  • Mg996r Servo Motor …………………………. Amazon / Banggood / AliExpress
  • sau S90 Micro Servo ………..…………………… Amazon / Banggood / AliExpress
  • Arduino bord ……………………………………. Amazon / Banggood / AliExpress
  • 5V 2A sursa de alimentare DC …………………..….. Amazon / Banggood / AliExpress

dezvăluire: acestea sunt link-uri afiliate. Ca asociat Amazon câștig din achiziții calificate.,

a se Vedea, de Asemenea,

Arduino Motor fără Perii de Control Tutorial | ESC | BLDC

Arduino Servo Motor Control Cod

Acum, haideți să aruncăm o privire la codul Arduino pentru controlul servo motor. Codul este foarte simplu. Trebuie doar să definim știftul la care se conectează servo-ul, să definim acel pin ca ieșire, iar în secțiunea buclă să generăm impulsuri cu durata și frecvența specifică, așa cum am explicat mai devreme.,

după unele teste am venit cu următoarele valori pentru durata impulsurilor care funcționează cu servo-ul meu. Impulsurile cu durata de 0,6 ms corespundeau poziției de 0 grade, 1,45 ms până la 90 de grade și 2,3 ms până la 180 de grade.am conectat un multimetru în serie cu servo-ul pentru a verifica tragerea curentă. Tragerea maximă curentă pe care am observat-o a fost de până la 0.63 a la stand. Ei bine, asta pentru că nu este servo-ul original TowerPro Mg996r, ci o replică mai ieftină, care, evident, are performanțe mai slabe.,

cu toate acestea, să aruncăm o privire la un mod mai convenabil de a controla servo-urile folosind Arduino. Asta e folosind biblioteca Servo Arduino.aici trebuie doar să includem biblioteca, să definim obiectul servo și folosind funcția attach() să definim știftul la care este conectat servo-ul, precum și să definim valorile minime și maxime ale duratelor impulsurilor. Apoi, folosind funcția write (), setăm pur și simplu poziția servo-ului de la 0 la 180 de grade. Cu această bibliotecă putem conduce până la 12 servo-uri în același timp sau 48 servo-uri folosind Arduino Mega board.,

a se Vedea, de Asemenea,

DIY Arduino Robot Braț cu Smartphone-ul de Control

Arduino și PCA9685 PWM/ Servo Driver

Există, de asemenea, un alt mod de a controla servo cu Arduino, și asta folosind PCA9685 servo driver. Acesta este un driver PWM și servo pe 16 canale pe 12 biți care comunică cu Arduino folosind magistrala I2C. Are un ceas încorporat, astfel încât să poată conduce 16 servo-uri care rulează gratuit sau independent de Arduino.,

Ce este chiar mai rece putem daisy-lanț de până la 62 de aceste drivere pe un singur autobuz I2C. Deci, teoretic, putem controla până la 992 servo folosind doar cei doi pini I2C de pe placa Arduino. Cele 6 pinuri de selectare a adresei sunt utilizate pentru setarea diferitelor adrese I2C pentru fiecare driver suplimentar. Trebuie doar să conectăm plăcuțele de lipit conform acestui tabel.

Iată Schema circuitului și putem observa încă o dată că avem nevoie de o sursă de alimentare separată pentru servo-uri.,

puteți obține componentele necesare pentru acest exemplu din link-urile de mai jos:

  • MG996R Servo Motor …………………………. Amazon / Banggood / AliExpress
  • PCA9685 PWM Servo Driver ………………. Amazon / Banggood / AliExpress
  • Arduino bord ……………………………………. Amazon / Banggood / AliExpress
  • 5V 6a sursa de alimentare DC…………………..….. Amazon / Banggood / AliExpress

dezvăluire: acestea sunt link-uri afiliate. Ca asociat Amazon câștig din achiziții calificate.acum, să aruncăm o privire la codul Arduino., Pentru controlul acestui Driver servo vom folosi biblioteca PCA9685 care poate fi descărcată de pe GitHub.

cod Arduino PCA9685

deci, mai întâi trebuie să includem bibliotecile și să definim obiectul PCA9685. Apoi, folosind instanța Servo_Evaluator, Definiți durata impulsurilor sau ieșirea PWM a driverului. Rețineți că ieșirile sunt pe 12 biți, sau că este o rezoluție de 4096 pași. Deci, durata minimă a impulsului de 0,5 ms sau poziția de 0 grade ar corespunde la 102 pași, iar durata maximă a impulsului de 2,5 ms sau poziția de 180 de grade la 512 pași., Dar, așa cum am explicat mai devreme, aceste valori ar trebui ajustate în funcție de servomotorul dvs. În cazul meu, valorile de la 102 la 470 corespundeau poziției de la 0 la 180 de grade.

în secțiunea Configurare trebuie să definim rata de ceas I2C, să setăm adresa driverului și să setăm frecvența la 50Hz.

în secțiunea buclă, folosind funcțiile setChannelPWM() și pwmForAngle (), setăm pur și simplu servo-ul la unghiul dorit.,

am conectat un al doilea servo la șofer și, așa cum mă așteptam, nu a fost poziționat la fel ca primul, și asta pentru că servo-urile pe care le folosesc sunt copii ieftine și nu sunt atât de fiabile. Cu toate acestea, aceasta nu este o problemă mare, deoarece folosind instanța Servo_Evaluator putem seta diferite setări de ieșire pentru fiecare servo. De asemenea, putem ajusta poziția de 90 de grade în cazul în care nu este exact la mijloc. În acest fel, toate servo-urile vor funcționa la fel și se vor poziționa la unghiul exact.,

Controlează o mulțime de servo cu Arduino și PCA9685 drivere

Vom arunca o privire la un exemplu mai mult și care controlează o mulțime de servo cu mai multe lanțuri PCA9685 drivere.

În acest scop, trebuie să conectăm driverele între ele și să conectăm adresa corespunzătoare selectați plăcuțele de lipit. Iată Schema circuitului:

Să aruncăm o privire la codul Arduino acum.,deci, ar trebui să creăm obiect PCA9685 separat pentru fiecare driver, să definim adresele pentru fiecare driver, precum și să setăm frecvența la 50Hz. Acum, folosind pur și simplu funcțiile setChannelPWM() și pwmForAngle (), putem seta orice servo la orice șofer pentru a poziționa orice unghi dorim.

Lasă un răspuns

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *