- Komponenter som krävs:
- Beskrivning:
- Kretsschema och arbetsförklaring:
- Krets- och kretskortsdesign med EasyEDA:
- Beräkning och beställning av PCB-prover online:
- Programmeringsförklaring:
I det här projektet ska vi skapa ett PIC-baserat övervakningssystem för bilbatterier på PCB. Här har vi designat en PCB med EASYEDA online PCB-simulator och designer. Denna övervakningskrets för bilbatterier används för att övervaka bilbatteriets kraft genom att bara ansluta den till eluttaget på bilens instrumentbräda. Den PCB har också möjlighet att använda det som spänningsmätning verktyg eller voltmeter utan att använda USB billaddare. Vi har anslutit ett terminalblock här för att mäta spänningen i andra strömkällor, bara genom att ansluta två ledningar i den från strömkällan.
Komponenter som krävs:
- PIC Microcontroller PIC18F2520 -1
- Tillverkad kretskort -1
- USB-kontakt -1
- 2-polig terminalanslutning (tillval) -1
- Gemensam anod sju segment display (4 i 1) -1
- BC557 Transistor -4
- 1k motstånd -6
- 2k motstånd -1
- 100R-motstånd -8
- 1000uF kondensator -1
- 10uF kondensator -1
- 28-stifts IC-bas -1
- kvinnliga burgsticks -1
- 7805 Spänningsregulator -1
- Bil USB-laddare -1
- LED -1
- Zener-diod 5.1 v -2
- USB-kabel (B-typ eller Arduino UNO-kompatibel) -1
- 20MHz kristall -1
- 33pF kondensator -2
Beskrivning:
Generellt är det inte viktigt att mäta bilbatteriets effekt varje gång, men vi behöver ofta veta om batterispänningen under laddningen, för att kontrollera om den laddas eller inte. Genom detta kan vi skydda batterifel på grund av det felaktiga laddningssystemet. Spänningen på ett 12v bilbatteri under laddning är cirka 13,7v. Så vi kan identifiera om vårt batteri laddas bra eller inte och kan undersöka orsakerna till batterifel. I det här projektet ska vi implementera en spänningsmätare för bilbatteri med en PIC-mikrokontroller. Bilcigarettändare eller bil USB-laddare används för att få batterispänningen till ADC-stiftet på mikrokontrollern med hjälp av Voltage Divider Circuit. Sedan en fyrsiffrig sju segment displayanvänds för att visa batteriets spänningsvärde. Denna krets kan mäta spänningen upp till 15v.
När ett bilbatteri laddas kommer spänningen över batteripolerna faktiskt från generator / likriktare, det är därför systemet läser 13,7 volt. Men när batteriet inte laddas eller bilens motor inte är PÅ, så är spänningen över batteriets terminal faktiska batterispänningen runt 12v.
Vi kan också använda samma krets för att mäta spänningen i andra kraftkällor upp till 15v. För detta ändamål har vi lödt terminalblocket (grönt plastblock) i kretskort där du kan ansluta två ledningar från strömkällan och kan övervaka spänningen. Kontrollera videon i slutet, var har vi visat det genom att mäta spänningen hos en variabel strömförsörjning, en USB-strömbank och en 12V AC-DC-adapter. Kontrollera även kretsen för enkel batterimonitor och 12v batteriladdarkrets.
Kretsschema och arbetsförklaring:
I denna övervakningskrets för batterispänning har vi läst bilbatterispänningen med hjälp av en inbyggd analog stift av PIC-mikrokontroller och här har vi valt stift AN0 (28) stift av mikrokontroller genom en spänningsdelarkrets. En zenerdiod på 5,1 v används också för skydd.
4 i 1 sju segment display används för att visa det ögonblickliga värdet på bilbatterispänningen som är ansluten till PORTB och PORTC på mikrokontrollern. En 5v spänningsregulator, nämligen LM7805, används för att driva hela kretsen inklusive sju segmentsdisplayer. En 20 MHz kristalloscillator används för att klocka mikrokontrollern. Kretsen drivs av själva USB-billaddaren med hjälp av en LM7805. Vi har lagt till en USB-port i kretskortet, så att vi kan ansluta bilens USB-laddare direkt till kretsen.
Bil USB-laddare eller cigarettändare ger 5v reglerad strömförsörjning från bilens 12v-eluttag, men vi måste mäta den faktiska spänningen på bilbatteriet så att vi har justerat billaddaren. Du måste öppna bilens USB-laddare och sedan hitta terminalerna 5v (output) och 12v (input) och sedan ta bort 5v-anslutningen genom att gnugga den med sandpapper eller med något hårt och korta USB-utgången till 12v direkt. Öppna först 5v-anslutningen från USB-porten i bilens USB-laddare och anslut sedan 12v till USB-porten där 5v var ansluten. Som visas i bilden nedan har vi klippt av den röda cirkelanslutningen, den kan skilja sig åt i din billaddare.
För att konfigurera ADC här har vi valt analog stift AN0 med en intern referensspänning på 5v och f / 32 klocka för ADC-omvandling.
För att beräkna bilbatterispänningen utifrån ADC-värdet har vi använt formeln:
Spänning = (ADC-värde / motståndsfaktor) * referens Spänning Var: ADC-värde = utgång från spänningsdelaren (omvandlad till digital av mikrokontroller) Motståndsfaktor = 1023,0 / (R2 / R1 + R2) // 1023 är max ADC-värde (10- bit) Referensspänning = 5 volt // intern 5v-referens vald
Motståndsfaktorberäkning:
I detta projekt läser vi bilbatterispänningen som är (vanligtvis) runt 12v-14v. Så vi har gjort det här projektet förutsatt att max 15v betyder att detta system kan läsas max upp till 15v.
Så i kretsen har vi använt R1- och R2-motstånd i spänningsdelarens del och värdena är:
R1 = 2K
R2 = 1K
Motståndsfaktor = 1023,0 * (1000/2000 + 1000)
Motståndsfaktor = 1023,0 * (1/3)
Motståndsfaktor = 341,0 för upp till 15 volt
Så den slutliga formeln för spänningsberäkning kommer att vara som följer, som vi har använt koden, som ges i slutet av denna artikel:
Spänning = (ADC-värde / 341,0) * 5,0
Krets- och kretskortsdesign med EasyEDA:
För att utforma en krets för bilbatterispänningsmonitor har vi använt EasyEDA, som är ett gratis online-EDA-verktyg för att skapa kretsar och kretskort på ett sömlöst sätt. Vi har tidigare beställt några kretskort från EasyEDA och använder fortfarande deras tjänster eftersom vi hittade hela processen, från att dra kretsar till att beställa kretskort, mer bekvämt och effektivt jämfört med andra kretskorttillverkare. EasyEDA erbjuder kretsritning, simulering, PCB-design gratis och erbjuder också högkvalitativ men lågt pris Anpassad PCB-tjänst. Kolla här den fullständiga handledningen om hur man använder Easy EDA för att skapa scheman, PCB-layouter, simulera kretsar etc.
EasyEDA förbättras dag för dag; de har lagt till många nya funktioner och förbättrat den övergripande användarupplevelsen, vilket gör EasyEDA enklare och användbart för design av kretsar. De kommer snart att lansera dess Desktop-version, som kan laddas ner och installeras på din dator för offline-användning.
I EasyEDA kan du göra din krets- och kretskortsdesign offentlig så att andra användare kan kopiera eller redigera dem och dra nytta av det, vi har också gjort hela krets- och kretskortslayouterna offentliga för denna bilbatterispänningsmonitor, kolla nedanstående länk:
easyeda.com/circuitdigest/PIC_based_Car_Battery_Monitoring_System-63c2d5948eaa48c5bcbbd8db49a6c776
Nedan är ögonblicksbilden av toppskiktet av PCB-layout från EasyEDA, du kan se vilket lager som helst (Top, Bottom, Topsilk, bottomsilk etc) på PCB genom att välja lagret från 'Layers' Window.
Beräkning och beställning av PCB-prover online:
Efter att ha slutfört designen av PCB kan du klicka på ikonen för Fabrication-utdata , som tar dig till PCB-beställningssidan. Här kan du se din PCB i Gerber Viewer eller ladda ner Gerber-filer på din PCB och skicka dem till valfri tillverkare, det är också mycket enklare (och billigare) att beställa det direkt i EasyEDA. Här kan du välja antalet PCB du vill beställa, hur många kopparlager du behöver, PCB-tjockleken, kopparvikten och till och med PCB-färgen. När du har valt alla alternativ klickar du på "Spara i kundvagn" och slutför din beställning, så får du dina PCB några dagar senare.
Du kan beställa denna PCB direkt eller ladda ner Gerber-filen med den här länken.
Efter några dagars beställning av PCB fick jag PCB-proverna
Efter att ha fått kretskorten har jag monterat alla nödvändiga komponenter över kretskortet, och slutligen har vi vårt bilbatteriövervakningssystem klart, kontrollera den här kretsen när du arbetar i video som ges i slutet.
Programmeringsförklaring:
Programmet för detta projekt är lite svårt för nybörjare. För att skriva den här koden behöver vi några rubrikfiler. Här använder vi MPLAB X IDE för kodning och XC-kompilator för att bygga och kompilera koden. Koden är skriven på C-språk.
I den här koden har vi läst batterispänningen med hjälp av en analog stift och för att styra eller skicka data till fyrsiffrig sju segment display har vi använt Timer Interrupt Server Routine i PIC-mikrokontroller. All beräkning för spänningsmätning görs i huvudprogramrutinen.
Först i koden har vi inkluderat en rubrik och sedan konfigurerat PIC-mikrokontroller med hjälp av konfigurationsbitar.
#omfatta
Och sedan deklarerade variabler och definierade stift för sju segment visas
osignerad int counter2; osignerad rödposition = 0; osignerad röd 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_led2 TRISAbits.TRISA5 #define TRIS_led3 TRISAbits.TRISA0 #define TRIS_led4 TRISAbits.TRISA1 #define TRIS_led5 TRISAbits.TRISA………………
Nu har vi skapat en timeravbrottsrutin för körning av sju segmentvisning:
ogiltig avbryta lågprioritet LowIsr (ogiltig) {if (TMR0IF == 1) {counter2 ++; if (counter2> = 1) {if (position == 0) {seg1 = 0; seg2 = 1; seg3 = 1; seg4 = 1;………………
Nu i ogiltig huvudfunktion () har vi initierat timer och avbrott.
GIE = 1; // GLOBLE INTRRUPT AKTIVER PEIE = 1; // perifer intrupt-flagga T0CON = 0b000000000; // förskalningsvärde sätter TMR0IE = 1; // avbryt aktivera TMR0IP = 0; // avbryta prioritet TMR0 = 55536; // starträknare efter detta värde TMR0ON = 1;
Och sedan i medan slinga, vi läser analog ingång på den analoga stift och ringa någon funktion för beräkningar.
medan (1) {adc_init (); för (i = 0; i <40; i ++) {Värde = adc_value (); adcValue + = värde; } adcValue = (float) adcValue / 40.0; konvertera (adcValue); fördröjning (100); }
Med tanke på adc_init () funktionen används för att initiera ADC
ogiltig adc_init () {ADCON0 = 0b00000011; // välj ADC-kanal ADCON1 = 0b00001110; // välj analog och digital i / p ADCON2 = 0b10001010; // eqisation time holding cap time ADON = 1; }
Med tanke på adc_value funktion används för att läsa input från den analoga stift och beräkna spänning.
float adc_value (void) {float adc_data = 0; medan (GO / DONE == 1); // högre bitdata startkonvertering adc-värde adc_data = (ADRESL) + (ADRESH << 8); // Lagra 10-bitars utdata adc_data = ((adc_data / 342.0) * 5.0); returnera adc_data; }
Och given konverteringsfunktion används för att konvertera spänningsvärde till segmentstödda värden.
ogiltig konvertering (flyta f) {int d = (f * 100); siffra1 = d% 10; d = d / 10; siffra2 = d% 10; d = d / 10; digit3 = d% 10; digit4 = d / 10; }
Kontrollera den fullständiga koden för detta projekt nedan med en demonstrationsvideo.