Πίνακας περιεχομένων:
- Βήμα 1: Απαιτούνται εξαρτήματα
- Βήμα 2: Σχηματικό διάγραμμα
- Βήμα 3: Κατανόηση του κυκλώματος
- Βήμα 4: Υπολογισμός συχνότητας και τάσης
- Βήμα 5: Κωδικός Arduino
- Βήμα 6: Συμπέρασμα
Βίντεο: Μέτρηση συχνότητας και τάσης τροφοδοσίας με χρήση Arduino: 6 βήματα
2024 Συγγραφέας: John Day | [email protected]. Τελευταία τροποποίηση: 2024-01-30 08:32
Εισαγωγή:
Ο στόχος αυτού του έργου είναι να μετρήσει τη συχνότητα και την τάση τροφοδοσίας, η οποία κυμαίνεται μεταξύ 220 έως 240 Volts και 50Hz εδώ στην Ινδία. Χρησιμοποίησα ένα Arduino για τη λήψη σήματος και τον υπολογισμό της συχνότητας και της τάσης, μπορείτε να χρησιμοποιήσετε οποιοδήποτε άλλο μικροελεγκτή ή πλακέτα που έχετε. Το κύκλωμα απαιτεί μια χούφτα εξαρτημάτων και είναι αρκετά ακριβές για όλους τους πρακτικούς σκοπούς.
Βήμα 1: Απαιτούνται εξαρτήματα
- Arduino Uno
- IC LM358
- Μετασχηματιστής από τα κάτω (220V έως 12V)
-
Πυκνωτές:
- 0.1uF
- 2 x 1uF
-
Αντιστάσεις:
- 3 x 1kOhm
- 2 x 100kOhm
- 1,5kOhm
- 3,3kOhm
- 6,8kOhm
- 3 x 1N4148 δίοδος
- Πίνακας ψωμιού και καλώδιο άλτης (προαιρετικά)
Βήμα 2: Σχηματικό διάγραμμα
Στο παραπάνω κύκλωμα, ο πρωτεύων του μετασχηματιστή συνδέεται με το δίκτυο τροφοδοσίας και ο κύριος συνδέεται με το κύκλωμα μέτρησης
Βήμα 3: Κατανόηση του κυκλώματος
Σύμφωνα με τη λειτουργικότητα, αυτό το κύκλωμα μπορεί να χωριστεί σε τέσσερα μέρη:
Α: Το κύκλωμα ανιχνευτή μηδενικής διασταύρωσης
Αυτό το κύκλωμα παράγει έναν τετραγωνικό παλμό 5V κάθε φορά που το κύμα ηλίου μεταβαίνει από θετικό σε αρνητικό. Η αντίσταση R1 σε συνδυασμό με τα D1 και D2 περιορίζει την ταλάντωση της τάσης εισόδου στη διασταύρωση διόδου σε -0,6V έως +5,6V (με την προϋπόθεση ότι η τάση προς τα εμπρός διόδου είναι 0,6V). Επιπλέον, μπορείτε να αυξήσετε το εύρος τάσης εισόδου του κυκλώματος αυξάνοντας την τιμή του R1.
Η αντίσταση R2 και R3 σχηματίζουν ένα διαχωριστή τάσης για να περιορίσει την αρνητική ταλάντευση τάσης στα -0,24Volts καθώς η τάση κοινού τρόπου εισόδου του LM358 περιορίζεται στα -0,3Volts.
Ο αντιστάτης R4, R5, ο πυκνωτής C1 και το op-amp (εδώ χρησιμοποιείται ως συγκριτής) σχηματίζουν το κύκλωμα Schmitt Trigger όπου ο αντιστάτης R4 και R5 θέτουν την υστέρηση στην είσοδο +49.5mV πάνω από το έδαφος. Η έξοδος του Schmitt Trigger τροφοδοτείται στο Arduino PIN2 για περαιτέρω επεξεργασία.
Β: Απομόνωση και τάση υποχώρηση
Όπως υποδηλώνει το όνομα, αυτό το μέρος απομονώνει και μειώνει την τάση στα περίπου 12Vrms. Η μειωμένη τάση τροφοδοτείται περαιτέρω στο κύκλωμα οργάνων.
Γ: Κύκλωμα ανιχνευτή αιχμής
Αυτό το κύκλωμα καθορίζει τη μέγιστη τάση αιχμής του σήματος εισόδου. Ο διαιρέτης αντίστασης R6 και R7 μειώνει την τάση εισόδου κατά 0,23 (τα 12Vrms μειώνονται σε 2,76Vrms). Η δίοδος D3 διεξάγει μόνο τον θετικό μισό κύκλο του σήματος. Η τάση στο C2 αυξάνεται μέχρι την τιμή αιχμής του διορθωμένου σήματος, το οποίο τροφοδοτείται με τον αναλογικό πείρο A0 Arduino για περαιτέρω υπολογισμό της τάσης.
Επιπλέον, μπορείτε να αντικαταστήσετε αυτό το κύκλωμα με ένα κύκλωμα ανίχνευσης αιχμής ακριβείας όπως αυτά που αναφέρονται εδώ. Αλλά για τους σκοπούς επίδειξής μου, το παραπάνω κύκλωμα θα είναι αρκετό.
Δ: Arduino
Σε αυτό το μέρος, το Arduino συλλαμβάνει τους τετραγωνικούς παλμούς που δημιουργούνται από το κύκλωμα Schmitt Trigger και διαβάζει την αναλογική τάση από το κύκλωμα ανιχνευτή αιχμής. Τα δεδομένα υποβάλλονται σε περαιτέρω επεξεργασία για τον προσδιορισμό της χρονικής περιόδου (άρα συχνότητας) του τετραγωνικού παλμού (που είναι ίσος με το άτομο χρόνου παροχής εναλλασσόμενου ρεύματος) και της τάσης της παροχής.
Βήμα 4: Υπολογισμός συχνότητας και τάσης
Υπολογισμός συχνότητας:
Με τη βοήθεια του Arduino, μπορούμε να μετρήσουμε τη χρονική περίοδο Τ του σήματος. Οι τετράγωνοι παλμοί κύματος από τον ανιχνευτή μηδενικής διασταύρωσης τροφοδοτούνται στην ακίδα 2, από εκεί μπορούμε να μετρήσουμε τη χρονική περίοδο κάθε παλμού. Μπορούμε να χρησιμοποιήσουμε τον εσωτερικό χρονοδιακόπτη του Arduino (συγκεκριμένα το χρονόμετρο 1) για να υπολογίσουμε το χρονικό διάστημα μεταξύ δύο ανερχόμενων άκρων του τετράγωνου παλμού με τη βοήθεια διακοπών. Ο χρονοδιακόπτης αυξάνεται κατά 1 ανά κύκλο ρολογιού (χωρίς προκαθοριστή = 1) και η τιμή αποθηκεύεται στον καταχωρητή TCNT1. Ως εκ τούτου, το ρολόι 16Mhz αυξάνει τον μετρητή κατά 16 κάθε μικροδευτερόλεπτο. Παρομοίως για το prescaler = 8 το χρονόμετρο αυξάνεται κατά 2 κάθε μικροδευτερόλεπτο. Εξ ου και το χρονικό διάστημα μεταξύ δύο ανερχόμενων ακμών
T = (τιμή TCNT1) / χρόνος που απαιτείται για κάθε μέτρηση
Πού, χρόνος που απαιτείται για κάθε μέτρηση = prescaler / (ταχύτητα ρολογιού Arduino (16MHz)
Ως εκ τούτου, συχνότητα f = 1 / T = (ταχύτητα ρολογιού Arduino (16MHz) / (Prescaler * TCNT! Τιμή)
Ως εκ τούτου, η ταχύτητα του χρονοδιακόπτη (Hz) δίνεται από = (ταχύτητα ρολογιού Arduino (16MHz)) / prescaler
και η συχνότητα του σήματος δίνεται από = (ταχύτητα ρολογιού Arduino
Αντίστοιχα, μπορούμε να υπολογίσουμε τη συχνότητα f από τη σχέση f = 1/T.
Υπολογισμός τάσης:
Το ενσωματωμένο ADC του Arduino έχει ανάλυση 10 bits (πιθανές τιμές = 2^10 = 1024), επιστρέφοντας τιμές στο εύρος 0-1023. Για να υπολογίσουμε την αντίστοιχη αναλογική τάση V πρέπει να χρησιμοποιήσουμε την ακόλουθη σχέση
V = (ADC Reading) * 5/1023
Για να υπολογίσουμε την τάση τροφοδοσίας Vs (rms) πρέπει να λάβουμε υπόψη την αναλογία μετασχηματιστή, το διαχωριστή αντίστασης R6R7 και το κύκλωμα ανιχνευτή αιχμής. Μπορούμε απλά να συγκεντρώσουμε τους διάφορους παράγοντες/αναλογία ως:
Αναλογία μετασχηματιστή = 12/230 = 0,052
Διαχωριστής αντίστασης = R7/(R6 + R7) = 0,23
Κύκλωμα ανιχνευτή αιχμής = 1,414
Vs (rms) = V/(1.414*0.052*0.23) = (ανάγνωση ADC)*0.289
Πρέπει να σημειωθεί ότι αυτή η τιμή απέχει πολύ από την πραγματική τιμή, κυρίως λόγω σφάλματος στην πραγματική αναλογία μετασχηματιστή και πτώσης τάσης διόδου προς τα εμπρός. Ένας τρόπος για να παρακάμψετε αυτό είναι να προσδιορίσετε τον συντελεστή μετά τη συναρμολόγηση του κυκλώματος. Δηλαδή μετρώντας την τάση τροφοδοσίας και την τάση στον πυκνωτή C2 ξεχωριστά με ένα πολύμετρο, και στη συνέχεια υπολογίζοντας τα Vs (rms) ως εξής:
Vs (rms) = ((Τάση τροφοδοσίας *5)/(Τάση σε C2 *1023)) *(Ανάγνωση ADC)
στην περίπτωσή μου, Vs (rms) = 0,33*(ADC Reading)
Βήμα 5: Κωδικός Arduino
#define volt_in A0 // ακίδα ανάγνωσης αναλογικής τάσης
πτητικό uint16_t t_period? uint16_t ADC_value = 0; float volt, συχνότητα? void isr () {t_period = TCNT1; // αποθηκεύστε την τιμή TCNT1 σε t_period TCNT1 = 0; // επαναφορά χρονοδιακόπτη ADC_value = analogRead (volt_in); // διαβάστε αναλογική τάση} float get_freq () {uint16_t timer = t_period; εάν (χρονοδιακόπτης == 0) επιστρέφει 0 // για να αποφύγετε τη διαίρεση με το μηδέν else επιστροφή 16000000.0/(χρονοδιακόπτης 8UL*). // η συχνότητα δίνεται από f = clk_freq/(prescaler*timeperiod)} void setup () {TCCR1A = 0; TCCR1B = bit (CS11); // ορίστε τον προκατασκευαστή σε 8 TCNT1 = 0; // επαναφορά της τιμής του χρονοδιακόπτη TIMSK1 = bit (TOIE1); // ενεργοποίηση διακοπή υπερχείλισης Timer1 EIFR | = bit (INTF0); // διαγραφή σημαίας διακοπής INT0 Serial.begin (9600); } void loop () {attachInterrupt (0, isr, RISING); // ενεργοποίηση καθυστέρησης εξωτερικής διακοπής (INT0) (1000). detachInterrupt (0); freq = get_freq (); volt = ADC_value*0,33; String buf? buf += String (συχνότητα, 3); buf += F ("Hz / t"); buf += String (volt); buf += F ("Volts"); Serial.println (buf); }
Βήμα 6: Συμπέρασμα
Μπορείτε να συναρμολογήσετε το κύκλωμα σε ένα breadboard και να τροποποιήσετε τον κώδικα και να προσθέσετε μια κάρτα SD για να αποθηκεύσετε τα δεδομένα, τα οποία μπορούν αργότερα να αναλυθούν. Ένα τέτοιο παράδειγμα είναι ότι μπορείτε να αναλύσετε την τάση και τη συχνότητα στις ώρες αιχμής.
Το κύκλωμα που συγκέντρωσα στο breadboard χρησιμοποίησε το LM324 (quad opamp) αντί του LM358 (διπλό opamp) καθώς δεν είχα αυτό το IC εκείνη τη στιγμή και ο αποκλεισμός σε εθνικό επίπεδο λόγω της πανδημίας COVID-19 με δυσκόλεψε να αποκτήσω νέο IC Το Ωστόσο, δεν θα επηρεάσει τη λειτουργία του κυκλώματος.
Μη διστάσετε να σχολιάσετε παρακάτω για τυχόν προτάσεις και απορίες.
Συνιστάται:
Μέτρηση συχνότητας τροφοδοσίας χρησιμοποιώντας το Arduino: 7 βήματα (με εικόνες)
Μετρήστε τη συχνότητα του ρεύματος χρησιμοποιώντας το Arduino: Στις 3 Απριλίου, ο πρωθυπουργός της Ινδίας, Shri. Ο Ναρέντρα Μόντι είχε απευθύνει έκκληση στους Ινδιάνους να σβήσουν τα φώτα τους και να ανάψουν μια λάμπα (Ντίγια) στις 21:00 το βράδυ στις 5 Απριλίου για να σηματοδοτήσει τον αγώνα της Ινδίας ενάντια στον κορονοϊό. Αμέσως μετά την ανακοίνωση, επικράτησε μεγάλο χάος
Μέτρηση υγρασίας και θερμοκρασίας με χρήση HIH6130 και Arduino Nano: 4 βήματα
Μέτρηση υγρασίας και θερμοκρασίας με χρήση HIH6130 και Arduino Nano: Το HIH6130 είναι αισθητήρας υγρασίας και θερμοκρασίας με ψηφιακή έξοδο. Αυτοί οι αισθητήρες παρέχουν επίπεδο ακρίβειας ± 4% RH. Με κορυφαία μακροπρόθεσμη σταθερότητα στη βιομηχανία, πραγματικό ψηφιακό I2C με αντιστάθμιση θερμοκρασίας, κορυφαία αξιοπιστία στη βιομηχανία, ενεργειακή απόδοση
Μέτρηση υγρασίας και θερμοκρασίας με χρήση HTS221 και Arduino Nano: 4 βήματα
Μέτρηση υγρασίας και θερμοκρασίας με χρήση HTS221 και Arduino Nano: Το HTS221 είναι ένας εξαιρετικά συμπαγής χωρητικός ψηφιακός αισθητήρας για σχετική υγρασία και θερμοκρασία. Περιλαμβάνει ένα στοιχείο ανίχνευσης και ένα ολοκληρωμένο κύκλωμα ειδικής εφαρμογής μικτού σήματος (ASIC) για την παροχή των πληροφοριών μέτρησης μέσω ψηφιακού σειριακού
Μέτρηση υγρασίας και θερμοκρασίας με χρήση HTS221 και Raspberry Pi: 4 βήματα
Μέτρηση υγρασίας και θερμοκρασίας με χρήση HTS221 και Raspberry Pi: Το HTS221 είναι ένας εξαιρετικά συμπαγής χωρητικός ψηφιακός αισθητήρας για σχετική υγρασία και θερμοκρασία. Περιλαμβάνει ένα στοιχείο ανίχνευσης και ένα ολοκληρωμένο κύκλωμα ειδικής εφαρμογής μικτού σήματος (ASIC) για την παροχή των πληροφοριών μέτρησης μέσω ψηφιακού σειριακού
Μέτρηση τάσης με χρήση Arduino: 5 βήματα
Μέτρηση Τάσης με χρήση Arduino: Η μέτρηση της τάσης είναι αρκετά εύκολη χρησιμοποιώντας οποιοδήποτε μικροελεγκτή σε σύγκριση με τη μέτρηση του ρεύματος. Η μέτρηση των τάσεων καθίσταται απαραίτητη εάν εργάζεστε με μπαταρίες ή θέλετε να δημιουργήσετε το δικό σας ρυθμιζόμενο τροφοδοτικό. Αν και αυτή η μέθοδος εφαρμόζεται