- Componenti richiesti:
- Descrizione:
- Schema del circuito e spiegazione di funzionamento:
- Progettazione di circuiti e PCB utilizzando EasyEDA:
- Calcolo e ordinazione di campioni di PCB online:
- Spiegazione della programmazione:
In questo progetto realizzeremo un sistema di monitoraggio della batteria per auto basato su PIC su PCB. Qui abbiamo progettato un PCB utilizzando il simulatore e designer di PCB online EASYEDA. Questo circuito di monitoraggio della batteria dell'auto viene utilizzato per monitorare la potenza della batteria dell'auto semplicemente collegandola alla presa di corrente sul cruscotto di un'auto. Il PCB ha anche la possibilità di usarlo come strumento di misurazione della tensione o voltmetro senza utilizzare il caricatore USB per auto. Abbiamo collegato una morsettiera qui per misurare la tensione di altre fonti di alimentazione, semplicemente collegando due fili dalla fonte di alimentazione.
Componenti richiesti:
- Microcontrollore PIC PIC18F2520 -1
- Scheda PCB fabbricata -1
- Connettore USB -1
- Connettore terminale a 2 pin (opzionale) -1
- Display a sette segmenti con anodo comune (4 in 1) -1
- Transistor BC557 -4
- Resistenza da 1k -6
- Resistenza 2k -1
- Resistenza 100R -8
- Condensatore 1000uF -1
- Condensatore 10uF -1
- Base IC a 28 pin -1
- burgsticks femminili -1
- 7805 Regolatore di tensione -1
- Caricatore USB per auto -1
- LED -1
- Diodo Zener 5.1v -2
- Cavo USB (tipo B o compatibile con Arduino UNO) -1
- Cristallo da 20 MHz -1
- Condensatore 33pF -2
Descrizione:
Generalmente non è importante misurare ogni volta la potenza della batteria dell'auto, ma spesso abbiamo bisogno di conoscere la tensione della batteria durante la ricarica, per verificare se è in carica o meno. In questo modo, possiamo proteggere il guasto della batteria a causa del sistema di ricarica difettoso. La tensione di una batteria per auto da 12 V durante la ricarica è di circa 13,7 V. In questo modo possiamo identificare se la nostra batteria si sta caricando bene o meno e possiamo indagare sulle cause del guasto della batteria. In questo progetto, implementeremo un voltmetro per batteria per auto utilizzando un microcontrollore PIC. Accendisigari per auto o caricabatterie USB per auto vengono utilizzati per ottenere la tensione della batteria al pin ADC del microcontrollore con l'aiuto del circuito del divisore di tensione. Quindi un display a sette segmenti a 4 cifreviene utilizzato per mostrare il valore di tensione della batteria. Questo circuito può misurare la tensione fino a 15v.
Quando la batteria di un'auto si sta caricando, la tensione ai terminali della batteria proviene effettivamente dall'alternatore / raddrizzatore, ecco perché il sistema legge 13,7 volt. Ma quando la batteria non si carica o il motore dell'auto non è acceso, la tensione sul terminale della batteria è la tensione effettiva della batteria di circa 12v.
Possiamo anche utilizzare lo stesso circuito per misurare la tensione di altre sorgenti di alimentazione fino a 15v. A questo scopo abbiamo saldato la morsettiera (blocco di plastica di colore verde) nel PCB dove è possibile collegare due fili dalla fonte di alimentazione e monitorare la tensione. Guarda il video alla fine, dove lo abbiamo dimostrato misurando la tensione di un alimentatore variabile, un power bank USB e un adattatore 12v AC-DC. Controllare anche il circuito di monitoraggio della batteria semplice e il circuito del caricabatterie da 12v.
Schema del circuito e spiegazione di funzionamento:
In questo circuito di monitoraggio della tensione della batteria, abbiamo letto la tensione della batteria dell'auto utilizzando un pin analogico integrato del microcontrollore PIC e qui abbiamo selezionato il pin AN0 (28) del microcontrollore attraverso un circuito divisore di tensione. Per la protezione viene utilizzato anche un diodo zener di 5.1v.
Il display a sette segmenti 4 in 1 viene utilizzato per visualizzare il valore istantaneo della tensione della batteria dell'auto collegata a PORTB e PORTC del microcontrollore. Un regolatore di tensione 5v, ovvero LM7805, viene utilizzato per alimentare l'intero circuito, inclusi i display a sette segmenti. Un oscillatore a cristallo da 20 MHz viene utilizzato per sincronizzare il microcontrollore. Il circuito è alimentato dallo stesso caricabatteria USB per auto utilizzando un LM7805. Abbiamo aggiunto una porta USB nel PCB, in modo da poter collegare direttamente il caricatore USB per auto al circuito.
Il caricatore USB per auto o l'accendisigari fornisce un'alimentazione regolata a 5 V dalla presa di alimentazione da 12 V dell'auto, ma dobbiamo misurare la tensione effettiva della batteria dell'auto, quindi abbiamo ottimizzato il caricatore per auto. È necessario aprire il caricatore USB dell'auto e quindi trovare i terminali 5v (uscita) e 12v (ingresso) e quindi rimuovere la connessione 5v strofinandola con carta vetrata o con qualche cosa dura e cortocircuitare il terminale di uscita USB direttamente a 12v. Per prima cosa apri la connessione 5v dalla porta USB nel caricatore USB dell'auto, quindi collega 12v alla porta USB a cui era collegata la 5v. Come mostrato nella figura sotto, abbiamo tagliato la connessione cerchiata in rosso, potrebbe differire nel caricatore per auto.
Per configurare ADC qui abbiamo selezionato il pin analogico AN0 con una tensione di riferimento interna di 5v e un clock f / 32 per la conversione ADC.
Per calcolare la tensione della batteria dell'auto dal valore ADC abbiamo usato la formula data:
Tensione = (valore ADC / fattore resistenza) * tensione di riferimento Dove: valore ADC = uscita del divisore di tensione (convertito in digitale dal microcontrollore) Fattore resistenza = 1023,0 / (R2 / R1 + R2) // 1023 è il valore massimo ADC (10- bit) Tensione di riferimento = 5 volt // riferimento interno 5v selezionato
Calcolo del fattore di resistenza:
In questo progetto stiamo leggendo la tensione della batteria dell'auto che è (generalmente) intorno a 12v-14v. Quindi abbiamo fatto questo progetto assumendo che max 15v significhi che questo sistema può essere letto fino a 15v.
Quindi nel circuito abbiamo utilizzato i resistori R1 e R2 nella parte del partitore di tensione ei valori sono:
R1 = 2K
R2 = 1K
Fattore di resistenza = 1023,0 * (1000/2000 + 1000)
Fattore di resistenza = 1023,0 * (1/3)
Fattore di resistenza = 341,0 fino a 15 volt
Quindi la formula finale per il calcolo della tensione sarà la seguente, che abbiamo utilizzato il codice, dato alla fine di questo articolo:
Tensione = (valore ADC / 341,0) * 5,0
Progettazione di circuiti e PCB utilizzando EasyEDA:
Per progettare un circuito per il monitoraggio della tensione della batteria dell'auto, abbiamo utilizzato EasyEDA, uno strumento EDA online gratuito per la creazione di circuiti e PCB in modo trasparente. In precedenza abbiamo ordinato pochi PCB da EasyEDA e continuiamo a utilizzare i loro servizi poiché abbiamo scoperto l'intero processo, dal disegno dei circuiti all'ordinazione dei PCB, più conveniente ed efficiente rispetto ad altri produttori di PCB. EasyEDA offre gratuitamente il disegno di circuiti, la simulazione, la progettazione di PCB e offre anche un servizio PCB personalizzato di alta qualità ma a basso prezzo. Controlla qui il tutorial completo su Come utilizzare Easy EDA per creare schemi, layout PCB, simulare i circuiti ecc.
EasyEDA sta migliorando giorno dopo giorno; hanno aggiunto molte nuove funzionalità e migliorato l'esperienza utente complessiva, il che rende EasyEDA più facile e utilizzabile per la progettazione di circuiti. Presto lanceranno la sua versione desktop, che può essere scaricata e installata sul tuo computer per l'utilizzo offline.
In EasyEDA, puoi rendere pubblici i tuoi progetti di circuiti e PCB in modo che altri utenti possano copiarli o modificarli e trarne vantaggio, abbiamo anche reso pubblici tutti i nostri layout di circuiti e PCB per questo Monitor di tensione della batteria dell'auto, controlla il link sottostante:
easyeda.com/circuitdigest/PIC_based_Car_Battery_Monitoring_System-63c2d5948eaa48c5bcbbd8db49a6c776
Di seguito è riportata l'istantanea dello strato superiore del layout PCB da EasyEDA, è possibile visualizzare qualsiasi strato (Top, Bottom, Topsilk, Bottomsilk ecc.) Del PCB selezionando lo strato dalla finestra "Layers".
Calcolo e ordinazione di campioni di PCB online:
Dopo aver completato il design del PCB, puoi fare clic sull'icona dell'output di Fabrication , che ti porterà sulla pagina dell'ordine PCB. Qui puoi visualizzare il tuo PCB in Gerber Viewer o scaricare i file Gerber del tuo PCB e inviarli a qualsiasi produttore, è anche molto più semplice (ed economico) ordinarlo direttamente in EasyEDA. Qui puoi selezionare il numero di PCB che desideri ordinare, quanti strati di rame ti servono, lo spessore del PCB, il peso del rame e persino il colore del PCB. Dopo aver selezionato tutte le opzioni, fai clic su "Salva nel carrello" e completa l'ordine, quindi riceverai i tuoi PCB pochi giorni dopo.
Puoi ordinare direttamente questo PCB o scaricare il file Gerber usando questo link.
Dopo pochi giorni dall'ordinazione di PCB ho ricevuto i campioni di PCB
Dopo aver ottenuto i PCB ho montato tutti i componenti richiesti sul PCB, e finalmente abbiamo pronto il nostro sistema di monitoraggio della batteria dell'auto, controlla questo circuito nel funzionamento nel video fornito alla fine.
Spiegazione della programmazione:
Il programma di questo progetto è un po 'difficile per i principianti. Per scrivere questo codice abbiamo bisogno di alcuni file di intestazione. Qui stiamo usando MPLAB X IDE per la codifica e il compilatore XC per costruire e compilare il codice. Il codice è scritto in linguaggio C.
In questo codice, abbiamo letto la tensione della batteria utilizzando un pin analogico e per il controllo o l'invio di dati al display a sette segmenti a 4 cifre, abbiamo utilizzato la routine del server Interrupt Timer nel microcontrollore PIC. Tutto il calcolo per la misurazione della tensione viene eseguito nella routine del programma principale.
Innanzitutto, nel codice abbiamo incluso un'intestazione e quindi abbiamo configurato il microcontrollore PIC utilizzando i bit di configurazione.
#includere
Quindi vengono visualizzate variabili dichiarate e pin definiti per sette segmenti
unsigned int counter2; posizione del carattere senza segno = 0; carattere non firmato k = {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; int cifra1 = 0, cifra2 = 0, cifra3 = 0, cifra4 = 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………………
Ora abbiamo creato una routine di interruzione del timer per guidare il display a sette segmenti:
void interrupt low_priority LowIsr (void) {if (TMR0IF == 1) {counter2 ++; if (counter2> = 1) {if (position == 0) {seg1 = 0; seg2 = 1; seg3 = 1; seg4 = 1;………………
Ora nella funzione void main () , abbiamo inizializzato timer e interrupt.
GIE = 1; // GLOBLE INTRRUPT ENABLE PEIE = 1; // flag intrupt periferico T0CON = 0b000000000; // il valore del prescaler mette TMR0IE = 1; // abilita interrupt TMR0IP = 0; // priorità di interrupt TMR0 = 55536; // avvia il contatore dopo questo valore TMR0ON = 1;
E poi, nel ciclo while , leggiamo l'ingresso analogico sul pin analogico e chiamiamo una funzione per i calcoli.
while (1) {adc_init (); for (i = 0; i <40; i ++) {Value = adc_value (); adcValue + = Value; } adcValue = (float) adcValue / 40.0; convert (adcValue); ritardo (100); }
Data la funzione adc_init () viene utilizzata per inizializzare ADC
void adc_init () {ADCON0 = 0b00000011; // seleziona il canale adc ADCON1 = 0b00001110; // seleziona i / p analogico e digitale ADCON2 = 0b10001010; // eqisation time holding cap time ADON = 1; }
Data la funzione adc_value viene utilizzata per leggere l'input dal pin analogico e calcolare la tensione.
float adc_value (void) {float adc_data = 0; while (GO / DONE == 1); // i dati di bit superiori iniziano la conversione adc value adc_data = (ADRESL) + (ADRESH << 8); // Memorizza l'output a 10 bit adc_data = ((adc_data / 342.0) * 5.0); return adc_data; }
E data la funzione di conversione viene utilizzata per convertire il valore di tensione in valori supportati dal segmento.
void convert (float f) {int d = (f * 100); cifra1 = d% 10; d = d / 10; cifra2 = d% 10; d = d / 10; cifra3 = d% 10; digit4 = d / 10; }
Controlla il codice completo per questo progetto di seguito con un video dimostrativo.