- Nødvendige komponenter:
- Beskrivelse:
- Kretsdiagram og arbeidsforklaring:
- Krets- og kretskortdesign ved bruk av EasyEDA:
- Beregning og bestilling av PCB-prøver online:
- Programmeringsforklaring:
I dette prosjektet skal vi lage et PIC-basert bilbatteriovervåkningssystem på PCB. Her har vi designet et PCB ved hjelp av EASYEDA online PCB simulator og designer. Denne overvåkningskretsen for bilbatteri brukes til å overvåke bilbatteriets strøm ved å bare koble den til strømuttaket på bilens dashbord. Den PCB har også muligheten til å bruke den som Voltage Måling verktøy eller voltmeter uten å bruke USB billader. Vi har festet en terminalblokk her for å måle spenningen til andre strømkilder, bare ved å koble to ledninger i den fra strømkilden.
Nødvendige komponenter:
- PIC Microcontroller PIC18F2520 -1
- Produsert PCB Board -1
- USB-kontakt -1
- 2-polet terminalkontakt (valgfritt) -1
- Felles anode syv segment display (4 i 1) -1
- BC557 Transistor -4
- 1k motstand -6
- 2k motstand -1
- 100R motstand -8
- 1000uF kondensator -1
- 10uF kondensator -1
- 28-pins IC-base -1
- kvinnelige burgsticks -1
- 7805 Spenningsregulator -1
- Bil USB-lader -1
- LED -1
- Zener-diode 5.1 v -2
- USB-kabel (B-type eller Arduino UNO-kompatibel) -1
- 20MHz krystall -1
- 33pF kondensator -2
Beskrivelse:
Generelt er det ikke viktig å måle bilbatteriet hver gang, men vi trenger ofte å vite om batterispenningen under lading, for å sjekke om den lades eller ikke. Ved dette kan vi beskytte batterisvikt på grunn av det defekte ladesystemet. Spenningen til et 12v bilbatteri under lading er ca 13,7v. Så vi kan identifisere om batteriet lades godt eller ikke, og kan undersøke årsakene til batterisvikt. I dette prosjektet skal vi implementere en spenningsmåler for bilbatteri ved å bruke en PIC-mikrokontroller. Car Cigarette Lighter eller USB USB-lader brukes til å få batterispenningen til ADC-pinnen på mikrokontrolleren ved hjelp av Voltage Divider Circuit. Deretter en firesifret syv segment skjermbrukes til å vise spenningsverdien til batteriet. Denne kretsen kan måle spenningen opp til 15v.
Når et bilbatteri lades, kommer spenningen over batteripolene faktisk fra generatoren / likeretteren. Derfor leser systemet 13,7 volt. Men når batteriet ikke lades eller bilens motor ikke er PÅ, er spenningen over batteripolen faktisk batterispenning rundt 12v.
Vi kan også bruke den samme kretsen for å måle spenningen til andre strømkilder opp til 15v. For dette formålet har vi loddet terminalblokken (grønn farge plastblokk) i kretskort der du kan koble to ledninger fra strømkilden og kan overvåke spenningen. Sjekk videoen på slutten, hvor ble vi demonstrert ved å måle spenningen til en variabel strømforsyning, en USB-strømbank og en 12V AC-DC-adapter. Sjekk også Simple Battery Monitor Circuit og 12v Battery Charger Circuit.
Kretsdiagram og arbeidsforklaring:
I denne batterispenningsovervåkningskretsen har vi lest bilbatterispenningen ved å bruke en innebygd analog pin av PIC-mikrokontroller, og her har vi valgt pin AN0 (28) pin av mikrokontroller gjennom en spenningsdelerkrets. En zenerdiode på 5.1v brukes også til beskyttelse.
4 i 1 syv segment display brukes til å vise øyeblikkelig verdien av bilbatterispenningen som er koblet til PORTB og PORTC på mikrokontrolleren. En 5v spenningsregulator, nemlig LM7805, brukes til å drive hele kretsen, inkludert Seven Segment Display. En 20 MHz krystalloscillator brukes til å klokke mikrokontrolleren. Kretsen drives av selve USB-billaderen ved hjelp av en LM7805. Vi har lagt til en USB-port i kretskortet, slik at vi kan koble bil-USB-laderen direkte til kretsen.
Bil USB-lader eller sigarettenner gir 5v regulert forsyning fra 12v strømuttak på bilen, men vi må måle den faktiske spenningen til bilbatteriet, så vi har justert billaderen. Du må åpne bilens USB-lader og deretter finne terminalene 5v (output) og 12v (input) og deretter fjerne 5v-tilkoblingen ved å gni den med sandpapir eller med noe hardt og kortslutte USB-utgangsterminalen til 12v direkte. Åpne først 5v-tilkoblingen fra USB-porten i USB-laderen til bilen, og koble deretter 12v til USB-porten der 5v ble koblet til. Som vist i figuren nedenfor, har vi kuttet den røde tilkoblingen, den kan variere i billaderen din.
For å konfigurere ADC her har vi valgt analog pin AN0 med en intern referansespenning på 5v og f / 32 klokke for ADC-konvertering.
For å beregne bilbatterispenningen fra ADC-verdien har vi brukt gitt formel:
Spenning = (ADC-verdi / motstandsfaktor) * referansespenning Hvor: ADC-verdi = utgang fra spenningsdeler (omgjort til digital av mikrokontroller) Motstandsfaktor = 1023,0 / (R2 / R1 + R2) // 1023 er maks ADC-verdi (10- bit) Referansespenning = 5 volt // intern 5v referanse valgt
Motstandsfaktorberegning:
I dette prosjektet leser vi bilbatterispenningen som er (generelt) rundt 12v-14v. Så vi har gjort dette prosjektet forutsatt at maks 15v betyr at dette systemet kan leses maks opptil 15v.
Så i kretsen har vi brukt R1 og R2 motstand i spenningsdeler, og verdiene er:
R1 = 2K
R2 = 1K
Motstandsfaktor = 1023,0 * (1000/2000 + 1000)
Motstandsfaktor = 1023,0 * (1/3)
Motstandsfaktor = 341,0 for opptil 15 volt
Så den endelige formelen for spenningsberegning vil være som følger, som vi har brukt koden, gitt på slutten av denne artikkelen:
Spenning = (ADC-verdi / 341,0) * 5,0
Krets- og kretskortdesign ved bruk av EasyEDA:
For å designe en krets for bilbatterispenningsovervåker har vi brukt EasyEDA, som er et gratis online EDA-verktøy for å lage kretser og PCB på en sømløs måte. Vi har tidligere bestilt få PCB-er fra EasyEDA og bruker fortsatt tjenestene deres da vi fant hele prosessen, fra å tegne kretsene til å bestille PCB-ene, mer praktisk og effektiv i sammenligning med andre PCB-fabrikanter. EasyEDA tilbyr kretstegning, simulering, PCB-design gratis og tilbyr også høy kvalitet, men lav pris Tilpasset PCB-tjeneste. Sjekk her den komplette opplæringen om hvordan du bruker Easy EDA til å lage skjemaer, PCB-oppsett, simulere kretsene etc.
EasyEDA forbedrer seg hver dag; de har lagt til mange nye funksjoner og forbedret den generelle brukeropplevelsen, noe som gjør EasyEDA enklere og brukbart for å designe kretser. De skal snart lansere Desktop-versjonen, som kan lastes ned og installeres på datamaskinen din for offline bruk.
I EasyEDA kan du gjøre krets- og kretskortdesignene dine offentlige slik at andre brukere kan kopiere eller redigere dem og dra nytte av det. Vi har også gjort hele krets- og kretskortoppsett offentlig for denne bilbatteriets spenningsmonitor, sjekk lenken nedenfor:
easyeda.com/circuitdigest/PIC_based_Car_Battery_Monitoring_System-63c2d5948eaa48c5bcbbd8db49a6c776
Nedenfor er øyeblikksbildet av det øverste laget av PCB-layout fra EasyEDA, du kan se hvilket som helst lag (topp, bunn, toppsilk, bunnmelk osv.) På PCB ved å velge laget fra "Lag" -vinduet.
Beregning og bestilling av PCB-prøver online:
Etter å ha fullført designen av PCB, kan du klikke på ikonet for Fabrication-utdata , som tar deg med på PCB-ordresiden. Her kan du se PCB i Gerber Viewer eller laste ned Gerber-filer på PCB og sende dem til hvilken som helst produsent. Det er også mye enklere (og billigere) å bestille det direkte i EasyEDA. Her kan du velge antall PCB du vil bestille, hvor mange kobberlag du trenger, PCB-tykkelsen, kobbervekten og til og med PCB-fargen. Når du har valgt alle alternativene, klikker du på "Lagre i handlekurven" og fullfører bestillingen, så får du PCB-ene noen dager senere.
Du kan bestille dette PCB direkte eller laste ned Gerber-filen ved hjelp av denne lenken.
Etter noen dager med bestilling av PCB fikk jeg PCB-prøvene
Etter å ha fått kretskortene har jeg montert alle nødvendige komponenter over kretskortet, og til slutt har vi vårt bilbatteriovervåkingssystem klart, sjekk denne kretsen i arbeid i video gitt på slutten.
Programmeringsforklaring:
Programmet for dette prosjektet er lite vanskelig for nybegynnere. For å skrive denne koden trenger vi noen headerfiler. Her bruker vi MPLAB X IDE for koding og XC kompiler for å bygge og kompilere koden. Koden er skrevet på C-språk.
I denne koden har vi lest batterispenningen ved hjelp av en analog pin, og for å kontrollere eller sende data til 4-sifret syv segment display, har vi brukt Timer Interrupt Server Routine i PIC mikrokontroller. All beregning for spenningsmåling gjøres i hovedprogramrutinen.
Først i koden har vi tatt med en overskrift og deretter konfigurert PIC-mikrokontroller ved hjelp av konfigurasjonsbiter.
#inkludere
Og deretter erklærte variabler og definerte pinner for syv segmentvisninger
usignert int counter2; usignert røyeposisjon = 0; usignert røye k = {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; int siffer1 = 0, siffer2 = 0, siffer3 = 0, siffer4 = 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_led2 TRISAbits.TRISA5 #define TRIS_led3 TRISAbits.TRISA0 #define TRIS_led4 TRISAbits.TRISA1 #define TRIS_led5 TRISAbits.TRISA………………
Nå har vi laget en timeravbruddsrutine for å kjøre syv segmentvisning:
ugyldig avbryte lav_prioritet LowIsr (ugyldig) {hvis (TMR0IF == 1) {counter2 ++; if (counter2> = 1) {if (position == 0) {seg1 = 0; seg2 = 1; seg3 = 1; seg4 = 1;………………
Nå i ugyldig hoved () -funksjon har vi initialisert timer og avbrudd.
GIE = 1; // GLOBLE INTRRUP ENABLE PEIE = 1; // perifert avbruddsflagg T0CON = 0b000000000; // prescaler verdi satt TMR0IE = 1; // avbryt aktivering TMR0IP = 0; // avbryt prioritet TMR0 = 55536; // startteller etter denne verdien TMR0ON = 1;
Og så i løpet av en løkke, leser vi analog inngang ved den analoge stiften og kaller en eller annen funksjon for beregninger.
mens (1) {adc_init (); for (i = 0; i <40; i ++) {Verdi = adc_value (); adcValue + = Verdi; } adcValue = (float) adcValue / 40.0; konvertere (adcValue); forsinkelse (100); }
Gitt adc_init () -funksjonen brukes til å initialisere ADC
ugyldig adc_init () {ADCON0 = 0b00000011; // velg ADC-kanal ADCON1 = 0b00001110; // velg analog og digital i / p ADCON2 = 0b10001010; // eqisation time holding cap time ADON = 1; }
Gitt adc_value- funksjonen brukes til å lese inngang fra den analoge pinnen og beregne spenningen.
flyte adc_value (ugyldig) {float adc_data = 0; mens (GO / DONE == 1); // høyere bit data start konvertering adc verdi adc_data = (ADRESL) + (ADRESH << 8); // Lagre 10-biters utgang adc_data = ((adc_data / 342.0) * 5.0); returner adc_data; }
Og gitt konverteringsfunksjon brukes til å konvertere spenningsverdi til segmentstøttede verdier.
ugyldig konvertering (flyte f) {int d = (f * 100); siffer1 = d% 10; d = d / 10; digit2 = d% 10; d = d / 10; digit3 = d% 10; digit4 = d / 10; }
Sjekk den komplette koden for dette prosjektet nedenfor med en demonstrasjonsvideo.