- Erforderliche Komponenten:
- Beschreibung:
- Schaltplan und Funktionserklärung:
- Schaltungs- und Leiterplattendesign mit EasyEDA:
- Online-Berechnung und Bestellung von Leiterplattenmustern:
- Programmiererklärung:
In diesem Projekt werden wir ein PIC-basiertes Autobatterie-Überwachungssystem auf Leiterplatten herstellen. Hier haben wir eine Leiterplatte mit dem EASYEDA Online PCB Simulator und Designer entworfen. Dieser Überwachungskreis für Autobatterien wird verwendet, um die Leistung der Autobatterie zu überwachen, indem Sie sie einfach in die Steckdose am Armaturenbrett eines Autos stecken. Die Platine kann auch als Spannungsmesswerkzeug oder Voltmeter ohne Verwendung eines USB-Autoladegeräts verwendet werden. Wir haben hier einen Klemmenblock angebracht, um die Spannung anderer Stromquellen zu messen, indem wir einfach zwei Drähte von der Stromquelle anschließen.
Erforderliche Komponenten:
- PIC-Mikrocontroller PIC18F2520 -1
- Vorgefertigte Leiterplatte -1
- USB-Anschluss -1
- 2-poliger Anschlussstecker (optional) -1
- Gemeinsame Anode Sieben-Segment-Anzeige (4 in 1) -1
- BC557 Transistor -4
- 1k Widerstand -6
- 2k Widerstand -1
- 100R Widerstand -8
- 1000uF Kondensator -1
- 10uF Kondensator -1
- 28-polige IC-Basis -1
- weibliche Burgsticks -1
- 7805 Spannungsregler -1
- Auto USB Ladegerät -1
- LED -1
- Zenerdiode5.1v -2
- USB-Kabel (B-Typ oder Arduino UNO-kompatibel) -1
- 20 MHz Kristall -1
- 33pF Kondensator -2
Beschreibung:
Im Allgemeinen ist es nicht wichtig, die Leistung der Autobatterie jedes Mal zu messen, aber wir müssen häufig die Batteriespannung während des Ladevorgangs kennen, um zu überprüfen, ob sie aufgeladen wird oder nicht. Auf diese Weise können wir einen Batterieausfall aufgrund eines fehlerhaften Ladesystems schützen. Die Spannung einer 12-V-Autobatterie während des Ladevorgangs beträgt ca. 13,7 V. So können wir feststellen, ob unser Akku gut aufgeladen ist oder nicht, und die Ursachen für einen Batterieausfall untersuchen. In diesem Projekt werden wir einen Spannungsmesser für Autobatterien mithilfe eines PIC-Mikrocontrollers implementieren. Mit dem Auto-Zigarettenanzünder oder dem Auto-USB-Ladegerät wird die Batteriespannung mithilfe der Spannungsteilerschaltung an den ADC-Pin des Mikrocontrollers angeschlossen. Dann eine 4-stellige Sieben-Segment-Anzeigewird verwendet, um den Spannungswert der Batterie anzuzeigen. Diese Schaltung kann die Spannung bis zu 15 V messen.
Wenn eine Autobatterie aufgeladen wird, kommt die Spannung an den Batterieklemmen tatsächlich von der Lichtmaschine / dem Gleichrichter. Deshalb zeigt das System 13,7 Volt an. Wenn die Batterie jedoch nicht aufgeladen wird oder der Motor des Autos nicht eingeschaltet ist, beträgt die Spannung am Batteriepol die tatsächliche Batteriespannung um 12 V.
Wir können dieselbe Schaltung auch zum Messen der Spannung anderer Stromquellen bis zu 15 V verwenden. Zu diesem Zweck haben wir den Klemmenblock (grüner Kunststoffblock) in die Leiterplatte eingelötet, wo Sie zwei Drähte von der Stromquelle anschließen und die Spannung überwachen können. Überprüfen Sie das Video am Ende, wo wir es demonstriert haben, indem Sie die Spannung eines variablen Netzteils, einer USB-Powerbank und eines 12-V-AC-DC-Adapters messen. Überprüfen Sie auch den einfachen Batteriemonitor-Stromkreis und den 12-V-Batterieladekreis.
Schaltplan und Funktionserklärung:
In dieser Batteriespannungsüberwachungsschaltung haben wir die Autobatteriespannung unter Verwendung eines eingebauten analogen Pins des PIC-Mikrocontrollers gelesen und hier den Pin AN0 (28) des Mikrocontrollers über eine Spannungsteilerschaltung ausgewählt. Zum Schutz wird auch eine Zenerdiode von 5,1 V verwendet.
Die 4-in-1-Sieben-Segment-Anzeige dient zur Anzeige des Momentanwerts der Autobatteriespannung, die an PORTB und PORTC des Mikrocontrollers angeschlossen ist. Ein 5-V-Spannungsregler, nämlich LM7805, wird zur Stromversorgung der gesamten Schaltung einschließlich der Sieben-Segment-Anzeigen verwendet. Ein 20-MHz-Quarzoszillator wird zum Takten des Mikrocontrollers verwendet. Die Schaltung wird über ein LM7805 vom USB-Autoladegerät selbst mit Strom versorgt. Wir haben einen USB-Anschluss in die Platine eingefügt, damit wir das Auto-USB-Ladegerät direkt an die Schaltung anschließen können.
Das USB-Ladegerät oder der Zigarettenanzünder des Autos bieten eine geregelte 5-V-Versorgung über die 12-V-Steckdose des Autos. Wir müssen jedoch die tatsächliche Spannung der Autobatterie messen, damit wir das Autoladegerät optimiert haben. Sie müssen das USB-Ladegerät des Autos öffnen und dann die 5-V- (Ausgang) und 12-V- (Eingang) Anschlüsse finden und dann die 5-V-Verbindung entfernen, indem Sie sie mit Sandpapier oder etwas Hartem abreiben und den USB-Ausgangsanschluss direkt auf 12 V kurzschließen. Öffnen Sie zuerst die 5-V-Verbindung über den USB-Anschluss im Auto-USB-Ladegerät und schließen Sie dann 12 V an den USB-Anschluss an, an dem 5 V angeschlossen waren. Wie in der folgenden Abbildung gezeigt, haben wir die rot eingekreiste Verbindung unterbrochen. Sie kann in Ihrem Autoladegerät abweichen.
Um hier den ADC zu konfigurieren, haben wir den analogen Pin AN0 mit einer internen Referenzspannung von 5 V und einem 1: 32-Takt für die ADC-Wandlung ausgewählt.
Um die Autobatteriespannung aus dem ADC-Wert zu berechnen, haben wir die folgende Formel verwendet:
Spannung = (ADC-Wert / Widerstandsfaktor) * Referenzspannung Wobei: ADC-Wert = Ausgang des Spannungsteilers (vom Mikrocontroller in digital umgewandelt) Widerstandsfaktor = 1023,0 / (R2 / R1 + R2) // 1023 ist der maximale ADC-Wert (10- Bit) Referenzspannung = 5 Volt // interne 5V Referenz ausgewählt
Widerstandsfaktorberechnung:
In diesem Projekt lesen wir die Autobatteriespannung, die (im Allgemeinen) zwischen 12 V und 14 V liegt. Wir haben dieses Projekt unter der Annahme durchgeführt, dass maximal 15 V bedeuten, dass dieses System maximal bis zu 15 V gelesen werden kann.
In der Schaltung haben wir also die Widerstände R1 und R2 im Spannungsteiler verwendet. Die Werte sind:
R1 = 2K
R2 = 1K
Widerstandsfaktor = 1023,0 * (1000/2000 + 1000)
Widerstandsfaktor = 1023,0 * (1/3)
Widerstandsfaktor = 341,0 für bis zu 15 Volt
Die endgültige Formel für die Spannungsberechnung lautet also wie folgt: Wir haben den am Ende dieses Artikels angegebenen Code verwendet:
Spannung = (ADC-Wert / 341,0) * 5,0
Schaltungs- und Leiterplattendesign mit EasyEDA:
Für die Entwicklung eines Schaltkreises für die Überwachung der Autobatteriespannung haben wir EasyEDA verwendet, ein kostenloses Online-EDA-Tool zum nahtlosen Erstellen von Schaltkreisen und Leiterplatten. Wir haben zuvor nur wenige Leiterplatten bei EasyEDA bestellt und nutzen ihre Dienste weiterhin, da wir den gesamten Prozess, vom Zeichnen der Schaltkreise bis zur Bestellung der Leiterplatten, im Vergleich zu anderen Leiterplattenherstellern bequemer und effizienter fanden. EasyEDA bietet kostenlos Schaltungszeichnung, Simulation und Leiterplattendesign sowie qualitativ hochwertigen und kostengünstigen kundenspezifischen Leiterplattenservice. Lesen Sie hier das vollständige Tutorial zur Verwendung von Easy EDA zum Erstellen von Schaltplänen, Leiterplattenlayouts, Simulieren der Schaltkreise usw.
EasyEDA verbessert sich von Tag zu Tag; Sie haben viele neue Funktionen hinzugefügt und die allgemeine Benutzererfahrung verbessert, was EasyEDA einfacher und benutzerfreundlicher für das Entwerfen von Schaltungen macht. In Kürze wird die Desktop-Version veröffentlicht, die heruntergeladen und zur Offline-Verwendung auf Ihrem Computer installiert werden kann.
In EasyEDA können Sie Ihre Schaltungs- und Leiterplattenentwürfe veröffentlichen, damit andere Benutzer sie kopieren oder bearbeiten und davon profitieren können. Wir haben auch unsere gesamten Schaltungs- und Leiterplattenlayouts für diesen Autobatteriespannungsmonitor veröffentlicht. Überprüfen Sie den folgenden Link::
easyeda.com/circuitdigest/PIC_based_Car_Battery_Monitoring_System-63c2d5948eaa48c5bcbbd8db49a6c776
Unten finden Sie den Schnappschuss der obersten Ebene des PCB-Layouts von EasyEDA. Sie können jede Ebene (oben, unten, Oberschicht, untere Seide usw.) der Leiterplatte anzeigen, indem Sie die Ebene aus dem Fenster "Ebenen" auswählen.
Online-Berechnung und Bestellung von Leiterplattenmustern:
Nachdem Sie das Design der Leiterplatte abgeschlossen haben, können Sie auf das Symbol der Fertigungsausgabe klicken, um zur Bestellseite für die Leiterplatte zu gelangen. Hier können Sie Ihre Leiterplatte im Gerber Viewer anzeigen oder Gerber-Dateien Ihrer Leiterplatte herunterladen und an einen beliebigen Hersteller senden. Es ist auch viel einfacher (und billiger), sie direkt in EasyEDA zu bestellen. Hier können Sie die Anzahl der zu bestellenden Leiterplatten, die Anzahl der benötigten Kupferschichten, die Leiterplattendicke, das Kupfergewicht und sogar die Leiterplattenfarbe auswählen. Nachdem Sie alle Optionen ausgewählt haben, klicken Sie auf "In den Warenkorb" und schließen Sie Ihre Bestellung ab. Einige Tage später erhalten Sie Ihre Leiterplatten.
Sie können diese Platine direkt bestellen oder die Gerber-Datei über diesen Link herunterladen.
Nach einigen Tagen der Bestellung von Leiterplatten bekam ich die Leiterplattenmuster
Nachdem ich die Leiterplatten erhalten habe, habe ich alle erforderlichen Komponenten über die Leiterplatte montiert, und schließlich haben wir unser Autobatterie-Überwachungssystem bereit. Überprüfen Sie diese Schaltung, indem Sie in dem am Ende angegebenen Video arbeiten.
Programmiererklärung:
Das Programm dieses Projekts ist für Anfänger wenig schwierig. Um diesen Code zu schreiben, benötigen wir einige Header-Dateien. Hier verwenden wir MPLAB X IDE zum Codieren und XC-Compiler zum Erstellen und Kompilieren des Codes. Der Code ist in C-Sprache geschrieben.
In diesem Code haben wir die Batteriespannung mithilfe eines analogen Pins gelesen und zum Steuern oder Senden von Daten an eine 4-stellige Sieben-Segment-Anzeige die Timer Interrupt Server Routine im PIC-Mikrocontroller verwendet. Die gesamte Berechnung für die Spannungsmessung erfolgt in der Hauptprogrammroutine.
Zuerst haben wir in den Code einen Header eingefügt und dann den PIC-Mikrocontroller mithilfe von Konfigurationsbits konfiguriert.
#einschließen
Anschließend werden deklarierte Variablen und definierte Pins für sieben Segmente angezeigt
unsigned int counter2; vorzeichenlose Zeichenposition = 0; vorzeichenloses Zeichen k = {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; int digit1 = 0, digit2 = 0, digit3 = 0, digit4 = 0; #define TRIS_seg1 TRISCbits.TRISC0 #define TRIS_seg2 TRISCbits.TRISC1 #define TRIS_seg3 TRISCbits.TRISC2 #define TRIS_seg4 TRISCbits.TRISC3 #define TRIS_led1 TRISAbits.TRISA2 #define TRIS_led1 TRISAbits.TRISA2 TRIS_led5 TRISAbits.TRISA………………
Jetzt haben wir eine Timer-Interrupt-Routine zum Ansteuern der Sieben-Segment-Anzeige erstellt:
void Interrupt low_priority LowIsr (void) {if (TMR0IF == 1) {counter2 ++; if (counter2> = 1) {if (position == 0) {seg1 = 0; seg2 = 1; seg3 = 1; seg4 = 1;…………………..
Jetzt in der Funktion void main () haben wir Timer und Interrupt initialisiert.
GIE = 1; // GLOBLE INTRRUPT ENABLE PEIE = 1; // peripheres Intrupt-Flag T0CON = 0b000000000; // Prescaler-Wert put TMR0IE = 1; // Interrupt aktivieren TMR0IP = 0; // Interrupt-Priorität TMR0 = 55536; // Zähler nach diesem Wert starten TMR0ON = 1;
Und dann lesen wir in der while- Schleife den analogen Eingang am analogen Pin und rufen eine Funktion für Berechnungen auf.
während (1) {adc_init (); für (i = 0; i <40; i ++) {Wert = adc_value (); adcValue + = Wert; } adcValue = (float) adcValue / 40.0; convert (adcValue); Verzögerung (100); }}
Die angegebene Funktion adc_init () wird zum Initialisieren des ADC verwendet
void adc_init () {ADCON0 = 0b00000011; // ADC-Kanal auswählen ADCON1 = 0b00001110; // analoge und digitale I / P auswählen ADCON2 = 0b10001010; // Eqization Time Holding Cap Time ADON = 1; }}
Die angegebene Funktion adc_value wird verwendet, um den Eingang vom analogen Pin zu lesen und die Spannung zu berechnen.
float adc_value (void) {float adc_data = 0; while (GO / DONE == 1); // höhere Bitdaten starten Konvertierung adc Wert adc_data = (ADRESL) + (ADRESH << 8); // 10-Bit-Ausgabe speichern adc_data = ((adc_data / 342.0) * 5.0); return adc_data; }}
Die angegebene Konvertierungsfunktion wird verwendet, um den Spannungswert in segmentunterstützte Werte umzuwandeln.
void convert (float f) {int d = (f * 100); Ziffer1 = d% 10; d = d / 10; Ziffer 2 = d% 10; d = d / 10; Ziffer 3 = d% 10; Ziffer 4 = d / 10; }}
Überprüfen Sie den vollständigen Code für dieses Projekt unten mit einem Demonstrationsvideo.