- Серво мотор
- Управљање серво мотором помоћу ЛПЦ2148 ПВМ & АДЦ
- ПВМ и АДЦ пинови у АРМ7-ЛПЦ2148
- Компоненте потребне
- Кружни дијаграм и везе
- Програмирање АРМ7-ЛПЦ2148 за управљање серво мотором
У нашем претходном упутству повезали смо корачни мотор са АРМ7-ЛПЦ2148. У овом упутству ћемо управљати серво мотором помоћу АРМ7-ЛПЦ2148. Серво мотор има предност мале потрошње енергије у односу на корачни мотор. Серво мотор зауставља своју потрошњу енергије када се постигне жељени положај, али корачни мотор непрекидно троши енергију да закључа вратило у жељеном положају. Серво мотори се углавном користе у пројектима роботике због њихове тачности и једноставног руковања.
У овом упутству ћемо научити о серво мотору и како повезати серво са АРМ7-ЛПЦ2148. Потенциометар је такође повезан како би се променио положај осовине серво мотора, а ЛЦД приказује вредност угла.
Серво мотор
Серво мотор је комбинација једносмерног мотора, система за контролу положаја и брзина. Ротација серво мотора контролише се применом ПВМ сигнала, ширина ПВМ сигнала одређује угао ротације и смер мотора. Овде ћемо користити СГ90 Серво Мотор у овом упутству, један је од популарних и најјефтинијих. СГ90 је серво од 180 степени. Дакле, са овим сервом можемо да поставимо осу од 0-180 степени:
- Радни напон: + 5В
- Тип зупчаника: пластични
- Угао ротације: 0 до 180 °
- Тежина: 9гм
- Обртни моменат: 2,5 кг / цм
Пре него што започнемо програмирање серво мотора, требали бисмо знати који тип сигнала треба послати за управљање серво мотором. Требали бисмо програмирати МЦУ да шаље ПВМ сигнале на сигналну жицу серво мотора. Унутар серво мотора налази се управљачко коло које очитава радни циклус ПВМ сигнала и поставља осовину серво мотора на одговарајуће место као што је приказано на доњој слици
Сваких 20 милисекунди серво мотор проверава пулс. Дакле, подесите ширину импулса сигнала да бисте ротирали осовину мотора.
- Ширина импулса од 1 мс (1 милисекунда) за ротацију сервоа до 0 степени
- Ширина импулса од 1,5 мс за ротацију до 90 степени (неутрални положај)
- Ширина импулса од 2 мс за ротацију сервоа за 180 степени.
Пре него што повежете серво са АРМ7-ЛПЦ2148, можете да тестирате свој серво помоћу овог круга серво моторног тестера. Такође проверите како се серво мотор може повезати са другим микроконтролерима:
- Управљање серво мотором помоћу Ардуина
- Интерфејс серво мотора са микроконтролером 8051
- Управљање серво мотором помоћу МАТЛАБ-а
- Управљање серво мотором са Распберри Пи
- Повезивање серво мотора са МСП430Г2
- Повезивање серво мотора са СТМ32Ф103Ц8
Управљање серво мотором помоћу ЛПЦ2148 ПВМ & АДЦ
Серво мотором се може управљати помоћу ЛПЦ2148 помоћу ПВМ-а. Давањем ПВМ сигнала на СЕРВО ПВМ пину са периодом од 20 мс и фреквенцијом од 50 Хз можемо поставити осовину серво мотора око 180 степени (-90 до +90).
Потенциометар се користи за варирање радног циклуса ПВМ сигнала и окретање осовине серво мотора, овај метод је примењен коришћењем АДЦ модула у ЛПЦ2148. Дакле, требају нам и ПВМ и АДЦ концепти који ће бити примењени у овом упутству. Дакле, љубазно погледајте наше претходне водиче да бисте научили ПВМ и АДЦ у АРМ7-ЛПЦ2148.
- Како се користи ПВМ у АРМ7-ЛПЦ2148
- Како се користи АДЦ у АРМ-ЛПЛЦ2148
ПВМ и АДЦ пинови у АРМ7-ЛПЦ2148
Слика испод приказује ПВМ и АДЦ пинове у ЛПЦ2148. Жута поља означавају (6) ПВМ пинове, а црна поља (14) АДЦ пинове.
Компоненте потребне
Хардвер
- АРМ7-ЛПЦ2148
- ЛЦД (16к2) модул екрана
- Серво мотор (СГ-90)
- 3.3В регулатор напона
- 10к потенциометар (2 бр)
- Бреадбоард
- Повезивање жица
Софтвер
- Кеил уВисион5
- Фласх Магиц Тоол
Кружни дијаграм и везе
Табела испод приказује везу између серво мотора и АРМ7-ЛПЦ2148:
СЕРВО ПИНС |
АРМ7-ЛПЦ2148 |
ЦРВЕНА (+ 5В) |
+ 5В |
СМЕЂА (ГНД) |
ГНД |
НАРАНЧАСТА (ПВМ) |
П0.1 |
Пин П0.1 је ПВМ излаз ЛПЦ2148.
Табела испод приказује везе круга између ЛЦД-а и АРМ7-ЛПЦ2148.
АРМ7-ЛПЦ2148 |
ЛЦД (16к2) |
П0.4 |
РС (Избор регистра) |
П0.6 |
Е (Омогући) |
П0.12 |
Д4 (подаци пин 4) |
П0.13 |
Д5 (подаци пин 5) |
П0.14 |
Д6 (подаци пин 6) |
П0.15 |
Д7 (подаци пин 7) |
ГНД |
ВСС, Р / В, К. |
+ 5В |
ВДД, А. |
У наредној табели су везе између АРМ7 ЛПЦ2148 и потенциометар са регулатор 3.3В напона.
3.3В регулатор напона ИЦ |
Пин функција |
АРМ-7 ЛПЦ2148 Пин |
1.Лефт Пин |
- Ве из ГНД |
ГНД пин |
2.Центре Пин |
Регулисани + 3.3В излаз |
На потенциометар Улаз и излаз потенциометра на П0,28 од ЛПЦ2148 |
3.десна игла |
+ Ве од 5В УЛАЗНИ |
+ 5В |
Тачке које треба забележити
1. Овде се користи регулатор напона од 3.3В за пружање аналогне улазне вредности АДЦ пину (П0.28) ЛПЦ2148. Како користимо снагу од 5 В, потребно је регулирати напон регулатором напона од 3,3 В.
2. Потенциометар се користи за варирање напона између (0В до 3,3В) да би се обезбедио аналогни улаз (АДЦ) на ЛПЦ2148 пину П0.28
3. Осовиница П0.1 ЛПЦ2148 даје ПВМ излаз на серво мотор за контролу положаја мотора.
4. Према вредности аналогног улаза (АДЦ), положај серво мотора се мења од (0 до 180 степени) кроз ПВМ излазни пин на П0,1 од ЛПЦ2148.
Програмирање АРМ7-ЛПЦ2148 за управљање серво мотором
За програмирање АРМ7-ЛПЦ2148 потребан нам је алат за уВисион и Фласх Магиц. Користимо УСБ кабл за програмирање АРМ7 Стицк преко микро УСБ порта. Код пишемо помоћу Кеила и креирамо хек датотеку, а затим се ХЕКС датотека флешира на АРМ7 стицк користећи Фласх Магиц. Да бисте сазнали више о инсталирању кеил уВисион и Фласх Магиц, и како их користити, следите везу Први кораци са АРМ7 ЛПЦ2148 микроконтролером и програмирајте га помоћу Кеил уВисион.
Кораци укључени у конфигурисање ЛПЦ2148 за ПВМ и АДЦ за управљање серво мотором
Корак 1: - Укључите потребне датотеке заглавља за кодирање ЛПЦ2148
#инцлуде
Корак 2: - Следећа ствар је конфигурисање ПЛЛ-а за генерисање такта јер поставља системски сат и периферни сат ЛПЦ2148 према потреби програмера. Максимална тактна фреквенција за ЛПЦ2148 је 60 МХз. Следећи редови се користе за конфигурисање генерисања такта ПЛЛ.
воид ИнитилизеПЛЛ (воид) // Функција за коришћење ПЛЛ-а за генерисање сата { ПЛЛ0ЦОН = 0к01; ПЛЛ0ЦФГ = 0к24; ПЛЛ0ФЕЕД = 0кАА; ПЛЛ0ФЕЕД = 0к55; вхиле (! (ПЛЛ0СТАТ & 0к00000400)); ПЛЛ0ЦОН = 0к03; ПЛЛ0ФЕЕД = 0кАА; ПЛЛ0ФЕЕД = 0к55; ВПБДИВ = 0к01; }
Корак 3: - Следеће што треба да урадите је да изаберете ПВМ пинове и ПВМ функцију ЛПЦ2148 помоћу ПИНСЕЛ регистра. Користимо ПИНСЕЛ0 као што користимо П0.1 за ПВМ излаз ЛПЦ2148.
ПИНСЕЛ0 - = 0к00000008; // Подешавање пина П0.1 ЛПЦ2148 као ПВМ3
Корак 4: - Следеће, морамо РЕСЕТОВАТИ тајмере користећи ПВМТЦР (Тимер Цонтрол Регистер).
ПВМТЦР = 0к02; // Ресетовање и онемогућавање бројача за ПВМ
А затим се следећа подешава вредност преткале која одређује резолуцију ПВМ-а.
ПВМПР = 0к1Д; // Вредност регистра предскале
Корак 5: - Следеће, подесите ПВММЦР (ПВМ регистар контроле подударања) док поставља операцију попут ресетовања, прекида за ПВММР0 и ПВММР3.
ПВММЦР = 0к00000203; // Ресетовање и прекид на МР0 мечу, прекид на МР3 мечу
Корак 6: - Максимални период ПВМ канала подешава се помоћу ПВММР0, а тона радног циклуса ПВМ је првобитно постављена на 0,65 мс
ПВММР0 = 20000; // Временски период таласа ПВМ, 20мсек ПВММР3 = 650; // Тона ПВМ таласа 0,65 мсец
Корак 7: - Следеће, треба да подесимо Омогући закључавање на одговарајуће регистре подударања помоћу ПВМЛЕР-а
ПВМЛЕР = 0к09; // Омогућавање закључавања за ПВМ3 и ПВМ0
(Користимо ПВММР0 и ПВММР3) Дакле, омогућите одговарајући бит постављањем 1 у ПВМЛЕР
Корак 8: - Да бисмо омогућили ПВМ излаз на пин, морамо да користимо ПВМТЦР за омогућавање ПВМ бројача и ПВМ режима.
ПВМПЦР = 0к0800; // Омогући ПВМ3 и ПВМ 0, ПВМ са једном ивицом контролисан ПВМТЦР = 0к09; // Омогући ПВМ и бројач
Корак 9: - Сада треба да добијемо вредности потенциометра за подешавање радног циклуса ПВМ из АДЦ пина П0.28. Дакле, користимо АДЦ модул у ЛПЦ2148 за претварање аналогног улаза потенциометра (0 до 3,3 В) у вредности АДЦ (0 до 1023).
Корак 10: - За одабир АДЦ пина П0.28 у ЛПЦ2148 користимо
ПИНСЕЛ1 = 0к01000000; // Постављање П0.28 као АДЦ ИНПУТ АД0ЦР = (((14) << 8) - (1 << 21)); // Подешавање сата и ПДН-а за А / Д конверзију
Следећи редови захватају аналогни улаз (0 до 3,3 В) и претварају га у дигиталну вредност (0 до 1023). А затим су ове дигиталне вредности подељене са 4 да би се претвориле у (0 до 255) и на крају напајале као ПВМ излаз у П0,1 пину ЛПЦ2148. Овде претварамо вредности од 0-1023 у 0-255 делећи је са 4 јер ПВМ ЛПЦ2148 има 8-битну резолуцију (28).
АД0ЦР - = (1 << 1); // Изаберите АД0.1 канал у времену кашњења регистра АДЦ (10); АД0ЦР - = (1 << 24); // Покретање А / Д конверзије вхиле ((АД0ДР1 & (1 << 31)) == 0); // Провери ГОТОВО бит у АДЦ регистру података адцвалуе = (АД0ДР1 >> 6) & 0к3фф; // Добивање РЕЗУЛТАТА из АДЦ регистра података дутицицле = адцвалуе / 4; // формула за добијање вредности радног циклуса од (0 до 255) ПВММР1 = радни циклус; // постављамо вредност радног циклуса на ПВМ регистар подударања ПВМЛЕР - = (1 << 1); // Омогући ПВМ излаз са вриједношћу радног циклуса
Корак 11: - Затим те вредности приказујемо у ЛЦД (16Кс2) модулу приказа. Дакле, додајемо следеће редове за иницијализацију модула ЛЦД екрана
Празан ЛЦД_ИНИТИЛИЗЕ (воид) // Функција за спремање ЛЦД-а { ИО0ДИР = 0к0000ФФФ0; // поставља пин П0.12, П0.13, П0.14, П0.15, П0.4, П0.6 као ИЗЛАЗНО кашњење (20); ЛЦД_СЕНД (0к02); // Иницијализација лцд-а у 4-битном режиму рада ЛЦД_СЕНД (0к28); // 2 реда ( 16Кс2 ) ЛЦД_СЕНД (0к0Ц); // Приказ на показивачу искључен ЛЦД_СЕНД (0к06); // Курсор за аутоматско повећање ЛЦД_СЕНД (0к01); // прикажи јасан ЛЦД_СЕНД (0к80); // Прва позиција у првом реду }
Како смо ЛЦД повезивали у 4-битном режиму са ЛПЦ2148, морали смо да шаљемо вредности које ће се приказивати грицкајући по грицкајући (горњи и доњи грицкање). Дакле, користе се следећи редови.
воид ЛЦД_ДИСПЛАИ (цхар * мсг) // Функција за штампање знакова послатих један по један { уинт8_т и = 0; вхиле (мсг! = 0) { ИО0ПИН = ((ИО0ПИН & 0кФФФФ00ФФ) - ((мсг & 0кФ0) << 8)); // шаље горњи грицкање ИО0СЕТ = 0к00000050; // РС ХИГХ & Омогући ХИГХ за штампање података ИО0ЦЛР = 0к00000020; // РВ ЛОВ режим закашњења у режиму писања (2); ИО0ЦЛР = 0к00000040; // ЕН = 0, РС и РВ непромењени (тј. РС = 1, РВ = 0) време одлагања (5); ИО0ПИН = ((ИО0ПИН & 0кФФФФ00ФФ) - ((мсг & 0к0Ф) << 12)); // шаље доњи грицкање ИО0СЕТ = 0к00000050; // РС & ЕН ХИГХ ИО0ЦЛР = 0к00000020; време одлагања (2); ИО0ЦЛР = 0к00000040; време одлагања (5); и ++; } }
За приказ тих вредности АДЦ и ПВМ користимо следеће редове у функцији инт маин () .
ЛЦД_СЕНД (0к80); спринтф (дисплаиадц, "адцвалуе =% ф", радни циклус); ЛЦД_ДИСПЛАИ (дисплаиадц); // Приказивање вредности АДЦ (0 до 1023) англе = (адцвалуе / 5.7); // Формула за претварање вредности АДЦ у угао (о до 180 степени) ЛЦД_СЕНД (0кЦ0); спринтф (англевалуе, "АНГЛЕ =%. 2ф степени", угао); ЛЦД_ДИСПЛАИ (угаона вредност);
Комплетни код и видео опис водича дати су у наставку