Ca pas intermediar pentru a crea un elicopter, un avion sau orice altceva, trebuie să folosim cu siguranță un servo.
Pe wiki este destul de detaliat ceea ce este, în ciuda dimensiunilor mici (am dat peste un pic mai puțin de 1 cm - în interiorul ei sunt destul de complexe: există un motor electric, cutie de viteze, feedback-ul și placa de sistem de control cu un singur cuvânt - o minune a ingineriei din China ..
Ei au nevoie, în primul rând, de a schimba unghiul (de aceea se numesc uneori mașini de direcție).
De exemplu, în mașină, acestea sunt folosite pentru a controla tijele de direcție, precum și pentru modelul de aeronave (numai pentru modelul de aeronave în loc să le direcție cât mai multe de trei, pentru care aveți nevoie pentru a controla la fel de mult ca 4 servomecanisme).
În modelele de elicoptere, sunt necesare cel puțin 2 servomecanisme pentru placa turnantă.
Ei bine, pentru a controla articulațiile roboților.
Ele sunt controlate de un protocol numit Pulse Wide Modulation sau PWM.
Semnificația acestui protocol cel mai simplu este că pe firul de control este necesar să se precizeze o secvență de niveluri ridicate și scăzute, iar durata relativă a acestora reprezintă unghiul dorit de rotație al servomotorului.
Există câteva caracteristici de bază ale semnalului PWM:
1) Frecventa (Hz) sau Perioada (secunde), acestea sunt legate astfel: Frecventa = 1 / Perioada - aceasta este cea mai des scrisa pe servo. Există mașini cu frecvență joasă, cu o frecvență de 60 Hz și mașini de înaltă frecvență cu o frecvență de 400-600 Hz. - Acest parametru arată cât de des putem actualiza valoarea. Dacă, de exemplu, un servo este scris la 60Hz și încercăm să lucrăm cu el la 400Hz, atunci pur și simplu nu înțelege semnalul și fie nu va funcționa deloc, fie va funcționa imprevizibil.
2) Ciclul de serviciu. Pentru ao explica, voi introduce o valoare intermediară: Ton - timpul în care linia este ridicată. Toff - timpul în care linia este scăzută. În consecință, perioada = Ton + Toff.
Expresia este aceeași pentru ciclul de funcționare = 100% * ton / perioadă.
De fapt, la o anumită frecvență, schimbând ciclul de sarcină, schimbăm poziția servo.
Cel mai simplu cod pe Wire.
Rezultatul codului.
Funcția principală de care suntem interesați este setPWM - produce o iterație per pin.
Principalul dezavantaj al acestei implementări este faptul că funcționează complet sincron: nu va renunța la control până când nu își va încheia activitatea. De asemenea, este imposibil să faceți un interval mare între apeluri, deoarece vom schimba ciclul de sarcină.
Vă puteți sugera să conduceți timpul și de fiecare dată pentru a verifica dacă a trecut sau nu - și pentru a comuta nivelul ridicat la scăzut. - De fapt, acesta este exact modul în care sunt realizate implementările normale ale software-ului PWM (dar trebuie, de asemenea, să memorați funcția de actualizare cu frecvența corespunzătoare).
Cu toate acestea, suntem foarte norocoși că majoritatea microcontrolerelor suportă implementarea hardware a PWM (bine, dacă nu, atunci cronometrele sunt sigur că le suportă).
Un exemplu excelent de lucru cu PWM pentru AVR poate fi găsit pe site-ul MultiWii.
Pentru cei care cunosc limba engleză - un post excelent despre PWM în Arduino.
Pentru fanii aceluiași Arduino este și mai ușor. Pentru noi, biblioteca Servo a fost făcută de mult timp.
Cu ajutorul acestei biblioteci este posibil să controlați servomotorul fără să vă gândiți deloc la mecanismele care stau la baza acestuia.
Acest cod citește valoarea potențiometrului și controlează servomotorul în conformitate cu această valoare.
În partea următoare, luați în considerare controlul unui motor fără perii.