instructables VHDL Рэгуляванне хуткасці рухавіка Вызначце кірунак і хуткасць Левы і правы рэгулятар хуткасці

УВАГА: Гэтая старонка з'яўляецца часткай большай зборкі. Пераканайцеся, што вы пачынаеце ТУТ, каб вы зразумелі, дзе наступнае ўпісваецца ў большы праект
Скончанаview
Кіраванне хуткасцю рухавіка і кірункам з'яўляецца адным з двух асноўных падраздзяленняў робата-фотадэтэктара, а другі - падраздзяленнем фотадэтэктара або дэтэктара святла. У той час як аддзел фотадэтэктараў сканцэнтраваны на зроку робата, аддзел кіравання хуткасцю рухавіка і напрамкам руху сканцэнтраваны на руху робата. Кіраванне хуткасцю і напрамкам рухавіка апрацоўвае даныя, атрыманыя з фотадэтэктара, і дае фізічны вынік у выглядзе руху рухавіка.
Мэта гэтага падзелу - кантраляваць хуткасць і кірунак як левага, так і правага рухавіка робата-светлашукальніка. Каб вызначыць гэтыя значэнні, вам спатрэбяцца памер і становішча святла, якое было зафіксавана камерай і апрацавана парогавым вызначэннем. Вам таксама спатрэбіцца вымераная хуткасць кожнага з рухавікоў. З гэтых уваходных дадзеных вы зможаце вывесці значэнне ШІМ (шыротна-імпульснай мадуляцыі) для кожнага з рухавікоў.
Каб дасягнуць гэтага, вам трэба будзе зрабіць наступныя модулі VHDL (таксама па спасылках ніжэй):
- Кантроль
- Хібнасць разліку
- Двайковае пераўтварэнне
- Адсутнасць крыніцы святла
Вы можаце паглядзець на код VHDL для гэтага раздзела тут.
Пастаўкі
Мы рэкамендуем выкарыстоўваць ISE Design Suite 14.7, бо яго таксама можна выкарыстоўваць для тэставання кода ў VHDL. Аднак, каб загрузіць код у BASYS 3, вам трэба будзе ўсталяваць Vivado (версія 2015.4 або 2016.4) і напісаць абмежаванне з пашырэннем .xdc.
Рэгуляванне хуткасці рухавіка VHDL: Вызначце кірунак і хуткасць, рэгулятар хуткасці налева і направа: Старонка 1
КРОК ІНСТРУКЦЫІ
Крок 1: кантроль
Каб зразумець, як кіраваць паводзінамі робата-светлашукальніка, мы растлумачым пажаданыя паводзіны робата, калі ён бачыць крыніцу святла. Гэта паводзіны будзе кантралявацца ў залежнасці ад становішча і памеру крыніцы святла.
Алгарытм, які выкарыстоўваецца, аналагічны кантролеру робата RC, з адным рычагом, які можна паварочваць налева або направа, і іншым рычагом, які можна паварочваць наперад або назад.
Каб шукаць святло, гэты робат павінен рухацца па прамой лініі, калі крыніца святла знаходзіцца прама перад робатам. Для гэтага патрэбна аднолькавая хуткасць левага і правага рухавікоў. Калі святло знаходзіцца з левага боку робата, вы хочаце, каб правы рухавік рухаўся хутчэй, чым левы, каб робат мог паварочвацца налева да святла. І наадварот, калі святло знаходзіцца справа ад робата, вы хочаце, каб левы рухавік рухаўся хутчэй, чым правы рухавік, каб робат мог паварочвацца направа да святла. Гэта аналаг левага рычага пульта кіравання, дзе вы можаце кантраляваць, хочаце вы перамяшчаць робата налева, направа або прама.
Затым вы хочаце, каб робат рухаўся наперад, калі крыніца святла знаходзіцца далёка (маленькая крыніца святла), або рухаўся назад, калі выяўленая крыніца святла занадта блізка (вялікая крыніца святла). Вы таксама хочаце, каб чым далей робат знаходзіўся ад крыніцы святла, тым хутчэй ён рухаўся. Гэта аналаг правага рычага пульта кіравання, дзе вы можаце кантраляваць, хочаце вы рухацца наперад або назад, і наколькі хутка вы хочаце рухацца.
Затым вы можаце атрымаць матэматычную формулу для хуткасці кожнага з рухавікоў, і мы выбіраем дыяпазон хуткасцей ад -255 да 255. Адмоўнае значэнне азначае, што рухавік будзе круціцца назад, а станоўчае значэнне азначае, што рухавік будзе круціцца наперад.
Гэта асноўны алгарытм руху гэтага робата. Каб даведацца больш аб гэтым модулі, націсніце тут.
Крок 2: Разлік памылак
Паколькі ў вас ужо ёсць мэтавая хуткасць і кірунак для рухавікоў, вы таксама хочаце прыняць да ўвагі вымераную хуткасць і кірунак рухавікоў. Калі ён дасягнуў мэтавай хуткасці, мы хочам, каб рухавік рухаўся выключна на сваім імпульсе. Калі гэтага не адбылося, мы хочам павялічыць хуткасць рухавіка. У тэорыі кіравання гэта вядома як сістэма кіравання з замкнёнай зваротнай сувяззю.
Каб даведацца больш аб гэтым модулі, націсніце тут.
Крок 3: двайковае пераўтварэнне
З папярэдніх вылічэнняў вы ўжо ведаеце дзеянне, неабходнае для кожнага з рухавікоў. Аднак разлікі праводзяцца з выкарыстаннем двайковай сістэмы са знакам. Мэтай гэтага модуля з'яўляецца пераўтварэнне гэтых значэнняў са знакам у значэнне, якое можа быць прачытана генератарам ШІМ, а гэта кірунак (па гадзіннікавай стрэлцы або супраць) і хуткасць (ад 0 да 255). Акрамя таго, паколькі зваротная сувязь ад рухавіка вымяраецца ў двайковым выглядзе без знака, неабходны іншы модуль для пераўтварэння значэнняў без знака (кірунак і хуткасць) у значэнне са знакам, якое можа быць вылічана з дапамогай модуля разліку памылак. Каб даведацца больш аб гэтым модулі, націсніце тут.
Крок 4: Адсутнасць крыніцы святла
Вы зрабілі робата, які рухаецца ў пошуках святла, калі робат выяўляе святло. Але што адбываецца, калі робат не выяўляе святло? Мэта гэтага модуля - загадваць, што рабіць, калі такая ўмова прысутнічае.
Самы просты спосаб пошуку крыніцы святла - гэта кручэнне робата на месцы. Пасля кручэння на працягу зададзенай колькасці секунд, калі робат усё яшчэ не знайшоў крыніцу святла, вы хочаце, каб робат спыніў рух, каб зэканоміць энергію. Яшчэ праз зададзеную колькасць секунд робат павінен зноў павярнуцца на месцы ў пошуках святла. Каб даведацца больш аб гэтым модулі, націсніце тут.
Крок 5: Як гэта працуе
Вы можаце звярнуцца да малюнка вышэй для гэтага тлумачэння. Як згадвалася ў пачатку гэтай інструкцыі, вам спатрэбяцца ўводы «памер» і «пазіцыя» з раздзела парогавых значэнняў. Каб пераканацца, што гэтыя ўводы былі сапраўднымі (напрыклад,ampкалі вы атрымліваеце памер = 0, памер сапраўды роўны нулю, таму што камера не выяўляе святло, а не таму, што камера ўсё яшчэ ініцыялізуецца), вам таксама спатрэбіцца нейкі індыкатар, які мы называем «ГАТОВЫ». Гэтыя даныя будуць апрацаваны элементам кіравання (Ctrl. vhd) для вызначэння мэтавай хуткасці кожнага рухавіка (9 біт са знакам).
Для больш стабільнага выхаду рухавіка вы хочаце выкарыстоўваць зваротную сувязь у сістэме з замкнёным контурам. Гэта патрабуе ўваходных дадзеных "кірунак" і "хуткасць" кожнага рухавіка з аддзела вымярэння хуткасці рухавіка. Паколькі вы хочаце ўключыць гэтыя ўваходныя дадзеныя ў свае разлікі, вам трэба будзе пераўтварыць гэтыя значэнні без знака ў 9-бітны двайковы файл са знакам. Гэта робіцца з дапамогай двайковага пераўтваральніка без знака ў знакавы (US2S.vhd).
Тое, што робіць разлік памылкі (памылка. vhd), - гэта адняць вымераную хуткасць з мэтавай хуткасці, каб вызначыць дзеянне для кожнага рухавіка. Гэта азначае, што калі абодва маюць аднолькавае значэнне, адніманне становіцца нулявым, і рухавік будзе рухацца выключна за кошт свайго імпульсу. Вы таксама можаце дадаць каэфіцыент множання, каб робат мог хутчэй дасягнуць мэтавай хуткасці.
Паколькі кантролеру рухавіка неабходныя хуткасць і кірунак кожнага рухавіка, вы павінны перавесці значэнні дзеяння са знакам у два асобныя значэнні без знака: хуткасць (1 біт) і кірунак (8 біт). Гэта робіцца двайковым пераўтваральнікам са знакам у беззнакавы (S2US.vhd) і стане ўваходам у аддзел кіравання рухавіком.
Мы таксама дадалі модуль, каб вызначыць, што рабіць, калі святло не выяўляецца (няма лічыльніка святла. Bhd). Паколькі гэты модуль у асноўным з'яўляецца лічыльнікам, ён будзе падлічваць, колькі часу трэба робату, каб круціцца або заставацца на месцы. Гэта гарантуе, што робат "бачыць" навакольнае асяроддзе, а не толькі тое, што знаходзіцца перад ім, і эканоміць зарад батарэі, калі крыніца святла сапраўды адсутнічае.
Крок 6: Злучыце Files
Аб'яднаць files, вам трэба падключыць сігналы ад кожнага модуля. Каб зрабіць гэта, вы павінны стварыць новы модуль верхняга ўзроўню file. Устаўце ўваходы і выхады папярэдніх модуляў як кампаненты, дадайце сігналы для злучэнняў і прызначце кожны порт адпаведнай пары. Вы можаце звярнуцца да злучэнняў на ілюстрацыі вышэй і паглядзець код тут.
Крок 7: Праверце
Пасля таго, як вы скончыце з усім кодам, вам трэба ведаць, ці працуе ваш код, перш чым загружаць яго на дошку, тым больш, што часткі кода могуць быць зроблены рознымі людзьмі. Для гэтага патрабуецца тэставы стэнд, дзе вы будзеце ўводзіць фіктыўныя значэнні і бачыць, ці паводзіць сябе код так, як мы хочам, каб ён сябе паводзіў. Вы можаце пачаць з тэставання кожнага модуля, і калі ўсе яны працуюць правільна, вы можаце праверыць модуль верхняга ўзроўню.
Крок 8: Паспрабуйце гэта на абсталяванні
Пасля таго, як ваш код быў пратэставаны на вашым кампутары, вы можаце праверыць код на рэальным абсталяванні. Вы павінны зрабіць абмежаванне file на Vivado (.xdc file для BASYS 3), каб кантраляваць, якія ўваходы і выхады ідуць на якія парты.
ВАЖНАЯ ПАРАДКА: На цяжкім шляху мы даведаліся, што электрычныя кампаненты могуць мець максімальнае значэнне току або аб'ёмуtagэс. Абавязкова звярніцеся да табліцы дадзеных для значэнняў. Для PMOD HB5 не забудзьцеся ўсталяваць гучнасцьtage ад крыніцы харчавання ў 12 вольт (паколькі гэта патрабаваны абtage для рухавіка), і ток як мінімум, неабходны для руху рухавіка.
Крок 9: Злучыце яго з іншымі часткамі
Калі папярэднія крокі былі паспяховымі, аб'яднайце код з іншымі групамі, каб канчатковы код быў загружаны ў робата. Тады, вуаля! Вы паспяхова стварылі робата, які шукае святло.
Крок 10: Укладальнікі
Злева направа:
- Антоніус Грэгорыус Дзівен Рывальдзі
- Фелікс Вігуна
- Мікалай Санджая
- Рычард Медыянта

Вельмі добра: Рэгуляванне хуткасці рухавіка VHDL: Вызначце кірунак і хуткасць, рэгулятар хуткасці налева і направа: Старонка 6
Дзякуй за паўторнаеviewING! Гэты праект насамрэч з'яўляецца толькі часткай класнага праекта (робат, які шукае святло з платай BASYS 3 і камерай OV7670), таму я хутка дадам спасылку на інструкцыю класа!
Цудоўна: Я з нецярпеннем чакаю, каб убачыць усё разам.
Дакументы / Рэсурсы
![]() |
instructables VHDL Рэгуляванне хуткасці рухавіка Вызначце кірунак і хуткасць Левы і правы рэгулятар хуткасці [pdfІнструкцыі Рэгуляванне хуткасці рухавіка VHDL Вызначэнне кірунку і хуткасці Кантролер хуткасці левага і правага боку, хуткасць рухавіка VHDL, кіраванне Вызначэнне кірунку і хуткасці Рэгулятар хуткасці левага і правага рухавіка |





