- Шта је серво мотор?
- Повезивање серво мотора са микроконтролером:
- Програмирање серво мотора са ПИЦФ877А ПИЦ микроконтролером:
- Кружни дијаграм:
- Симулација и постављање хардвера:
Ово је наш 11. водич за учење ПИЦ микроконтролера који користе МПЛАБ и КСЦ8. У овом упутству ћемо научити како управљати серво мотором помоћу ПИЦ микроконтролера. Ако сте већ радили са серво моторима, можете прескочити прву половину овог водича, али ако сте нови у самом серво мотору, наставите са читањем.
До сада смо покрили многе основне водиче попут ЛЕД-а који трепће помоћу ПИЦ-а, тајмера у ПИЦ-у, повезивања ЛЦД-а, повезивања 7-сегмента, АДЦ-а помоћу ПИЦ-а итд. Ако сте апсолутни почетник, онда посетите комплетну листу ПИЦ водича овде и почните да учите.
У нашем претходном водичу научили смо како да генеришемо ПВМ сигнале помоћу ПИЦ микроконтролера, сигнали су генерисани на основу вредности очитане са потенциометра. Ако сте тада разумели све програме, честитамо, већ сте кодирали и за серво мотор. ДА, Серво мотори реагују на ПВМ сигнале (које овде креирамо помоћу тајмера) научићемо зашто и како у овом упутству. Симулираћемо и израдити поставке хардвера за овај пројекат, а детаљан видео запис можете пронаћи на крају овог водича.
Шта је серво мотор?
Серво мотор је тип актуатора (углавном кружног облика) који омогућава угаону контролу. Доступно је много врста серво мотора, али у овом упутству концентришемо се на хоби серво моторе приказане у наставку.
Сервиси за хоби су популарни јер су јефтина метода контроле кретања. Пружају готова решења за већину потреба за Р / Ц и роботским хобистима. Такође елиминишу потребу за прилагођеним дизајнирањем контролног система за сваку апликацију.
Већина хоби серво мотора има ротациони анђео од 0-180 °, али такође можете добити и серво мотор од 360 ° ако сте заинтересовани. Овај водич користи серво мотор од 0 до 180 °. Постоје две врсте серво мотора заснованих на зупчаницима, један је серво мотор од пластичног зупчаника, а други је серво мотор од метала. Метални зупчаник се користи на местима где је мотор изложен већем хабању, али долази само по високој цени.
Серво мотори су оцењени у кг / цм (килограм по центиметру). Већина хоби серво мотора је оцењено на 3 кг / цм или 6 кг / цм или 12 кг / цм. Овај кг / цм говори вам колико тежине ваш серво мотор може подићи на одређеној удаљености. На пример: Серво мотор од 6 кг / цм треба да буде у стању да подигне 6 кг ако је терет овјешен 1 цм од осовине мотора, што је веће растојање то је мања носивост терета. Овде научите Основе серво мотора.
Повезивање серво мотора са микроконтролером:
Повезивање хоби серво мотора са МЦУ је врло једноставно. Серво има три жице које излазе из њих. Од којих ће се два користити за напајање (позитивно и негативно), а један за сигнал који се шаље са МЦУ-а. У овом упутству користићемо серво мотор МГ995 Метал Геар Серво Мотор који се најчешће користи за хуманоидне ботове РЦ аутомобила итд. Слика МГ995 је приказана испод:
Ознаке боја вашег серво мотора могу се разликовати, па проверите одговарајућу листу података.
Сви серво мотори раде директно са вашим опскрбним шинама + 5В, али морамо бити опрезни при количини струје коју би мотор трошио, ако планирате да користите више од два серво мотора, треба да буде дизајниран одговарајући серво штит. У овом упутству ћемо једноставно користити један серво мотор да покажемо како да програмирамо наш ПИЦ МЦУ за управљање мотором. Погледајте доње линкове за повезивање серво мотора са другим микроконтролером:
- Интерфејс серво мотора са микроконтролером 8051
- Управљање серво мотором помоћу Ардуина
- Распберри Пи Серво Мотор Водич
- Серво мотор са АВР микроконтролером
Програмирање серво мотора са ПИЦФ877А ПИЦ микроконтролером:
Пре него што започнемо програмирање серво мотора, требали бисмо знати који тип сигнала треба послати за управљање серво мотором. Требали бисмо програмирати МЦУ да шаље ПВМ сигнале на сигналну жицу серво мотора. Унутар серво мотора налази се управљачко коло које очитава радни циклус ПВМ сигнала и поставља осовину серво мотора на одговарајуће место као што је приказано на доњој слици
Сваки серво мотор ради на различитим фреквенцијама ПВМ (најчешћа фреквенција је 50Хз која се користи у овом упутству), зато узмите таблицу података свог мотора да бисте проверили у ком ПВМ периоду ваш серво мотор ради.
Детаљи о ПВМ сигналу за наш Товер про МГ995 приказани су испод.
Из овога можемо закључити да наш мотор ради са ПВМ периодом од 20 мс (50Хз). Тако би фреквенција нашег ПВМ сигнала требала бити постављена на 50Хз. Фреквенција ПВМ-а коју смо поставили у претходном упутству била је 5 КХз, а коришћење истог нам овде неће помоћи.
Али, овде имамо проблем. ПИЦ16Ф877А не може да генерише ниске сигнале фреквенција ПВМ користећи КПК модул. Према техничком листу, најнижа могућа вредност која се може подесити за ПВМ фреквенцију је 1,2 КХз. Зато морамо одустати од идеје о коришћењу ЦЦП модула и пронаћи начин да направимо сопствене ПВМ сигнале.
Стога ћемо у овом упутству користити тајмер модул за генерисање ПВМ сигнала са фреквенцијом од 50Хз и варирање њиховог радног циклуса за управљање анђелом серво мотора. Ако сте нови у тимерима или АДЦ-у са ПИЦ-ом, вратите се овом упутству, јер ћу прескочити већину ствари јер смо их тамо већ покрили.
Иницијализујемо наш модул Тимер са пресцалером од 32 и чинимо га преливеним за сваки 1ус. Према нашем техничком листу, ПВМ би требало да има период од само 20 мс. Дакле, наше заједничко време и одсуство треба да буде тачно једнако 20мс.
ОПТИОН_РЕГ = 0б00000100; // Тимер0 са екстерном фреквенцијом и 32 као пресцалер ТМР0 = 251; // Учитавање вредности времена за 1ус делаиВалуе може бити између 0-256 само ТМР0ИЕ = 1; // Омогући бит прекида тајмера у регистру ПИЕ1 ГИЕ = 1; // Омогући глобални прекид ПЕИЕ = 1; // Омогућавање периферног прекида
Дакле, унутар наше рутинске функције прекида, укључујемо пин РБ0 на одређено време и искључујемо га за време развртања (20 мс - он_тиме). Вредност укључености може се одредити помоћу потенциометра и АДЦ модула. Прекид је приказан испод.
оид интеррупт тимер_иср () {иф (ТМР0ИФ == 1) // Тајмер је прелетео {ТМР0 = 252; / * Учитајте вредност тајмера, (Напомена: Тимервалуе је 101 постављена на 100, јер ТИмер0 требају два циклуса инструкција да би започео увећавање ТМР0 * / ТМР0ИФ = 0; // Обриши бројање заставице прекида тајмера ++;} иф (цоунт> = он_тиме) { РБ0 = 1; // допуњујемо вредност за трептање ЛЕД диода} иф (цоунт> = (он_тиме + (200-он_тиме))) {РБ0 = 0; цоунт = 0;}}
У нашој вхиле петље смо управо прочитали вредност потенциометра помоћу АДЦ модул и ажурирање на време ПВМ користећи читање вредности.
вхиле (1) {пот_валуе = (АДЦ_Реад (4)) * 0,039; он_тиме = (170-пот_валуе); }
На овај начин смо креирали ПВМ сигнал чији је период 20мс и има променљиви радни циклус који се може подесити помоћу потенциометра. Комплетни код је дат испод у одељку кода.
Сада, хајде да верификујемо излаз користећи симулацију протеуса и пређимо на наш хардвер.
Кружни дијаграм:
Ако сте већ наишли на ПВМ водич, шеме овог водича биће исте, осим за које ћемо додати серво мотор уместо ЛЕД светла.
Симулација и постављање хардвера:
Уз помоћ Протеус симулације можемо да верификујемо ПВМ сигнал помоћу осцилоскопа и такође да проверимо ротирајући анђео серво мотора. У наставку је приказано неколико снимака симулације, где се може приметити промена обртног анђела серво мотора и ПВМ радног циклуса на основу потенциометра. Даље на крају проверите Фулл Видео, ротације при различитом ПВМ-у.
Као што видимо, анђео серво ротације се мења на основу вредности потенциометра. Сада пређимо на подешавање хардвера.
У хардверском подешавању управо смо уклонили ЛЕД плочу и додали серво мотор како је приказано у горњим шемама.
Хардвер је приказан на доњој слици:
Видео испод показује како Серво мотор реагује на различите позиције потенциометра.
То је то !! Ми смо повезати са серво мотор са ПИЦ микроконтролером, сада можете да користите сопствену креативност и сазнајте апликације за ово. Постоји пуно пројеката који користе серво мотор.