Με την βιβλιοθήκη AccelStepper μπορούμε να ελέγξουμε πάνω από ένα μοτέρ ταυτόχρονα από το arduino, κάτι που δεν υποστηρίζει η βασική βιβλιοθήκη. Επίσης σπουδαίο χαρακτηριστικό είναι ο έλεγχος επιτάχυνσης και επιβράδυνσης.
Ένα δοκιμαστικό πρόγραμμα σε λειτουργία φαίνεται στο παρακάτω video.
Ο controller - οδηγός και το βηματικό μοτέρ είναι από χαλασμένο εκτυπωτή.
Ο οδηγός δέχεται στις εισόδους Ι01,Ι11 για την πρώτη (Η) γέφυρα και τις εισόδους Ι02,Ι2 για την δεύτερη (Η) γέφυρα για τον έλεγχο της έντασης του ρεύματος σύμφωνα με τον παρακάτω πίνακα.
Έλεγχος αμπέρ μέσω εισόδων του οδηγού. |
Αν δώσουμε 6 ή 9 νούμερα, χωριζόμενα με κόμμα ή άλλο μη αριθμητικό χαρακτήρα και μετά ENTER το μοτέρ θα πραγματοποιήσει στην σειρά δυο ή τρεις διαφορετικές κινήσεις ειδοποιώντας μας στην οθόνη ποιες είναι αυτές.
Δεν επιτρέπεται αρνητικό νούμερο (ή μηδέν) στην ταχύτητα και την επιτάχυνση γι αυτό και μέσω του προγράμματος αποφεύγεται αυτό το ενδεχόμενο.
Ακολουθεί το πρόγραμμα ελέγχου που μπορεί ο καθένας με αντιγραφή - επικόλληση (copy - paste) να το περάσει στο περιβάλλον ανάπτυξης κώδικα του Arduino.
// Έλεγχος bipolar stepper μοτέρ με τον οδηγό ΑΜ2170 της ΑΜtek από
// το serial interface δίνοντας 3 νούμερα:
// αριθμός βημάτων, μέγιστη ταχύτητα, επιτάχυνση(+επιβράδυνση).
// http://greekelectrician.blogspot.gr/
#include <AccelStepper.h>
// Ορισμός pin του ΑΜ2170 που συνδέονται στο arduino uno
#define I01 5
#define I11 6
#define phase1 7
#define I02 8
#define I12 9
#define phase2 10
// Ορισμός του μοτέρ και των pin που συνδέεται.
AccelStepper stepper (2,phase1,phase2); // FULL2WIRE = 2 (2 pins) στα 7 και 10
int vimata; // Από -32768 έως 32767
float taxitita; //βήματα το sec
float epitaxinsi; // βήματα το sec^2
void setup()
{
Serial.begin(9600);
// Ορισμοί εξόδων
pinMode(I01, OUTPUT);
pinMode(I11, OUTPUT);
pinMode(I02, OUTPUT);
pinMode(I12, OUTPUT);
// Αρχικοποίηση
digitalWrite(I01, LOW);
digitalWrite(I11, HIGH);
digitalWrite(I02, LOW);
digitalWrite(I12, HIGH);
Serial.println("\nDose (+-)vimata,taxitita,epitaxinsi(ENTER)\n");
}
void loop()
{
// Αν υπάρχουν διαθέσιμα νούμερα διαβασέτα:
while (Serial.available() > 0)
{
// έλεγχος για τα επόμενα 3 έγκυρα νούμερα από την σειριακή είσοδο:
vimata = Serial.parseInt();
taxitita = Serial.parseFloat();
epitaxinsi = Serial.parseFloat();
taxitita = abs(taxitita); // όχι αρνητική
epitaxinsi = abs(epitaxinsi); //όχι αρνητική
if (taxitita == 0) taxitita = 0.1; //όχι μηδέν
if (epitaxinsi == 0) epitaxinsi = 0.01; // όχι μηδέν
// εμφάνιση στην οθόνη του Η/Υ
Serial.print("vimata\t\t=\t");
Serial.println(vimata,DEC);
Serial.print("taxitita\t=\t");
Serial.println(taxitita,2);
Serial.print("epitaxinsi\t=\t");
Serial.println(epitaxinsi,2);
stepper.setMaxSpeed(taxitita);
stepper.setAcceleration(epitaxinsi);
stepper.move(vimata);
while(stepper.distanceToGo() != 0)
stepper.run();
Serial.println("\n\nTelos kinisis\nDose (+-)vimata,taxitita,epitaxinsi(ENTER)\n");
}
}
Δεν υπάρχουν σχόλια:
Δημοσίευση σχολίου
Διαβάζω όλα τα σχόλια