Εισαγωγή στο Προγραμματισμό με τη PASCAL & τη Matlab Εξαμηνιαία Εργασία 2015 Μετατρέποντας AC σε DC Τάση Περισσότερες Επεξηγήσεις. Συναρτήσεις στη PASCAL Προσομοίωση ενός Συστήματος / Κυκλώματος, μέσα από ένα Πρόγραμμα Σκοπός Μηχανές Καταστάσεων (State Machines) Δομές προγραμματισμού: Οι δομές Ε- πιλογής & Επανάληψης. Το Κύκλωμα Ανόρθωσης Τάσης & η Προσομοίωση & Ανάλυσή του, μέσα από ένα Πρόγραμμα
ΤΑ ΒΗΜΑΤΑ ΣΤΗΝ ΕΚΤΕΛΕΣΗ ΤΗΣ ΕΞΑΜΗΝΙΑΙΑΣ Στη πορεία εργασίας της εξαμηνιαίας εργασίας, περιγράφονταν τα βήματα στην α- νάπτυξη του προγράμματος, της εργασίας. Σ αυτή την ενότητα, κοιτάζουμε πιο α- ναλυτικά και προσπαθούμε να αναπτύξουμε το πρόγραμμα, για το τελευταίο βήμα, το Βήμα 5 της εργασίας που περιλαμβάνει το πλήρες κύκλωμα της ανόρθωσης τάσης, με το πυκνωτή και την αντίσταση. Μέσα από την ανάπτυξη του προγράμματος, για το Βήμα 5, για μία ακόμα φορά, προσπαθούμε να δούμε πως: Από την περιγραφή και την εξίσωση λειτουργίας του κυκλώματος ανόρθωσης τάσης, δημιουργούμε το πρόγραμμα που αναπαριστάνει τη λειτουργία αυτού του κυκλώματος. Χρησιμοποιούμε συναρτήσεις στη PASCAL, για να γράφουμε προγράμματα και ειδικά, για να γράψουμε το πρόγραμμα, για το κύκλωμα ανόρθωσης τάσης, του Βήματος 5. Το πρόγραμμα, για το κύκλωμα ανόρθωσης τάσης, στο Βήμα 5, είναι ένα καλό παράδειγμα, για τον τρόπο που χρησιμοποιούμε συναρτήσεις, για να γράφουμε προγράμματα στη PASCAL, αλλά και γενικότερα, σε κάθε άλλη γλώσσα προγραμματισμού. [4 Μονάδες] Τροποποιείστε το πρόγραμμα του Βήματος 4, ώστε να υπολογίζει την τάση εξόδου, στο κύκλωμα ανόρθωσης τάσης της Εικόνας 1 που εκτός από τη δίοδο, περιλαμβάνει και ένα πυκνωτή. Το πλήρες κύκλωμα, για την ανόρθωση τάσης τη μετατροπή εναλλασσόμενης σε συνεχή τάση, παριστάνεται στην Εικόνα 1. Στη περιγραφή του κυκλώματος, στη πορεία εργασίας, είδαμε πως όλη η λειτουργία του κυκλώματος περιγράφεται από την εξίσωση: Αυτή είναι η χαρακτηριστική εξίσωση του κυκλώματος και δίνει τη τάση V out, στην έξοδο, για καθεμία από τις δύο καταστάσεις λειτουργίας του κυκλώματος. Για να γράψουμε το πρόγραμμα, για το κύκλωμα ανόρθωσης τάσης, στην Εικόνα 1, ξεκινάμε από τη παραπάνω εξίσωση και επιχειρούμε να δημιουργήσουμε ένα πρόγραμμα που να υπολογίζει αυτή την εξίσωση.
Εικόνα 1: Το κύκλωμα ανόρθωσης τάσης.η δίοδος επιτρέπει το ρεύμα I, από τη πηγή, όταν αυτό έχει θετική φορά (α) και το διακόπτει, όταν έχει αρνητική φορά (β). Στη μία κατάσταση (α), η τάση V out στην έξοδο του κυκλώματος είναι απλά ίση με την τάση V in, στην είσοδο. Στην άλλη κατάσταση (β), η τάση V out στην έξοδο του κυκλώματος, είναι η τάση εκφόρτισης V εκφόρτισης του πυκνωτή. H εξίσωση της τάσης εξόδου V out, έχει δύο σκέλη, ένα για τη περίπτωση που το ρεύμα I από τη πηγή, έχει θετική φορά (περίπτωση (α), Εικόνα 1): όπου, οπότε, I = I C + I R 0 I R + I C 0 I R I C I R = V 0 cos(ω t) / R και I C = ω C V 0 cos(ω t + 90 ) Vout = V 0 cos(ω t) Το άλλο σκέλος της εξίσωσης, για τη τάση εξόδου V out, είναι για τη περίπτωση που το ρεύμα I από τη πηγή, είναι αρνητικό (περίπτωση (β), Εικόνα 1), οπότε: V in V εκφόρτισης V 0 cos(ω t) V 0 cos(ω t A ) e (t ta) / RC και τότε, η τάση στην έξοδο είναι από την εκφόρτιση του πυκνωτή: Vout = V εκφόρτισης = V 0 cos(ω t A ) e (t ta) / RC
Εικόνα 2: Η συνάρτηση Positive_I() που υπολογίζει τη τάση V out, στην έξοδο του κυκλώματος, όσο το συνολικό ρεύμα στο κύκλωμα, έχει θετική φορά, Ι = Ι R + I C 0. H Positive_I() υπολογίζει τη τάση V out, χρησιμοποιώντας το πρώτο σκέλος V out = V in = V 0 cos(ω t) της χαρακτηριστικής εξίσωσης του κυκλώματος, για διακριτές χρονικές στιγμές, t = t, t + dt, t + 2 dt,t + 3 dt +, όπου dt = T / 20, όσο Ι = Ι R + I C 0.
Επειδή η εξίσωση της τάσης εξόδου V out, για το κύκλωμα ανόρθωσης τάσης, έχει δύο σκέλη, μπορούμε να γράψουμε ένα πρόγραμμα που να υπολογίζει αυτή τη τάση, χρησιμοποιώντας δύο συναρτήσεις: μία για να υπολογίζει τη τάση εξόδου, όσο I = I C + I R 0 και μία άλλη συνάρτηση για να υπολογίζει τη τάση εξόδου V out, όσο V in V εκφόρτισης. Κάθε μία από αυτές τις συναρτήσεις, πολύ απλά, υπολογίζει τη V out, εφαρμόζοντας το αντίστοιχο σκέλος της χαρακτηριστικής εξίσωσης του κυκλώματος, για τη V out. Ας δούμε πως γράφουμε καθεμία από αυτές τις συναρτήσεις. Γράφοντας τη συνάρτηση Positive_I(). Αυτή η συνάρτηση υ- πολογίζει τη τάση εξόδου V out, στη βάση του πρώτου σκέλους της ε- ξίσωσης. Η συνάρτηση Positive_I(), ξεκινάει / καλείται να υπολογίζει τη τάση V out, όταν το ρεύμα στο κύκλωμα γίνεται θετικό και εξακολουθεί να υπολογίζει τη τάση εξόδου, όσο αυτό το ρεύμα παραμένει θετικό. Δηλαδή, η συνάρτηση Positive_I(), καλείται τη χρονική στιγμή t που: I = I C + I R 0 και υπολογίζει τη τάση εξόδου από το τύπο: Vout = V 0 cos(ω t) για διακριτές χρονικές στιγμές t = t, t+dt, t+2dt, t+3dt,, όπου dt = T / 20, όσο: I = I C + I R 0 Αναλυτικά, η μορφή / ο κώδικας της Positive_I(), είναι στην Εικόνα 2. Γράφοντας τη συνάρτηση Negative_I(). Αυτή η συνάρτηση υ- πολογίζει τη τάση εξόδου V out, στη βάση του δεύτερου σκέλους της εξίσωσης του κυκλώματος. Η συνάρτηση Negative_I(), ξεκινάει / καλείται να υπολογίζει τη τάση V out, όταν το ρεύμα στο κύκλωμα γίνεται αρνητικό, δηλαδή τη χρονική στιγμή t που: I = I C + I R 0 Η Negative_I() υπολογίζει τη τάση εξόδου από το δεύτερο σκέλος της χαρακτηριστικής εξίσωσης του κυκλώματος: Vout = V εκφόρτισης = V 0 cos(ω t A ) e (t ta) / RC
Εικόνα 3: Η συνάρτηση Negative_I() που ξεκινάει να υπολογίζει τη τάση V out, στην έξοδο του κυκλώματος, όταν το συνολικό ρεύμα στο κύκλωμα, αλλάζει φορά, από θετική σε αρνητική, Ι = Ι R + I C 0. H Negative_I() υπολογίζει τη τάση V out, χρησιμοποιώντας το δεύτερο σκέλος V out = V 0 cos(ω t A ) e (t ta) / RC της χαρακτηριστικής εξίσωσης του κυκλώματος, για διακριτές χρονικές στιγμές, t = t Α, t Α + dt, t Α + (t ta)/rc 2 dt, t Α + 3 dt +, όπου dt = T / 20, για όσο V in V εκφόρτισης V 0 cos(ω t) V 0 cos(ω t A ) e
όπου t A είναι η χρονική στιγμή που το ρεύμα Ι γίνεται αρνητικό, I = I C + I R 0. Η Negative_I() υπολογίζει τη τάση εξόδου από το παραπάνω τύπο, για διακριτές χρονικές στιγμές t = t Α, t Α +dt, t Α +2dt, t Α +3dt,, για όσο: V in V εκφόρτισης V 0 cos(ω t) V 0 cos(ω t A ) e (t ta)/rc Αναλυτικά, η μορφή / ο κώδικας της Negative_I(), είναι στην Εικόνα 3. Συνδυάζοντας τις συναρτήσεις Positive_I() και Negative_I(), σ ένα πρόγραμμα. Έχοντας γράψει τις συναρτήσεις Positive_I() και Negative_I(), για να υπολογίζουν τη τάση εξόδου στις δύο καταστάσεις του κυκλώματος, μπορούμε εύκολα να γράψουμε το πρόγραμμα, για το κύκλωμα ανόρθωσης τάσης, χρησιμοποιώντας / καλώντας τις δύο αυτές συναρτήσεις. Εκτελέστε το παρακάτω πρόγραμμα, χρησιμοποιώντας τιμές αντίστασης R = 1800 Ω και χωρητικότητας C = 45 μf. program AC_to_DC_Complete_Circuit; Uses math; (* Χρησιμοποιούμε τη μαθηματική βιβλιοθήκη της PASCAL *) const pi = 3.14; e = 2.71; var Simulation_time, V0, f, t : real; omega, Period, dt : real; Vin, Vout : real; R, C : real; function Positive_I (V0, omega, t, dt, R, C : real) : real; var V, Ir, Ic, I : real; begin V := V0 * cos(omega*t); Ir := V / R; (* Υπολογίζουμε το ρεύμα στην αντίσταση *) Ic := omega * C * V0 * cos( omega * t + (pi / 2.0) ); I := Ir + Ic; (* Υπολογίζουμε το συνολικό ρεύμα στο κύκλωμα *) while ( I > 0 ) do (* Όσο το ρεύμα Ι στο κύκλωμα έχει θετική φορά,... *) 7
begin writeln(t:6:3, ' ', V:5:2, ' ', V:5:2); t := t + dt; V := V0 * cos(omega*t); Ir := V / R; Ic := omega * C * V0 * cos( omega * t + (pi / 2.0) ); I := Ir + Ic end; Positive_I := t end; function Negative_I (V0, omega, t, dt, R, C : real) : real; var V, Vinitial, Vsource, ta, dynamh : real; begin ta := t; Vsource := V0 * cos (omega * ta); Vinitial := Vsource; V := Vinitial; while ( V >= Vsource ) do begin writeln(t:6:3, ' ', Vsource:5:2, ' ', V:5:2); t := t + dt; Vsource := V0 * cos(omega*t); dynamh := - (t - ta) / (R * C); V := Vinitial * power(e, dynamh) end; Negative_I := t end; begin write('dwse to xrono Prosomoiwshs [sec]:'); readln(simulation_time); write('dwse to platos (V0) ths AC tashs [Volts]:'); 8
readln(v0); write('dwse th syxnothta (f) thw AC tashs [Hz]:'); readln(f); write('dwse thn antistash (R) [Ohm]:'); readln(r); write('dwse th xwrhtikothta (C) tou pyknwth [microf]:'); readln(c); C := C * 10E-6; Period := 1 / f; omega := 2 * pi * f; dt := Period / 20.; t := 0; writeln(' t ', 'Vin ', 'Vout '); writeln(); while ( t <= Simulation_time ) do begin (* Αρχή της επανάληψης και της προσομοίωσης *) t := Positive_I (V0, omega, t, dt, R, C); t := Negative_I (V0, omega, t, dt, R, C) end; (* Τέλος της επανάληψης και της προσομοίωσης *) readln() end. 9