Μυστικό βολτόμετρο στο Arduino - μέτρηση τάσης μπαταρίας χρησιμοποιώντας μικροελεγκτή. Δημιουργία ελεγχόμενου φορτιστή Arduino

Μια απλή λύση για συστήματα ασφαλείας και αυτοματισμού!

BM8039D, MP8036, MA3401

Είναι διαθέσιμα

Αγοράστε χύμα

Αυτή η μονάδα έχει σχεδιαστεί ειδικά για συσκευές από τον κατάλογο Master Kit BM8039D, MP8036, MA3401 κ.λπ. Αλλά μπορεί να χρησιμοποιηθεί με επιτυχία με οποιοδήποτε σύστημα οικιακού αυτοματισμού και συναγερμού.

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

Η ενότητα θα είναι χρήσιμη για έργα χρηστών που βασίζονται σε μικροελεγκτές και Arduino και Raspberry.

Προδιαγραφές

Τάση τροφοδοσίας (V) 220
Αριθμός ενσωματωμένων ρελέ ελέγχου (τμχ) 1
Τύπος ισχύος μεταβλητός
Αριθμός εισόδων (τμχ) 1
Αριθμός εξόδων (τμχ) 1
Συνιστώμενη θερμοκρασία λειτουργίας (°C) -30...+60
Μήκος (mm) 42
Πλάτος (mm) 25
Ύψος (mm) 17
Βάρος, όχι περισσότερο (g) 20
Τάση μεταγωγής (V) 220
Συνδεδεμένη ισχύς φορτίου, μέγιστη (W) 1
Βάρος 38

Ιδιαιτερότητες

  • Οπτογαλβανική απομόνωση. Τάση μόνωσης 1500V
  • Δυνατότητα απευθείας σύνδεσης με τον μικροελεγκτή.
  • Δυνατότητα ελέγχου πηνίων ρελέ με ισχύ έως 1 W.
  • Τάση μεταγωγής έως 350V

Αρχή λειτουργίας

Εάν υπάρχει εναλλασσόμενη τάση 220 V στην είσοδο της μονάδας, οι επαφές του ρελέ κλείνουν. Χάρη στη χρήση ενός οπτικού ρελέ, η μονάδα μπορεί να συνδεθεί απευθείας στις γραμμές ελέγχου του μικροελεγκτή.

Σχεδιασμός συσκευής

Η μονάδα έχει σχεδιαστεί ως ενσωματωμένος αισθητήρας. Η μονάδα έχει μικρές διαστάσεις 40x25x15 mm. Εάν είναι απαραίτητο, η μονάδα μπορεί να λειτουργήσει ως πηγή ισχύος χωρίς μετασχηματιστή, με τάση λειτουργίας 5V/12V και ρεύμα έως 80 mA.

Σχέδιο

Σύνδεση

Περιεχόμενα παράδοσης

  • Μονάδα MP220V - 1 τεμ.
  • Οδηγίες - 1 τεμ.

Τι απαιτείται για τη συναρμολόγηση

  • Για τη σύνδεση θα χρειαστείτε: σύρμα, κατσαβίδι, πλαϊνούς κόφτες.

Προετοιμασία για χρήση

  • Γυρίστε το πολύμετρο σε λειτουργία μέτρησης αντίστασης. Συνδέστε τους ανιχνευτές στη γραμμή ελέγχου της μονάδας.
  • Συνδέστε το καλώδιο ρεύματος με ένα βύσμα στους ακροδέκτες "IN 220V".
  • Συνδέστε το βύσμα στο δίκτυο 220V.
  • Η ένδειξη στην πλακέτα πρέπει να ανάβει και το πολύμετρο να δείχνει 0 Ohm.
  • Ο έλεγχος ολοκληρώθηκε. Απολαύστε τη χρήση σας

όροι χρήσης

  • Θερμοκρασία -30C έως +50C.
  • Σχετική υγρασία 20-80% χωρίς συμπύκνωση.

Αυτό το άρθρο παρέχει ένα ενδιαφέρον διάγραμμα για όσους τους αρέσει να πειραματίζονται και Arduino. Διαθέτει ένα απλό ψηφιακό βολτόμετρο που μπορεί να μετρήσει με ασφάλεια την τάση DC μεταξύ 0 και 30 V. Η ίδια η πλακέτα Arduino μπορεί να τροφοδοτηθεί από μια τυπική παροχή 9 V.



Όπως γνωρίζετε, χρησιμοποιώντας την αναλογική είσοδο Arduino μπορείτε να μετρήσετε τάση από 0 έως 5 V (με τυπική τάση αναφοράς 5 V). Αλλά αυτό το εύρος μπορεί να επεκταθεί χρησιμοποιώντας έναν διαιρέτη τάσης.


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



Ο αναλογικός αισθητήρας στο Arduino ανιχνεύει την τάση στην αναλογική είσοδο και τη μετατρέπει σε ψηφιακή μορφή που μπορεί να διαβαστεί από τον μικροελεγκτή. Συνδέουμε έναν διαιρέτη τάσης που σχηματίζεται από αντιστάσεις R1 (100K) και R2 (10K) στην αναλογική είσοδο A0. Με αυτές τις τιμές αντίστασης, μπορεί να τροφοδοτηθεί έως και 55 V στο Arduino, αφού ο συντελεστής διαίρεσης σε αυτή την περίπτωση είναι 11, άρα 55V/11 = 5V. Για να βεβαιωθείτε ότι οι μετρήσεις είναι ασφαλείς για την πλακέτα, είναι προτιμότερο να μετράτε την τάση στην περιοχή από 0 έως 30 V.



Εάν οι ενδείξεις της οθόνης δεν ταιριάζουν με τις επαληθευμένες ενδείξεις του βολτόμετρου, χρησιμοποιήστε ένα ψηφιακό πολύμετρο ακριβείας για να βρείτε τις ακριβείς τιμές των R1 και R2. Σε αυτήν την περίπτωση, στον κωδικό θα χρειαστεί να αντικαταστήσετε τα R1=100000.0 και R2=10000.0 με τις δικές σας τιμές. Στη συνέχεια, θα πρέπει να ελέγξετε την παροχή ρεύματος μετρώντας την τάση στην πλακέτα μεταξύ 5V και GND. Η τάση μπορεί να είναι 4,95 V. Στη συνέχεια, στον κωδικό vout = (τιμή * 5,0) / 1024,0 πρέπει να αντικαταστήσετε το 5,0 με 4,95. Συνιστάται η χρήση αντιστάσεων ακριβείας με σφάλμα όχι μεγαλύτερο από 1%. Θυμηθείτε ότι η τάση πάνω από 55 V μπορεί να βλάψει την πλακέτα Arduino!



#περιλαμβάνω LiquidCrystal lcd(7, 8, 9, 10, 11, 12); int analogInput = 0; float vout = 0,0; float vin = 0,0; float R1 = 100000,0; // αντίσταση R1 (100K) float R2 = 10000,0; // αντίσταση R2 (10K) int τιμή = 0; void setup())( pinMode(analogInput, INPUT); lcd.begin(16, 2); lcd.print("DC VOLTMETER"); ) void loop())( // ανάγνωση της αναλογικής τιμής = analogRead(analogInput vout = (τιμή * 5,0) / 1024,0 vin = vout / (R2/(R1+R2));<0.09) { vin=0.0;// обнуляем нежелательное значение } lcd.setCursor(0, 1); lcd.print("INPUT V= "); lcd.print(vin); delay(500); }


Στοιχεία που χρησιμοποιούνται:


Πλακέτα Arduino Uno
Αντίσταση 100 KOhm
Αντίσταση 10 KOhm
Αντίσταση 100 ohm
Ποτενσιόμετρο 10 KOhm
Οθόνη LCD 16×2
  • Φροντιστήριο

Εισαγωγή

Γεια σε όλους! Μετά την ολοκλήρωση του κύκλου στους αισθητήρες, υπήρξαν διάφορες ερωτήσεις σχετικά με τη μέτρηση των παραμέτρων κατανάλωσης οικιακών και όχι πολύ ηλεκτρικών συσκευών. Ποιος καταναλώνει πόσο, πώς να συνδέσει τι να μετρήσει, ποιες λεπτότητες υπάρχουν κ.λπ. Ήρθε η ώρα να αποκαλύψετε όλα τα χαρτιά σε αυτόν τον τομέα.
Σε αυτή τη σειρά άρθρων θα εξετάσουμε το θέμα της μέτρησης των παραμέτρων ηλεκτρικής ενέργειας. Υπάρχει πράγματι ένας πολύ μεγάλος αριθμός από αυτές τις παραμέτρους, για τις οποίες θα προσπαθήσω να μιλήσω σταδιακά σε μικρές σειρές.
Μέχρι στιγμής έχουν προγραμματιστεί τρεις σειρές:
  • Μέτρηση ηλεκτρικής ενέργειας.
  • Ποιότητα ισχύος.
  • Συσκευές μέτρησης παραμέτρων ηλεκτρικής ενέργειας.
Κατά τη διαδικασία ανάλυσης, θα λύσουμε ορισμένα πρακτικά προβλήματα στους μικροελεγκτές μέχρι να επιτευχθεί το αποτέλεσμα. Φυσικά, το μεγαλύτερο μέρος αυτής της σειράς θα είναι αφιερωμένο στη μέτρηση εναλλασσόμενης τάσης και μπορεί να είναι χρήσιμο σε όλους όσους θέλουν να ελέγχουν τις ηλεκτρικές συσκευές του έξυπνου σπιτιού τους.
Με βάση τα αποτελέσματα ολόκληρου του κύκλου, θα παράγουμε κάποιου είδους έξυπνο μετρητή ηλεκτρικής ενέργειας με πρόσβαση στο Διαδίκτυο. Οι εντελώς έμπειροι οπαδοί του ελέγχου των ηλεκτρικών συσκευών του έξυπνου σπιτιού τους μπορούν να παρέχουν κάθε δυνατή βοήθεια στην υλοποίηση του τμήματος επικοινωνίας σε μια βάση, για παράδειγμα, MajorDomo. Ας κάνουμε το OpenSource ένα καλύτερο έξυπνο σπίτι, να το πω έτσι.
Σε αυτή τη σειρά δύο μερών, θα διερευνήσουμε τα ακόλουθα ερωτήματα:
  • Σύνδεση αισθητήρων ρεύματος και τάσης σε συσκευές DC, καθώς και μονοφασικά και τριφασικά κυκλώματα AC.
  • Μέτρηση ενεργών τιμών ρεύματος και τάσης.
  • Μέτρηση συντελεστή ισχύος;
  • Συνολική, ενεργός και άεργος ισχύς.
  • Κατανάλωση ηλεκτρικής ενέργειας;
Κάνοντας κλικ παρακάτω θα βρείτε τις απαντήσεις στις δύο πρώτες ερωτήσεις αυτής της λίστας. Σκόπιμα δεν θίγω τα ζητήματα της ακρίβειας στις μετρήσεις των δεικτών και από αυτή τη σειρά είμαι ευχαριστημένος μόνο με τα αποτελέσματα που προέκυψαν με ακρίβεια συν ή πλην ενός παπουτσιού. Σίγουρα θα αφιερώσω ένα ξεχωριστό άρθρο σε αυτό το θέμα στην τρίτη σειρά.

1. Σύνδεση αισθητήρων


Στην τελευταία σειρά σχετικά με τους αισθητήρες τάσης και ρεύματος, μίλησα για τους τύπους αισθητήρων, αλλά δεν μίλησα για το πώς να τους χρησιμοποιήσετε και πού να τους τοποθετήσετε. Ήρθε η ώρα να το φτιάξετε
Σύνδεση αισθητήρων DC
Είναι σαφές ότι ολόκληρη η σειρά θα αφιερωθεί σε συστήματα εναλλασσόμενου ρεύματος, αλλά ας προχωρήσουμε γρήγορα στα κυκλώματα συνεχούς ρεύματος, καθώς αυτό μπορεί να μας φανεί χρήσιμο κατά την ανάπτυξη τροφοδοτικών DC. Πάρτε για παράδειγμα έναν κλασικό μετατροπέα buck PWM:


Εικόνα 1. Μετατροπέας Buck PWM
Το καθήκον μας είναι να παρέχουμε σταθεροποιημένη τάση εξόδου. Επιπλέον, με βάση πληροφορίες από τον αισθητήρα ρεύματος, είναι δυνατός ο έλεγχος του τρόπου λειτουργίας του επαγωγέα L1, αποτρέποντας τον κορεσμό του, καθώς και την εφαρμογή προστασίας ρεύματος του μετατροπέα. Και για να είμαι ειλικρινής, δεν υπάρχουν πραγματικά επιλογές για την εγκατάσταση αισθητήρων.
Στην έξοδο του μετατροπέα είναι εγκατεστημένος ένας αισθητήρας τάσης με τη μορφή ωμικού διαιρέτη R1-R2, ο οποίος είναι ο μόνος ικανός να λειτουργεί σε συνεχές ρεύμα. Κατά κανόνα, ένα εξειδικευμένο μικροκύκλωμα μετατροπέα έχει είσοδο ανάδρασης και καταβάλλει κάθε δυνατή προσπάθεια για να διασφαλίσει ότι αυτή η είσοδος (3) έχει ένα ορισμένο επίπεδο τάσης που καθορίζεται στην τεκμηρίωση για το μικροκύκλωμα. Για παράδειγμα 1,25 V. Εάν η τάση εξόδου μας ταιριάζει με αυτό το επίπεδο, όλα είναι καλά - εφαρμόζουμε απευθείας την τάση εξόδου σε αυτήν την είσοδο. Εάν όχι, τότε ρυθμίστε το διαχωριστικό. Εάν πρέπει να παρέχουμε τάση εξόδου 5V, τότε ο διαιρέτης πρέπει να παρέχει συντελεστή διαίρεσης 4, δηλαδή για παράδειγμα, R1 = 30k, R2 = 10k.
Ο αισθητήρας ρεύματος συνήθως εγκαθίσταται μεταξύ του τροφοδοτικού και του μετατροπέα και στο τσιπ. Με βάση τη διαφορά δυναμικού μεταξύ των σημείων 1 και 2, και με γνωστή αντίσταση των αντιστάσεων Rs, είναι δυνατό να προσδιοριστεί η τρέχουσα τιμή του ρεύματος του πηνίου μας. Η εγκατάσταση ενός αισθητήρα ρεύματος μεταξύ των πηγών και του φορτίου δεν είναι καλή ιδέα, καθώς ο πυκνωτής του φίλτρου θα αποκοπεί από μια αντίσταση από τους καταναλωτές παλμικού ρεύματος. Η εγκατάσταση μιας αντίστασης στο κενό του κοινού καλωδίου επίσης δεν προμηνύει καλά - θα υπάρχουν δύο επίπεδα γείωσης με τα οποία θα είναι ευχάριστο να τα βάζετε.
Τα προβλήματα πτώσης τάσης μπορούν να αποφευχθούν χρησιμοποιώντας αισθητήρες ρεύματος χωρίς επαφή - όπως αισθητήρες χωλ:


Εικόνα 2. Αισθητήρας ρεύματος χωρίς επαφή
Ωστόσο, υπάρχει ένας πιο έξυπνος τρόπος μέτρησης του ρεύματος. Εξάλλου, η τάση πέφτει στο τρανζίστορ με τον ίδιο ακριβώς τρόπο και το ίδιο ρεύμα ρέει μέσα από αυτό με την αυτεπαγωγή. Κατά συνέπεια, η τρέχουσα τιμή του ρεύματος μπορεί επίσης να προσδιοριστεί από την πτώση τάσης σε αυτό. Ειλικρινά, αν κοιτάξετε την εσωτερική δομή των τσιπ μετατροπέων, για παράδειγμα, από την Texas Instruments, τότε αυτή η μέθοδος είναι τόσο κοινή όσο και οι προηγούμενες. Η ακρίβεια αυτής της μεθόδου δεν είναι φυσικά η υψηλότερη, αλλά αυτή είναι αρκετά αρκετή για να λειτουργήσει η τρέχουσα διακοπή.


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


Εικόνα 4. Σύνδεση αισθητήρων ρεύματος σε μετατροπείς flyback
Μπορούν επίσης να χρησιμοποιήσουν είτε μια εξωτερική αντίσταση είτε ένα τρανζίστορ στον ρόλο του.
Εδώ τελειώσαμε με τη σύνδεση αισθητήρων σε μετατροπείς DC. Εάν έχετε προτάσεις για άλλες επιλογές, θα χαρώ να συμπληρώσω το άρθρο με αυτές.
1.2 Σύνδεση αισθητήρων σε μονοφασικά κυκλώματα AC
Στα κυκλώματα AC έχουμε μια πολύ μεγαλύτερη επιλογή πιθανών αισθητήρων. Ας εξετάσουμε πολλές επιλογές.
Το πιο απλό είναι να χρησιμοποιήσετε έναν διαιρέτη τάσης αντίστασης και μια διακλάδωση ρεύματος.


Εικόνα 5. Σύνδεση αισθητήρων αντίστασης
Ωστόσο, έχει μερικά σημαντικά μειονεκτήματα:
Πρώτον, είτε θα παρέχουμε ένα σημαντικό εύρος του σήματος από την τρέχουσα διακλάδωση, εκχωρώντας μεγάλη ποσότητα ισχύος σε αυτό, είτε θα αρκεστούμε σε ένα μικρό πλάτος του σήματος και στη συνέχεια θα το ενισχύσουμε. Και δεύτερον, η αντίσταση δημιουργεί μια διαφορά δυναμικού μεταξύ του ουδέτερου δικτύου και του ουδέτερου της συσκευής. Εάν η συσκευή είναι απομονωμένη, τότε αυτό δεν έχει σημασία, αλλά εάν η συσκευή έχει ακροδέκτη γείωσης, τότε κινδυνεύουμε να μείνουμε χωρίς σήμα από τον αισθητήρα ρεύματος, αφού θα τον βραχυκυκλώσουμε. Ίσως αξίζει να δοκιμάσετε αισθητήρες που λειτουργούν με άλλες αρχές.
Για παράδειγμα, θα χρησιμοποιήσουμε μετασχηματιστές ρεύματος και τάσης ή έναν αισθητήρα ρεύματος εφέ Hall και έναν μετασχηματιστή τάσης. Υπάρχουν πολύ περισσότερες ευκαιρίες για εργασία με εξοπλισμό εδώ, καθώς το ουδέτερο σύρμα δεν έχει απώλειες και το πιο σημαντικό, και στις δύο περιπτώσεις υπάρχει γαλβανική απομόνωση του εξοπλισμού μέτρησης, η οποία συχνά μπορεί να είναι χρήσιμη. Ωστόσο, είναι απαραίτητο να ληφθεί υπόψη ότι οι αισθητήρες ρεύματος και τάσης του μετασχηματιστή έχουν περιορισμένη απόκριση συχνότητας και αν θέλουμε να μετρήσουμε την αρμονική σύνθεση της παραμόρφωσης, τότε δεν είναι γεγονός ότι θα λειτουργήσει.


Εικόνα 6. Σύνδεση μετασχηματιστή και αισθητήρων ρεύματος και τάσης χωρίς επαφή
1.3 Σύνδεση αισθητήρων σε πολυφασικά κυκλώματα AC
Στα πολυφασικά δίκτυα, η ικανότητά μας να συνδέουμε αισθητήρες ρεύματος είναι ελαφρώς μικρότερη. Αυτό οφείλεται στο γεγονός ότι δεν θα είναι δυνατή η χρήση διακλάδωσης ρεύματος καθόλου, καθώς η διαφορά δυναμικού μεταξύ των διακλαδώσεων φάσης θα κυμαίνεται σε εκατοντάδες βολτ και δεν γνωρίζω κανέναν ελεγκτή γενικής χρήσης του οποίου οι αναλογικές είσοδοι μπορούν να αντέξουν τέτοια κατάχρηση.
Φυσικά, υπάρχει ένας τρόπος για να χρησιμοποιήσετε τα ρεύματα shunt - για κάθε κανάλι πρέπει να δημιουργήσετε μια γαλβανικά απομονωμένη αναλογική είσοδο. Αλλά είναι πολύ πιο εύκολο και πιο αξιόπιστο να χρησιμοποιείτε άλλους αισθητήρες.
Στον αναλυτή ποιότητάς μου χρησιμοποιώ ωμικούς διαιρέτες τάσης και αισθητήρες ρεύματος απομακρυσμένου εφέ χωλ.

Εικόνα 7. Αισθητήρες ρεύματος σε τριφασικό δίκτυο
Όπως μπορείτε να δείτε από το σχήμα, χρησιμοποιούμε μια σύνδεση τεσσάρων καλωδίων. Φυσικά, αντί για αισθητήρες ρεύματος εφέ Hall, μπορείτε να χρησιμοποιήσετε μετασχηματιστές ρεύματος ή βρόχους Rogowski.
Αντί για διαχωριστικά αντίστασης, μπορούν να χρησιμοποιηθούν μετασχηματιστές τάσης, τόσο για συστήματα τεσσάρων και τριών συρμάτων.
Στην τελευταία περίπτωση, οι πρωτεύουσες περιελίξεις των μετασχηματιστών τάσης συνδέονται με ένα τρίγωνο και οι δευτερεύουσες περιελίξεις με ένα αστέρι, το κοινό σημείο του οποίου είναι το κοινό σημείο του κυκλώματος μέτρησης


Εικόνα 8.Χρήση μετασχηματιστών τάσης σε τριφασικό δίκτυο

2 Τιμή RMS ρεύματος και τάσης


Ήρθε η ώρα να λύσουμε το πρόβλημα της μέτρησης των σημάτων μας. Πρακτικής σημασίας για εμάς είναι πρώτα από όλα η πραγματική τιμή του ρεύματος και της τάσης.
Επιτρέψτε μου να σας θυμίσω τον εξοπλισμό από τη σειρά αισθητήρων. Χρησιμοποιώντας το ADC του μικροελεγκτή μας, θα καταγράφουμε την τιμή της στιγμιαίας τάσης σε τακτά χρονικά διαστήματα. Έτσι, κατά τη διάρκεια της περιόδου μέτρησης θα έχουμε μια σειρά δεδομένων για το επίπεδο της τιμής της στιγμιαίας τάσης (για το ρεύμα όλα είναι παρόμοια).


Σχήμα 9. Σειρά στιγμιαίων τιμών τάσης
Το καθήκον μας είναι να υπολογίσουμε την πραγματική τιμή. Αρχικά, ας χρησιμοποιήσουμε τον ολοκληρωμένο τύπο:
(1)
Σε ένα ψηφιακό σύστημα πρέπει να περιοριστούμε σε ένα συγκεκριμένο χρονικό διάστημα, οπότε προχωράμε στο άθροισμα:
(2)
Πού είναι η περίοδος δειγματοληψίας του σήματος μας και είναι ο αριθμός των δειγμάτων κατά τη διάρκεια της περιόδου μέτρησης. Κάπου εδώ στο βίντεο αρχίζω να λέω βλακείες για την ισότητα των περιοχών. Έπρεπε να κοιμηθώ λίγο εκείνη τη μέρα. =)
Στους μικροελεγκτές MSP430FE4252, που χρησιμοποιούνται σε μονοφασικούς μετρητές ηλεκτρικής ενέργειας Mercury, πραγματοποιούνται 4096 μετρήσεις σε περίοδο μέτρησης 1, 2 ή 4 δευτερολέπτων. Θα βασιστούμε στα T=1c και N=4096 στα ακόλουθα. Επιπλέον, 4096 σημεία ανά δευτερόλεπτο θα μας επιτρέψουν να χρησιμοποιήσουμε αλγόριθμους γρήγορου μετασχηματισμού Fourier για να προσδιορίσουμε το αρμονικό φάσμα μέχρι την 40η αρμονική, όπως απαιτείται από το GOST. Περισσότερα για αυτό όμως στο επόμενο επεισόδιο.
Ας σκιαγραφήσουμε έναν αλγόριθμο για το πρόγραμμά μας. Πρέπει να διασφαλίζουμε σταθερή εκκίνηση του ADC κάθε 1/8192 δευτερόλεπτα, αφού έχουμε δύο κανάλια και θα μετράμε αυτά τα δεδομένα εναλλάξ. Για να το κάνετε αυτό, ρυθμίστε ένα χρονόμετρο και το σήμα διακοπής θα επανεκκινήσει αυτόματα το ADC. Όλα τα ADC μπορούν να το κάνουν αυτό.
Θα γράψουμε το μελλοντικό πρόγραμμα στο arduino, αφού πολλοί το έχουν στη διάθεσή τους. Προς το παρόν το ενδιαφέρον μας είναι καθαρά ακαδημαϊκό.
Έχοντας μια συχνότητα χαλαζία συστήματος 16 MHz και ένα χρονόμετρο 8-bit (ώστε η ζωή να μην φαίνεται σαν μέλι), πρέπει να διασφαλίσουμε ότι οποιαδήποτε διακοπή του χρονοδιακόπτη λειτουργεί σε συχνότητα 8192 Hz.
Λυπούμαστε που τα 16 MHz δεν μοιράζονται όσο χρειαζόμαστε και η τελική συχνότητα λειτουργίας του χρονοδιακόπτη είναι 8198 Hz. Κλείνουμε τα μάτια μας στο σφάλμα του 0,04% και συνεχίζουμε να διαβάζουμε 4096 δείγματα ανά κανάλι.
Λυπούμαστε που η διακοπή υπερχείλισης στο arduino είναι απασχολημένη με τον υπολογισμό του χρόνου (υπεύθυνη για millis και καθυστέρηση, επομένως θα σταματήσει να λειτουργεί κανονικά), επομένως χρησιμοποιούμε τη διακοπή σύγκρισης.
Και ξαφνικά συνειδητοποιούμε ότι το σήμα που έρχεται σε εμάς είναι διπολικό και ότι το msp430fe4252 το αντιμετωπίζει τέλεια. Είμαστε ικανοποιημένοι με ένα μονοπολικό ADC, επομένως συναρμολογούμε έναν απλό μετατροπέα σήματος διπολικού σε μονοπολικό χρησιμοποιώντας έναν λειτουργικό ενισχυτή:


Εικ. 10. Μετατροπέας σήματος διπολικού σε μονοπολικό
Επιπλέον, το καθήκον μας είναι να διασφαλίσουμε ότι το ημιτονοειδές μας ταλαντώνεται σε σχέση με το μισό της τάσης αναφοράς - τότε είτε θα αφαιρέσουμε το μισό εύρος είτε θα ενεργοποιήσουμε την επιλογή στις ρυθμίσεις του ADC και θα λάβουμε υπογεγραμμένες τιμές.
Το Arduino έχει ADC 10-bit, οπότε θα αφαιρέσουμε το μισό από το ανυπόγραφο αποτέλεσμα στην περιοχή 0-1023 και θα πάρουμε -512-511.
Ελέγχουμε το μοντέλο που έχει συναρμολογηθεί στο LTSpiceIV και βεβαιωνόμαστε ότι όλα λειτουργούν όπως θα έπρεπε. Στο υλικό βίντεο το επαληθεύουμε περαιτέρω πειραματικά.


Εικόνα 11. Αποτέλεσμα προσομοίωσης. Το πράσινο είναι το σήμα πηγής, το μπλε είναι το σήμα εξόδου.

Σκίτσο για Arduino για ένα κανάλι

void setup() ( autoadcsetup(); DDRD |=(1<

Το πρόγραμμα είναι γραμμένο στο Arduino IDE για τον μικροελεγκτή ATmega1280. Στην πλακέτα εντοπισμού σφαλμάτων μου, τα πρώτα 8 κανάλια δρομολογούνται για τις εσωτερικές ανάγκες της πλακέτας, επομένως χρησιμοποιείται το κανάλι ADC8. Μπορείτε να χρησιμοποιήσετε αυτό το σκίτσο για μια πλακέτα με ATmega168, αλλά πρέπει να επιλέξετε το σωστό κανάλι.
Μέσα στις διακοπές, παραμορφώνουμε μερικές ακίδες σέρβις για να δούμε καθαρά τη συχνότητα ψηφιοποίησης λειτουργίας.
Λίγα λόγια για το από πού προήλθε ο συντελεστής 102 Κατά την πρώτη εκκίνηση, τροφοδοτήθηκε ένα σήμα διαφόρων πλατών από τη γεννήτρια, η πραγματική τιμή τάσης διαβάστηκε από τον παλμογράφο και η υπολογιζόμενη τιμή σε απόλυτες μονάδες ADC λήφθηκε από την κονσόλα. .

Umax, V Ουρμς, Β Μέτρητος
3 2,08 212
2,5 1,73 176
2 1,38 141
1,5 1,03 106
1 0,684 71
0,5 0,358 36
0,25 0,179 19

Διαιρώντας τις τιμές της τρίτης στήλης με τις τιμές της δεύτερης παίρνουμε έναν μέσο όρο 102. Αυτός θα είναι ο συντελεστής "βαθμονόμησής" μας. Ωστόσο, μπορείτε να παρατηρήσετε ότι καθώς μειώνεται η τάση, η ακρίβεια πέφτει απότομα. Αυτό οφείλεται στη χαμηλή ευαισθησία του ADC μας. Στην πραγματικότητα, τα 10 ψηφία για ακριβείς υπολογισμούς είναι καταστροφικά μικρά και αν είναι αρκετά δυνατό να μετρηθεί η τάση σε μια πρίζα με αυτόν τον τρόπο, τότε η χρήση ενός ADC 10-bit για τη μέτρηση του ρεύματος που καταναλώνεται από το φορτίο θα είναι έγκλημα κατά της μετρολογίας .

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

Θα βρείτε το παρουσιαζόμενο υλικολογισμικό, καθώς και άλλα υλικολογισμικά για αυτήν τη σειρά (καθώς τραβάω υλικό βίντεο πιο γρήγορα από ότι ετοιμάζω άρθρα) στο αποθετήριο του GitHub.

Παρουσιάζεται ένα χρήσιμο διάγραμμα για όσους τους αρέσει να πειραματίζονται με το Arduino. Αυτό είναι ένα απλό ψηφιακό βολτόμετρο που μπορεί να μετρήσει αξιόπιστα την τάση DC στην περιοχή 0 - 30V. Η πλακέτα Arduino, ως συνήθως, μπορεί να τροφοδοτηθεί από μπαταρία 9V.

Όπως πιθανότατα γνωρίζετε, οι αναλογικές είσοδοι του Arduino μπορούν να χρησιμοποιηθούν για τη μέτρηση της τάσης DC στην περιοχή από 0 - 5 V και αυτό το εύρος μπορεί να αυξηθεί,
χρησιμοποιώντας δύο αντιστάσεις ως διαιρέτη τάσης. Ο διαχωριστής θα μειώσει τη μετρούμενη τάση στο επίπεδο των αναλογικών εισόδων Arduino. Και τότε το πρόγραμμα θα υπολογίσει την πραγματική τιμή τάσης.

Ο αναλογικός αισθητήρας στην πλακέτα Arduino ανιχνεύει την παρουσία τάσης στην αναλογική είσοδο και τη μετατρέπει σε ψηφιακή μορφή για περαιτέρω επεξεργασία από τον μικροελεγκτή. Στο σχήμα, η τάση τροφοδοτείται στην αναλογική είσοδο (A0) μέσω ενός απλού διαιρέτη τάσης που αποτελείται από αντιστάσεις R1 (100 kOhm) και R2 (10 kOhm).

Με αυτές τις τιμές διαιρέτη, η πλακέτα Arduino μπορεί να τροφοδοτηθεί με τάση από 0 έως
55V. Στην είσοδο Α0 έχουμε τη μετρούμενη τάση διαιρούμενη με 11, δηλαδή 55V / 11=5V. Με άλλα λόγια, όταν μετράμε 55V στην είσοδο Arduino, έχουμε μέγιστη επιτρεπόμενη τιμή 5V. Στην πράξη, είναι καλύτερο να γράψετε την περιοχή "0 - 30V" σε αυτό το βολτόμετρο έτσι ώστε να παραμείνει
Περιθώριο ασφαλείας!

Σημειώσεις

Εάν οι ενδείξεις της οθόνης δεν συμπίπτουν με τις ενδείξεις ενός βιομηχανικού (εργαστηριακού) βολτόμετρου, τότε είναι απαραίτητο να μετρήσετε την τιμή των αντιστάσεων R1 και R2 με ένα ακριβές όργανο και να εισαγάγετε αυτές τις τιμές αντί για R1=100000.0 και R2=10000.0 στον κώδικα του προγράμματος. Στη συνέχεια, θα πρέπει να μετρήσετε την πραγματική τάση μεταξύ των ακίδων 5V και "Ground" της πλακέτας Arduino με ένα εργαστηριακό βολτόμετρο. Το αποτέλεσμα θα είναι μια τιμή μικρότερη από 5 V, για παράδειγμα, θα είναι 4,95 V. Αυτή η πραγματική τιμή πρέπει να εισαχθεί στη γραμμή κώδικα
Vout = (τιμή * 5,0) / 1024,0 αντί για 5,0.
Επίσης, προσπαθήστε να χρησιμοποιήσετε αντιστάσεις ακριβείας με ανοχή 1%.

Οι αντιστάσεις R1 και R2 παρέχουν κάποια προστασία από αυξημένες τάσεις εισόδου, ωστόσο, να θυμάστε ότι τυχόν τάσεις πάνω από 55 V μπορεί να βλάψουν την πλακέτα Arduino. Επιπλέον, αυτός ο σχεδιασμός δεν παρέχει άλλους τύπους προστασίας (από υπερτάσεις τάσης, αντιστροφή πολικότητας ή υπέρταση).

Πρόγραμμα ψηφιακού βολτόμετρου

/*
Βολτόμετρο DC
Ένα Arduino DVM βασισμένο στην ιδέα του διαιρέτη τάσης
T.K.Hareendran
*/
#περιλαμβάνω
LiquidCrystal lcd(7, 8, 9, 10, 11, 12);
int analogInput = 0;
float vout = 0,0;
float vin = 0,0;
float R1 = 100000,0; // αντίσταση του R1 (100K) -δείτε το κείμενο!
float R2 = 10000,0; // αντίσταση του R2 (10K) – δείτε το κείμενο!
τιμή int = 0;
void setup())(
pinMode(analogInput, INPUT);
lcd.begin(16, 2);
lcd.print("ΒΟΛΤΜΕΤΡΟ DC");
}
void loop()
// διαβάστε την τιμή στην αναλογική είσοδο
value = analogRead(analogInput);
vout = (τιμή * 5,0) / 1024,0; // βλέπε κείμενο
vin = βουτ / (R2/(R1+R2));
αν (vin<0.09) {
vin=0.0;//δήλωση για να καταργηθεί η ανεπιθύμητη ανάγνωση !
}
lcd.setCursor(0, 1);
lcd.print("INPUT V= ");
lcd.print(vin);
καθυστέρηση (500);
}

Σχηματικό διάγραμμα ενός βολτόμετρου Arduino

Κατάλογος εξαρτημάτων

Πλακέτα Arduino Uno
Αντίσταση 100 kOhm
Αντίσταση 10 kOhm
Αντίσταση 100 ohm
Αντίσταση κοπής 10 kOhm
Οθόνη LCD 16?2 (Hitachi HD44780)

Με κάποιες προσθήκες.

Ένα ελάχιστα γνωστό χαρακτηριστικό του Arduino και πολλών άλλων τσιπ AVR είναι η δυνατότητα μέτρησης της εσωτερικής τάσης αναφοράς 1,1 V. Αυτή η λειτουργία μπορεί να χρησιμοποιηθεί για αυξανόμενη ακρίβειαΛειτουργίες Arduino - analogRead χρησιμοποιώνταςΗ τυπική τάση αναφοράς είναι 5 V (σε πλατφόρμες 5 V) ή 3,3 V (σε πλατφόρμες 3,3 V).Μπορεί και να είναι χρησιμοποιείται για τη μέτρησηΤο Vcc εφαρμόζεται στο τσιπ, παρέχοντας μέσα ελέγχου τάση μπαταρίας χωρίς χρήσηπολύτιμες αναλογικές καρφίτσες.

Κίνητρο

Τουλάχιστον υπάρχει τουλάχιστον δύο λόγουςγια μέτρηση τάση τροφοδοσίαςΤο Arduino μας (Vcc). Ένα από αυτά είναι το έργο μας με τροφοδοσία μπαταρίας, εάν θέλουμε να παρακολουθούμε το επίπεδο τάσης της μπαταρίας. Επίσης, όταν η ισχύς της μπαταρίας (Vcc) δεν μπορεί να είναι 5,0 βολτ (για παράδειγμα τροφοδοτικό 3 κυψελών 1,5 V) και θέλουμε να κάνουμε τις αναλογικές μετρήσεις πιο ακριβείς - πρέπει να χρησιμοποιούμε είτε μια εσωτερική τάση αναφοράς 1,1 V είτε μια εξωτερική πηγή τάσης αναφοράς . Γιατί;

Είναι σύνηθες να υποθέτουμε όταν χρησιμοποιείτε το analogRead() ότι η αναλογική τάση τροφοδοσίας του ελεγκτή είναι 5,0 βολτ, ενώ στην πραγματικότητα αυτό μπορεί να μην ισχύει καθόλου (για παράδειγμα, μια τροφοδοσία από 3 στοιχεία είναι 1,5 V). Η επίσημη τεκμηρίωση του Arduino μπορεί ακόμη και να μας οδηγήσει σε αυτήν την εσφαλμένη υπόθεση. Το γεγονός είναι ότι η ισχύς δεν είναι απαραίτητα 5,0 βολτ, ανεξάρτητα από το τρέχον επίπεδο, αυτή η ισχύς παρέχεται στο Vcc του τσιπ. Εάν το τροφοδοτικό μας δεν είναι σταθεροποιημένο ή εάν λειτουργούμε με μπαταρία, αυτή η τάση μπορεί να διαφέρει αρκετά. Ακολουθεί ένα παράδειγμα κώδικα που επεξηγεί αυτό το πρόβλημα:

Διπλό Vcc = 5,0; // όχι απαραίτητα αληθής τιμή int = analogRead(0); / διαβάστε τις ενδείξεις από A0 διπλό volt = (τιμή / 1023,0) * Vcc; // ισχύει μόνο εάν Vcc = 5,0 volts Για να μετρηθεί με ακρίβεια η τάση, απαιτείται ακριβής τάση αναφοράς. Τα περισσότερα τσιπ AVR παρέχουν τρεις αναφορές τάσης:

  • 1,1 V από την εσωτερική πηγή, στην τεκμηρίωση περνά ως αναφορά bandgap (μερικά από αυτά είναι 2,56 V, για παράδειγμα ATMega 2560). Η επιλογή γίνεται από τη συνάρτηση analogReference() με την παράμετρο INTERNAL: analogReference(INTERNAL) ;
  • εξωτερική πηγή τάσης αναφοράς, με την ένδειξη AREF στο arduino. Επιλέξτε: analogReference(EXTERNAL);
  • Το Vcc είναι το τροφοδοτικό του ίδιου του ελεγκτή. Επιλέξτε: analogReference (ΠΡΟΕΠΙΛΟΓΗ).

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

Μπορείτε επίσης να συνδέσετε το Vcc στο AREF μέσω δίοδος: Η πτώση τάσης στη δίοδο είναι γνωστή εκ των προτέρων, επομένως ο υπολογισμός του Vcc δεν είναι δύσκολος. Ωστόσο, με ένα τέτοιο κύκλωμα μέσω διόδου το ρεύμα ρέει συνεχώς, μειώνοντας τη διάρκεια ζωής της μπαταρίας, η οποία επίσης δεν είναι πολύ καλή.

Μια εξωτερική αναφορά τάσης είναι η πιο ακριβής, αλλά απαιτεί πρόσθετο υλικό. Το εσωτερικό ION είναι σταθερό αλλά όχι ακριβές +/- 10% απόκλιση. Το Vcc είναι εντελώς αναξιόπιστο στις περισσότερες περιπτώσεις. Η επιλογή μιας εσωτερικής αναφοράς τάσης είναι φθηνή και σταθερή, αλλά τις περισσότερες φορές θα θέλαμε να μετρήσουμε περισσότερη τάση από 1,1 V, επομένως η χρήση του Vcc είναι η πιο πρακτική, αλλά δυνητικά η λιγότερο ακριβής. Σε ορισμένες περιπτώσεις μπορεί να είναι πολύ αναξιόπιστο!

Πως να το κάνεις

Πολλά τσιπ AVR, συμπεριλαμβανομένων των σειρών ATmega και ATtiny, παρέχουν ένα μέσο μέτρησης της εσωτερικής τάσης αναφοράς. Γιατί είναι απαραίτητο αυτό; Ο λόγος είναι απλός - μετρώντας την εσωτερική τάση, μπορούμε να προσδιορίσουμε την τιμή του Vcc. Δείτε πώς:

  1. Ορισμός προεπιλεγμένης αναφοράς τάσης: analogReference(DEFAULT); . Χρησιμοποιούμε το Vcc ως πηγή.
  2. Πάρτε μετρήσεις ADC για την εσωτερική πηγή 1,1 V.
  3. Υπολογίστε την τιμή Vcc με βάση τη μέτρηση 1,1 V χρησιμοποιώντας τον τύπο:

Vcc * (Ανάγνωση ADC) / 1023 = 1,1 V

Τι ακολουθεί:

Vcc = 1,1 V * 1023 / (Ανάγνωση ADC)

Συνδυάζοντας τα πάντα και παίρνουμε τον κωδικό:

long readVcc() ( // Αναφορά ανάγνωσης 1,1 V έναντι AVcc // ορίστε την αναφορά σε Vcc και τη μέτρηση στην εσωτερική αναφορά 1,1 V #αν οριστεί(__AVR_ATmega32U4__) || ορίστηκε(__AVR_ATmega1280__) || ορίστηκε(__AVR_ATmega25 =__AVR_ATmega25 (REFS0) _BV(MUX3) | 2); else ADMUX = _BV(MUX2) |._BV(MUX1) ADCL // πρέπει να διαβάσει πρώτα το ADCL - μετά κλειδώνει το ADCH uint8_t = ADCH<<8) | low; result = 1125300L / result; // Calculate Vcc (in mV); 1125300 = 1.1*1023*1000 return result; // Vcc in millivolts }

Χρήση

Έλεγχος Vcc ή τάσης μπαταρίας

Μπορείτε να καλέσετε αυτή τη συνάρτηση readVcc() εάν θέλετε να παρακολουθήσετε το Vcc. Ένα παράδειγμα θα ήταν ο έλεγχος του επιπέδου φόρτισης της μπαταρίας. Μπορείτε επίσης να το χρησιμοποιήσετε για να προσδιορίσετε εάν είστε συνδεδεμένοι σε πηγή τροφοδοσίας ή εάν χρησιμοποιείτε μπαταρία.

Μέτρηση Vcc για τάση αναφοράς

Μπορείτε επίσης να το χρησιμοποιήσετε για να λάβετε τη σωστή τιμή Vcc για χρήση με την analogRead() όταν χρησιμοποιείτε την τάση αναφοράς (Vcc). Εάν δεν χρησιμοποιείτε ρυθμιζόμενο τροφοδοτικό, δεν μπορείτε να είστε σίγουροι ότι Vcc = 5,0 βολτ. Αυτή η λειτουργία σάς επιτρέπει να λάβετε τη σωστή τιμή. Υπάρχει όμως μια επιφύλαξη...

Σε ένα από τα άρθρα έκανα μια δήλωση ότι αυτή η λειτουργία θα μπορούσε να χρησιμοποιηθεί για τη βελτίωση της ακρίβειας των αναλογικών μετρήσεων σε περιπτώσεις όπου το Vcc δεν ήταν αρκετά 5,0 βολτ. Δυστυχώς, αυτή η διαδικασία δεν θα δώσει ακριβές αποτέλεσμα. Γιατί; Αυτό εξαρτάται από την ακρίβεια της εσωτερικής αναφοράς τάσης. Η προδιαγραφή δίνει μια ονομαστική τάση 1,1 βολτ, αλλά λέει ότι μπορεί να ποικίλλει έως και 10%. Τέτοιες μετρήσεις μπορεί να είναι λιγότερο ακριβείς από το τροφοδοτικό μας Arduino!

Αύξηση της ακρίβειας

Ενώ οι μεγάλες ανοχές του εσωτερικού τροφοδοτικού 1,1 V περιορίζουν σημαντικά την ακρίβεια μέτρησης όταν χρησιμοποιείται σε μαζική παραγωγή, μπορούμε να επιτύχουμε μεγαλύτερη ακρίβεια για προσαρμοσμένα έργα. Αυτό είναι εύκολο να γίνει μετρώντας απλά το Vcc χρησιμοποιώντας ένα βολτόμετρο και τη συνάρτηση readVcc(). Στη συνέχεια, αντικαταστήστε τη σταθερά 1125300L με μια νέα μεταβλητή:

scale_constant = interior1.1 Αναφ. * 1023 * 1000

interior1.1Ref = 1,1 * Vcc1 (voltmeter_readings) / Vcc2 (readVcc_function_readings)

Αυτή η βαθμονομημένη τιμή θα είναι ένας καλός δείκτης για μετρήσεις τσιπ AVR, αλλά μπορεί να επηρεαστεί από αλλαγές θερμοκρασίας. Μη διστάσετε να πειραματιστείτε με τις δικές σας μετρήσεις.

συμπέρασμα

Υπάρχουν πολλά που μπορείτε να κάνετε με αυτό το μικρό χαρακτηριστικό. Μπορείτε να χρησιμοποιήσετε μια σταθερή τάση αναφοράς κοντά στα 5,0 V χωρίς να έχετε πραγματικά 5,0 V σε Vcc. Μπορείτε να μετρήσετε την τάση της μπαταρίας σας ή ακόμα και να δείτε εάν χρησιμοποιείτε μπαταρία ή σταθερή ισχύ.

Τέλος, ο κωδικός θα υποστηρίζει όλα τα Arduinos, συμπεριλαμβανομένου του νέου Leonardo, καθώς και των τσιπ της σειράς ATtinyX4 και ATtinyX5.