- Būtini komponentai:
- Apibūdinimas:
- Grandinės schema ir darbo paaiškinimas:
- Grandinių ir PCB dizainas naudojant „EasyEDA“:
- PCB mėginių apskaičiavimas ir užsakymas internetu:
- Programavimo paaiškinimas:
Šiame projekte ketiname sukurti PIC pagrįstą automobilio akumuliatorių stebėjimo sistemą PCB. Čia mes sukūrėme PCB, naudodami internetinį EASYEDA PCB simuliatorių ir dizainerį. Ši automobilio akumuliatoriaus stebėjimo grandinė naudojama automobilio akumuliatoriaus energijai stebėti tiesiog įkišant jį į maitinimo lizdą automobilio prietaisų skydelyje. PCB taip pat turi galimybę jį naudoti kaip įtampos matavimas įrankį ar voltmetras nenaudojant USB automobilinį įkroviklį. Čia mes prijungėme gnybtų bloką, kad galėtume išmatuoti kitų maitinimo šaltinių įtampą, tiesiog prijungdami jame du laidus iš maitinimo šaltinio.
Būtini komponentai:
- PIC mikrovaldiklis PIC18F2520 -1
- Pagaminta PCB plokštė -1
- USB jungtis -1
- 2 kontaktų gnybtų jungtis (pasirinktinai) -1
- Bendras anodo septynių segmentų ekranas (4 iš 1) -1
- BC557 tranzistorius -4
- 1k rezistorius -6
- 2k rezistorius -1
- 100R rezistorius -8
- 1000uF kondensatorius -1
- 10uF kondensatorius -1
- 28 kontaktų IC pagrindas -1
- moteriškos lazdelės -1
- 7805 Įtampos reguliatorius -1
- Automobilinis USB įkroviklis -1
- LED -1
- „Zener“ diodas: 5.1v -2
- USB kabelis (suderinamas su B tipo arba „Arduino UNO“) -1
- 20MHz kristalas -1
- 33pF kondensatorius -2
Apibūdinimas:
Paprastai nėra svarbu kiekvieną kartą matuoti automobilio akumuliatoriaus energiją, tačiau dažnai turime žinoti apie akumuliatoriaus įtampą įkrovimo metu, kad patikrintume, ar jis įkraunamas, ar ne. Tokiu būdu galime apsaugoti akumuliatoriaus gedimą dėl sugedusios įkrovimo sistemos. 12v automobilio akumuliatoriaus įtampa įkrovimo metu yra apie 13,7v. Taigi galime nustatyti, ar mūsų akumuliatorius gerai įkraunamas, ar ne, ir ištirti akumuliatoriaus gedimo priežastis. Šiame projekte ketiname įdiegti automobilio akumuliatoriaus įtampos matuoklį, naudojant PIC mikrovaldiklį. Automobilinis cigarečių žiebtuvėlis arba automobilinis USB įkroviklis naudojamas akumuliatoriaus įtampai patekti į mikrovaldiklio ADC kaištį naudojant įtampos daliklio grandinę. Tada rodomas 4 skaitmenų septynių segmentų ekranasnaudojamas rodyti akumuliatoriaus įtampos vertę. Ši grandinė gali išmatuoti įtampą iki 15v.
Kai automobilio akumuliatorius kraunasi, įtampa akumuliatoriaus gnybtuose iš tikrųjų gaunama iš generatoriaus / lygintuvo, todėl sistema nuskaito 13,7 voltus. Bet kai akumuliatorius nekraunamas arba automobilio variklis nėra įjungtas, tada akumuliatoriaus gnybto įtampa yra faktinė akumuliatoriaus įtampa apie 12v.
Tą pačią grandinę galime naudoti ir kitų maitinimo šaltinių iki 15v įtampai matuoti. Šiuo tikslu mes lituodavome terminalų bloką (žalios spalvos plastikinį bloką) PCB, kuriame galite prijungti du laidus iš maitinimo šaltinio ir stebėti įtampą. Patikrinkite vaizdo įrašą pabaigoje, kur mes jį pademonstravome, matuodami kintamo maitinimo šaltinio, USB maitinimo banko ir 12 V kintamosios srovės adapterio įtampą. Taip pat patikrinkite paprastą akumuliatoriaus monitoriaus grandinę ir 12v akumuliatoriaus įkroviklio grandinę.
Grandinės schema ir darbo paaiškinimas:
Šioje akumuliatoriaus įtampos stebėjimo grandinėje mes perskaitėme automobilio akumuliatoriaus įtampą naudodami įmontuotą analoginį PIC mikrovaldiklio kaištį ir čia mes pasirinkome mikrovaldiklio kaištį AN0 (28) per įtampos daliklio grandinę. Apsaugai taip pat naudojamas 5.1v zenerio diodas.
„4 viename“ septynių segmentų ekranas naudojamas momentinei automobilio akumuliatoriaus įtampos vertei, prijungtai prie mikrovaldiklio PORTB ir PORTC, rodyti. 5v įtampos reguliatorius, būtent LM7805, naudojamas maitinti visą grandinę, įskaitant septynių segmentų ekranus. Mikrovaldikliui valdyti naudojamas 20 MHz kristalinis osciliatorius. Grandinę maitina pats USB automobilinis įkroviklis, naudodamas LM7805. PCB įdėjome USB prievadą, todėl galime tiesiogiai prijungti automobilio USB įkroviklį prie grandinės.
Automobilinis USB įkroviklis arba cigarečių žiebtuvėlis tiekia 5v reguliuojamą maitinimą iš 12v automobilio maitinimo lizdo, tačiau turime išmatuoti faktinę automobilio akumuliatoriaus įtampą, kad pakoreguotume automobilio įkroviklį. Turite atidaryti automobilio USB įkroviklį, tada surasti 5v (išvestis) ir 12v (įvestis) gnybtus, tada nuimkite 5v jungtį, patrindami jį smėlio popieriumi ar kitu kietu daiktu, ir tiesiogiai sutrumpinkite USB išvesties terminalą iki 12v. Pirmiausia atidarykite 5v jungtį iš automobilio USB įkroviklio USB prievado ir tada prijunkite 12v prie USB prievado, kuriame buvo prijungtas 5v. Kaip parodyta žemiau esančiame paveikslėlyje, mes nutraukėme raudoną apskritimą, kuris gali skirtis jūsų automobilio įkroviklyje.
Norėdami čia sukonfigūruoti ADC, ADC konversijai pasirinkome analoginį kaištį AN0, kurio vidinė atskaitos įtampa yra 5v ir f / 32 laikrodis.
Norėdami apskaičiuoti automobilio akumuliatoriaus įtampą iš ADC vertės, mes naudojome pateiktą formulę:
Įtampa = (ADC vertė / rezistoriaus koeficientas) * etaloninė įtampa Kur: ADC vertė = įtampos daliklio išvestis (paversta skaitmenine mikrovaldikliu) Rezistoriaus koeficientas = 1023,0 / (R2 / R1 + R2) // 1023 yra maksimali ADC vertė (10-) Atskaitos įtampa = 5 voltai // pasirinkta vidinė 5v etaloninė įtampa
Rezistoriaus faktoriaus apskaičiavimas:
Šiame projekte mes skaitome automobilio akumuliatoriaus įtampą, kuri yra (paprastai) apie 12v-14v. Taigi mes atlikome šį projektą darydami prielaidą, kad maks. 15v reiškia, kad šią sistemą galima nuskaityti maks. Iki 15v.
Taigi grandinėje įtampos daliklio dalyje naudojome R1 ir R2 rezistorius, o vertės yra šios:
R1 = 2K
R2 = 1K
Rezistoriaus koeficientas = 1023,0 * (1000/2000 + 1000)
Rezistoriaus koeficientas = 1023,0 * (1/3)
Rezistoriaus koeficientas = 341,0 iki 15 voltų
Taigi galutinė įtampos skaičiavimo formulė bus tokia, kurią mes panaudojome šio straipsnio pabaigoje pateiktame kode:
Įtampa = (ADC vertė / 341,0) * 5,0
Grandinių ir PCB dizainas naudojant „EasyEDA“:
Norėdami sukurti automobilio akumuliatoriaus įtampos matuoklio grandinę, mes naudojome „EasyEDA“ - nemokamą internetinį EDA įrankį, skirtą sklandžiai kurti grandines ir PCB. Anksčiau mes užsisakėme keletą „PCED“ iš „EasyEDA“ ir vis dar naudojamės jų paslaugomis, nes radome visą procesą - nuo grandinių piešimo iki PCB užsakymo - patogesnį ir efektyvesnį, palyginti su kitais PCB gamintojais. „EasyEDA“ siūlo grandinės braižymą, modeliavimą, PCB dizainą nemokamai, taip pat siūlo aukštos kokybės, bet mažą kainą, pritaikytą PCB paslaugą. Čia patikrinkite visą pamoką, kaip naudoti „Easy EDA“ kuriant schemas, PCB išdėstymą, imituojant grandines ir kt.
„EasyEDA“ tobulėja kiekvieną dieną; jie pridėjo daug naujų funkcijų ir pagerino bendrą vartotojo patirtį, o tai palengvina „EasyEDA“ ir gali būti naudojama projektuojant grandines. Jie netrukus ketina paleisti savo darbalaukio versiją, kurią galima atsisiųsti ir įdiegti kompiuteryje, kad būtų galima naudoti neprisijungus.
„EasyEDA“ galite paviešinti savo grandinės ir PCB dizainus, kad kiti vartotojai galėtų juos nukopijuoti ar redaguoti ir galėtų iš to pasinaudoti. Mes taip pat paskelbėme visus šio automobilio akumuliatoriaus įtampos monitoriaus grandinių ir PCB išdėstymus , patikrinkite šią nuorodą:
easyeda.com/circuitdigest/PIC_based_Car_Battery_Monitoring_System-63c2d5948eaa48c5bcbbd8db49a6c776
Žemiau pateikiama „EasyEDA“ PCB išdėstymo viršutinio sluoksnio momentinė nuotrauka. Galite peržiūrėti bet kurį PCB sluoksnį (viršutinį, apatinį, viršutinį silkinį, dugno pieną ir kt.), Pasirinkdami sluoksnį iš lango „Sluoksniai“.
PCB mėginių apskaičiavimas ir užsakymas internetu:
Baigę kurti PCB, galite spustelėti „ Fabrication output“ piktogramą, kuri pateks į PCB užsakymo puslapį. Čia galite peržiūrėti savo PCB „Gerber Viewer“ arba atsisiųsti „Gerber“ failus iš savo PCB ir siųsti juos bet kuriam gamintojui, taip pat daug lengviau (ir pigiau) užsisakyti jį tiesiogiai „EasyEDA“. Čia galite pasirinkti norimų užsisakyti PCB skaičių, kiek jums reikia vario sluoksnių, PCB storį, vario svorį ir net PCB spalvą. Pasirinkę visas parinktis, spustelėkite „Išsaugoti krepšelyje“ ir atlikite užsakymą, tada po kelių dienų gausite savo PCB.
Galite tiesiogiai užsisakyti šią PCB arba atsisiųsti „Gerber“ failą naudodami šią nuorodą.
Po kelių dienų užsisakius PCB, gavau PCB mėginius
Gavęs PCB, aš sumontavau visus reikalingus komponentus per PCB, ir galiausiai mes turime pasirengę automobilio akumuliatorių stebėjimo sistemą, patikrinkite šią grandinę, veikdami vaizdo įraše, pateiktame pabaigoje.
Programavimo paaiškinimas:
Šio projekto programa pradedantiesiems yra sunki. Norėdami parašyti šį kodą, turime keletą antraštės failų. Čia mes naudojame MPLAB X IDE kodavimui ir XC kompiliatorius kodui kurti ir kompiliuoti. Kodas parašytas C kalba.
Šiame kode mes perskaitėme akumuliatoriaus įtampą naudodami analoginį kaištį ir valdydami arba siunčiant duomenis į 4 skaitmenų septynių segmentų ekraną, mes naudojome „Timer Interrupt Server Routine“ PIC mikrovaldiklyje. Visi įtampos matavimo skaičiavimai atliekami pagal pagrindinę programą.
Pirma, į kodą mes įtraukėme antraštę ir tada sukonfigūravome PIC mikrovaldiklį naudodami konfigūracijos bitus.
# įtraukti
Tada rodomi deklaruoti kintamieji ir apibrėžti septynių segmentų kaiščiai
nepasirašytas int skaitiklis2; nepasirašyta simbolio padėtis = 0; nepasirašytas simbolis k = {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; int skaitmuo1 = 0, skaitmuo2 = 0, skaitmuo3 = 0, skaitmuo4 = 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_led5 TRISAbits.TRISA………………
Dabar mes sukūrėme laikmačio pertraukimo režimą, leidžiantį vairuoti septynių segmentų ekraną:
negaliojantis pertraukimas low_priority LowIsr (negaliojantis) {if (TMR0IF == 1) {counter2 ++; if (skaitiklis2> = 1) {jei (pozicija == 0) {seg1 = 0; seg2 = 1; seg3 = 1; seg4 = 1;………………
Dabar negaliojant pagrindinei () funkcijai, mes inicijavome laikmatį ir pertraukimą.
GIE = 1; // GLOBLE INTRRUPT ENABLE PEIE = 1; // periferinė įsibrovusi vėliava T0CON = 0b000000000; // preskalerio vertė įdėti TMR0IE = 1; // nutraukti įgalinimą TMR0IP = 0; // nutraukti prioritetą TMR0 = 55536; // pradėti skaitiklį po šios vertės TMR0ON = 1;
Ir tada , o kilpa, mes skaityti analoginis įėjimas į analoginį kaiščio ir skambinti tam tikrą funkciją skaičiavimai.
o (1) {adc_init (); už (i = 0; i <40; i ++) {Reikšmė = adc_value (); adcValue + = vertė; } adcValue = (plūduriuojantis) adcValue / 40,0; konvertuoti (adcValue); vėlavimas (100); }
Atsižvelgiant adc_init () funkcija naudojama inicializavimui ADC
negaliojantis adc_init () {ADCON0 = 0b00000011; // pasirinkite ADC kanalą ADCON1 = 0b00001110; // pasirinkite analoginį ir skaitmeninį i / p ADCON2 = 0b10001010; // eqisation time hold cap time ADON = 1; }
Atsižvelgiant adc_value funkcija naudojama skaityti įvesties iš analoginių pin ir apskaičiuoti įtampą.
float adc_value (void) {float adc_data = 0; o (GO / DONE == 1); // didesnių bitų duomenų pradžios konversija skelbimo vertė adc_data = (ADRESL) + (ADRESH << 8); // Saugoti 10 bitų išvestį adc_data = ((adc_data / 342.0) * 5.0); grąžinti adc_data; }
Duota konvertavimo funkcija naudojama įtampos vertei konvertuoti į segmento palaikomas vertes.
negaliojantis konvertuoti (plūdė f) {int d = (f * 100); skaitmuo1 = d% 10; d = d / 10; skaitmuo2 = d% 10; d = d / 10; skaitmuo3 = d% 10; skaitmuo4 = d / 10; }
Toliau patikrinkite visą šio projekto kodą su demonstraciniu vaizdo įrašu.