- Wymagane składniki:
- Opis:
- Schemat obwodu i objaśnienie robocze:
- Projektowanie obwodów i PCB za pomocą EasyEDA:
- Obliczanie i zamawianie próbek PCB online:
- Objaśnienie programowania:
W tym projekcie zamierzamy wykonać oparty na PIC system monitorowania akumulatora samochodowego na PCB. Tutaj zaprojektowaliśmy płytkę drukowaną przy użyciu internetowego symulatora i projektanta PCB EASYEDA. Ten obwód monitorowania akumulatora samochodowego służy do monitorowania mocy akumulatora samochodowego, po prostu podłączając go do gniazda zasilania na desce rozdzielczej samochodu. PCB ma również możliwość wykorzystania go jako Voltage narzędzia pomiaru lub woltomierza bez korzystania z ładowarki samochodowej USB. Dołączyliśmy tutaj listwę zaciskową do pomiaru napięcia innych źródeł zasilania, po prostu podłączając w niej dwa przewody ze źródła zasilania.
Wymagane składniki:
- Mikrokontroler PIC PIC18F2520 -1
- Wyprodukowana płytka PCB -1
- Złącze USB -1
- 2-pinowe złącze terminalu (opcjonalnie) -1
- Siedmiosegmentowy wyświetlacz ze wspólną anodą (4 w 1) -1
- Tranzystor BC557 -4
- Rezystor 1k -6
- Rezystor 2k -1
- Rezystor 100R -8
- Kondensator 1000uF -1
- Kondensator 10uF -1
- 28-pinowa podstawa IC -1
- burgery żeńskie -1
- 7805 Regulator napięcia -1
- Ładowarka samochodowa USB -1
- LED -1
- Dioda Zenera 5.1v -2
- Kabel USB (kompatybilny z typem B lub Arduino UNO) -1
- Kryształ 20 MHz -1
- Kondensator 33pF -2
Opis:
Generalnie nie jest ważne, aby za każdym razem mierzyć moc akumulatora samochodowego, ale często musimy znać napięcie akumulatora podczas ładowania, aby sprawdzić, czy jest ładowany, czy nie. W ten sposób możemy zabezpieczyć akumulator przed awarią spowodowaną wadliwym systemem ładowania. Napięcie akumulatora samochodowego 12 V podczas ładowania wynosi około 13,7 V. Dzięki temu możemy określić, czy nasza bateria ładuje się dobrze, czy nie, i możemy zbadać przyczyny awarii baterii. W tym projekcie zamierzamy zaimplementować miernik napięcia akumulatora samochodowego za pomocą mikrokontrolera PIC. Zapalniczka samochodowa lub ładowarka samochodowa USB służy do doprowadzenia napięcia akumulatora do styku ADC mikrokontrolera za pomocą obwodu dzielnika napięcia. Następnie 4-cyfrowy siedmiosegmentowy wyświetlaczsłuży do wskazania wartości napięcia baterii. Ten obwód może mierzyć napięcie do 15 V.
Podczas ładowania akumulatora samochodowego napięcie na zaciskach akumulatora w rzeczywistości pochodzi z alternatora / prostownika, dlatego system odczytuje 13,7 V. Ale gdy akumulator nie ładuje się lub silnik samochodu nie jest WŁĄCZONY, wówczas napięcie na zaciskach akumulatora jest rzeczywistym napięciem akumulatora wynoszącym około 12 V.
Możemy również użyć tego samego obwodu do pomiaru napięcia innych źródeł zasilania do 15V. W tym celu przylutowaliśmy listwę zaciskową (zielony plastikowy blok) w PCB, gdzie można podłączyć dwa przewody ze źródła zasilania i monitorować napięcie. Sprawdź wideo na końcu, gdzie zademonstrowaliśmy to, mierząc napięcie zasilacza zmiennego, banku zasilania USB i adaptera 12 V AC-DC. Sprawdź również obwód prostego monitora akumulatora i obwód ładowarki akumulatora 12 V.
Schemat obwodu i objaśnienie robocze:
W tym obwodzie monitorowania napięcia akumulatora odczytaliśmy napięcie akumulatora samochodowego za pomocą wbudowanego analogowego pinu mikrokontrolera PIC, a tutaj wybraliśmy pin AN0 (28) mikrokontrolera przez obwód dzielnika napięcia. Do ochrony służy również dioda Zenera 5,1 V.
Siedmiosegmentowy wyświetlacz 4 w 1 służy do wyświetlania chwilowej wartości napięcia akumulatora samochodowego podłączonego do PORTB i PORTC mikrokontrolera. Regulator napięcia 5 V, a mianowicie LM7805, służy do zasilania całego obwodu, w tym wyświetlaczy siedmiosegmentowych. Do taktowania mikrokontrolera używany jest oscylator kwarcowy 20 MHz. Obwód jest zasilany przez samą ładowarkę samochodową USB za pomocą LM7805. Dodaliśmy port USB w PCB, dzięki czemu możemy bezpośrednio podłączyć ładowarkę samochodową USB do układu.
Samochodowa ładowarka USB lub zapalniczka zapewnia regulowane zasilanie 5 V z gniazda elektrycznego 12 V samochodu, ale musimy zmierzyć rzeczywiste napięcie akumulatora samochodowego, więc dostosowaliśmy ładowarkę samochodową. Musisz otworzyć samochodową ładowarkę USB, a następnie znaleźć zaciski 5v (wyjściowe) i 12v (wejściowe), a następnie usunąć połączenie 5v, pocierając je papierem ściernym lub jakimś twardym przedmiotem i zewrzyj terminal wyjściowy USB bezpośrednio do 12v. Najpierw otwórz połączenie 5v z portu USB w samochodowej ładowarce USB, a następnie podłącz 12V do portu USB, do którego podłączono 5v. Jak pokazano na poniższym rysunku, przecięliśmy połączenie w czerwonym kółku, może się różnić w ładowarce samochodowej.
Aby skonfigurować ADC tutaj, wybraliśmy analogowy pin AN0 z wewnętrznym napięciem odniesienia 5v i zegarem f / 32 do konwersji ADC.
Aby obliczyć napięcie akumulatora samochodowego z wartości ADC posłużyliśmy się wzorem:
Napięcie = (wartość ADC / współczynnik rezystora) * napięcie odniesienia Gdzie: wartość ADC = wyjście dzielnika napięcia (konwertowane na cyfrowe przez mikrokontroler) Współczynnik rezystora = 1023,0 / (R2 / R1 + R2) // 1023 to maksymalna wartość ADC (10- bit) Napięcie odniesienia = 5 V // wybrane wewnętrzne odniesienie 5 V.
Obliczanie współczynnika rezystora:
W tym projekcie odczytujemy napięcie akumulatora samochodowego, które (generalnie) wynosi około 12-14 V. Zrobiliśmy więc ten projekt przy założeniu, że max 15v oznacza, że ten system może być odczytywany max do 15v.
Czyli w obwodzie zastosowaliśmy rezystory R1 i R2 w części dzielnika napięcia, a wartości to:
R1 = 2K
R2 = 1K
Współczynnik rezystora = 1023,0 * (1000/2000 + 1000)
Współczynnik rezystora = 1023,0 * (1/3)
Współczynnik rezystora = 341,0 do 15 woltów
Tak więc ostateczny wzór do obliczenia napięcia będzie następujący, którego użyliśmy Kodeksu, podanego na końcu tego artykułu:
Napięcie = (wartość ADC / 341,0) * 5,0
Projektowanie obwodów i PCB za pomocą EasyEDA:
Aby zaprojektować obwód monitora napięcia akumulatora samochodowego, użyliśmy EasyEDA, bezpłatnego narzędzia online EDA do tworzenia obwodów i płytek drukowanych w bezproblemowy sposób. Wcześniej zamówiliśmy kilka płytek drukowanych w EasyEDA i nadal korzystamy z ich usług, ponieważ stwierdziliśmy, że cały proces, od rysowania obwodów po zamówienie PCB, jest wygodniejszy i wydajniejszy w porównaniu z innymi producentami PCB. EasyEDA oferuje bezpłatne rysowanie obwodów, symulację, projektowanie PCB, a także oferuje wysokiej jakości, ale niską cenę Indywidualną usługę PCB. Sprawdź tutaj pełny samouczek dotyczący korzystania z Easy EDA do tworzenia schematów, układów PCB, symulacji obwodów itp.
EasyEDA poprawia się z dnia na dzień; dodali wiele nowych funkcji i poprawili ogólne wrażenia użytkownika, co czyni EasyEDA łatwiejszym i użytecznym do projektowania obwodów. Wkrótce udostępnią wersję na komputery stacjonarne, którą można pobrać i zainstalować na komputerze do użytku w trybie offline.
W EasyEDA możesz upublicznić swoje projekty obwodów i płytek drukowanych, aby inni użytkownicy mogli je kopiować lub edytować i czerpać z tego korzyści, upubliczniliśmy również nasze całe układy obwodów i PCB dla tego monitora napięcia akumulatora samochodowego, sprawdź poniższy link:
easyeda.com/circuitdigest/PIC_based_Car_Battery_Monitoring_System-63c2d5948eaa48c5bcbbd8db49a6c776
Poniżej znajduje się migawka górnej warstwy układu PCB z EasyEDA, możesz wyświetlić dowolną warstwę (górną, dolną, topową, dolną itp.) PCB, wybierając warstwę z okna „Warstwy”.
Obliczanie i zamawianie próbek PCB online:
Po zakończeniu projektowania PCB, możesz kliknąć ikonę wyjścia z produkcji , która przeniesie Cię na stronę zamówienia PCB. Tutaj możesz obejrzeć swoją płytkę drukowaną w Gerber Viewer lub pobrać pliki Gerber z Twojej płytki PCB i wysłać je do dowolnego producenta, jest też dużo łatwiej (i taniej) zamówić ją bezpośrednio w EasyEDA. Tutaj możesz wybrać liczbę PCB, które chcesz zamówić, ile warstw miedzi potrzebujesz, grubość PCB, wagę miedzi, a nawet kolor PCB. Po wybraniu wszystkich opcji kliknij „Zapisz w koszyku” i sfinalizuj zamówienie, a kilka dni później otrzymasz PCB.
Możesz bezpośrednio zamówić tę płytkę drukowaną lub pobrać plik Gerber za pomocą tego linku.
Po kilku dniach zamawiania PCB dostałem próbki PCB
Po otrzymaniu PCB zamontowałem wszystkie wymagane komponenty na PCB i na koniec mamy gotowy System Monitorowania Akumulatora Samochodowego, sprawdź ten obwód w pracy w wideo podanym na końcu.
Objaśnienie programowania:
Program tego projektu jest mało trudny dla początkujących. Do napisania tego kodu potrzebujemy plików nagłówkowych. Tutaj używamy MPLAB X IDE do kodowania i kompilatora XC do budowania i kompilowania kodu. Kod jest napisany w języku C.
W tym kodzie odczytaliśmy napięcie baterii za pomocą pinu analogowego, a do sterowania lub wysyłania danych do 4-cyfrowego siedmiosegmentowego wyświetlacza wykorzystaliśmy procedurę Timer Interrupt Server w mikrokontrolerze PIC. Wszystkie obliczenia dotyczące pomiaru napięcia są wykonywane w programie głównym.
Najpierw w kodzie umieściliśmy nagłówek, a następnie skonfigurowaliśmy mikrokontroler PIC za pomocą bitów konfiguracyjnych.
#zawierać
Następnie zostaną wyświetlone zadeklarowane zmienne i zdefiniowane piny dla siedmiu segmentów
unsigned int counter2; pozycja bez znaku = 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………………
Teraz stworzyliśmy procedurę przerwania timera do sterowania siedmiosegmentowym wyświetlaczem:
nieważne przerwanie low_priority LowIsr (void) {if (TMR0IF == 1) {licznik2 ++; if (licznik2> = 1) {if (pozycja == 0) {seg1 = 0; seg2 = 1; seg3 = 1; seg4 = 1;………………
Teraz w funkcji void main () zainicjowaliśmy licznik czasu i przerwanie.
GIE = 1; // GLOBLE INTRRUPT ENABLE PEIE = 1; // flaga przerwania peryferyjnego T0CON = 0b000000000; // wartość preskalera put TMR0IE = 1; // przerwanie włącz TMR0IP = 0; // priorytet przerwania TMR0 = 55536; // uruchom licznik po tej wartości TMR0ON = 1;
A następnie w while pętli czytamy wejścia analogowego na pin analogowego i wywołać jakąś funkcję obliczeń.
while (1) {adc_init (); for (i = 0; i <40; i ++) {Wartość = adc_value (); adcValue + = wartość; } adcValue = (float) adcValue / 40.0; convert (adcValue); opóźnienie (100); }
Podana funkcja adc_init () służy do inicjalizacji ADC
void adc_init () {ADCON0 = 0b00000011; // wybierz kanał adc ADCON1 = 0b00001110; // wybierz analogowe i cyfrowe i / p ADCON2 = 0b10001010; // czas utrzymywania limitu czasu wyrównania ADON = 1; }
Podana funkcja adc_value służy do odczytu wejścia z pinu analogowego i obliczenia napięcia.
float adc_value (void) {float adc_data = 0; podczas (GO / DONE == 1); // początek konwersji danych o wyższej wartości bitowej adc_data = (ADRESL) + (ADRESH << 8); // Przechowuj 10-bitowe dane wyjściowe adc_data = ((adc_data / 342.0) * 5.0); return adc_data; }
Podana funkcja konwersji służy do konwersji wartości napięcia na obsługiwane wartości segmentu.
void convert (float f) {int d = (f * 100); digit1 = d% 10; d = d / 10; digit2 = d% 10; d = d / 10; digit3 = d% 10; cyfra4 = d / 10; }
Sprawdź poniżej pełny kod tego projektu z demonstracyjnym wideo.