Μηχατρονικά Συστήματα Ι Τμήμα Μηχανολόγων Μηχανικών Τ.Ε. Τ.Ε.Ι. Κρήτης Παραδείγµατα χρήσης του µικροελεγκτή Arduino Εφαρµογές για το εργαστήριο Μέρος 2 ο :Οδήγηση Κινητήρων DC(PM) Δρ. Φασουλάς Γιάννης, Επίκ. Καθηγητής Δεκέμβριος 2015 12
Παράδειγμα 11: Οδήγηση Ρελέ Πραγματοποιήστε το παρακάτω κύκλωμα προκειμένου να γίνει έλεγχος ενεργοποίησης του ρελέ μέσα από απο τον μικροελεγκτή Arduino. int ledpin = 2; void setup() { pinmode(ledpin, OUTPUT); void loop() { digitalwrite(ledpin, HIGH); digitalwrite(ledpin, LOW); 13
Παράδειγμα 12: Έλεγχος κινητήρα DC μόνιμου μαγνήτη, http://ardx.org/src/circ/circ03-code.txt Πραγματοποιήστε το παρακάτω κύκλωμα προκειμένου να γίνει οδήγηση του DC κινητήρα, που σας δίνεται, με την βοήθεια ενός τρανζίστορ npn μέσα από τον μικροελεγκτή Arduino. Παρατηρήστε ότι στο πρόγραμμα γίνεται χρήση συναρτήσεων οι οποίες αναφέρονται μετά από την βασική συνάρτηση void loop(). int motorpin = 9; void setup() { pinmode(motorpin, OUTPUT); void loop() { motoronthenoff(); //motoronthenoffwithspeed(); //motoracceleration(); void motoronthenoff(){ int ontime = 2500; int offtime = 1000; digitalwrite(motorpin, HIGH); delay(ontime); digitalwrite(motorpin, LOW); delay(offtime); milliseconds void motoronthenoffwithspeed(){ int onspeed = 200; int ontime = 2500; int offspeed = 50; int offtime = 1000; analogwrite(motorpin, onspeed); delay(ontime); analogwrite(motorpin, offspeed); delay(offtime); void motoracceleration(){ int delaytime = 50; //Accelerates the motor for(int i = 0; i < 256; i++){ analogwrite(motorpin, i); delay(delaytime); //Decelerates the motor for(int i = 255; i >= 0; i--) { analogwrite(motorpin, i); delay(delaytime); 14
Παράδειγμα 13: Παράδειγμα χρήσης Η- Γέφυρας σε κώδικα Πραγματοποιείστε την σύνδεση του DC κινητήρα που σας δίνεται με την Η- γέφυρα και γράψτε πρόγραμμα, το οποίο περιστρέφει τον κινητήρα δεξιόστροφα, έπειτα αριστερόστροφα και τέλος η κίνηση ολοκληρώνεται με το απότομο φρενάρισμα του. Για την σύνδεση του κινητήρα, ο οποίος έχει ονομαστική τάση 9volt, χρησιμοποιείστε μόνο ένα από τα δυο κανάλια που έχει η Η- γέφυρα. Γενικά η τροφοδοσία της γέφυρας εξαρτάται από την ονομαστική τάση λειτουργίας του κινητήρα. Τα καλώδια σύνδεσης του κινητήρα είναι το άσπρο (+) και το μαύρο (- ).! Ακροδέκτες κινητήρα: Άσπρο (+), Μαύρο(- ) int pin_l1 = 7; //δήλωση της θύρας που είναι συνδεδεμένο το L1 της γέφυρας int pin_l2 = 8; //δήλωση της θύρας που είναι συνδεδεμένο το L2 της γέφυρας int pin_enable = 5; //δήλωση της θύρας που είναι συνδεδεμένο το ENABLE της γέφυρας void setup() { pinmode(pin_l1, OUTPUT); pinmode(pin_l2, OUTPUT); pinmode(pin_enable, OUTPUT); Void loop (){ digitalwrite(pin_l1,low); // περιστροφή του κινητήρα δεξιόστροφα digitalwrite(pin_l2,high); digitalwrite(pin_enable,high); delay(4000); digitalwrite(pin_l1, HIGH); // περιστροφή του κινητήρα αριστερόστροφα digitalwrite(pin_l2, LOW); // delay(4000); digitalwrite(pin_enable, LOW); //φρενάρισμα του κινητήρα delay(2000); // σταδιακή επιτάχυνση του κινητήρα for(int i = 0; i < 256; i++){ analogwrite(pin_enable, i); delay(100); // σταδιακή επιβράδυνση του κινητήρα for(int i = 255; i >= 0; i--) { analogwrite(pin_enable, i); delay(100); 15
Παράδειγμα 14: Έλεγχος κινητήρα με το motor shield Στόν παρακάτω πίνακα παρουσιάζονται τα τεχνικά χαρακτηριστικά και οι ακροδέκτες ελέγχου του motor shield σύνδεσης με τον μικροελεγκτή Arduino, το οποίο μπορεί να οδηγήσει αντίστοιχα δύο κινητήρες μόνιμου μαγνήτη μέσα από τα κανάλια Α και Β. Συνδέστε στο κανάλι Α τον κινητήρα που σας δίνεται και προγραμματίστε τον μικροελεγκτή με το πρόγραμμα που ακολουθεί. Operating Voltage Vin Motor controller 5V to 12V L298P, Drives 2 DC motors or 1 stepper motor Max current 2A per channel or 4A max (with external power supply) Current sensing 1.65V/A, AD converter in 3V3 for max current 2A Free running stop and brake function Function Direction Speed (PWM) Brake Current Sensing Channel A Digital 12 Digital 3 Digital 9 Analog 0 Channel B Digital 13 Digital 11 Digital 8 Analog 1 void setup() { pinmode(12, OUTPUT); //DIRECTION Motor Channel A pinmode(9, OUTPUT); // BRAKE Motor Channel A void loop(){ //forward @ full speed digitalwrite(12, HIGH); //Establishes forward direction of Channel A digitalwrite(9, LOW); //Disengage the Brake for Channel A analogwrite(3, 255); //Spins the motor on Channel A at full speed digitalwrite(9, HIGH); //Eengage the Brake for Channel A //backward @ half speed digitalwrite(12, LOW); //Establishes backward direction of Channel A digitalwrite(9, LOW); //Disengage the Brake for Channel A analogwrite(3, 123); //Spins the motor on Channel A at half speed digitalwrite(9, HIGH); //Eengage the Brake for Channel A Στην συνέχεια τροποποιείστε το πρόγραμμα ώστε με την βοήθεια ενός ποτενσιομέτρου να είναι δυνατή η ρύθμιση της ταχύτητα περιστροφής του κινητήρα, με το πάτημα ενός μπουτόν να φρενάρει ενώ με το πάτημα ενός δεύτερου μπουτόν να αλλάζει η φορά περιστροφής. 16
Παράδειγμα 15: Έλεγχος κινητήρα με τη γέφυρα L293D Με βάση τα παρακάτω στοιχεία συνδέστε τον DC κινητήρα που σας δίνεται με το ολοκληρωμένο κύκλωμα L293D και προγραμματίστε τον μικροελεγκτή με το πρόγραμμα που ακολουθεί στην επόμενη σελίδα.! L293D, max 0.6A Έλεγχος DC κινητήρα µε την την Η-γέφυρα L293D 1,2EN 1 ή 0 1A 1Y HEAT SINK AND GROUND 2Y 1 ή 0 2A V CC2 N, NE PACKAGE (TOP VIEW) 1 2 3 4 13 GND 5 12 6 7 8 16 15 14 11 10 9 V CC1 4A 4Y 3Y 3A 3,4EN HEAT SINK AND GROUND 1 ή 0 1 ή 0 1A 1,2EN 2A 3A 3,4EN 4A Λογικό διάγραµµα 4 Drivers/οδηγοί 2 3 1 7 6 10 11 9 15 14 1Y 2Y 3Y 4Y M M! Για Οδήγηση κινητήρα µε µέγιστο ρεύµα τα 600-mA και τάσεις από 4.5 V εως 36 V.! https://www.youtube.com/watch?v=5ndahjqruq0! Vcc1 = 5 volt (pin 16) από µικροελεγκτή! Vcc2 = 4.5 36 vlot (pin8)! GND = (pin 4, 5, 12, 13) Τ.Ε.Ι. Κρήτης Δρ. Ι. Φασουλάς ΜΗΧΑΤΡΟΝΙΚΑ ΣΥΣΤΗΜΑΤΑ Ι Τµήµα Μηχανολόγων Μηχανικών Τ.Ε. 34 17
Έλεγχος της γέφυρας L293D µε τον µικροελεγκτή /************************ Exercise the motor using the L293 chip ************************/ #define ENABLE 3 //controller s output pins #define DIRB 4 #define DIRA 5 void setup() { int i; pinmode(enable,output); pinmode(dira,output); pinmode(dirb,output); //---fast/slow stop example digitalwrite(enable,high); //enable on digitalwrite(enable,low); //slow stop digitalwrite(enable,high); //enable on digitalwrite(dira,low); //fast stop void loop() {... //---back and forth example digitalwrite(enable,high); // enable on for (i=0;i<5;i++) { delay(500); digitalwrite(dira,low); //reverse digitalwrite(dirb,high); delay(500); digitalwrite(enable,low); // disable delay(4000); //---PWM example, full speed then slow digitalwrite(enable,high); //enable on delay(2000); analogwrite(enable,128); //half speed delay(2000); digitalwrite(enable,low); //all done Τ.Ε.Ι. Κρήτης Δρ. Ι. Φασουλάς ΜΗΧΑΤΡΟΝΙΚΑ ΣΥΣΤΗΜΑΤΑ Ι Τµήµα Μηχανολόγων Μηχανικών Τ.Ε. 36 18