Servomotor control folosind microcontrolerele avr atmega32

Motoarele servo sunt un tip de servomotoare electromecanice care nu se rotesc în mod continuu, cum ar fi motoarele DC / AC sau stepper, dar se deplasează într-o anumită poziție și o salvează.





Ele sunt utilizate ori de câte ori nu este necesară rotația continuă. Servo-drive-urile sunt folosite acolo. unde este necesar să se deplaseze într-o anumită poziție și apoi să se oprească și să se mențină poziția. Cele mai frecvente servomotoare sunt folosite pentru a controla poziția cârmei aeronavelor și bărcilor etc. Servomotoarele sunt utilizate în mod eficient în aceste zone, deoarece volanul nu trebuie să fie deplasat la 360 de grade și nu necesită rotire continuă ca o roată. În sistemele de acționare, se folosește și mecanismul de feedback, astfel încât să poată gestiona erorile și să le corecteze atunci când le poziționează. Un astfel de sistem se numește urmărire. Astfel, dacă fluxul de aer pune presiune asupra volanului și îl deflectă, torusul va aplica forța în direcția opusă și va încerca să corecteze eroarea. De exemplu, dacă spui servo-ului să meargă și să se blocheze la 30 de grade și apoi să încerce să-l întoarcă cu mâna, servo-ul va încerca. pentru a depăși forța și pentru a păstra unghiul dat.







Servomotoarele sunt de asemenea folosite pentru a controla cârma mașinilor RC, robotică etc. Există multe tipuri de servomotoare, dar aici ne concentrăm pe servometele mici ale așa-numitei hobby-uri. H obb y Motorul și mecanismul său de comandă sunt construite într-o singură unitate. Conexiunea se realizează prin intermediul a trei fire de conectare. Vom folosi servodirectia FutabaS3003.

1.RED -> Controlul poziției, sursa de alimentare + 4,8V la 6V

3.WHITE -> Semnal de control.

Controlul servo-ului.

Gestionarea servo este ușor cu ajutorul unui microcontroler, nu sunt necesare drivere externe. Pur și simplu dând semnalul de direcție, servomotorul se va poziționa la un unghi dat. Frecvența semnalului de comandă este, de obicei, 50 Hz (adică, perioada este de 20 ms), iar lungimea pulsului specifică unghiul.

Pentru FutabaS3003 am învățat următoarea sincronizare. Relația dintre lățimea impulsului și unghiul de rotație a servomotorului este dată mai jos. Rețineți că acest servo este capabil să se rotească între 0 și 180 de grade.

  • 0,388ms = 0 grade.
  • 1,264ms = 90 grade.
  • (Poziție neutră) 2.14ms = 180 grade.

Servomotor de control.

Puteți utiliza microcontrolerul AVR cu funcția PWM pentru a controla servomotoarele. În acest fel, PWM va genera automat semnale de blocare servo și CPU-ul controlerului va fi eliberat pentru alte sarcini. Pentru a înțelege cum puteți configura și utiliza PWM, trebuie să aveți cunoștințe de bază despre cronometrele hardware și modulele PWM în AVR.

Aici vom folosi modulul Timer AVR, care este un timer de 16 biți și are două canale PWM (A și B).

frecvența procesorului este de 16 MHz, frecvența - frecvența maximă la care cea mai mare parte AVR poate rabotat.Tak va folosi aceeași divizor de frecvență 64. Deoarece cronometrul va primi 16MHz / 64 = 250kHz (4 microsecunde) .Taymer modul 14 instalat.

Funcțiile temporizatorului în moduri 14

  • Mod PWM rapid
  • T T OP Valoare = ICR1

Deci, cronometrul va conta de la 0 la ICR1. Forma frecvenței și calculelor PWM pentru valoarea TOP este dată mai jos.

Astfel boala, am stabilit ICR1A = 4999, ne oferă o perioadă PWM de 20 ms (50 Hz) .Verificati în modul de siguranță vyvodaustanavlenny COM1A1 setările corecte, COM1A0 (pentru canale PWM) și COM1B1, COM1B0 (pentru canalul PWM Cazare)

COM1A1 = 1 și COM1A0 = 0 (Sursa PWM)

COM1B1 = 1 și COM1B0 = 0 (canalul PWM B)

Acum, ciclul de sarcină poate fi setat prin setarea registrelor OCR1A și OOCR1B. Acești doi registri PWM controlează perioada De când perioada de timp este de 4μs (rețineți 16 MHz împărțit la 64), putem calcula valorile necesare pentru rotirea servomotorului la un anumit unghi.

§ Unghi servo 0 grade necesită o lățime a impulsului de 0.388ms (388uS), deci valoarea lui OCR1A = 388us / 4us = 97

· Unghi servo de 90 de grade necesită o lățime a impulsului de 1.264ms (1264uS), astfel încât valoarea OCTR1A = 1264us / 4us = 316

§ Unghi servo la 180 de grade necesită o lățime a pulsului de 2.140ms (2140uS), deci valoarea OCTR1A = 2140us / 4us = 535

Deci, putem calcula valoarea OCR1A (sau OCR1B pentru al doilea servo) pentru orice unghi. Rețineți că valoarea OCR1x variază de la 97 la 535 pentru unghiuri de la 0 la 180 de grade.

Programul de management al motorului.

Demonstratsionnayaprogramma mai jos, arată cum să utilizați servomotoarele smikrokontrollerom AVR. Programul de lucru este foarte simplu, acesta pornește cronometrul și începutul PWM.V sinitsializatsii fixați dispozitivul de acționare la 0 grade, Azat se mută la 90 de grade și podozhdatv în timp ce se deplasează de grade na135, și în cele din urmă la 180 de grade. Acest proces se repetă atâta timp cât unitatea este conectată la sursa de alimentare.

Parametrii pentru funcționarea corectă a programului.

  • LOW Fuse = 0xFF și HIGH Fuse = 0xC9
  • Frecvența este de 16 MHz.
  • Servo-corelat cu Futaba S3003.
  • MCU este un microcontroler Atmega32 sau un singur microcip ATmega16.






Trimiteți-le prietenilor: