- Απαιτούμενα στοιχεία
- Καρφίτσα Περιγραφή του Servo Motor
- Διάγραμμα κυκλώματος
- Έλεγχος Servo Motor με AVR ATmega16
- Προγραμματισμός Atmega16 Χρήση USBasp
Τα Servo Motors χρησιμοποιούνται ευρέως όπου απαιτείται ακριβής έλεγχος, όπως ρομπότ, αυτοματοποιημένα μηχανήματα, ρομποτικός βραχίονας κ.λπ. Ωστόσο, το πεδίο εφαρμογής του σερβο κινητήρα δεν περιορίζεται σε αυτό και μπορεί να χρησιμοποιηθεί σε πολλές εφαρμογές. Για να μάθετε περισσότερα για τα βασικά, τη θεωρία και την αρχή λειτουργίας του σερβοκινητήρα ακολουθήστε τον σύνδεσμο.
Στο παρελθόν διασυνδέσαμε το Servo Motor με πολλούς μικροελεγκτές:
- Interfacing Servo Motor με ARM7-LPC2148
- Διασύνδεση Servo Motor με MSP430G2
- Διασύνδεση σερβοκινητήρα με STM32F103C8
- Interfacing Servo Motor με PIC Microcontroller χρησιμοποιώντας MPLAB και XC8
- Interfacing Servo Motor με το Arduino Uno
- Servo Motor Interfacing με 8051 μικροελεγκτή
Σε αυτό το σεμινάριο, θα συνδέσουμε το Micro Servo Motor με τον μικροελεγκτή Atmega16 AVR χρησιμοποιώντας το Atmel Studio 7.0. Ο σερβοκινητήρας έχει ονομαστική λειτουργία σε 4,8-6V. Μπορούμε να ελέγξουμε τη γωνία περιστροφής και κατεύθυνσής του εφαρμόζοντας παλμικά σήματα ή σήματα PWM. Σημειώστε ότι οι σερβοκινητήρες δεν μπορούν να κινηθούν για πλήρη περιστροφή 360 μοιρών, επομένως χρησιμοποιούνται όταν δεν απαιτείται συνεχής περιστροφή. Η γωνία περιστροφής είναι 0-180 μοίρες ή (-90) - (+90) μοίρες.
Απαιτούμενα στοιχεία
- SG90 Tower Pro Micro Servo Motor
- Atmega16 Μικροελεγκτής IC
- 16Mhz Crystal Oscillator
- Δύο πυκνωτές 100nF
- Δύο πυκνωτές 22pF
- Πλήκτρο
- Καλώδια αλτών
- Ψωμί
- USBASP v2.0
- Led (Οποιοδήποτε χρώμα)
Καρφίτσα Περιγραφή του Servo Motor
- Κόκκινο = Θετική παροχή ρεύματος (4,8V έως 6V)
- Καφέ = Έδαφος
- Πορτοκαλί = Σήμα ελέγχου (Pin PWM)
Διάγραμμα κυκλώματος
Συνδέστε όλα τα εξαρτήματα όπως φαίνεται στο παρακάτω διάγραμμα για να περιστρέψετε τον κινητήρα Servo χρησιμοποιώντας AVR Microcontroller. Υπάρχουν τέσσερις ακίδες PWM, μπορούμε να χρησιμοποιήσουμε οποιονδήποτε ακροδέκτη PWM του Atmega16. Σε αυτό το σεμινάριο χρησιμοποιούμε Pin PD5 (OC1A) για τη δημιουργία PWM. Το PD5 συνδέεται απευθείας με πορτοκαλί καλώδιο σερβο κινητήρα που είναι ακροδέκτης σήματος εισόδου. Συνδέστε οποιοδήποτε χρώμα LED για ένδειξη ισχύος. Επίσης, συνδέστε ένα κουμπί στο Pin Επαναφοράς για επαναφορά του Atmega16 όποτε απαιτείται. Συνδέστε το Atmega16 με κατάλληλο κύκλωμα ταλαντωτή κρυστάλλου. Όλο το σύστημα θα τροφοδοτείται από τροφοδοσία 5V.
Η πλήρης ρύθμιση θα μοιάζει παρακάτω:
Έλεγχος Servo Motor με AVR ATmega16
Όπως το Stepper Motor, το Servo motor δεν χρειάζεται εξωτερικό πρόγραμμα οδήγησης, π.χ. ULN2003 ή L293D. Μόνο το PWM είναι αρκετό για να οδηγήσει το σερβο κινητήρα και είναι πολύ εύκολο να δημιουργηθεί PWM από έναν μικροελεγκτή. Η ροπή αυτού του σερβοκινητήρα είναι 2,5kg / cm, οπότε αν χρειάζεστε μεγαλύτερη ροπή, τότε αυτό το σερβο δεν είναι κατάλληλο.
Όπως γνωρίζουμε ότι ο σερβο κινητήρας αναζητά έναν παλμό κάθε 20ms και το μήκος του θετικού παλμού θα καθορίσει τη γωνία περιστροφής του σερβο κινητήρα.
Η συχνότητα που απαιτείται για τη λήψη του παλμού 20ms είναι 50Hz (f = 1 / T). Έτσι, για αυτόν τον σερβοκινητήρα, η προδιαγραφή λέει ότι για 0 βαθμό χρειαζόμαστε 0,388 ms, για 90 μοίρες χρειαζόμαστε 1,264 ms και για 180 μοίρες χρειαζόμαστε παλμούς 2,14 ms.
Για να δημιουργήσουμε καθορισμένους παλμούς θα χρησιμοποιήσουμε το Timer1 του Atmega16 Η συχνότητα της CPU είναι 16Mz, αλλά θα χρησιμοποιούμε μόνο 1Mhz, καθώς δεν έχουμε πολλά περιφερειακά συνδεδεμένα με μικροελεγκτή και δεν υπάρχει πολύ φορτίο στον μικροελεγκτή, οπότε το 1Mhz θα κάνει τη δουλειά. Το Prescaler έχει οριστεί σε 1. Έτσι το ρολόι διαιρείται σε 1Mhz / 1 = 1Mhz (1uS) που είναι υπέροχο. Ο Χρονοδιακόπτης1 θα χρησιμοποιηθεί ως Γρήγορη Λειτουργία PWM, δηλαδή Λειτουργία 14. Μπορείτε να χρησιμοποιήσετε διαφορετικούς τρόπους χρονομέτρων για να δημιουργήσετε την επιθυμητή παλμική αμαξοστοιχία. Η αναφορά δίνεται παρακάτω και μπορείτε να βρείτε περισσότερη περιγραφή στο επίσημο δελτίο δεδομένων Atmega16.
Για να χρησιμοποιήσουμε το Timer1 ως γρήγορη λειτουργία PWM, θα χρειαστούμε την τιμή TOP του ICR1 (Input Capture Register1). Για να βρείτε τον τύπο χρήσης αξίας TOP που δίνεται παρακάτω:
f pwm = f cpu / nx (1 + Κορυφή)
Αυτό μπορεί να απλοποιηθεί σε, Κορυφή = ( f cpu / ( f pwm xn)) - 1
Όπου, N = Τιμή του συνόλου Prescaler
f cpu = Συχνότητα CPU
f pwm = Πλάτος παλμού σερβο κινητήρα που είναι 50Hz
Τώρα υπολογίστε την τιμή ICR1 καθώς έχουμε όλη την απαιτούμενη τιμή, N = 1, f cpu = 1MHz, f pwm = 50Hz
Απλά βάλτε τις τιμές στον παραπάνω τύπο και θα λάβουμε
ICR1 = 1999
Αυτό σημαίνει την επίτευξη μέγιστου βαθμού, δηλαδή 180 0, το ICR1 θα πρέπει να είναι το 1999.
Για 16MHz κρύσταλλο και Prescaler σε 16, θα έχουμε
ICR1 = 4999
Τώρα ας προχωρήσουμε για να συζητήσουμε το σκίτσο.
Προγραμματισμός Atmega16 Χρήση USBasp
Ο πλήρης κωδικός AVR για τον έλεγχο του Servo Motor δίνεται παρακάτω. Ο κώδικας είναι απλός και μπορεί να γίνει κατανοητός εύκολα.
Εδώ έχουμε κωδικοποιήσει το Atmega16 για να περιστρέψουμε τον σερβοκινητήρα από 0 0 έως 180 0 και επιστρέφοντας ξανά από 180 0 έως 0 0. Αυτή η μετάβαση θα ολοκληρωθεί σε 9 βήματα, δηλαδή 0 - 45 - 90 - 135 - 180 - 135 - 90 - 45 - 0. Για καθυστέρηση, θα χρησιμοποιήσουμε την εσωτερική βιβλιοθήκη του Atmel Studio, δηλαδή
Συνδέστε το USBASP v2.0 και ακολουθήστε τις οδηγίες σε αυτόν τον σύνδεσμο για να προγραμματίσετε τον Atmega16 AVR Microcontroller χρησιμοποιώντας USBASP και Atmel Studio 7.0. Απλώς δημιουργήστε το σκίτσο και ανεβάστε χρησιμοποιώντας εξωτερική εργαλειοθήκη.
Ο πλήρης κώδικας με το βίντεο επίδειξης δίνεται παρακάτω. Επίσης, μάθετε περισσότερα για τους σερβοκινητήρες γνωρίζοντας τη σημασία τους στη ρομποτική.