- Vereiste componenten:
- Omschrijving:
- Schakelschema en werkbeschrijving:
- Circuit- en PCB-ontwerp met EasyEDA:
- Online PCB-monsters berekenen en bestellen:
- Programmering Toelichting:
In dit project gaan we een op PIC gebaseerd Car Battery Monitoring-systeem op PCB maken. Hier hebben we een PCB ontworpen met behulp van EASYEDA online PCB-simulator en ontwerper. Dit bewakingscircuit voor de autobatterij wordt gebruikt om het vermogen van de autobatterij te controleren door deze gewoon in het stopcontact op het dashboard van een auto te steken. De printplaat heeft ook de mogelijkheid om hem te gebruiken als spanningsmeetinstrument of voltmeter zonder USB-autolader. We hebben hier een klemmenblok bevestigd om de spanning van andere stroombronnen te meten, gewoon door er twee draden in aan te sluiten vanaf de stroombron.
Vereiste componenten:
- PIC Microcontroller PIC18F2520 -1
- Gefabriceerde printplaat -1
- USB-aansluiting -1
- 2-pins Terminal Connector (optioneel) -1
- Gemeenschappelijke anode zeven segment display (4 in 1) -1
- BC557 Transistor -4
- 1k weerstand -6
- 2k weerstand -1
- 100R weerstand -8
- 1000uF condensator -1
- 10uF condensator -1
- 28-pins IC-basis -1
- vrouwelijke burgsticks -1
- 7805 Spanningsregelaar -1
- Auto USB-oplader -1
- LED -1
- Zener-diode5.1v -2
- USB-kabel (B-type of Arduino UNO-compatibel) -1
- 20 MHz Kristal -1
- 33pF condensator -2
Omschrijving:
Over het algemeen is het niet belangrijk om het batterijvermogen van de auto elke keer te meten, maar we moeten vaak de batterijspanning tijdens het opladen kennen om te controleren of het opladen of niet. Hiermee kunnen we batterijstoringen als gevolg van het defecte laadsysteem beschermen. De spanning van een 12v auto-accu tijdens het opladen is ongeveer 13,7 volt. Zo kunnen we vaststellen of onze batterij goed oplaadt of niet en kunnen we de oorzaken van batterijstoringen onderzoeken. In dit project gaan we een spanningsmeter voor autobatterijen implementeren met behulp van een PIC-microcontroller. Sigarettenaansteker in de auto of auto-USB-oplader wordt gebruikt om de batterijspanning naar de ADC-pin van de microcontroller te krijgen met behulp van een spanningsdelercircuit. Vervolgens een 4-cijferig display met zeven segmentenwordt gebruikt om de spanningswaarde van de batterij te tonen. Dit circuit kan de spanning meten tot 15v.
Wanneer een auto-accu wordt opgeladen, komt de spanning over de accupolen eigenlijk van de dynamo / gelijkrichter, daarom geeft het systeem 13,7 volt aan. Maar wanneer de accu niet wordt opgeladen of de motor van de auto niet AAN staat, is de spanning over de accupool de werkelijke accuspanning rond 12v.
We kunnen hetzelfde circuit ook gebruiken voor het meten van de spanning van andere stroombronnen tot 15V. Hiervoor hebben we het Terminal Block (groen kleur kunststof blok) in PCB gesoldeerd waar je twee draden van stroombron op kunt aansluiten en de spanning kunt bewaken. Bekijk de video aan het einde, waar we het hebben gedemonstreerd door de spanning van een variabele voeding, een USB-powerbank en een 12v AC-DC-adapter te meten. Controleer ook het Simple Battery Monitor Circuit en het 12v Battery Charger Circuit.
Schakelschema en werkbeschrijving:
In dit batterijspanningscircuit hebben we de batterijspanning van de auto gelezen met behulp van een ingebouwde analoge pin van de PIC-microcontroller en hier hebben we pin AN0 (28) pin van de microcontroller geselecteerd via een spanningsdelercircuit. Ter bescherming wordt ook een zenerdiode van 5,1v gebruikt.
4-in-1 display met zeven segmenten wordt gebruikt voor het weergeven van de momentane waarde van de auto-accuspanning die is aangesloten op PORTB en PORTC van de microcontroller. Een 5v spanningsregelaar, namelijk LM7805, wordt gebruikt om het hele circuit van stroom te voorzien, inclusief Seven Segment Displays. Een 20 MHz kristaloscillator wordt gebruikt om de microcontroller te klokken. Circuit wordt aangedreven door de USB-autolader zelf door een LM7805 te gebruiken. We hebben een USB-poort in de PCB toegevoegd, zodat we de auto-USB-oplader rechtstreeks op het circuit kunnen aansluiten.
Auto-USB-oplader of sigarettenaansteker biedt een gereguleerde 5v-voeding van het 12v-stopcontact van de auto, maar we moeten de werkelijke spanning van de auto-accu meten, dus hebben we de autolader aangepast. U moet de auto-USB-oplader openen en vervolgens de 5v (output) en 12v (input) aansluitingen vinden en vervolgens de 5v-verbinding verwijderen door erover te wrijven met schuurpapier of met een hard ding en de USB-uitgang direct kort te sluiten op 12v. Open eerst de 5v-aansluiting van de USB-poort in de auto-USB-oplader en sluit vervolgens 12v aan op de USB-poort waar 5v was aangesloten. Zoals in onderstaande afbeelding te zien is, hebben we de rood omcirkelde verbinding doorgesneden, deze kan afwijken in uw autolader.
Om ADC hier te configureren, hebben we analoge pin AN0 geselecteerd met een interne referentiespanning van 5v en een f / 32-klok voor ADC-conversie.
Om de accuspanning van de auto te berekenen op basis van de ADC-waarde, hebben we de gegeven formule gebruikt:
Spanning = (ADC-waarde / weerstandsfactor) * referentiespanning Waarbij: ADC-waarde = output van spanningsdeler (omgezet in digitaal door microcontroller) Weerstandsfactor = 1023,0 / (R2 / R1 + R2) // 1023 is maximale ADC-waarde (10- bit) Referentiespanning = 5 volt // interne 5v-referentie geselecteerd
Berekening van de weerstandsfactor:
In dit project lezen we de accuspanning van de auto die (over het algemeen) rond de 12v-14v ligt. Dus we hebben dit project gedaan in de veronderstelling dat max 15v betekent dat dit systeem max tot 15v kan worden gelezen.
Dus in het circuit hebben we de R1- en R2-weerstand gebruikt in het spanningsdelergedeelte en de waarden zijn:
R1 = 2K
R2 = 1K
Weerstandsfactor = 1023,0 * (1000/2000 + 1000)
Weerstandsfactor = 1023,0 * (1/3)
Weerstandsfactor = 341,0 voor maximaal 15 volt
Dus de uiteindelijke formule voor spanningsberekening is als volgt, die we hebben gebruikt in de code aan het einde van dit artikel:
Spanning = (ADC-waarde / 341,0) * 5,0
Circuit- en PCB-ontwerp met EasyEDA:
Om een circuit voor auto- accuspanningsmonitor te ontwerpen, hebben we EasyEDA gebruikt, een gratis online EDA-tool voor het naadloos maken van circuits en PCB's. We hebben eerder enkele PCB's bij EasyEDA besteld en gebruiken nog steeds hun diensten, aangezien we het hele proces, van het tekenen van de schakelingen tot het bestellen van de PCB's, handiger en efficiënter vonden in vergelijking met andere PCB-fabrikanten. EasyEDA biedt gratis circuittekening, simulatie en PCB-ontwerp en biedt ook hoogwaardige maar lage prijs op maat gemaakte PCB-service. Bekijk hier de volledige tutorial over het gebruik van Easy EDA voor het maken van schema's, PCB-lay-outs, het simuleren van de circuits enz.
EasyEDA verbetert met de dag; ze hebben veel nieuwe functies toegevoegd en de algehele gebruikerservaring verbeterd, waardoor EasyEDA gemakkelijker en bruikbaarder wordt voor het ontwerpen van circuits. Ze zullen binnenkort de desktopversie lanceren, die kan worden gedownload en op uw computer kan worden geïnstalleerd voor offline gebruik.
In EasyEDA kunt u uw circuit- en PCB-ontwerpen openbaar maken, zodat andere gebruikers ze kunnen kopiëren of bewerken en daar hun voordeel mee kunnen doen, we hebben ook onze hele circuit- en PCB-lay-outs openbaar gemaakt voor deze auto-accuspanningsmonitor, bekijk de onderstaande link:
easyeda.com/circuitdigest/PIC_based_Car_Battery_Monitoring_System-63c2d5948eaa48c5bcbbd8db49a6c776
Hieronder ziet u de momentopname van de bovenste laag van de PCB-lay-out van EasyEDA, u kunt elke laag (boven, onder, bovenzijde, onderzijde, enz.) Van de PCB bekijken door de laag in het venster 'Lagen' te selecteren.
Online PCB-monsters berekenen en bestellen:
Nadat u het ontwerp van de PCB hebt voltooid, kunt u op het pictogram van Fabrication-output klikken, waarna u naar de PCB-bestelpagina gaat. Hier kunt u uw PCB in Gerber Viewer bekijken of Gerber-bestanden van uw PCB downloaden en naar een willekeurige fabrikant sturen, ook is het een stuk eenvoudiger (en goedkoper) om deze direct in EasyEDA te bestellen. Hier kunt u het aantal PCB's selecteren dat u wilt bestellen, hoeveel koperlagen u nodig heeft, de PCB-dikte, het kopergewicht en zelfs de PCB-kleur. Nadat u alle opties heeft geselecteerd, klikt u op "Opslaan in winkelwagen" en rondt u uw bestelling af, dan ontvangt u uw printplaten een paar dagen later.
U kunt deze print direct bestellen of het Gerber-bestand downloaden via deze link.
Na een paar dagen PCB's te hebben besteld, kreeg ik de PCB-samples
Nadat ik de PCB's heb gekregen, heb ik alle vereiste componenten over de PCB gemonteerd en eindelijk hebben we ons Car Battery Monitoring System klaar, controleer dit circuit in de video die aan het einde wordt gegeven.
Programmering Toelichting:
Programma van dit project is een beetje moeilijk voor beginners. Om deze code te schrijven hebben we enkele headerbestanden nodig. Hier gebruiken we MPLAB X IDE voor codering en XC-compiler om de code te bouwen en te compileren. De code is geschreven in C-taal.
In deze code hebben we de accuspanning gelezen met behulp van een analoge pin en voor het besturen of verzenden van gegevens naar een 4-cijferig zeven-segmentendisplay hebben we Timer Interrupt Server Routine gebruikt in PIC-microcontroller. Alle berekeningen voor spanningsmeting worden gedaan in de hoofdprogrammaroutine.
Ten eerste hebben we in de code een header opgenomen en vervolgens de PIC-microcontroller geconfigureerd met behulp van configuratiebits.
# omvatten
En vervolgens gedeclareerde variabelen en gedefinieerde pinnen voor weergave van zeven segmenten
unsigned int counter2; unsigned char position = 0; unsigned char 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 hebben we een timeronderbrekingsroutine gemaakt voor het aansturen van een display met zeven segmenten:
void interrupt low_priority LowIsr (void) {if (TMR0IF == 1) {counter2 ++; if (counter2> = 1) {if (position == 0) {seg1 = 0; seg2 = 1; seg3 = 1; seg4 = 1;………………
Nu in de void main () functie, hebben we de timer en interrupt geïnitialiseerd.
GIE = 1; // GLOBLE INTRRUPT INSCHAKELEN PEIE = 1; // perifere onderbroken vlag T0CON = 0b000000000; // Voorschrijver waarde zet TMR0IE = 1; // interrupt inschakelen TMR0IP = 0; // interrupt prioriteit TMR0 = 55536; // start teller na deze waarde TMR0ON = 1;
En dan in de while- lus lezen we analoge invoer op de analoge pin en roepen we een functie op voor berekeningen.
while (1) {adc_init (); voor (i = 0; i <40; i ++) {Value = adc_value (); adcValue + = Waarde; } adcValue = (float) adcValue / 40.0; converteren (adcValue); vertraging (100); }
De gegeven adc_init () functie wordt gebruikt voor het initialiseren van ADC
ongeldig adc_init () {ADCON0 = 0b00000011; // selecteer adc-kanaal ADCON1 = 0b00001110; // selecteer analoge en digitale i / p ADCON2 = 0b10001010; // eqization time holding cap time ADON = 1; }
De gegeven adc_value- functie wordt gebruikt om de invoer van de analoge pin te lezen en de spanning te berekenen.
float adc_value (void) {float adc_data = 0; while (GO / DONE == 1); // hogere bit data start conversie adc waarde adc_data = (ADRESL) + (ADRESH << 8); // Bewaar 10-bits uitvoer adc_data = ((adc_data / 342.0) * 5.0); retourneer adc_data; }
En de gegeven conversiefunctie wordt gebruikt om de spanningswaarde om te zetten in segmentondersteunde waarden.
ongeldig converteren (float f) {int d = (f * 100); digit1 = d% 10; d = d / 10; digit2 = d% 10; d = d / 10; digit3 = d% 10; digit4 = d / 10; }
Controleer de volledige code voor dit project hieronder met een demonstratievideo.