Πίνακας περιεχομένων:

Μικροελεγκτής AVR. Διαμόρφωση πλάτους παλμού. Ελεγκτής DC Motor και Ένταση Φωτός LED .: 6 Βήματα
Μικροελεγκτής AVR. Διαμόρφωση πλάτους παλμού. Ελεγκτής DC Motor και Ένταση Φωτός LED .: 6 Βήματα

Βίντεο: Μικροελεγκτής AVR. Διαμόρφωση πλάτους παλμού. Ελεγκτής DC Motor και Ένταση Φωτός LED .: 6 Βήματα

Βίντεο: Μικροελεγκτής AVR. Διαμόρφωση πλάτους παλμού. Ελεγκτής DC Motor και Ένταση Φωτός LED .: 6 Βήματα
Βίντεο: ESP32 Tutorial 15 - DC Motor Speed Control with ESP32 L293D | SunFounder's ESP32 IoT Learnig kit 2024, Νοέμβριος
Anonim
Image
Image

Γεια σε όλους!

Η διαμόρφωση πλάτους παλμού (PWM) είναι μια πολύ κοινή τεχνική στις τηλεπικοινωνίες και τον έλεγχο ισχύος. χρησιμοποιείται συνήθως για τον έλεγχο της ισχύος που τροφοδοτείται σε μια ηλεκτρική συσκευή, είτε πρόκειται για κινητήρα, LED, ηχεία κλπ. Είναι βασικά μια τεχνική διαμόρφωσης, στην οποία το πλάτος του παλμού φορέα ποικίλλει σύμφωνα με το σήμα αναλογικού μηνύματος Το

Κάνουμε απλό ηλεκτρικό κύκλωμα για τον έλεγχο της ταχύτητας περιστροφής του κινητήρα DC σε ένταση φωτός που εξαρτάται. Θα χρησιμοποιήσουμε δυνατότητες μικροελεγκτή και εξαρτώμενης από αντίσταση φωτός και AVR, όπως η αναλογική σε ψηφιακή μετατροπή, για να μετρήσουμε την ένταση του φωτός. Επίσης, θα χρησιμοποιήσουμε το Dual H-Bridge Motor Driver Module-L298N. Συνήθως χρησιμοποιείται για τον έλεγχο της ταχύτητας και της κατεύθυνσης των κινητήρων, αλλά μπορεί να χρησιμοποιηθεί για άλλα έργα, όπως η αύξηση της φωτεινότητας ορισμένων έργων φωτισμού. Επίσης, προσθέσαμε ένα κουμπί στο κύκλωμά μας για να αλλάξουμε την κατεύθυνση περιστροφής του κινητήρα.

Βήμα 1: Περιγραφή

Περιγραφή
Περιγραφή
Περιγραφή
Περιγραφή

Κάθε σώμα σε αυτόν τον κόσμο έχει κάποια αδράνεια. Ο κινητήρας περιστρέφεται όποτε είναι ενεργοποιημένος. Μόλις απενεργοποιηθεί, θα τείνει να σταματήσει. Αλλά δεν σταματά αμέσως, χρειάζεται λίγος χρόνος. Αλλά πριν σταματήσει εντελώς, ενεργοποιείται ξανά! Έτσι αρχίζει να κινείται. Αλλά ακόμα και τώρα, χρειάζεται λίγος χρόνος για να φτάσει στην πλήρη ταχύτητά του. Αλλά πριν συμβεί, απενεργοποιείται και ούτω καθεξής. Έτσι, το συνολικό αποτέλεσμα αυτής της ενέργειας είναι ότι ο κινητήρας περιστρέφεται συνεχώς, αλλά σε χαμηλότερη ταχύτητα.

Η διαμόρφωση πλάτους παλμού (PWM) είναι μια συγκριτικά πρόσφατη τεχνική μεταγωγής ισχύος για την παροχή ενδιάμεσων ποσοτήτων ηλεκτρικής ισχύος μεταξύ πλήρως ενεργοποιημένων και πλήρως απενεργοποιημένων επιπέδων. Συνήθως, οι ψηφιακοί παλμοί έχουν το ίδιο χρονικό διάστημα ενεργοποίησης και απενεργοποίησης, αλλά σε ορισμένες περιπτώσεις χρειαζόμαστε τον ψηφιακό παλμό να έχει περισσότερο/λιγότερο χρόνο/εκτός ώρας. Στην τεχνική PWM, δημιουργούμε ψηφιακούς παλμούς με άνιση κατάσταση ενεργοποίησης και απενεργοποίησης για να λάβουμε τις απαιτούμενες ενδιάμεσες τιμές τάσης.

Ο κύκλος λειτουργίας ορίζεται από το ποσοστό της διάρκειας υψηλής τάσης σε έναν πλήρη ψηφιακό παλμό. Μπορεί να υπολογιστεί με:

% του κύκλου λειτουργίας = T on /T (χρόνος περιόδου) x 100

Ας πάρουμε μια δήλωση προβλήματος. Πρέπει να δημιουργήσουμε ένα σήμα PWM 50 Hz με κύκλο λειτουργίας 45%.

Συχνότητα = 50 Hz

Χρονική περίοδος, T = T (on) + T (off) = 1/50 = 0.02 s = 20 ms

Κύκλος καθήκοντος = 45%

Έτσι, λύνοντας σύμφωνα με την εξίσωση που δόθηκε παραπάνω, παίρνουμε

T (on) = 9 ms

T (απενεργοποιημένο) = 11 ms

Βήμα 2: Χρονοδιακόπτες AVR - Λειτουργία PWM

Χρονοδιακόπτες AVR - Λειτουργία PWM
Χρονοδιακόπτες AVR - Λειτουργία PWM
Χρονοδιακόπτες AVR - Λειτουργία PWM
Χρονοδιακόπτες AVR - Λειτουργία PWM

Για την κατασκευή PWM, το AVR περιέχει ξεχωριστό υλικό! Χρησιμοποιώντας αυτό, η CPU δίνει οδηγίες στο υλικό να παράγει PWM ενός συγκεκριμένου κύκλου λειτουργίας. Το ATmega328 έχει 6 εξόδους PWM, 2 βρίσκονται στο χρονόμετρο/μετρητή0 (8bit), 2 βρίσκονται στο χρονόμετρο/μετρητή1 (16bit) και 2 βρίσκονται στο χρονόμετρο/μετρητή2 (8bit). Ο χρονοδιακόπτης/Counter0 είναι η απλούστερη συσκευή PWM στο ATmega328. Ο χρονοδιακόπτης/ο μετρητής0 μπορεί να λειτουργήσει σε 3 λειτουργίες:

  • Γρήγορο PWM
  • Διόρθωση φάσης και συχνότητας PWM
  • Διόρθωση φάσης PWM

καθεμία από αυτές τις λειτουργίες μπορεί να είναι ανεστραμμένη ή μη.

Αρχικοποίηση χρονοδιακόπτη 0 σε λειτουργία PWM:

TCCR0A | = (1 << WGM00] | (1 << WGM01] - ρύθμιση WGM: Γρήγορο PWM

TCCR0A | = (1 << COM0A1] | (1 << COM0B1] - ρυθμίστε τη λειτουργία σύγκρισης εξόδου Α, Β

TCCR0B | = (1 << CS02) - ρυθμίστε το χρονόμετρο με προκαθοριστή = 256

Βήμα 3: Μέτρηση έντασης φωτός - ADC & LDR

Μέτρηση έντασης φωτός - ADC & LDR
Μέτρηση έντασης φωτός - ADC & LDR
Μέτρηση έντασης φωτός - ADC & LDR
Μέτρηση έντασης φωτός - ADC & LDR
Μέτρηση έντασης φωτός - ADC & LDR
Μέτρηση έντασης φωτός - ADC & LDR

Ο φωτοεξαρτώμενος αντιστάτης (LDR) είναι ένας μορφοτροπέας που αλλάζει την αντίστασή του όταν το φως πέφτει στην επιφάνεια του αλλάζει.

Τα LDR είναι κατασκευασμένα από υλικά ημιαγωγών για να έχουν τη δυνατότητα να έχουν τις ευαίσθητες στο φως ιδιότητες τους. Αυτά τα LDR ή PHOTO RESISTORS λειτουργούν με την αρχή της "Αγωγιμότητας φωτογραφιών". Τώρα αυτό που λέει αυτή η αρχή είναι κάθε φορά που πέφτει φως στην επιφάνεια του LDR (σε αυτή την περίπτωση) η αγωγιμότητα του στοιχείου αυξάνεται ή με άλλα λόγια η αντίσταση του LDR μειώνεται όταν το φως πέφτει στην επιφάνεια του LDR. Αυτή η ιδιότητα της μείωσης της αντίστασης για το LDR επιτυγχάνεται επειδή είναι μια ιδιότητα υλικού ημιαγωγών που χρησιμοποιείται στην επιφάνεια. Τα LDR χρησιμοποιούνται τις περισσότερες φορές για τον εντοπισμό παρουσίας φωτός ή για τη μέτρηση της έντασης του φωτός.

Για τη μεταφορά εξωτερικών συνεχών πληροφοριών (αναλογικών πληροφοριών) σε ψηφιακό/υπολογιστικό σύστημα, πρέπει να τις μετατρέψουμε σε ακέραιες (ψηφιακές) τιμές. Αυτός ο τύπος μετατροπής πραγματοποιείται από τον Αναλογικό σε Digitalηφιακό μετατροπέα (ADC). Η διαδικασία μετατροπής μιας αναλογικής τιμής σε ψηφιακή αξία είναι γνωστή ως Αναλογική σε Digitalηφιακή Μετατροπή. Με λίγα λόγια, τα αναλογικά σήματα είναι σήματα πραγματικού κόσμου γύρω μας όπως ο ήχος και το φως.

Τα ψηφιακά σήματα είναι αναλογικά ισοδύναμα σε ψηφιακή ή αριθμητική μορφή τα οποία είναι κατανοητά από ψηφιακά συστήματα όπως οι μικροελεγκτές. Το ADC είναι ένα τέτοιο υλικό που μετρά αναλογικά σήματα και παράγει ένα ψηφιακό ισοδύναμο του ίδιου σήματος. Οι μικροελεγκτές AVR έχουν ενσωματωμένη δυνατότητα ADC για τη μετατροπή της αναλογικής τάσης σε ακέραιο. Το AVR το μετατρέπει σε αριθμό 10-bit εύρους 0 έως 1023.

Χρησιμοποιούμε αναλογική σε ψηφιακή μετατροπή στάθμης τάσης από κύκλωμα διαχωριστή με LDR για τη μέτρηση της έντασης του φωτός.

Αρχικοποίηση ADC:

TADCSRA | = (1 << ADEN) - Ενεργοποίηση ADC

ADCSRA | = (1 << ADPS2) | (1 << ADPS1] | (1ADPS0) - ρυθμίστε τον προκαθοριστή ADC = 128

ADMUX = (1 << REFS0] - ρύθμιση τάσης αναφοράς = AVCC. - ρυθμίστε το κανάλι εισόδου = ADC0

Δείτε το βίντεο με μια λεπτομερή περιγραφή του μικροελεγκτή ADC AVR: Μικροελεγκτή AVR. Μέτρηση έντασης φωτός. ADC & LDR

Βήμα 4: Ελεγκτής DC Motor & Dual H-Bridge Motor Driver Module-L298N

Ελεγκτής DC Motor & Dual H-Bridge Motor Driver Module-L298N
Ελεγκτής DC Motor & Dual H-Bridge Motor Driver Module-L298N
Ελεγκτής DC Motor & Dual H-Bridge Motor Driver Module-L298N
Ελεγκτής DC Motor & Dual H-Bridge Motor Driver Module-L298N
Ελεγκτής DC Motor & Dual H-Bridge Motor Driver Module-L298N
Ελεγκτής DC Motor & Dual H-Bridge Motor Driver Module-L298N

Χρησιμοποιούμε προγράμματα οδήγησης κινητήρα DC επειδή οι μικροελεγκτές δεν είναι σε θέση να παρέχουν ρεύμα που δεν υπερβαίνει τα 100 milliamps γενικά. Οι μικροελεγκτές είναι έξυπνοι αλλά όχι ισχυροί. αυτή η ενότητα θα προσθέσει κάποιους μυς στους μικροελεγκτές για να κινούν κινητήρες DC υψηλής ισχύος. Μπορεί να ελέγχει ταυτόχρονα 2 κινητήρες συνεχούς ρεύματος έως 2 αμπέρ το καθένα ή έναν βηματικό κινητήρα. Μπορούμε να ελέγξουμε την ταχύτητα χρησιμοποιώντας το PWM και επίσης την κατεύθυνση περιστροφής των κινητήρων. Επίσης, χρησιμοποιήθηκε για την οδήγηση της φωτεινότητας της ταινίας LED.

Περιγραφή καρφιτσών:

Θύρα OUT1 και OUT2, η οποία προορίζεται για σύνδεση μοτέρ DC. OUT3 και OUT4 για σύνδεση ταινίας LED.

Οι ENA και ENB είναι ακίδες ενεργοποίησης: συνδέοντας το ENA σε υψηλή (+5V) ενεργοποιεί τη θύρα OUT1 και OUT2.

Εάν συνδέσετε τον πείρο ENA στο χαμηλό (GND), απενεργοποιεί τα OUT1 και OUT2. Ομοίως, για ENB και OUT3 και OUT4.

Τα IN1 έως IN4 είναι οι ακίδες εισόδου που θα συνδεθούν στο AVR.

Εάν IN1-υψηλό (+5V), IN2-χαμηλό (GND), το OUT1 γυρίζει ψηλά και το OUT2 χαμηλώνει, έτσι μπορούμε να οδηγήσουμε τον κινητήρα.

Εάν το IN3-υψηλό (+5V), IN4-χαμηλό (GND), το OUT4 γυρίζει ψηλά και το OUT3 χαμηλώνει, οπότε η λυχνία LED ταινίας είναι αναμμένη.

Αν θέλετε να αντιστρέψετε την κατεύθυνση περιστροφής του κινητήρα, αντιστρέψτε την πολικότητα IN1 και IN2, ομοίως για IN3 και IN4.

Εφαρμόζοντας σήμα PWM σε ENA και ENB μπορείτε να ελέγξετε την ταχύτητα των κινητήρων σε δύο διαφορετικές θύρες εξόδου.

Ο πίνακας μπορεί να δεχτεί από 7V έως 12V ονομαστικά.

Μπότες: Υπάρχουν τρεις καρφίτσες για άλτες. Jumper 1: Εάν ο κινητήρας σας χρειάζεται περισσότερο από 12V, πρέπει να αποσυνδέσετε το Jumper 1 και να εφαρμόσετε την επιθυμητή τάση (μέγιστο 35V) στον ακροδέκτη 12V. Φέρτε άλλη τροφοδοσία 5V και είσοδο στο τερματικό 5V. Ναι, πρέπει να εισάγετε 5V εάν πρέπει να εφαρμόσετε περισσότερο από 12V (όταν αφαιρεθεί ο βραχυκυκλωτήρας 1).

Η είσοδος 5V προορίζεται για τη σωστή λειτουργία του IC, καθώς η αφαίρεση του βραχυκυκλώματος θα απενεργοποιήσει τον ενσωματωμένο ρυθμιστή 5V και θα προστατεύσει από υψηλότερη τάση εισόδου από τον ακροδέκτη 12V.

Ο τερματικός σταθμός 5V λειτουργεί ως έξοδος εάν η παροχή σας είναι μεταξύ 7V και 12V και λειτουργεί ως είσοδος εάν εφαρμόσετε περισσότερο από 12V και ο βραχυκυκλωτήρας αφαιρεθεί.

Jumper 2 και Jumper 3: Εάν αφαιρέσετε αυτούς τους δύο βραχυκυκλωτήρες, πρέπει να εισάγετε το σήμα ενεργοποίησης και απενεργοποίησης από τον μικροελεγκτή, οι περισσότεροι χρήστες προτιμούν να αφαιρούν τους δύο βραχυκυκλωτήρες και να εφαρμόζουν το σήμα από τον μικροελεγκτή.

Εάν διατηρήσετε τους δύο βραχυκυκλωτήρες, το OUT1 έως OUT4 θα είναι πάντα ενεργοποιημένο. Θυμηθείτε το βραχυκυκλωτήρα ENA για OUT1 και OUT2. Βραχυκυκλωτήρας ENB για OUT3 και OUT4.

Βήμα 5: Γράψιμο κώδικα για ένα πρόγραμμα σε C. Μεταφόρτωση αρχείου HEX στη μνήμη flash του μικροελεγκτή

Σύνταξη και δημιουργία της εφαρμογής μικροελεγκτή AVR σε κωδικό C χρησιμοποιώντας την πλατφόρμα ενσωματωμένης ανάπτυξης - Atmel Studio.

#ifndef F_CPU #define F_CPU 16000000UL // ειδοποίηση κρυστάλλινης συχνότητας ελεγκτή (16 MHz AVR ATMega328P) #endif

#include // header για να ενεργοποιήσετε τον έλεγχο ροής δεδομένων στις ακίδες. Ορίζει καρφίτσες, θύρες κλπ. #Include // header για να ενεργοποιήσετε τη λειτουργία καθυστέρησης στο πρόγραμμα

#define BUTTON1 2 // κουμπί διακόπτης συνδεδεμένος στη θύρα B pin 2 #define DEBOUNCE_TIME 25 // χρόνος αναμονής ενώ το κουμπί "de-bouncing" #define LOCK_INPUT_TIME 300 // χρόνος αναμονής μετά το πάτημα ενός κουμπιού

// Timer0, PWM Initialization void timer0_init () {// set up timer OC0A, OC0B pin in mode toggle and CTC mode TCCR0A | = (1 << COM0A1) | (1 << COM0B1] | (1 << WGM00) | (1 << WGM01]; // ρυθμίστε το χρονόμετρο με προκαθοριστή = 256 TCCR0B | = (1 << CS02); // αρχικοποίηση μετρητή TCNT0 = 0; // αρχικοποίηση σύγκρισης τιμής OCR0A = 0; }

// ADC Initialization void ADC_init () {// Enable ADC, sampling freq = osc_freq/128 set prescaler in max value, 128 ADCSRA | = (1 << ADEN) | (1 << ADPS2] | (1 << ADPS1] | (1 << ADPS0];

ADMUX = (1 << REFS0]; // Επιλέξτε αναφορά τάσης (AVCC)

// Κατάσταση αλλαγής κουμπιού χωρίς υπογραφή char button_state () {

/ * το κουμπί πιέζεται όταν το κουμπί 1 bit είναι καθαρό */

εάν (! (PINB & (1 <

{

_delay_ms (DEBOUNCE_TIME);

εάν (! (PINB & (1 <

}

επιστροφή 0?

}

// Ports Initialization void port_init () {DDRB = 0b00011011; // PB0-IN1, PB1-IN2, PB3-IN3, PB4-IN4, PB2-BUTTON SWITCH DIRECT PORTB = 0b00010110;

DDRD = 0b01100000; // PD5-ENB (OC0B), PD6-ENA (OC0A) PORTD = 0b00000000;

DDRC = 0b00000000; // PC0-ADC PORTC = 0b00000000; // Ρυθμίστε όλες τις ακίδες του PORTC χαμηλά, ώστε να απενεργοποιηθεί. }

// Αυτή η συνάρτηση διαβάζει την τιμή της αναλογικής σε ψηφιακή μετατροπή. uint16_t get_LightLevel () {_delay_ms (10); // Περιμένετε για κάποιο χρονικό διάστημα για να πάρει το κανάλι επιλεγμένο ADCSRA | = (1 << ADSC); // Ξεκινήστε τη μετατροπή ADC ρυθμίζοντας bit ADSC. Γράψτε 1 στο ADSC

ενώ (ADCSRA & (1 << ADSC)); // Περιμένετε να ολοκληρωθεί η μετατροπή

// ADSC γίνεται 0 ξανά μέχρι τότε, εκτελείτε συνεχώς βρόχο _delay_ms (10). επιστροφή (ADC)? // Επιστρέψτε το αποτέλεσμα 10-bit

}

// Αυτή η συνάρτηση επανα-χαρτογραφεί έναν αριθμό από το ένα εύρος (0-1023) στο άλλο (0-100). uint32_t χάρτης (uint32_t x, uint32_t in_min, uint32_t in_max, uint32_t out_min, uint32_t out_max) {return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min; }

int main (άκυρο)

{uint16_t i1 = 0;

port_init ();

timer0_init (); ADC_init (); // αρχικοποίηση ADC

ενώ (1)

{i1 = χάρτης (get_LightLevel (), 0, 1023, 0, 100);

OCR0A = i1; // Ορισμός εξόδου σύγκρισης καναλιού καταχωρητή A OCR0B = 100-i1; // Ορισμός εξόδου σύγκρισης καναλιού καταχωρητή Β (ανεστραμμένο)

εάν (button_state ()) // Εάν πατήσετε το κουμπί, αλλάξτε την κατάσταση του LED και καθυστερήστε για 300ms (#define LOCK_INPUT_TIME) {PORTB ^= (1 << 0); // εναλλαγή της τρέχουσας κατάστασης του πείρου IN1. PORTB ^= (1 << 1); // εναλλαγή της τρέχουσας κατάστασης του πείρου IN2. Αντιστρέψτε την κατεύθυνση περιστροφής του κινητήρα

PORTB ^= (1 << 3); // εναλλαγή της τρέχουσας κατάστασης του πείρου IN3. PORTB ^= (1 << 4); // εναλλαγή της τρέχουσας κατάστασης του πείρου IN4. Η ταινία LED είναι απενεργοποιημένη/ενεργοποιημένη. _delay_ms (LOCK_INPUT_TIME); }}; επιστροφή (0)? }

Ο προγραμματισμός ολοκληρώθηκε. Στη συνέχεια, δημιουργία και μεταγλώττιση κώδικα έργου σε εξάγωνο αρχείο.

Μεταφόρτωση αρχείου HEX στη μνήμη flash του μικροελεγκτή: πληκτρολογήστε στο παράθυρο προτροπής DOS την εντολή:

avrdude –c [όνομα προγραμματιστή] –p m328p –u –U flash: w: [όνομα του δεκαεξαδικού αρχείου σας]

Στην περίπτωσή μου είναι:

avrdude –c ISPProgv1 –p m328p –u –U flash: w: PWM.hex

Αυτή η εντολή γράφει ένα δεκαεξαδικό αρχείο στη μνήμη του μικροελεγκτή. Δείτε το βίντεο με μια λεπτομερή περιγραφή της καύσης μνήμης flash του μικροελεγκτή: Κάψιμο μνήμης flash μικροελεγκτή…

Εντάξει! Τώρα, ο μικροελεγκτής λειτουργεί σύμφωνα με τις οδηγίες του προγράμματός μας. Ας το ελέγξουμε!

Βήμα 6: Το ηλεκτρικό κύκλωμα

Το ηλεκτρικό κύκλωμα
Το ηλεκτρικό κύκλωμα
Το ηλεκτρικό κύκλωμα
Το ηλεκτρικό κύκλωμα

Συνδέστε εξαρτήματα σύμφωνα με το σχηματικό διάγραμμα.

Συνιστάται: