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

Arduino Sinewave για μετατροπείς: 4 βήματα
Arduino Sinewave για μετατροπείς: 4 βήματα

Βίντεο: Arduino Sinewave για μετατροπείς: 4 βήματα

Βίντεο: Arduino Sinewave για μετατροπείς: 4 βήματα
Βίντεο: Output DC or AC Voltage using MCP4725 DAC with LCD and PWM to Voltage Converter with Arduino 2024, Νοέμβριος
Anonim
Arduino Sinewave για μετατροπείς
Arduino Sinewave για μετατροπείς

Σε αυτό το έργο έχω δημιουργήσει ένα σήμα SPWM (ημιτονοειδές παλμό ευρείας διαμόρφωσης) από δύο ψηφιακές εξόδους arduino pwm.

Επειδή για να φτιάξω ένα τέτοιο πρόγραμμα πρέπει να μιλήσω για πολλές άλλες λειτουργίες και ιδιότητες του arduino το πλήρες έργο, συμπεριλαμβανομένων των εικόνων παλμογράφων και για διαφορετικές συχνότητες, επισκεφθείτε την ιστοσελίδα μου:

eprojectszone

Βήμα 1: Δημιουργία σήματος Pwm για 50Hz

Για να δημιουργήσετε ένα σήμα 50Hz σε υψηλότερη συχνότητα, είναι απαραίτητο να κάνετε κάποιους υπολογισμούς. Οι συχνότητες από το arduino μπορεί να είναι στα 8MHz, αλλά θέλουμε ένα σήμα με μεταβλητό κύκλο λειτουργίας.

Για να κατανοήσετε τους τύπους μεταβλητών κύκλων λειτουργίας του arduino, μπορείτε να διαβάσετε αυτά τα 3 μέρη της ίδιας ανάρτησης 1, 2 και 3.

Ας υποθέσουμε ότι η συχνότητά μας είναι 50Hz, που σημαίνει ότι η χρονική περίοδος είναι 20ms. Έτσι, τα 10ms είναι περίοδος μισού κύκλου. Σε αυτά τα 10ms πρέπει να έχουμε πολλούς παλμούς με διαφορετικούς κύκλους λειτουργίας ξεκινώντας από μικρούς κύκλους λειτουργίας, στη μέση του σήματος έχουμε μέγιστους κύκλους λειτουργίας και τελειώνουμε επίσης με μικρούς κύκλους λειτουργίας. Για να δημιουργήσουμε ένα ημιτονοειδές κύμα θα χρησιμοποιήσουμε δύο ακίδες θετικός μισός κύκλος και ένας αρνητικός μισός κύκλος. Στην ανάρτησή μας για αυτό χρησιμοποιούμε τις καρφίτσες 5 και 6 που σημαίνει χρονόμετρο 0.

Για ένα ομαλό σήμα επιλέγουμε τη σωστή φάση pwm σε συχνότητα 31372 Hz-δείτε την προηγούμενη ανάρτηση. Ένα από τα μεγαλύτερα προβλήματα είναι ότι υπολογίζουμε τον απαραίτητο κύκλο λειτουργίας για κάθε παλμό. Επομένως, επειδή η συχνότητά μας είναι f = 31372Hz, η περίοδος για κάθε παλμό είναι T = 1/31372 = 31,8 us, οπότε ο αριθμός των παλμών για μισό κύκλο είναι N = 10ms/31,8us = 314 παλμοί. Τώρα για να υπολογίσουμε τον κύκλο λειτουργίας για κάθε παλμό έχουμε y = sinx, αλλά σε αυτήν την εξίσωση χρειαζόμαστε μοίρες, οπότε ο μισός κύκλος έχει 180deg για 314 παλμούς. Για κάθε παλμό έχουμε 180/314 = 0,57deg/παλμό. Αυτό σημαίνει ότι για κάθε παλμό προχωρούμε με 0,57 βαθμούς.

y είναι ο κύκλος λειτουργίας και x η τιμή της θέσης στον μισό κύκλο εργασίας. στην αρχή το x είναι 0, μετά το x = 0,57, x = 1,14 και ούτω καθεξής μέχρι x = 180.

Αν υπολογίσουμε όλες τις 314 τιμές, λαμβάνουμε έναν πίνακα 314 στοιχεία (ο τύπος "int" υπολογίζεται ευκολότερα από το arduino).

Ένας τέτοιος πίνακας είναι:

int sinPWM = {1, 2, 5, 7, 10, 12, 15, 17, 19, 22, 24, 27, 30, 32, 34, 37, 39, 42, 44, 47, 49, 52, 54, 57, 59, 61, 64, 66, 69, 71, 73, 76, 78, 80, 83, 85, 88, 90, 92, 94, 97, 99, 101, 103, 106, 108, 110, 113, 115, 117, 119, 121, 124, 126, 128, 130, 132, 134, 136, 138, 140, 142, 144, 146, 148, 150, 152, 154, 156, 158, 160, 162, 164, 166, 168, 169, 171, 173, 175, 177, 178, 180, 182, 184, 185, 187, 188, 190, 192, 193, 195, 196, 198, 199, 201, 202, 204, 205, 207, 208, 209, 211, 212, 213, 215, 216, 217, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 237, 238, 239, 240, 240, 241, 242, 242, 243, 243, 244, 244, 245, 245, 246, 246, 247, 247, 247, 248, 248, 248, 248, 249, 249, 249, 249, 249, 250, 250, 250, 250, 249, 249, 249, 249, 249, 248, 248, 248, 248, 248, 247, 247, 247, 246, 246, 245, 245, 244, 244, 243, 243, 242, 242, 241, 240, 240, 240, 239, 238, 237, 237, 236, 235, 234, 233, 232, 231, 230, 229, 228, 227, 226, 225, 224, 223, 222, 221, 220, 219, 217, 21 6, 215, 213, 212, 211, 209, 208, 207, 205, 204, 202, 201, 199, 198, 196, 195, 193, 192, 190, 188, 187, 185, 184, 182, 180, 178, 177, 175, 173, 171, 169, 168, 166, 164, 162, 160, 158, 156, 154, 152, 150, 148, 146, 144, 142, 140, 138, 136, 134, 132, 130, 128, 126, 124, 121, 119, 117, 115, 113, 110, 108, 106, 103, 101, 99, 97, 94, 92, 90, 88, 85, 83, 80, 78, 76, 73, 71, 69, 66, 64, 61, 59, 57, 54, 52, 49, 47, 44, 42, 39, 37, 34, 32, 30, 27, 24, 22, 19, 17, 15, 12, 10, 7, 5, 2, 1};

Μπορείτε να δείτε ότι σαν ημιτονοειδές κύκλο ο κύκλος λειτουργίας είναι χαμηλότερος στο πρώτο και τελευταίο στοιχείο και υψηλότερος στη μέση.

Βήμα 2: Πρόγραμμα Arduino για μεταβλητό κύκλο εργασίας

Πρόγραμμα Arduino για μεταβλητό κύκλο εργασίας
Πρόγραμμα Arduino για μεταβλητό κύκλο εργασίας

Στην παραπάνω εικόνα έχουμε μεταβλητά σήματα κύκλων λειτουργίας με τιμές από τον πίνακα.

Αλλά πώς να κάνει ένα τέτοιο σήμα;

το τμήμα του παρακάτω προγράμματος χρησιμοποιεί διακοπή για να αλλάξει τις τιμές των κύκλων λειτουργίας

sei (); // ενεργοποίηση διακοπών

}

ISR (TIMER1_COMPA_vect) {// διακοπή όταν το χρονόμετρο 1 ταιριάζει με την τιμή OCR1A

if (i> 313 && OK == 0) {// τελική τιμή από το διάνυσμα για την ακίδα 6

i = 0; // μετάβαση στην πρώτη τιμή του διανύσματος (πίνακας)

OK = 1; // ενεργοποιήστε το pin 5

}

x = sinPWM ; // x λαμβάνει την τιμή από το διάνυσμα που αντιστοιχεί στη θέση i (i είναι μηδενικός δείκτης) -τιμή του κύκλου λειτουργίας

i = i+1; // μεταβείτε στην επόμενη θέση

}

Βήμα 3: Εναλλαγή σε ακροδέκτες Arduino 50Hz

Εναλλασσόμενες ακίδες Arduino στα 50Hz
Εναλλασσόμενες ακίδες Arduino στα 50Hz

Επειδή κάθε καρφίτσα δημιουργεί μόνο έναν κύκλο μισής λειτουργίας για να δημιουργήσει ένα πλήρες ημιτονοειδές κύκλο, χρησιμοποιούμε δύο ακίδες που εναλλάσσονται η μία μετά την άλλη μετά από ακριβή 10 δευτερόλεπτα (για 50Hz). Αυτή η αλλαγή των ακίδων γίνεται στο τέλος του πίνακα- αφού ας πούμε ότι ο πείρος 5 έχει δημιουργήσει 314 παλμούς, αυτός ο πείρος απενεργοποιείται και ενεργοποιείται ο πείρος 6 που κάνει το ίδιο πράγμα, αλλά για τον αρνητικό κύκλο λειτουργίας.

Επειδή το arduino μπορεί να παράγει μόνο θετικά σήματα, ο αρνητικός κύκλος λειτουργίας γίνεται σε h Bridge- μπορείτε να διαβάσετε εδώ σχετικά

Το πρόγραμμα για αλλαγή καρφιτσών:

sei (); // ενεργοποίηση διακοπών

}

ISR (TIMER1_COMPA_vect) {// διακοπή όταν το χρονόμετρο 1 ταιριάζει με την τιμή OCR1A

if (i> 313 && OK == 0) {// τελική τιμή από το διάνυσμα για την ακίδα 6

i = 0; // μετάβαση στην πρώτη τιμή του διανύσματος

OK = 1; // ενεργοποιήστε το pin 5

}

if (i> 313 && OK == 1) {// τελική τιμή από το διάνυσμα για την ακίδα 5

i = 0; // μετάβαση στην πρώτη τιμή του διανύσματος

ΟΚ = 0; // ενεργοποιήστε το pin 6

}

x = sinPWM ; // x λαμβάνει την τιμή από το διάνυσμα που αντιστοιχεί στη θέση i (i είναι μηδενικός δείκτης)

i = i+1; // μεταβείτε στην επόμενη θέση

αν (ΟΚ == 0) {

OCR0B = 0; // κάντε pin 5 0

OCR0A = x; // ενεργοποιήστε τον πείρο 6 στον αντίστοιχο κύκλο λειτουργίας

αν (ΟΚ == 1) {

OCR0A = 0; // κάντε pin 6 0

OCR0B = x; // ενεργοποιήστε τον πείρο 5 στον αντίστοιχο κύκλο εργασιών

}

}

Βήμα 4: Οδήγηση σε γέφυρα H και φιλτράρισμα του σήματος Pwm

Τα σήματα που λαμβάνονται από το arduino είναι το τμήμα ελέγχου για εφαρμογές inverter επειδή και τα δύο είναι θετικά. Για να κάνουμε ένα πλήρη ημιτονοειδές κύμα και έναν πρακτικό μετατροπέα πρέπει να χρησιμοποιήσουμε μια γέφυρα h και να καθαρίσουμε το pwm ένα φίλτρο χαμηλής διέλευσης.

Η γέφυρα Η παρουσιάζεται εδώ.

Το φίλτρο χαμηλής διέλευσης δοκιμάστηκε με μικρούς κινητήρες Ac-εδώ.

Συνιστάται: