- Componente necesare:
- Descriere:
- Diagrama circuitului și explicația de lucru:
- Proiectarea circuitelor și PCB-urilor folosind EasyEDA:
- Calcularea și comandarea probelor de PCB online:
- Explicație de programare:
În acest proiect vom realiza un sistem de monitorizare a bateriei auto bazat pe PIC pe PCB. Aici am proiectat un PCB utilizând simulatorul și designerul online EASYEDA PCB. Acest circuit de monitorizare a bateriei auto este utilizat pentru a monitoriza puterea bateriei auto, doar conectându-l la priza de pe tabloul de bord al unei mașini. PCB are, de asemenea, opțiunea de a folosi ca tensiune instrument de măsurare sau Voltmeter fără a utiliza USB încărcător auto. Am atașat aici un bloc de borne pentru a măsura tensiunea altor surse de alimentare, doar conectând două fire din acesta de la sursa de alimentare.
Componente necesare:
- Microcontroler PIC PIC18F2520 -1
- Placă PCB fabricată -1
- Conector USB -1
- Conector terminal 2 pini (opțional) -1
- Afișaj cu șapte segmente de anod comun (4 în 1) -1
- BC557 Tranzistor -4
- 1k rezistor -6
- Rezistor 2k -1
- Rezistor 100R -8
- Condensator 1000uF -1
- 10uF condensator -1
- Bază IC cu 28 de pini -1
- femele burgsticks -1
- 7805 Regulator de tensiune -1
- Încărcător USB auto -1
- LED -1
- Diodă Zener5,1v -2
- Cablu USB (tip B sau compatibil Arduino UNO) -1
- 20MHz Crystal -1
- Condensator de 33pF -2
Descriere:
În general, nu este important să măsurăm de fiecare dată puterea bateriei mașinii, dar de multe ori trebuie să știm despre tensiunea bateriei în timpul încărcării, pentru a verifica dacă se încarcă sau nu. Prin aceasta, putem proteja defecțiunile bateriei din cauza sistemului defect de încărcare. Tensiunea unei baterii auto de 12v în timpul încărcării este de aproximativ 13,7v. Deci, putem identifica dacă bateria noastră se încarcă bine sau nu și putem investiga cauzele defecțiunii bateriei. În acest proiect, vom implementa un contor de tensiune pentru bateria auto folosind un microcontroler PIC. Bricheta auto sau încărcătorul USB pentru mașină sunt utilizate pentru a obține tensiunea bateriei la pinul ADC al microcontrolerului cu ajutorul circuitului de divizare a tensiunii. Apoi, un afișaj de 4 cifre cu șapte segmenteeste folosit pentru a arăta valoarea tensiunii bateriei. Acest circuit poate măsura tensiunea de până la 15v.
Când bateria unei mașini se încarcă, atunci tensiunea de pe bornele bateriei provine de fapt de la alternator / redresor, de aceea sistemul citește 13,7 volți. Dar când bateria nu se încarcă sau motorul mașinii nu este pornit, atunci tensiunea de pe terminalul bateriei este tensiunea reală a bateriei în jurul valorii de 12v.
Putem folosi același circuit și pentru măsurarea tensiunii altor surse de energie de până la 15v. În acest scop am lipit Terminal Block (bloc de plastic de culoare verde) în PCB unde puteți conecta două fire de la sursa de alimentare și puteți monitoriza tensiunea. Verificați videoclipul la final, unde l-am demonstrat măsurând tensiunea unei surse de alimentare variabile, a unei bănci de alimentare USB și a unui adaptor AC-DC de 12v. De asemenea, verificați circuitul de monitorizare a bateriei simple și circuitul de încărcare a bateriei de 12v.
Diagrama circuitului și explicația de lucru:
În acest circuit de monitorizare a tensiunii bateriei, am citit tensiunea bateriei auto folosind un pin analogic incorporat al microcontrolerului PIC și aici am selectat pinul AN0 (28) al microcontrolerului printr-un circuit divizor de tensiune. O diodă zener de 5.1v este de asemenea utilizată pentru protecție.
Afișajul 4 în 1 cu șapte segmente este utilizat pentru afișarea valorii instantanee a tensiunii bateriei auto care este conectată la PORTB și PORTC ale microcontrolerului. Un regulator de tensiune de 5V și anume LM7805 este folosit pentru alimentarea întregului circuit, inclusiv afișaje cu șapte segmente. Un oscilator de cristal de 20 MHz este utilizat pentru a ceasul microcontrolerului. Circuitul este alimentat de încărcătorul auto USB în sine utilizând un LM7805. Am adăugat un port USB în PCB, astfel încât să putem conecta direct încărcătorul USB al mașinii la circuit.
Încărcătorul USB pentru mașină sau bricheta asigură o alimentare reglementată de 5 v de la priza de 12 v a mașinii, dar trebuie să măsurăm tensiunea reală a bateriei mașinii, astfel încât am modificat încărcătorul mașinii. Trebuie să deschideți încărcătorul USB al mașinii și apoi să găsiți terminalele de 5v (ieșire) și 12v (intrare) și apoi eliminați conexiunea de 5v frecând-o cu hârtie de nisip sau cu ceva greu și scurtcircuitați terminalul de ieșire USB la 12v direct. Mai întâi deschideți conexiunea 5v de la portul USB din încărcătorul USB al mașinii și apoi conectați 12v la portul USB unde a fost conectat 5v. Așa cum se arată în figura de mai jos, am tăiat conexiunea circulară roșie, aceasta poate diferi în funcție de încărcătorul auto.
Pentru a configura ADC aici, am selectat pinul analogic AN0 cu o tensiune de referință internă de 5v și ceas f / 32 pentru conversia ADC.
Pentru a calcula tensiunea bateriei auto din valoarea ADC am folosit formula dată:
Tensiune = (valoare ADC / factor rezistor) * tensiune de referință Unde: valoare ADC = ieșirea divizorului de tensiune (convertit în digital prin microcontroler) Factor rezistor = 1023,0 / (R2 / R1 + R2) // 1023 este valoarea maximă ADC (10- bit) Tensiune de referință = 5 volți // referință internă de 5v selectată
Calculul factorului de rezistență:
În acest proiect, citim tensiunea bateriei auto care este (în general) în jurul valorii de 12v-14v. Așa că am făcut acest proiect presupunând că max 15v înseamnă că acest sistem poate fi citit max până la 15v.
Deci, în circuit am folosit rezistența R1 și R2 în partea divizorului de tensiune și valorile sunt:
R1 = 2K
R2 = 1K
Factor rezistor = 1023,0 * (1000/2000 + 1000)
Factor rezistor = 1023,0 * (1/3)
Factor rezistor = 341,0 pentru până la 15 volți
Deci Formula finală pentru calculul tensiunii va fi următoarea, pe care am folosit-o codul, dat la sfârșitul acestui articol:
Tensiune = (valoare ADC / 341,0) * 5,0
Proiectarea circuitelor și PCB-urilor folosind EasyEDA:
Pentru a proiecta un circuit pentru monitorul de tensiune al bateriei auto, am folosit EasyEDA, un instrument EDA online gratuit pentru crearea de circuite și PCB-uri într-o manieră uniformă. Am comandat anterior câteva PCB-uri de la EasyEDA și folosim în continuare serviciile lor, deoarece am găsit întregul proces, de la desenarea circuitelor la comandarea PCB-urilor, mai convenabil și mai eficient în comparație cu alți fabricanți de PCB. EasyEDA oferă desenarea circuitelor, simulare, design PCB gratuit și oferă, de asemenea, servicii personalizate PCB de înaltă calitate, dar cu preț scăzut. Consultați aici tutorialul complet despre Cum să utilizați Easy EDA pentru realizarea schemelor, aspectelor PCB, simularea circuitelor etc.
EasyEDA se îmbunătățește zi de zi; au adăugat multe funcții noi și au îmbunătățit experiența generală a utilizatorului, ceea ce face EasyEDA mai ușor și mai ușor de utilizat pentru proiectarea circuitelor. În curând vor lansa versiunea sa Desktop, care poate fi descărcată și instalată pe computer pentru utilizare offline.
În EasyEDA, puteți să vă faceți publice circuitele și proiectările PCB-urilor, astfel încât alți utilizatori să le poată copia sau edita și să poată beneficia de acolo, de asemenea, am făcut publice întreaga noastră schemă de circuit și PCB pentru acest monitor de tensiune a bateriei auto, verificați linkul de mai jos:
easyeda.com/circuitdigest/PIC_based_Car_Battery_Monitoring_System-63c2d5948eaa48c5bcbbd8db49a6c776
Mai jos este Instantaneul stratului superior al aspectului PCB-ului de la EasyEDA, puteți vizualiza orice strat (superior, inferior, de top, de fund etc.) al PCB-ului, selectând stratul din fereastra „Straturi”.
Calcularea și comandarea probelor de PCB online:
După finalizarea proiectării PCB-ului, puteți face clic pe pictograma de ieșire Fabrication , care vă va duce pe pagina de comandă PCB. Aici puteți vizualiza PCB-ul dvs. în Gerber Viewer sau puteți descărca fișierele Gerber ale PCB-ului dvs. și le puteți trimite oricărui producător, de asemenea este mult mai ușor (și mai ieftin) să îl comandați direct în EasyEDA. Aici puteți selecta numărul de PCB-uri pe care doriți să le comandați, de câte straturi de cupru aveți nevoie, grosimea PCB-ului, greutatea cuprului și chiar culoarea PCB-ului. După ce ați selectat toate opțiunile, faceți clic pe „Salvați în coș” și finalizați comanda, apoi veți primi PCB-urile câteva zile mai târziu.
Puteți comanda direct acest PCB sau puteți descărca fișierul Gerber folosind acest link.
După câteva zile de a comanda PCB-uri, am primit probele de PCB
După ce am primit PCB-urile, am montat toate componentele necesare peste PCB și, în cele din urmă, avem sistemul nostru de monitorizare a bateriei auto pregătit, verificați acest circuit în funcțiune în Video, dat la final.
Explicație de programare:
Programul acestui proiect este puțin dificil pentru începători. Pentru a scrie acest cod avem nevoie de câteva fișiere antet. Aici folosim MPLAB X IDE pentru codificare și compilator XC pentru a construi și compila codul. Codul este scris în limbajul C.
În acest cod, am citit tensiunea bateriei folosind un pin analogic și pentru controlul sau trimiterea datelor către afișajul cu șapte segmente din 4 cifre, am folosit Rutina Timer Interrupt Server în microcontrolerul PIC. Toate calculele pentru măsurarea tensiunii se fac în programul principal de rutină.
Mai întâi, în cod am inclus un antet și apoi am configurat un microcontroler PIC folosind biți de configurare.
#include
Și apoi sunt afișate variabile declarate și pinii definiți pentru șapte segmente
unsigned int counter2; poziție de caracter nesemnat = 0; nesemnat k = {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; int cifră1 = 0, cifră2 = 0, cifră3 = 0, cifră4 = 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_led TRIS_led5 TRISAbits.TRISA………………
Acum am creat o rutină de întrerupere a temporizatorului pentru conducerea afișajului pe șapte segmente:
void interrupt low_priority LowIsr (void) {if (TMR0IF == 1) {counter2 ++; if (contor2> = 1) {if (poziție == 0) {seg1 = 0; seg2 = 1; seg3 = 1; seg4 = 1;………………
Acum, în funcția void main () , am inițializat temporizatorul și întreruperea.
GIE = 1; // GLOBLE INTRRUPT ENABLE PEIE = 1; // periferic intrupt flag T0CON = 0b000000000; // valoare prescaler pus TMR0IE = 1; // activare întrerupere TMR0IP = 0; // prioritate de întrerupere TMR0 = 55536; // începeți contorul după această valoare TMR0ON = 1;
Și apoi în bucla while , citim intrarea analogică la pinul analogic și apelăm o funcție pentru calcule.
while (1) {adc_init (); for (i = 0; i <40; i ++) {Value = adc_value (); adcValue + = Value; } adcValue = (float) adcValue / 40.0; convert (adcValue); întârziere (100); }
Funcția dată adc_init () este utilizată pentru inițializarea ADC
void adc_init () {ADCON0 = 0b00000011; // selectați canalul ADCON ADCON1 = 0b00001110; // selectați i / p analogic și digital ADCON2 = 0b10001010; // timp de echivalare care deține timp maxim ADON = 1; }
Funcția dată adc_value este utilizată pentru a citi intrarea de la pinul analog și pentru a calcula tensiunea.
float adc_value (nul) {float adc_data = 0; while (GO / DONE == 1); // date de biți mai mari încep conversia valoare adc adc_data = (ADRESL) + (ADRESH << 8); // Stocați ieșirea pe 10 biți adc_data = ((adc_data / 342.0) * 5.0); returnează adc_data; }
Și funcția de conversie dată este utilizată pentru a converti valoarea tensiunii în valori acceptate de segment.
void convert (float f) {int d = (f * 100); cifră1 = d% 10; d = d / 10; cifră2 = d% 10; d = d / 10; cifră3 = d% 10; cifra4 = d / 10; }
Verificați codul complet pentru acest proiect de mai jos cu un videoclip demonstrativ.