- Необходими компоненти:
- Описание:
- Електрическа схема и работно обяснение:
- Дизайн на вериги и печатни платки с помощта на EasyEDA:
- Изчисляване и поръчване на проби от печатни платки онлайн:
- Обяснение на програмирането:
В този проект ще направим базирана на PIC система за наблюдение на автомобилни батерии на печатни платки. Тук сме проектирали печатни платки, използвайки онлайн симулатор и дизайнер на печатни платки EASYEDA. Тази верига за наблюдение на автомобилната батерия се използва за наблюдение на мощността на автомобилната батерия, като просто я включите в контакта на таблото на автомобила. На платката също има възможност да го използвате като напрежение Измерване инструмент или волтметър, без да използвате зарядно USB кола. Тук сме прикрепили клемен блок за измерване на напрежението на други източници на захранване, само чрез свързване на два проводника в него от източника на захранване.
Необходими компоненти:
- PIC микроконтролер PIC18F2520 -1
- Изработена платка за печатни платки -1
- USB конектор -1
- 2-пинов терминален конектор (по избор) -1
- Общ аноден седемсегментен дисплей (4 в 1) -1
- BC557 Транзистор -4
- 1k резистор -6
- 2k резистор -1
- 100R резистор -8
- 1000uF кондензатор -1
- 10uF кондензатор -1
- 28-пинов IC база -1
- женски бюргани -1
- 7805 Регулатор на напрежение -1
- Автомобилно USB зарядно устройство -1
- LED -1
- Ценеров диод 5.1v -2
- USB кабел (B-тип или Arduino UNO съвместим) -1
- 20MHz кристал -1
- 33pF кондензатор -2
Описание:
Като цяло не е важно да измервате мощността на автомобилната батерия всеки път, но често трябва да знаем за напрежението на акумулатора по време на зареждане, за да проверим дали се зарежда или не. По този начин можем да защитим повредата на батерията поради неизправната система за зареждане. Напрежението на 12v автомобилна батерия по време на зареждане е около 13.7v. Така можем да установим дали батерията ни се зарежда добре или не и да разследваме причините за повреда на батерията. В този проект ще внедрим измервател на напрежение за автомобилна батерия с помощта на PIC микроконтролер. Запалка за кола или автомобилно USB зарядно устройство се използва за подаване на напрежението на батерията към ADC щифта на микроконтролера с помощта на верига за разделяне на напрежението. След това 4-цифрен седемсегментен дисплейсе използва за показване на стойността на напрежението на батерията. Тази верига може да измерва напрежението до 15v.
Когато автомобилната батерия се зарежда, тогава напрежението на клемите на акумулатора всъщност идва от алтернатора / токоизправителя, поради което системата отчита 13,7 волта. Но когато батерията не се зарежда или двигателят на автомобила не е включен, тогава напрежението на клемата на батерията е действително напрежение на батерията около 12v.
Можем да използваме същата схема и за измерване на напрежението на други източници на енергия до 15v. За тази цел сме споили терминалния блок (пластмасов блок в зелен цвят) в печатни платки, където можете да свържете два проводника от източника на захранване и да наблюдавате напрежението. Проверете видеото в края, където го демонстрирахме, като измерихме напрежението на променливо захранване, USB захранваща батерия и 12v AC-DC адаптер. Също така проверете простата верига за наблюдение на батерията и веригата за зарядно устройство от 12v.
Електрическа схема и работно обяснение:
В тази верига за наблюдение на напрежението на акумулатора прочетохме напрежението на акумулатора на автомобила, като използвахме вграден аналогов щифт на микроконтролера PIC и тук избрахме щифт AN0 (28) микроконтролер през верига на делителя на напрежението. За защита се използва и ценеров диод 5.1v.
Дисплеят 4 в 1 седем сегмента се използва за показване на моментната стойност на напрежението на акумулатора на автомобила, което е свързано към PORTB и PORTC на микроконтролера. Регулатор на напрежение 5v, а именно LM7805, се използва за захранване на цялата верига, включително седем сегментни дисплея. За синхронизиране на микроконтролера се използва 20 MHz кристален генератор. Веригата се захранва от самото зарядно устройство за USB с помощта на LM7805. Добавихме USB порт в печатната платка, за да можем директно да свържем USB зарядно за кола към веригата.
Автомобилното USB зарядно устройство или запалката осигурява 5v регулирано захранване от 12v контакта на автомобила, но трябва да измерим действителното напрежение на автомобилната батерия, така че сме ощипали автомобилното зарядно устройство. Трябва да отворите USB зарядното устройство за кола и след това да намерите терминалите 5v (изход) и 12v (вход) и след това да премахнете 5v връзката, като я изтъркате с шкурка или с някакво твърдо нещо и да съкратите директно изхода на USB на 12v. Първо отворете 5v връзката от USB порта в зарядното устройство за кола и след това свържете 12v към USB порта, където е свързан 5v. Както е показано на фигурата по-долу, ние изрязахме червената кръгова връзка, тя може да се различава в зарядното за вашия автомобил.
За да конфигурираме ADC тук, ние избрахме аналогов щифт AN0 с вътрешно референтно напрежение 5v и f / 32 часовник за преобразуване ADC.
За да изчислим напрежението на акумулатора на автомобила от стойността на ADC, използвахме дадената формула:
Напрежение = (стойност на ADC / резисторен фактор) * референтно напрежение Където: ADC стойност = изход на делителя на напрежението (преобразуван в цифров от микроконтролера) Коефициент на резистора = 1023,0 / (R2 / R1 + R2) // 1023 е максимална стойност на ADC (10- бит) Референтно напрежение = 5 волта // избрана вътрешна 5v референция
Изчисляване на фактора на резистора:
В този проект четем напрежение на акумулатора на автомобила, което (обикновено) е около 12v-14v. Така че ние направихме този проект, приемайки, че макс. 15v означава, че тази система може да се чете макс. До 15v.
Така че във веригата сме използвали R1 и R2 резистор в делителя на напрежението и стойностите са:
R1 = 2K
R2 = 1K
Коефициент на резистор = 1023,0 * (1000/2000 + 1000)
Коефициент на резистор = 1023,0 * (1/3)
Резисторен фактор = 341,0 за до 15 волта
Така че окончателната формула за изчисляване на напрежението ще бъде както следва, която използвахме кодекса, даден в края на този член:
Напрежение = (ADC стойност / 341.0) * 5.0
Дизайн на вериги и печатни платки с помощта на EasyEDA:
За да проектираме схема за монитор за напрежение на акумулатора на автомобила, използвахме EasyEDA, който е безплатен онлайн инструмент за EDA за създаване на схеми и печатни платки по безпроблемен начин. Преди това сме поръчали няколко печатни платки от EasyEDA и все още използваме техните услуги, тъй като установихме, че целият процес, от изчертаването на схемите до поръчването на печатни платки, е по-удобен и ефективен в сравнение с други производители на печатни платки. EasyEDA предлага безплатно чертеж на вериги, симулация, дизайн на печатни платки, а също така предлага висококачествена, но ниска цена Персонализирана услуга за печатни платки. Проверете тук пълния урок за това как да използвате Easy EDA за създаване на схеми, оформления на печатни платки, симулиране на схеми и т.н.
EasyEDA се подобрява от ден на ден; те са добавили много нови функции и са подобрили цялостното потребителско изживяване, което прави EasyEDA по-лесна и използваема за проектиране на схеми. Те скоро ще пуснат версията му Desktop, която може да бъде изтеглена и инсталирана на вашия компютър за офлайн употреба.
В EasyEDA можете да направите вашите схеми и платки публични, така че другите потребители да могат да ги копират или редактират и да се възползват от това, ние също направихме цялата ни схема на вериги и печатни платки публична за този монитор за напрежение на автомобилната батерия, проверете връзката по-долу:
easyeda.com/circuitdigest/PIC_based_Car_Battery_Monitoring_System-63c2d5948eaa48c5bcbbd8db49a6c776
По-долу е моментната снимка на горния слой на оформлението на печатни платки от EasyEDA, можете да видите всеки слой (отгоре, отдолу, горната част, долната коприна и т.н.) на печатната платка, като изберете слоя от прозореца „Слоеве“
Изчисляване и поръчване на проби от печатни платки онлайн:
След като завършите дизайна на печатни платки, можете да щракнете върху иконата на изхода за производство , която ще ви отведе на страницата за поръчка на печатни платки. Тук можете да видите вашата PCB в Gerber Viewer или да изтеглите Gerber файлове на вашата PCB и да ги изпратите на произволен производител, също така е много по-лесно (и по-евтино) да я поръчате директно в EasyEDA. Тук можете да изберете броя на печатни платки, които искате да поръчате, колко медни слоя имате нужда, дебелината на печатната платка, теглото на медта и дори цвета на печатната платка. След като сте избрали всички опции, щракнете върху „Запазване в кошницата“ и завършете поръчката си, след което ще получите вашите PCB няколко дни по-късно.
Можете директно да поръчате тази PCB или да изтеглите файла Gerber, като използвате тази връзка.
След няколко дни поръчка на печатни платки взех пробите на печатни платки
След като взех печатни платки, монтирах всички необходими компоненти върху печатната платка и накрая имаме готова нашата система за наблюдение на батерията на автомобила, проверете тази схема в работата във видео, дадено в края.
Обяснение на програмирането:
Програмата на този проект е малко трудна за начинаещи. За да напишем този код, са ни необходими заглавни файлове. Тук използваме MPLAB X IDE за кодиране и XC компилатор за изграждане и компилиране на кода. Кодът е написан на език C.
В този код прочетохме напрежението на батерията с помощта на аналогов щифт, а за управление или изпращане на данни на 4-цифрен седемсегментен дисплей, използвахме рутинна програма за прекъсване на таймера в микроконтролера PIC. Всички изчисления за измерване на напрежението се извършват в основната рутинна програма.
Първо, в кода включихме заглавна част и след това конфигурирахме PIC микроконтролера, използвайки конфигурационни битове.
#include
И след това се показват декларирани променливи и дефинирани щифтове за седем сегмента
неподписан int брояч2; неподписана позиция на знака = 0; неподписан знак k = {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; int цифра1 = 0, цифра2 = 0, цифра3 = 0, цифра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_led2 TRISAbits.TRISA5 #define TRIS_led3 TRISAbits.TRISA0 #define TRIS_led4 TRISAbits.TRISA1 #define TRIS_led5 TRISAbits.TRISA………………
Сега създадохме рутинна програма за прекъсване на таймера за управление на седемсегментен дисплей:
прекъсване на празнотата low_priority LowIsr (void) {if (TMR0IF == 1) {counter2 ++; if (брояч2> = 1) {if (позиция == 0) {сег1 = 0; сегмент2 = 1; сегмент 3 = 1; сегмент4 = 1;………………
Сега във функцията void main () имаме инициализиран таймер и прекъсване.
GIE = 1; // GLOBLE INTRRUPT ENABLE PEIE = 1; // периферен флаг за прекъсване T0CON = 0b000000000; // предскалираща стойност, поставена TMR0IE = 1; // прекъсване активиране TMR0IP = 0; // приоритет на прекъсване TMR0 = 55536; // стартиране на брояч след тази стойност TMR0ON = 1;
И тогава в цикъл while четем аналогов вход на аналоговия щифт и извикваме някаква функция за изчисления.
докато (1) {adc_init (); за (i = 0; i <40; i ++) {Стойност = adc_value (); adcValue + = Стойност; } adcValue = (плаващ) adcValue / 40.0; конвертиране (adcValue); забавяне (100); }
Дадената функция adc_init () се използва за инициализиране на ADC
void adc_init () {ADCON0 = 0b00000011; // изберете adc канал ADCON1 = 0b00001110; // изберете аналогов и цифров i / p ADCON2 = 0b10001010; // време за изравняване задържане на ограничение ADON = 1; }
Като се има предвид adc_value функция се използва за четене вход от аналогов пин и да се изчисли напрежението.
float adc_value (void) {float adc_data = 0; докато (GO / DONE == 1); // по-високи битови данни започват преобразуване adc стойност adc_data = (ADRESL) + (ADRESH << 8); // Съхраняваме 10-битов изход adc_data = ((adc_data / 342.0) * 5.0); връщане adc_data; }
И дадена функция за преобразуване се използва за преобразуване на стойността на напрежението в сегментирани поддържани стойности.
конвертиране на невалидни (float f) {int d = (f * 100); цифра1 = d% 10; d = d / 10; цифра2 = d% 10; d = d / 10; цифра3 = d% 10; цифра4 = d / 10; }
Проверете пълния код за този проект по-долу с демонстрационно видео.