Κύκλωμα γεννήτριας Arduino SPWM - Λεπτομέρειες κώδικα και διάγραμμα

Δοκιμάστε Το Όργανο Μας Για Την Εξάλειψη Των Προβλημάτων





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

ο Arduino Ο κώδικας αναπτύχθηκε από εμένα και είναι ο πρώτος μου κωδικός Arduino, ... και φαίνεται αρκετά καλός



Τι είναι το SPWM

Έχω ήδη εξηγήσει πώς να δημιουργήσετε SPWM χρησιμοποιώντας opamps σε ένα από τα προηγούμενα άρθρα μου, θα μπορούσατε να το διαβάσετε για να κατανοήσετε πώς μπορεί να δημιουργηθεί χρησιμοποιώντας διακριτά στοιχεία και σχετικά με τη σημασία του.

Βασικά, το SPWM που σημαίνει διαμόρφωση πλάτους παλμού ημιτονοειδούς κύματος, είναι ένας τύπος διαμόρφωσης παλμού όπου οι παλμοί διαμορφώνονται για προσομοίωση μιας ημιτονοειδούς κυματομορφής, έτσι ώστε η διαμόρφωση να μπορεί να επιτύχει ιδιότητες ενός καθαρού ημιτονοειδούς κύματος.



Για την εφαρμογή ενός SPWM οι παλμοί διαμορφώνονται με ένα αρχικό στενότερο πλάτος που σταδιακά γίνεται ευρύτερο στο κέντρο του κύκλου και τέλος τελειώνει στενότερο στο τέλος για να ολοκληρωθεί ο κύκλος.

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

Επίδειξη βίντεο

Αυτό αποτελεί έναν κύκλο SPWM και επαναλαμβάνεται καθ 'όλη τη διάρκεια με ένα συγκεκριμένο ρυθμό όπως καθορίζεται από τη συχνότητα εφαρμογής (συνήθως 50Hz ή 60Hz). Συνήθως, το SPWM χρησιμοποιείται για την οδήγηση συσκευών ισχύος όπως mosfets ή BJTs σε μετατροπείς ή μετατροπείς.

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

Αυτή η βαθμιαία τροποποίηση των PWM σε ένα SPWM επιβάλλεται σκόπιμα έτσι ώστε να αναπαράγει στενά το εκθετικά ανερχόμενο / μειωμένο πρότυπο ενός τυπικού κύματος ή ημιτονοειδούς κυματομορφής, εξ ου και το όνομα sinewave PWM ή SPWM.

Δημιουργία SPWM με το Arduino

Το παραπάνω εξηγημένο SPWM μπορεί εύκολα να εφαρμοστεί χρησιμοποιώντας μερικά διακριτά μέρη και επίσης χρησιμοποιώντας το Arduino που πιθανότατα θα σας επιτρέψει να έχετε μεγαλύτερη ακρίβεια με τις περιόδους κυματομορφής.

Ο ακόλουθος κωδικός Arduino μπορεί να χρησιμοποιηθεί για την εφαρμογή του προοριζόμενου SPWM για μια δεδομένη εφαρμογή.

Θέε μου!! που μοιάζει πάρα πολύ μεγάλο, αν ξέρετε πώς να το συντομεύσετε, σίγουρα μπορείτε να το κάνετε στο τέλος.

// By Swagatam (my first Arduino Code)
void setup(){
pinMode(8, OUTPUT)
pinMode(9, OUTPUT)
}
void loop(){
digitalWrite(8, HIGH)
delayMicroseconds(500)
digitalWrite(8, LOW)
delayMicroseconds(500)
digitalWrite(8, HIGH)
delayMicroseconds(750)
digitalWrite(8, LOW)
delayMicroseconds(500)
digitalWrite(8, HIGH)
delayMicroseconds(1250)
digitalWrite(8, LOW)
delayMicroseconds(500)
digitalWrite(8, HIGH)
delayMicroseconds(2000)
digitalWrite(8, LOW)
delayMicroseconds(500)
digitalWrite(8, HIGH)
delayMicroseconds(1250)
digitalWrite(8, LOW)
delayMicroseconds(500)
digitalWrite(8, HIGH)
delayMicroseconds(750)
digitalWrite(8, LOW)
delayMicroseconds(500)
digitalWrite(8, HIGH)
delayMicroseconds(500)
digitalWrite(8, LOW)
//......
digitalWrite(9, HIGH)
delayMicroseconds(500)
digitalWrite(9, LOW)
delayMicroseconds(500)
digitalWrite(9, HIGH)
delayMicroseconds(750)
digitalWrite(9, LOW)
delayMicroseconds(500)
digitalWrite(9, HIGH)
delayMicroseconds(1250)
digitalWrite(9, LOW)
delayMicroseconds(500)
digitalWrite(9, HIGH)
delayMicroseconds(2000)
digitalWrite(9, LOW)
delayMicroseconds(500)
digitalWrite(9, HIGH)
delayMicroseconds(1250)
digitalWrite(9, LOW)
delayMicroseconds(500)
digitalWrite(9, HIGH)
delayMicroseconds(750)
digitalWrite(9, LOW)
delayMicroseconds(500)
digitalWrite(9, HIGH)
delayMicroseconds(500)
digitalWrite(9, LOW)
}
//-------------------------------------//

Στην επόμενη ανάρτηση θα εξηγήσω πώς να χρησιμοποιήσετε την παραπάνω γεννήτρια SPWM που βασίζεται στο Arduino φτιάξτε ένα καθαρό κύκλωμα μετατροπέα από κύμα ....Συνέχισε να διαβάζεις!

Ο παραπάνω κώδικας SPWM βελτιώθηκε περαιτέρω από τον κ. Atton για τη βελτίωση της απόδοσής του, όπως δίνεται παρακάτω:

/*
This code was based on Swagatam SPWM code with changes made to remove errors. Use this code as you would use any other Swagatam’s works.
Atton Risk 2017
*/
const int sPWMArray[] = {500,500,750,500,1250,500,2000,500,1250,500,750,500,500} // This is the array with the SPWM values change them at will
const int sPWMArrayValues = 13 // You need this since C doesn’t give you the length of an Array
// The pins
const int sPWMpin1 = 10
const int sPWMpin2 = 9
// The pin switches
bool sPWMpin1Status = true
bool sPWMpin2Status = true
void setup()
{
pinMode(sPWMpin1, OUTPUT)
pinMode(sPWMpin2, OUTPUT)
}
void loop()
{
// Loop for pin 1
for(int i(0) i != sPWMArrayValues i++)
{
if(sPWMpin1Status)
{
digitalWrite(sPWMpin1, HIGH)
delayMicroseconds(sPWMArray[i])
sPWMpin1Status = false
}
else
{
digitalWrite(sPWMpin1, LOW)
delayMicroseconds(sPWMArray[i])
sPWMpin1Status = true
}
}
// Loop for pin 2
for(int i(0) i != sPWMArrayValues i++)
{
if(sPWMpin2Status)
{
digitalWrite(sPWMpin2, HIGH)
delayMicroseconds(sPWMArray[i])
sPWMpin2Status = false
}
else
{
digitalWrite(sPWMpin2, LOW)
delayMicroseconds(sPWMArray[i])
sPWMpin2Status = true
}
}
}




Προηγούμενο: 8X Overunity από τον Joule Thief - Αποδεδειγμένη σχεδίαση Επόμενο: Arduino Pure Sine Wave Inverter Circuit with Full Program Code