Πίνακας περιεχομένων:

Ακόμα ένας ελεγκτής χωρητικότητας μπαταρίας: 6 βήματα
Ακόμα ένας ελεγκτής χωρητικότητας μπαταρίας: 6 βήματα

Βίντεο: Ακόμα ένας ελεγκτής χωρητικότητας μπαταρίας: 6 βήματα

Βίντεο: Ακόμα ένας ελεγκτής χωρητικότητας μπαταρίας: 6 βήματα
Βίντεο: Έλεγχος & συντήρηση μπαταρίας (Motorcycle battery test) 2024, Ιούλιος
Anonim
Ακόμα ένας ελεγκτής χωρητικότητας μπαταρίας
Ακόμα ένας ελεγκτής χωρητικότητας μπαταρίας
Ακόμα ένας ελεγκτής χωρητικότητας μπαταρίας
Ακόμα ένας ελεγκτής χωρητικότητας μπαταρίας

Γιατί ένας ακόμη δοκιμαστής χωρητικότητας

Διάβασα πολλές διαφορετικές οδηγίες κατασκευής δοκιμών, αλλά καμία από αυτές δεν φαίνεται να ταιριάζει στις ανάγκες μου. Wantedθελα να είμαι σε θέση να δοκιμάσω και περισσότερα από απλά κύτταρα NiCd/NiMH ή Lion. Wantedθελα να μπορώ να δοκιμάσω μια μπαταρία ηλεκτρικού εργαλείου χωρίς να την πάρω πρώτα. Έτσι, αποφάσισα να ρίξω μια πιο προσεκτική ματιά στο θέμα και να σχεδιάσω ένα δικό μου. Το ένα πράγμα οδηγεί στο άλλο και τελικά αποφάσισα να γράψω μόνος μου ένα διδακτικό. Αποφάσισα επίσης να μην αναφερθώ σε όλες τις λεπτομέρειες σχετικά με τον τρόπο κατασκευής του ελεγκτή επειδή ο καθένας μπορεί να αποφασίσει για ορισμένες επιλογές, όπως αντίσταση μεγέθους που θα χρησιμοποιήσει ή εάν χρειάζεται PCB ή είναι αρκετά Veroboard και υπάρχει επίσης ένας τόνος σε οδηγίες πώς να εγκατάσταση αετού ή πώς να φτιάξετε ένα PCB. Με άλλα λόγια, θα επικεντρωθώ στα σχήματα και τον κώδικα και τον τρόπο βαθμονόμησης του ελεγκτή.

Βήμα 1: Ιστορικό - Έκδοση 1

Ιστορικό - Έκδοση 1
Ιστορικό - Έκδοση 1

Πάνω είναι η πρώτη έκδοση με την παρακάτω αναφορά, προστίθεται υποστήριξη εισόδου 10V (R12 & R17 & Q11 & Q12).

Η πρώτη έκδοση λήφθηκε λίγο πολύ από ένα εκπαιδευτικό από το deba168 (δυστυχώς δεν μπορώ να βρω τον οδηγό του να παρέχει έναν σύνδεσμο). Έγιναν μόνο μερικές μικρές αλλαγές. Σε αυτήν την έκδοση είχα μια αντίσταση φορτίου 10 ohm που ελέγχεται από ένα mosfet. Αυτό έφερε όμως κάποια προβλήματα. Κατά τη δοκιμή ενός κυττάρου NiCd ή NiMH, ο απαιτούμενος χρόνος μετρήθηκε εύκολα σε ώρες αν όχι ημέρες. Μια μπαταρία 1500mAh κράτησε πάνω από 12 ώρες (το ρεύμα ήταν μόνο 120mA). Από την άλλη πλευρά, η πρώτη έκδοση θα μπορούσε να δοκιμάσει μόνο μπαταρίες κάτω από 10V. Και μια πλήρως φορτισμένη μπαταρία 9,6V μπορεί να είναι στην πραγματικότητα έως 11,2V η οποία δεν θα μπορούσε να ελεγχθεί λόγω του ορίου των 10V. Κάτι έπρεπε να γίνει. Κατ 'αρχάς, μόλις πρόσθεσα μερικά mosfets και αντιστάσεις για να κάνω τα διαχωριστικά τάσης να μπορούν να επιτρέπουν περισσότερα από 10V. Αλλά αυτό από την άλλη έφερε ένα άλλο πρόβλημα. Μια μπαταρία 14.4V πλήρως φορτωμένη μπορεί να έχει έως και 16,8V tp, η οποία με αντίσταση 10 ohm σήμαινε ρεύμα 1,68A και φυσικά διαρροή ισχύος από την αντίσταση φορτίου σχεδόν 30W. Έτσι, με χαμηλή τάση πολύ μεγάλο χρόνο δοκιμής και με υψηλή τάση πολύ υψηλό ρεύμα. Προφανώς δεν ήταν η κατάλληλη λύση και χρειάστηκε περαιτέρω ανάπτυξη.

Βήμα 2: Έκδοση 2

Wantedθελα μια λύση όπου το ρεύμα θα παρέμενε σε ορισμένα όρια ανεξάρτητα από την τάση της μπαταρίας. Μια λύση θα ήταν η χρήση PWM και μόνο μιας αντίστασης, αλλά προτίμησα να έχω ένα διάλυμα χωρίς παλλόμενο ρεύμα ή να έχω την ανάγκη να διαλύσω τη θερμότητα. Έτσι, δημιούργησα μια λύση με 10 υποδοχές τάσης, έκαστη 2V πλάτους, χρησιμοποιώντας 10 αντιστάσεις 3,3ohm και ένα mosfet για κάθε αντίσταση.

Βήμα 3: Έτσι Έγινε

Έτσι Έγινε
Έτσι Έγινε

Θα μπορούσε κανείς να ισχυριστεί ότι η απώλεια τάσης στο mosfet είναι αμελητέα επειδή η αντίσταση του mosfet είναι τόσο χαμηλή, αλλά έχω αφήσει την επιλογή του mosfet στον αναγνώστη και έτσι η αντίσταση μπορεί να φτάσει ακόμη και πάνω από 1 ohm όπου αρχίζει να ύλη. Στην πρώτη έκδοση η επιλογή του σωστού mosfet θα αφαιρούσε την ανάγκη για μέτρηση χαμηλότερου σημείου, αλλά στην έκδοση 2 αποφάσισα να μετρήσω την τάση σε μία μόνο αντίσταση, πράγμα που καθιστά σημαντικό να υπάρχουν δύο σημεία μέτρησης. Και ο λόγος πίσω από την επιλογή ήταν η απλότητα στην καλωδίωση του Veroboard. Αυτό προσθέτει κάποιο σφάλμα ακρίβειας αφού η μετρημένη τάση σε μία αντίσταση είναι σημαντικά μικρότερη από τη μέτρηση σε όλες τις αντιστάσεις. Στην επιλογή των εξαρτημάτων αποφάσισα να χρησιμοποιήσω αυτό που είτε είχα ήδη στη διάθεσή μου είτε αυτό που μπορούσα εύκολα να αποκτήσω. Αυτό οδήγησε στο ακόλουθο BOM:

  • Arduino Pro Mini 5V! ΣΗΜΑΝΤΙΚΟ! Χρησιμοποίησα την έκδοση 5V και όλα βασίζονται σε αυτήν
  • Οθόνη OLED 128x64 I2C
  • 10 x 5W αντιστάσεις 3,3 Ohm
  • 3 x 2n7000 mosfets
  • 10 x Mosfets IRFZ34N
  • 6 x 10 kOhm αντιστάσεις
  • 2 αντιστάσεις 5 kOhm
  • Πυκνωτής 16V 680uF
  • 1 παλιός ανεμιστήρας CPU

Δεν έχω προσθέσει τα παρακάτω στα σχήματα

  • αντιστάσεις έλξης σε γραμμές I2C, οι οποίες παρατήρησα ότι έκαναν την οθόνη πιο σταθερή
  • ηλεκτρικά καλώδια
  • πυκνωτή σε γραμμή 5V που σταθεροποίησε επίσης την οθόνη

Κατά τη δοκιμή παρατήρησα ότι οι αντιστάσεις φορτίου θα ζεσταθούν αρκετά, ειδικά αν ήταν όλες σε χρήση. Η θερμοκρασία αυξήθηκε σε πάνω από 100 βαθμούς Κελσίου (που είναι πάνω από 212 βαθμούς Φαρενάιτ) και εάν ολόκληρο το σύστημα πρόκειται να κλείσει σε ένα κουτί θα πρέπει να υπάρχει κάποιο είδος ψύξης. Οι αντιστάσεις που χρησιμοποίησα είναι 3,3 ohm / 5W και το μέγιστο ρεύμα θα πρέπει να προκύπτει με περίπου 2V ανά αντίσταση δίνοντας 2V / 3,3 = 0,61A που έχει ως αποτέλεσμα 1,21W. Κατέληξα να προσθέσω έναν απλό ανεμιστήρα στο κουτί. Κυρίως επειδή έτυχε να έχω κάποιο παλιό ανεμιστήρα CPU γύρω.

Σχηματική λειτουργικότητα

Είναι πολύ απλό και αυτονόητο. Η μπαταρία που πρόκειται να δοκιμαστεί είναι συνδεδεμένη με τη σειρά αντιστάσεων και γείωσης. Τα σημεία μέτρησης τάσης είναι η σύνδεση της μπαταρίας και η πρώτη αντίσταση. Οι διαχωριστές τάσης χρησιμοποιούνται στη συνέχεια για να ρίξουν την τάση σε ένα επίπεδο που ταιριάζει καλύτερα στο Arduino. Μια ψηφιακή έξοδος χρησιμοποιείται για την επιλογή εύρους 10V ή 20V των διαχωριστικών. Κάθε αντίσταση στο φορτίο μπορεί να γειωθεί μεμονωμένα χρησιμοποιώντας τα προστατευτικά, τα οποία κινούνται απευθείας από το Arduino. Και τέλος, η οθόνη συνδέεται με ακίδες Arduino I2C. Δεν έχω πολλά να πω για το σχηματικό J

Βήμα 4: Ο κώδικας

Ο κώδικας
Ο κώδικας

Πάνω φαίνεται η τραχιά λειτουργικότητα του κώδικα. Ας ρίξουμε μια πιο προσεκτική ματιά στον κώδικα τότε (τα αρχεία arduino ino επισυνάπτονται). Υπάρχουν πολλές λειτουργίες και στη συνέχεια ο κύριος βρόχος.

Κύριος βρόχος

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

Διαδικασία για την εμφάνιση αποτελεσμάτων

Η λειτουργία showResults απλώς ορίζει τις γραμμές που θα εμφανίζονται στην οθόνη και επίσης τη συμβολοσειρά που θα αποσταλεί στη σειριακή διεπαφή.

Διαδικασία μέτρησης τάσεων

Στην αρχή της λειτουργίας μετράται το Vcc του Arduino. Είναι απαραίτητο για να είναι σε θέση να υπολογίσει τις τάσεις που μετρήθηκαν χρησιμοποιώντας αναλογικές εισόδους. Στη συνέχεια, η τάση της μπαταρίας μετριέται χρησιμοποιώντας εύρος 20V για να μπορείτε να αποφασίσετε ποια περιοχή θα χρησιμοποιήσετε. Στη συνέχεια υπολογίζεται τόσο η τάση της μπαταρίας όσο και η τάση αντίστασης. Οι μετρήσεις τάσης μπαταρίας εκμεταλλεύονται την κλάση DividerInput που έχει μεθόδους ανάγνωσης και τάσης για να δώσει την ακατέργαστη ένδειξη ή την υπολογισμένη τάση της εν λόγω αναλογικής εισόδου.

Διαδικασία επιλογής χρησιμοποιημένων τιμών

Στη συνάρτηση selectUsedValues ο αριθμός των κυψελών μαντεύεται και τα υψηλά και τα χαμηλά όρια για την μπαταρία έχουν οριστεί για χρήση με τη διαδικασία εκφόρτισης. Επίσης, η μέτρηση σημειώνεται ως έναρξη, Τα όρια για αυτήν τη διαδικασία ορίζονται στην αρχή των καθολικών μεταβλητών. Αν και θα μπορούσαν να είναι σταθερές, και θα μπορούσαν επίσης να οριστούν μέσα στη διαδικασία, καθώς δεν χρησιμοποιούνται παγκοσμίως. Αλλά, πάντα υπάρχει κάτι να βελτιωθεί:)

Διαδικασία υπολογισμού της χωρητικότητας της μπαταρίας

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

Διαδικασία εύρεσης του αριθμού αντιστάσεων που πρέπει να χρησιμοποιηθούν

Στη λειτουργία selectNumOfResistors γίνεται μια απλή σύγκριση τάσης με προκαθορισμένες τιμές και με το αποτέλεσμα αποφασίζεται ο αριθμός των αντιστάσεων που θα χρησιμοποιηθούν. Το κατάλληλο mosfet ανοίγει για να παραλείψετε μερικές από τις αντιστάσεις. Οι υποδοχές τάσης επιλέγονται έτσι ώστε το μέγιστο ρεύμα οποιαδήποτε στιγμή κατά την εκφόρτιση να παραμείνει ελαφρώς πάνω από 600mA (2V/3.3Ohm = 606mA). Η συνάρτηση επιστρέφει τον αριθμό των αντιστάσεων που χρησιμοποιούνται. Επειδή ο ανεμιστήρας οδηγείται από την ίδια γραμμή με το πρώτο mosfet, πρέπει να ανοίγει πάντα όταν συνεχίζεται η εκφόρτιση.

Βήμα 5: Βαθμονόμηση του μετρητή

Βαθμονόμηση του μετρητή
Βαθμονόμηση του μετρητή

Για να βαθμονομηθεί ο μετρητής δημιούργησα μια άλλη εφαρμογή (επισυνάπτεται). Χρησιμοποιεί το ίδιο υλικό. Στην αρχή, οι τιμές διαιρέτη διόρθωσης έχουν οριστεί σε 1000.

const int divCorrectionB10V = 1000; // πολλαπλασιαστής διόρθωσης διαιρέτη σε εύρος 10V const int divCorrectionR10V = 1000; // πολλαπλασιαστής διόρθωσης διαιρέτη σε εύρος 10V const int divCorrectionB20V = 1000; // πολλαπλασιαστής διόρθωσης διαιρέτη σε εύρος 20V const int divCorrectionR20V = 1000; // πολλαπλασιαστής διόρθωσης διαιρέτη σε εύρος 20V

στη συνάρτηση readVcc () η προκύπτουσα τάση Vcc μειώνεται με τη ρύθμιση της τιμής στην τελευταία γραμμή της λειτουργίας πριν από την επιστροφή. Συνήθως μπορείτε να βρείτε στο διαδίκτυο μια τιμή 1126400L που θα χρησιμοποιηθεί για τον υπολογισμό. Παρατήρησα ότι το αποτέλεσμα δεν ήταν σωστό.

Διαδικασία βαθμονόμησης:

  1. Φορτώστε την εφαρμογή μέτρησης στο Arduino.
  2. Μπορείτε να δείτε στο Arduino (και στη σειριακή έξοδο και εάν ο ανεμιστήρας περιστρέφεται) εάν το φορτίο είναι ενεργοποιημένο. Αν είναι γυρίστε τον διακόπτη επιλογής τύπου μπαταρίας.
  3. Προσαρμόστε την τιμή στο readuVCC () για να έχετε το σωστό αποτέλεσμα. Πάρτε την τιμή που δίνει η συνάρτηση (η οποία είναι σε χιλιοστά βολτ) και διαιρέστε τη μεγάλη τιμή με αυτήν. Θα λάβετε την ακατέργαστη τιμή της εσωτερικής αναφοράς. Τώρα μετρήστε την πραγματική τάση τροφοδοσίας σε χιλιοστά βολτ με ένα πολύμετρο και πολλαπλασιάστε την με την προηγούμενη υπολογισμένη τιμή και θα λάβετε τη νέα διορθωμένη μεγάλη τιμή. Στην περίπτωσή μου, η λειτουργία επέστρεψε 5288mV όταν το πραγματικό Vcc ήταν 5,14V. Υπολογισμός 1126400/5288*5140 = 1094874 το οποίο εκ νέου έκανα δοκιμή. Βάλτε τη νέα τιμή στον κώδικα και ανεβάστε την ξανά στο Arduino.
  4. Η ρύθμιση των τιμών διόρθωσης του αναλογικού αντιστάτη εισόδου διόρθωσης συμβαίνει με τη χρήση μιας ρυθμιζόμενης πηγής ισχύος που χρησιμοποιείται για την τροφοδοσία της εισόδου του μετρητή. Το πιο απλό είναι να χρησιμοποιήσετε τάσεις από 1V έως 20V με βήματα 1V και να καταγράψετε τα αποτελέσματα σε υπολογιστικό φύλλο. Στο υπολογιστικό φύλλο λαμβάνεται ο μέσος όρος. Οι διορθωμένες τιμές υπολογίζονται με τον ακόλουθο τύπο: "raw_value*range*Vcc/Vin" όπου raw_value είναι η τιμή σε 10VdivB, 10VdivR, 20VdivB ή 20VdivR ανάλογα με το ποια διόρθωση θα υπολογιστεί.

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

Σαν αυτό

const int divCorrectionB10V = 998; // διαιρέτης διόρθωσης διαιρέτη σε εύρος 10V const int divCorrectionR10V = 1022; // διαιρέτης διόρθωσης διαιρέτη σε εύρος 10V const int divCorrectionB20V = 1044; // διαιρέτης διόρθωσης διαιρέτη σε εύρος 20V const int divCorrectionR20V = 1045; // διαιρέτης διόρθωσης διαιρέτη σε εύρος 20V

Η ρύθμιση της τιμής της αντίστασης μπορεί να γίνει παρέχοντας κάποια τάση στην είσοδο (δηλαδή 2V), αλλάζοντας το διακόπτη τύπου νυχτερίδας (για να φορτωθεί) και μετρώντας το ρεύμα που εισέρχεται και την τάση στην πρώτη αντίσταση και διαιρώντας την τάση με το ρεύμα Το Για μένα 2V έδωσε 607mA που δίνει 2/0.607 = 3.2948 ohms τα οποία στρογγυλοποίησα στα 3.295 ohms. Οπότε τώρα έχει γίνει η βαθμονόμηση.

Βήμα 6: Τελευταία ΣΗΜΕΙΩΣΗ

Μια σημαντική σημείωση εδώ. Είναι επιτακτικό να έχετε όλες τις συνδέσεις σε άριστη κατάσταση από την μπαταρία στις αντιστάσεις. Είχα μια κακή σύνδεση και αναρωτιόμουν γιατί πήρα 0,3V λιγότερα βολτ στο πλέγμα αντίστασης από ό, τι στην μπαταρία. Αυτό σήμαινε ότι η διαδικασία μέτρησης κατέληξε σχεδόν αμέσως με κύτταρα NiCd 1,2V επειδή το κατώτερο όριο των 0,95V επιτεύχθηκε γρήγορα.

Συνιστάται: