- Потребни материјали:
- Израчунавање пређене брзине и удаљености:
- Шема круга и постављање хардвера:
- Симулација:
- Програмирање вашег ПИЦ16Ф877А:
- Објашњење:
Мерење брзине / окретаја у минути возила или мотора увек је био фасцинантан пројекат за нас. Дакле, у овом пројекту ћемо направити један користећи ПИЦ микроконтролере спремне за индустрију. За мерење брзине користићемо комад магнета и Халлов сензор. Постоје и други начини / сензори за мерење брзине, али коришћење халског сензора је јефтино и такође се може користити на било којој врсти мотора / возила. Радећи овај пројекат такође ћемо побољшати своје вештине у учењу ПИЦ16Ф877А, јер пројекат укључује употребу прекида и тајмера. На крају овог пројекта моћи ћете да израчунате брзину и раздаљину коју прелази било који ротирајући објекат и прикажете их на ЛЦД екрану 16к2. Кренимо од овог круга дигиталног брзиномера и одометра са ПИЦ-ом.
Потребни материјали:
- ПИЦ16Ф877А
- 7805 Регулатор напона
- Халов сензор ефекта (УС1881 / 04Е)
- ЛЦД екран од 16 * 2
- Мали комад магнета
- Повезивање жица
- Кондензатори
- Бреадбоард.
- Напајање
Израчунавање пређене брзине и удаљености:
Пре него што заиста започнемо изградњу круга, схватимо како ћемо користити Халлов сензор и магнет за израчунавање брзине точка. Раније смо користили исту технику за израду Ардуино брзиномера који приказује очитавања на Андроид паметном телефону.
Халлов сензор је уређај који може да детектује присуство магнета на основу његовог поларитета. На точак залепимо мали комад магнета и поставимо сензор Халл близу њега на такав начин да га сваки пут када се окреће точак сензор Халл детектује. Затим користимо помоћ тајмера и прекида на нашем ПИЦ микроконтролеру да израчунамо време потребно за једно потпуно окретање точка.
Једном када се утврди потребно време, можемо израчунати РПМ користећи следеће формуле, при чему ће нам 1000 / време узети РПС, а даље множење са 60 добиће РПМ
о / мин = (1000 / заузето време) * 60;
Где (1000 / примљено време) даје број обртаја у минути (број обртаја у секунди) и помножава се са 60 за претварање обртаја у минуту (обртаја у минути).
Сада да бисмо израчунали брзину возила морамо знати радијус точка. У нашем пројекту користили смо мали точак играчака чији је радијус само 3 цм. Али, претпоставили смо да је полупречник точка 30 цм (0,3 м) како бисмо могли да визуализујемо очитавања.
Вредност се такође помножи са 0,37699 пошто знамо да је брзина = (РПМ (пречник * Пи) / 60). Формуле су поједностављене до
в = радијус_котача * о / мин * 0,37699;
Једном када израчунамо брзину, такође можемо израчунати пређену удаљеност користећи сличан метод. Са нашим распоредом дворане и магнета знамо колико пута се точак окренуо. Такође знамо радијус точка, помоћу којег можемо пронаћи обим точка, претпостављајући да је полупречник точка 0,3 м (Р), вредности опсега Пи * Р * Р ће бити 0,2827. То значи да за сваки пут када се халски сензор сретне са магнетом точак пређе удаљеност од 0,2827 метара.
Удаљеност_покривена = удаљеност_покривена + обим_окружног круга
Будући да сада знамо како ће овај пројекат функционисати, пређимо на наш дијаграм кола и почните га градити.
Шема круга и постављање хардвера:
Кружни дијаграм овог Пројекта брзиномера и одометра врло је једноставан и може се направити на плочи. Ако сте пратили водиче за ПИЦ, можете такође поново користити хардвер који смо користили за учење ПИЦ микроконтролера. Овде смо користили исту перф плочу коју смо направили за ЛЕД трептање са ПИЦ микроконтролером, као што је приказано доле:
Пин прикључци за ПИЦ16Ф877А МЦУ дати су у доњој табели.
С.Но: |
Пин број |
Пин Наме |
Повезан |
1 |
21 |
РД2 |
РС ЛЦД |
2 |
22 |
РД3 |
Е ЛЦД |
3 |
27 |
РД4 |
Д4 ЛЦД-а |
4 |
28 |
РД5 |
Д5 ЛЦД-а |
5 |
29 |
РД6 |
Д6 ЛЦД-а |
6 |
30 |
РД7 |
Д7 ЛЦД-а |
7 |
33 |
РБ0 / ИНТ |
3 ИИИ пин од Халл сензора |
Једном када направите свој пројекат, требало би да изгледа овако некако на слици испод
Као што видите, користио сам две кутије за постављање мотора и сензора Халл-а у оближњи положај. Можете да причврстите магнет на свој ротирајући предмет и да нетакнете Халл сензор близу њега на такав начин да може да детектује магнет.
Напомена: Халлов сензор има поларитет, зато проверите који пол детектује и поставите га у складу с тим.
Обавезно користите и пулл-уп отпорник са излазним затичем Халл сензора.
Симулација:
Симулација за овај пројекат се ради помоћу Протеуса. Будући да пројекат укључује покретне предмете, није могуће приказати целокупан пројекат помоћу симулације, али рад ЛЦД-а може бити потврђен. Једноставно учитајте хек датотеку у Симулацију и симулирајте је. Моћи ћете приметити како ЛЦД ради како је приказано доле.
Да бих проверио да ли брзиномер и бројач километара раде, заменио сам Халл сензор уређајем Логиц стате. Током симулације можете да кликнете на дугме логичког стања да бисте покренули Прекид и проверили да ли се пређена брзина и удаљеност ажурирају како је горе приказано.
Програмирање вашег ПИЦ16Ф877А:
Као што је раније речено, користићемо помоћ тајмера и прекида у микроконтролеру ПИЦ16Ф877А да бисмо израчунали време потребно за једно потпуно окретање точка. Већ смо научили како користити тајмере у нашем претходном водичу. Комплетни код пројекта дао сам на крају овог чланка. Даље сам објаснио неколико важних редова у наставку.
Доле наведени редови кода иницијализују порт Д као излазне пинове за ЛЦД повезивање и РБ0 као улазни пин за употребу као спољни пин. Даље, омогућили смо унутрашњи отпорник на извлачење помоћу ОПТИОН_РЕГ и такође поставили 64 као претпродају. Затим Омогућујемо глобални и периферни прекид да бисмо омогућили тајмер и екстерни прекид. Да би се РБ0 дефинисао као екстерни бит прекида, ИНТЕ би требао бити висок. Вредност Оверфлов је постављена на 100 тако да ће се за сваку 1 милисекунду активирати заставица прекида тајмера ТМР0ИФ. Ово ће вам помоћи да покренете тајмер за милисекунде да бисте утврдили време потребно у милисекунди:
ТРИСД = 0к00; // ПОРТД декларисан као излаз за повезивање ЛЦД ТРИСБ0 = 1; // ДЕфинишите пин РБ0 као улаз за употребу као пин прекида ОПТИОН_РЕГ = 0б00000101; // Тимер0 64 као пресцалар // Такође омогућава ПУЛЛ УПс ТМР0 = 100; // Учитавање временске вредности за 1мс; делаиВалуе може бити између 0-256 само ТМР0ИЕ = 1; // Омогући бит прекида тајмера у регистру ПИЕ1 ГИЕ = 1; // Омогући глобални прекид ПЕИЕ = 1; // Омогућавање периферног прекида ИНТЕ = 1; // Омогући РБ0 као спољни пин за прекидање
Функција у наставку извршит ће се сваки пут кад се открије прекид. Функцију можемо именовати према нашој жељи, па сам је назвао спеед_иср (). Овај програм се бави два прекида, један је Тимер Интеррупт, а други Ектернал Интеррупт. Кад год дође до прекида са тајмером, заставица ТМР0ИФ иде високо, да би обрисали и ресетовали прекид, морамо га смањити дефинисањем ТМР0ИФ = 0 као што је приказано у доњем коду.
воид интеррупт спеед_иср () {иф (ТМР0ИФ == 1) // Тајмер је прелетео {ТМР0ИФ = 0; // Обриши заставицу прекида тајмера милли_сец ++; } иф (ИНТФ == 1) {рпм = (1000 / милли_сец) * 60; брзина = 0,3 * о / мин * 0,37699; // (под претпоставком да је полупречник точка 30 цм) ИНТФ = 0; // обриши заставицу прекида милли_сец = 0; растојање = растојање + 028,2; }}
Слично томе, када се догоди спољни прекид, заставица ИНТФ ће ићи високо, то такође треба уклонити дефинисањем ИНТФ = 0. Време се задржава у евиденцији помоћу временског прекида, а спољни прекид одређује када је точак извршио једно потпуно окретање. Помоћу ових података израчунавају се брзина и удаљеност коју точак пређе током сваког спољног прекида.
Једном када се израчуна брзина и удаљеност, они се могу једноставно приказати на ЛЦД екрану помоћу наших ЛЦД функција. Ако сте нови у ЛЦД-у, погледајте наш водич за повезивање са упутством за ПИЦ16Ф877А МЦУ.
Објашњење:
Након што припремите хардвер и софтвер, једноставно пренесите код на свој ПИЦ16Ф877А. Ако сте потпуно нови у ПИЦ-у, требало би да прочитате неколико водича о томе како да учитате програм на микроконтролер ПИЦ16Ф877А.
Користио сам променљиви ПОТ за подешавање брзине мотора у демонстрацијске сврхе. Такође можете да користите исту за проналажење апликације у реалном времену. Ако све функционише како се очекује, требали бисте бити у могућности да пређете у брзинама у км / сат и удаљеност у метрима, као што је приказано у видео снимку испод.
Надам се да вам се свидео пројекат и покренуо га. Ако не, можете да употребите одељак за коментаре испод или форум да објавите своју сумњу.