- Τι είναι το SPWM (Sinusoidal Pulse Width Modulation);
- Πώς λειτουργεί ο μετατροπέας SPWM
- Απαιτούμενα στοιχεία για την κατασκευή μετατροπέα SPWM
- Κατασκευή κυκλώματος μετατροπέα SPWM
- Πρόγραμμα Arduino για SPWM Inverter
- Δοκιμή του κυκλώματος μετατροπέα TL494 PWM
Συχνά απαιτούνται κυκλώματα μετατροπέα όταν δεν είναι δυνατή η τροφοδοσία AC από το δίκτυο. Ένα κύκλωμα μετατροπέα χρησιμοποιείται για τη μετατροπή ισχύος DC σε εναλλασσόμενο ρεύμα και μπορεί να χωριστεί σε δύο τύπους, δηλαδή Pure Sine Wave Inverters ή Modified Square Wave Inverters. Αυτοί οι μετατροπείς καθαρού ημιτονοειδούς κύματος είναι πολύ ακριβοί, όπου οι μετατροπείς τετραγωνικών κυμάτων είναι φθηνοί. Μάθετε περισσότερα για τους διαφορετικούς τύπους μετατροπέα εδώ.
Σε ένα προηγούμενο άρθρο, σας έχω δείξει πώς να μην κάνετε έναν τροποποιημένο τετραγωνικό κύμα μετατροπέα αντιμετωπίζοντας τα προβλήματα που σχετίζονται με αυτόν. Έτσι σε αυτό το άρθρο, θα φτιάξω έναν απλό μετατροπέα καθαρού ημιτονοειδούς κύματος χρησιμοποιώντας το Arduino και θα εξηγήσω την αρχή λειτουργίας του κυκλώματος.
Εάν κάνετε αυτό το κύκλωμα, λάβετε υπόψη ότι αυτό το κύκλωμα δεν διαθέτει ανατροφοδότηση, καμία προστασία υπερέντασης, καμία προστασία βραχυκυκλώματος και καμία προστασία θερμοκρασίας. Ως εκ τούτου, αυτό το κύκλωμα έχει κατασκευαστεί και επιδειχθεί μόνο για εκπαιδευτικούς σκοπούς και δεν συνιστάται απολύτως η κατασκευή και χρήση αυτού του τύπου κυκλώματος για εμπορικές συσκευές. Ωστόσο, μπορείτε να τα προσθέσετε στο κύκλωμα σας εάν απαιτείται, τα κυκλώματα προστασίας που χρησιμοποιούνται συνήθως
Έχουν ήδη συζητηθεί οι Προστασίες Υπερβολικής Τάσης, Προστασία Υπερβολικού Ρεύματος, Προστασία Αντίστροφης Πολικότητας, Προστασία Βραχυκυκλώματος, Ελεγκτής Hot Swap κ.λπ.
ΠΡΟΣΟΧΗ: Εάν κάνετε αυτόν τον τύπο κυκλώματος, προσέξτε ιδιαίτερα για τις αιχμές υψηλής τάσης και τάσης που δημιουργούνται από το σήμα εναλλαγής στην είσοδο.
Τι είναι το SPWM (Sinusoidal Pulse Width Modulation);
Όπως υποδηλώνει το όνομα, SPWM σημαίνει S inusoidal P ulse W idth Μ odulation. Όπως ίσως γνωρίζετε ήδη, ένα σήμα PWM είναι ένα σήμα στο οποίο μπορούμε να αλλάξουμε τη συχνότητα του παλμού, καθώς και το χρόνο και το χρόνο εκτός λειτουργίας, το οποίο είναι επίσης γνωστό ως κύκλος λειτουργίας. Αν θέλετε να μάθετε περισσότερα για το PWM, μπορείτε να το διαβάσετε εδώ. Έτσι, μεταβάλλοντας τον κύκλο λειτουργίας, αλλάζουμε τη μέση τάση του παλμού. Η παρακάτω εικόνα δείχνει ότι-
Εάν θεωρήσουμε ένα σήμα PWM που αλλάζει μεταξύ 0 - 5V που έχει κύκλο λειτουργίας 100%, θα λάβουμε μια μέση τάση εξόδου 5V, και πάλι αν λάβουμε υπόψη το ίδιο σήμα με κύκλο λειτουργίας 50%, θα λάβετε την τάση εξόδου 2,5V και για τον κύκλο λειτουργίας 25%, είναι το μισό από αυτό. Αυτό συνοψίζει τη βασική αρχή του σήματος PWM και μπορούμε να προχωρήσουμε στην κατανόηση της βασικής αρχής του σήματος SPWM.
Η ημιτονοειδής τάση είναι κυρίως μια αναλογική τάση που μεταβάλλει το μέγεθος της με την πάροδο του χρόνου και μπορούμε να αναπαραγάγουμε αυτήν τη συμπεριφορά ενός ημιτονοειδούς κύματος αλλάζοντας συνεχώς τον κύκλο λειτουργίας του κύματος PWM, η παρακάτω εικόνα δείχνει ότι.
Αν κοιτάξετε το παρακάτω σχήμα, θα δείτε ότι υπάρχει ένας πυκνωτής συνδεδεμένος στην έξοδο του μετασχηματιστή. Αυτός ο πυκνωτής είναι υπεύθυνος για την εξομάλυνση του σήματος AC από τη συχνότητα του φορέα.
Το χρησιμοποιούμενο σήμα εισόδου φορτίζει και εκφορτώνει τον πυκνωτή σύμφωνα με το σήμα εισόδου και το φορτίο. Καθώς έχουμε χρησιμοποιήσει ένα σήμα SPWM πολύ υψηλής συχνότητας, θα έχει έναν πολύ μικρό κύκλο λειτουργίας που είναι όπως 1%, αυτός ο κύκλος λειτουργίας 1% θα φορτίσει λίγο τον πυκνωτή, ο επόμενος κύκλος λειτουργίας είναι 5%, αυτό θα φορτιστεί ξανά ο πυκνωτής λίγο περισσότερο, μετά τον παλμό θα έχει έναν κύκλο λειτουργίας 10% και ο πυκνωτής θα φορτίσει λίγο περισσότερο, θα εφαρμόσουμε το σήμα μέχρι να φτάσουμε σε έναν κύκλο λειτουργίας 100% και από εκεί, θα πάμε πίσω έως 1%. Αυτό θα δημιουργήσει μια πολύ ομαλή καμπύλη σαν ημιτονοειδές κύμα στην έξοδο. Έτσι, παρέχοντας τις κατάλληλες τιμές του κύκλου λειτουργίας στην είσοδο, θα έχουμε ένα πολύ ημιτονοειδές κύμα στην έξοδο.
Πώς λειτουργεί ο μετατροπέας SPWM
Η παραπάνω εικόνα δείχνει το κύριο τμήμα οδήγησης του μετατροπέα SPWM και, όπως μπορείτε να δείτε, χρησιμοποιήσαμε δύο N-channel MOSFET σε ρύθμιση μισής γέφυρας για να οδηγήσουμε τον μετασχηματιστή αυτού του κυκλώματος, να μειώσουμε τον ανεπιθύμητο θόρυβο μεταγωγής και να προστατεύσουμε το MOSFET, έχουμε χρησιμοποιήσει 1N5819 διόδους παράλληλα με τα MOSFET. Για να μειώσουμε τυχόν επιβλαβείς αιχμές που δημιουργούνται στο τμήμα πύλης, χρησιμοποιήσαμε τις αντιστάσεις 4,7 ohms παράλληλα με τις διόδους 1N4148. Τέλος, οι οι BD139 και BD 140 τρανζίστορ διαμορφωμένο σε ένα push-pull διαμόρφωσηγια να οδηγήσετε την πύλη του MOSFET, επειδή αυτό το MOSFET έχει πολύ υψηλή χωρητικότητα πύλης και απαιτεί τουλάχιστον 10V στη βάση για να ενεργοποιηθεί σωστά. Μάθετε περισσότερα για τη λειτουργία των ενισχυτών Push-Pull εδώ.
Για να κατανοήσουμε καλύτερα την αρχή λειτουργίας του κυκλώματος, το έχουμε μειώσει σε ένα σημείο όπου αυτό το τμήμα του MOSFET είναι ON. Όταν το MOSFET βρίσκεται στο ρεύμα, αρχικά ρέει μέσω του μετασχηματιστή και στη συνέχεια γειώνεται από το MOSFET, επομένως μια μαγνητική ροή θα προκαλείται επίσης προς την κατεύθυνση στην οποία ρέει το ρεύμα και ο πυρήνας του μετασχηματιστή θα περάσει τη μαγνητική ροή στη δευτερεύουσα περιέλιξη και θα έχουμε τον θετικό μισό κύκλο του ημιτονοειδούς σήματος στην έξοδο.
Στον επόμενο κύκλο, το κάτω μέρος του κυκλώματος είναι στο πάνω μέρος του κυκλώματος είναι απενεργοποιημένο και γι 'αυτό έχω αφαιρέσει το πάνω μέρος, τώρα το ρεύμα ρέει προς την αντίθετη κατεύθυνση και παράγει μια μαγνητική ροή προς αυτήν την κατεύθυνση, αντιστρέφοντας έτσι την κατεύθυνση της μαγνητικής ροής στον πυρήνα. Μάθετε περισσότερα για τη λειτουργία του MOSFET εδώ.
Τώρα, όλοι γνωρίζουμε ότι ένας μετασχηματιστής λειτουργεί με αλλαγές μαγνητικής ροής. Έτσι, ενεργοποιώντας και απενεργοποιώντας και τα δύο MOSFET, το ένα ανεστραμμένο στο άλλο και το κάνουμε αυτό 50 φορές το δευτερόλεπτο, θα δημιουργήσει μια ωραία ταλαντωμένη μαγνητική ροή μέσα στον πυρήνα του μετασχηματιστή και η μεταβαλλόμενη μαγνητική ροή θα προκαλέσει τάση στο δευτερεύον πηνίο ως ξέρουμε από το νόμο του faraday. Έτσι λειτουργεί ο βασικός μετατροπέας.
Το πλήρες κύκλωμα μετατροπέα SPWM που χρησιμοποιείται σε αυτό το έργο δίνεται παρακάτω.
Απαιτούμενα στοιχεία για την κατασκευή μετατροπέα SPWM
Sl. Όχι |
Ανταλλακτικά |
Τύπος |
Ποσότητα |
1 |
Atmega328P |
IC |
1 |
2 |
IRFZ44N |
Mosfet |
2 |
3 |
BD139 |
Τρανζίστορ |
2 |
4 |
BD140 |
Τρανζίστορ |
2 |
5 |
22pF |
Πυκνωτής |
2 |
6 |
10Κ, 1% |
Αντίσταση |
1 |
7 |
16MHz |
Κρύσταλλο |
1 |
8 |
0.1uF |
Πυκνωτής |
3 |
9 |
4.7R |
Αντίσταση |
2 |
10 |
1Ν4148 |
Δίοδος |
2 |
11 |
LM7805 |
Ρυθμιστής τάσης |
1 |
12 |
200uF, 16V |
Πυκνωτής |
1 |
13 |
47uF, 16V |
Πυκνωτής |
1 |
14 |
2.2uF, 400V |
Πυκνωτής |
1 |
Κατασκευή κυκλώματος μετατροπέα SPWM
Για αυτήν την επίδειξη, το κύκλωμα είναι κατασκευασμένο στο Veroboard, με τη βοήθεια του σχηματικού, Στην έξοδο του μετασχηματιστή, μια μεγάλη ποσότητα ρεύματος θα ρέει μέσω της σύνδεσης, οπότε οι άλτες σύνδεσης πρέπει να είναι όσο το δυνατόν πιο παχύ.
Πρόγραμμα Arduino για SPWM Inverter
Προτού προχωρήσουμε και αρχίσουμε να κατανοούμε τον κώδικα, ας ξεκαθαρίσουμε τα βασικά. Από την παραπάνω αρχή λειτουργίας, έχετε μάθει πώς θα μοιάζει το σήμα PWM στην έξοδο, τώρα παραμένει το ερώτημα πώς μπορούμε να κάνουμε ένα τόσο διαφορετικό κύμα στις ακίδες εξόδου του Arduino.
Για να κάνουμε το μεταβαλλόμενο σήμα PWM, πρόκειται να χρησιμοποιήσουμε το χρονοδιακόπτη 16-bit1 με μια ρύθμιση prescaler 1, η οποία θα μας δώσει χρόνο 1600/16000000 = 0,1 ms για κάθε μέτρηση, αν λάβουμε υπόψη έναν μόνο μισό κύκλο ημιτονοειδούς κύματος, ταιριάζει ακριβώς 100 φορές σε ένα μισό κύκλο του κύματος. Με απλά λόγια, θα είμαστε σε θέση να δοκιμάσουμε το ημιτονοειδές κύμα μας 200 φορές.
Στη συνέχεια, πρέπει να διαιρέσουμε το ημιτονοειδές κύμα μας σε 200 κομμάτια και να υπολογίσουμε τις τιμές τους με συσχέτιση του πλάτους. Στη συνέχεια, πρέπει να μετατρέψουμε αυτές τις τιμές σε τιμές μετρητή χρονοδιακόπτη πολλαπλασιάζοντάς τις με το όριο μετρητή. Τέλος, πρέπει να βάλουμε αυτές τις τιμές σε έναν πίνακα αναζήτησης για να τις τροφοδοτήσουμε στον πάγκο και θα πάρουμε το ημιτονοειδές κύμα.
Για να κάνω τα πράγματα λίγο πιο απλά, χρησιμοποιώ έναν πολύ καλά γραμμένο κώδικα SPWM από το GitHub που έχει φτιαχτεί από τον Kurt Hutten.
Ο κωδικός είναι πολύ απλός. Ξεκινάμε το πρόγραμμά μας προσθέτοντας τα απαιτούμενα αρχεία κεφαλίδας
# συμπερίληψη # συμπερίληψη
Στη συνέχεια, έχουμε τους δύο πίνακες αναζήτησης από τους οποίους θα λάβουμε τις τιμές μετρητή χρονομέτρου.
int lookUp1 = {50, 100, 151, 201, 250, 300, 349, 398, 446, 494, 542, 589, 635, 681, 726, 771, 814, 857, 899, 940, 981, 1020, 1058, 1095, 1131, 1166, 1200, 1233, 1264, 1294, 1323, 1351, 1377, 1402, 1426, 1448, 1468, 1488, 1505, 1522, 1536, 1550, 1561, 1572, 1580, 1587, 1593, 1597, 1599, 1600, 1599, 1597, 1593, 1587, 1580, 1572, 1561, 1550, 1536, 1522, 1505, 1488, 1468, 1448, 1426, 1402, 1377, 1351, 1323, 1294, 1264, 1233, 1200, 1166, 1131, 1095, 1058, 1020, 981, 940, 899, 857, 814, 771, 726, 681, 635, 589, 542, 494, 446, 398, 349, 300, 250, 201, 151, 100, 50, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,0, 0, 0}; int lookUp2 = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 50, 100, 151, 201, 250, 300, 349, 398, 446, 494, 542, 589, 635, 681, 726, 771, 814, 857, 899, 940, 981, 1020, 1058, 1095, 1131, 1166, 1200, 1233, 1264, 1294, 1323, 1351, 1377, 1402, 1426, 1448, 1468, 1488, 1505, 1522, 1536, 1550, 1561, 1572, 1580, 1587, 1593, 1597, 1599, 1600, 1599, 1597, 1593, 1587, 1580, 1572, 1561, 1550, 1536, 1522, 1505, 1488, 1468, 1448, 1426, 1402, 1377, 1351, 1323, 1294, 1264, 1233, 1200, 1166, 1131, 1095, 1058, 1020, 981, 940, 899, 857, 814, 771, 726, 681, 635, 589, 542, 494, 446, 398, 349, 300, 250,201, 151, 100, 50, 0};
Στη συνέχεια, στην ενότητα εγκατάστασης , αρχικοποιούμε τους καταχωρητές ελέγχου μετρητή χρονοδιακόπτη ώστε να είναι σαφείς σε καθένα. Για περισσότερες πληροφορίες, πρέπει να διαβάσετε το φύλλο δεδομένων του atmega328 IC.
TCCR1A = 0b10100010; / * 10 καθαρά στον αγώνα, ορίστηκε στο BOTTOM για compA. 10 καθαρά στον αγώνα, ρυθμίστε στο BOTTOM για compB. 00 10 WGM1 1: 0 για κυματομορφή 15. * / TCCR1B = 0b00011001; / * 000 11 WGM1 3: 2 για κυματομορφή 15. 001 χωρίς προεπιλογή στον πάγκο. * / TIMSK1 = 0b00000001; / * 0000000 1 TOV1 Σημαία διακοπής ενεργοποίηση. * /
Μετά από αυτό, αρχικοποιούμε τον καταχωρητή καταγραφής εισόδου με μια προκαθορισμένη τιμή 16000, καθώς αυτό θα μας βοηθήσει να δημιουργήσουμε ακριβώς 200 δείγματα.
ICR1 = 1600; // Περίοδος για 16MHz κρύσταλλο, για συχνότητα μεταγωγής 100KHz για 200 υποδιαιρέσεις ανά κύκλο ημιτονοειδούς κύματος 50Hz.
Στη συνέχεια, ενεργοποιούμε καθολικές διακοπές με κλήση στη συνάρτηση, sei ();
Τέλος, ορίσαμε την έξοδο Arduino 9 και 10 ως έξοδο
DDRB = 0b00000110; // Ορίστε τα PB1 και PB2 ως έξοδοι.
Αυτό σηματοδοτεί το τέλος της λειτουργίας εγκατάστασης.
Το τμήμα βρόχου του κώδικα παραμένει άδειο καθώς είναι ένα πρόγραμμα με χρονοδιακόπτη που λειτουργεί με διακοπή.
κενός βρόχος () {; /*Μην κάνεις τίποτα…. για πάντα!*/}
Στη συνέχεια, έχουμε ορίσει το διάνυσμα υπερχείλισης timer1, αυτή η συνάρτηση διακοπής λαμβάνει μια κλήση μόλις το timer1 υπερχειλίσει και δημιουργεί μια διακοπή.
ISR (TIMER1_OVF_vect) {
Στη συνέχεια, δηλώνουμε ορισμένες τοπικές μεταβλητές ως στατικές μεταβλητές και έχουμε αρχίσει να τροφοδοτούμε τις τιμές στην αντίσταση σύλληψης και σύγκρισης.
στατικό int αριθ. στατικό char trig; // αλλάξτε τον κύκλο λειτουργίας κάθε περίοδο. OCR1A = lookUp1; OCR1B = lookUp2;
Τέλος, προ-αυξάνουμε τον μετρητή για να τροφοδοτήσουμε τις επόμενες τιμές στη σύλληψη και να συγκρίνουμε τις αντιστάσεις, που σηματοδοτούν το τέλος αυτού του κώδικα.
if (++ num> = 200) {// Pre-increment num τότε ελέγξτε ότι είναι κάτω από 200. num = 0; // Επαναφορά αριθμού trig = trig ^ 0b00000001; digitalWrite (13, trig); }
Δοκιμή του κυκλώματος μετατροπέα TL494 PWM
Για να ελέγξετε το κύκλωμα, χρησιμοποιείται η ακόλουθη ρύθμιση.
- Μπαταρία μολύβδου-οξέος 12V.
- Ένας μετασχηματιστής με βρύση 6-0-6 και βρύση 12-0-12
- 100W λαμπτήρας πυρακτώσεως ως φορτίο
- Πολύμετρο Meco 108B + TRMS
- Πολύμετρο Meco 450B + TRMS
Σήμα εξόδου από το Arduino:
Μόλις ανεβάσω τον κωδικό. Μέτρησα το σήμα SPWM εξόδου από τις δύο ακίδες του Arduino που μοιάζει με την παρακάτω εικόνα,
Εάν κάνουμε μεγέθυνση λίγο μπορούμε να δούμε τον συνεχώς μεταβαλλόμενο κύκλο λειτουργίας του κύματος PWM.
Στη συνέχεια, η παρακάτω εικόνα δείχνει το σήμα εξόδου από τον μετασχηματιστή.
Κύκλωμα μετατροπέα SPWM σε ιδανική κατάσταση:
Όπως μπορείτε να δείτε από την παραπάνω εικόνα, αυτό το κύκλωμα τραβάει περίπου 13W ενώ λειτουργεί ιδανικά
Τάση εξόδου χωρίς φορτίο:
Η τάση εξόδου του κυκλώματος μετατροπέα φαίνεται παραπάνω, αυτή είναι η τάση που εξέρχεται στην έξοδο χωρίς συνδεδεμένο φορτίο.
Κατανάλωση ισχύος εισόδου:
Η παραπάνω εικόνα δείχνει την ισχύ εισόδου που καταναλώνει όταν συνδέεται φορτίο 40W.
Κατανάλωση ισχύος εξόδου:
Η παραπάνω εικόνα δείχνει την ισχύ εξόδου που καταναλώνεται από αυτό το κύκλωμα, (το φορτίο είναι μια λάμπα πυρακτώσεως 40W)
Με αυτό, ολοκληρώνουμε το δοκιμαστικό μέρος του κυκλώματος. Μπορείτε να δείτε το παρακάτω βίντεο για μια επίδειξη. Ελπίζω να σας άρεσε αυτό το άρθρο και να μάθετε λίγο για το SPWM και τις τεχνικές εφαρμογής του. Συνεχίστε να διαβάζετε, συνεχίζετε να μαθαίνετε, συνεχίστε να χτίζετε και θα σας δω στο επόμενο έργο.