Мазмұны:

3-бөлім: GPIO: ARM құрастыру: сызық орындаушы: TI-RSLK: 6 қадам
3-бөлім: GPIO: ARM құрастыру: сызық орындаушы: TI-RSLK: 6 қадам

Бейне: 3-бөлім: GPIO: ARM құрастыру: сызық орындаушы: TI-RSLK: 6 қадам

Бейне: 3-бөлім: GPIO: ARM құрастыру: сызық орындаушы: TI-RSLK: 6 қадам
Бейне: Робот қолының қозғалысы. 3-сынып 2024, Шілде
Anonim
Image
Image
Аппараттық құрал
Аппараттық құрал

Сәлеметсіз бе. Бұл келесі бөлік, біз ARM құрастыруды қолдануды жалғастырамыз (жоғары деңгейлі тілдің орнына). Бұл нұсқаулыққа шабыт-Texas Instruments Robotics System Learning Kit Lab 6 Lab, немесе TI-RSLK.

Біз жинақтағы микроконтроллерді, MSP432 LaunchPad дамыту тақтасын қолданатын боламыз, бірақ, мүмкін, сіз LaunchPad -ты пайдаланбайтын болсаңыз да немесе TI -ге сәйкес келмесеңіз де, осы нұсқаулықтан пайдалы нәрсе таба аласыз. оқу жоспары.

Біз ARM Ассамблеясын, даму ортасын және жобаны қалай жасау керектігін нұсқаудан бастадық.

Келесі нұсқаулық ARM құрастыруда кіріс/шығыспен (GPIO) қалай әрекеттесу керектігін таныстырды.

Содан кейін біз білімімізді кеңейтіп, светодиодтар мен қосқыштарды басқаратын функцияларды енгіздік.

Енді осы Нұсқаулықпен біз үйренгенімізді пайдалана отырып, қызықты әрі пайдалы нәрсені жасай аламыз: сызықты анықтау.

Бұл бізге кейіннен робот жасайтын робот жасаған кезде көмектесе алады.

Оқу бағдарламасында бағдарламалаудың көп бөлігі С немесе С ++ тілдерінде жүзеге асады, бірақ жоғары деңгейлі тілдер мен кітапханаларға байланысты жұмысты бастамас бұрын монтажмен танысу пайдалы.

1 -қадам: аппараттық құрал

Аппараттық құрал
Аппараттық құрал
Аппараттық құрал
Аппараттық құрал
Аппараттық құрал
Аппараттық құрал

Мен жабдықты егжей -тегжейлі жаңартқым келмейді, өйткені қазірдің өзінде көздер бар, бірақ біз қажет болған жағдайда түсініктемелерді қосамыз.

Бұл нұсқаулық үшін біз Pololu-дан шағылыстыру сенсорының массивін қолданатын боламыз, себебі ол TI-RSLK (роботтар жиынтығы) құрамына кіреді. Бұл курста және оқу бағдарламасының 6 зертханасында қолданылады.

Егер сізде бұл болмаса, сіз болуы немесе болмауы үшін жоғары немесе төмен сандық сигнал шығаратын кез келген инфрақызыл детекторды (немесе олардың сериясын) қолдана аласыз.

Массив сенсоры ең жақсы, себебі ол біздің сызықтың дәл ортасында немесе бір жақта екенін анықтауға көмектеседі. Сонымен қатар, кейінірек көретініміздей, бұл роботтың сызыққа қатысты бұрышын анықтауға көмектеседі.

Шағылысу массивінде детекторлар бір -біріне өте жақын орналасқан. Бұл, әрине, сызықтың қалыңдығына байланысты, бірнеше анықтау сигналдарын алуымыз керек дегенді білдіреді.

Егер солай болса, онда егер робот сызыққа тікелей кірмейтін болса, онда ол сызықтың ені шығатын мәнді қайтаруы керек (өйткені біз бұрышта тұрмыз).

Жоғарыда айтылғандарды жақсы түсіндіру үшін Lab 6 құжатына қараңыз.

Сенсорды MSP432 LaunchPad әзірлеу тақтасына қосуға / қосуға қатысты көмекші нұсқаулар берілген.

Мен осы қадамға бірдей (ұқсас?) Pdf нұсқауларын қостым.

Егер сіз Pololu құжаттарын мұқият оқып шықсаңыз, олар «3.3V айналып өтудің» себебін түсіндіреді, егер сіз 5В емес, 3.3V қолдансаңыз, секіргіңіз келеді.

Біз роботты әлі жасамаймыз, бірақ оның орнына біз тек ARM құрастыру туралы, сонымен қатар роботтың бөлшектерімен (ішкі жүйелерімен) өзара әрекеттесуді үйреніп жатырмыз, жоғарыда көрсетілген нұсқауларды орындау қажет емес.

Әзірге желілік сенсорлық массивті қосу келесіге дейін төмендейді:

  • 3.3V және GND MSP432 тақтасынан сенсорлық массивке қосыңыз.
  • портты түйреуішті (мен P5.3 ұсынамын) MSP432 -ден желі сенсорының массивіндегі жарықдиодты қосқыш түйреуішке жалғаңыз. Сенсордағы түйреуіш 3.3V мен GND аралығында.
  • бір порттың барлық сегіз түйреуішін/битін (мен P7.0 -ден P7.7 -ге дейін ұсынамын) сенсорлық массивтің «1» мен «8» аралығындағы сегіз түйреуішке жалғаңыз. Бұл сезімге байланысты жоғары немесе төмен болатын сызықтар.

Бұл қадамның суреттерінде және бейнеде көріп тұрғандай, мен сенсорды робот корпусына бекітпедім, себебі мен бағдарламалаудың, отладтаудың, тестілеудің, оқудың қарапайымдылығын қаладым.

Сонымен, бәрі қосылғандықтан, біз бағдарламалық жасақтамаға кіруге дайынбыз.

2 -қадам: Жолды қадағалау

Жолды қадағалау
Жолды қадағалау
Жолды қадағалау
Жолды қадағалау

Рефлексиялық массив сенсоры өте әдемі, себебі ол кем дегенде екі жолмен көмектеседі.

  • Анықтаңыз - робот орталықта немесе бір жаққа қарай жылжиды.
  • Робот сызық бағытында тураланған ба, әлде бұрышта ма?

Массивтің детекторларының әрқайсысы жоғары немесе төмен ақпараттың бір бөлігін береді.

Идея-бұл барлық биттерді бір санға немесе бір бит үлгісіне біріктіру және сол үлгіні шешім қабылдау үшін қолдану (дұрыс қозғалу үшін).

3 -қадам: Біз шынымен бастамас бұрын …

.. біз ARM құрастыру бағдарламалауы туралы жаңа нәрсе білуіміз керек. Мен басқа нұсқауды ғана айтқым келмейді. Олар кәмелетке толмағандарға бейім.

Осы уақытқа дейін біз бағдарламаларда «стек» қолданған жоқпыз.

Біз әр түрлі кіші бағдарламаларда бүкіләлемдік процессорлардың негізгі тізілімдерін қолдануға сендік.

Біз жасаған жалғыз нәрсе - LR (сілтеме регистрі) адресін бір функция үшін сақтау және қалпына келтіру болды, ол басқа функцияларды шақырды. (Мен мұнда «функция» мен «қосалқы бағдарламаны» бір -бірінің орнына қолданамын).

Біз істеп жатқан нәрсе жақсы емес. Егер біз басқа функцияларды кірістіргіміз келсе ше? Егер бізде ұя салудың бірнеше деңгейі болса ше?

Алдыңғы мысалдарда біз R6 регистрін LR немесе қайтару мекенжайы үшін сақтау орны ретінде пайдалануды таңдадық. Бірақ егер біз әрі қарай/тереңірек ұя салғымыз келсе, R6 мәнін өзгертуді жалғастыра алмаймыз. Біз тағы бір реестрді таңдауымыз керек еді. Және басқа. Содан кейін процессордың қай ядросы бар екенін бақылау LR қай функцияға қалпына келетінін қадағалау қиын болады.

Енді біз «стекке» қараймыз.

4 -қадам: Стек

Міне, стек түсіндіретін бірнеше оқу материалы.

Мен бірнеше идеялардың үлкен жақтаушысымын:

  • қанша теория қажет болса, практикаға тез өтіңіз
  • қажет болған жағдайда үйреніңіз, мақсатсыз жаттығулар мен мысалдарға емес, іс жүзінде бірдеңе жасауға назар аударыңыз.

Интернетте стек туралы айтатын көптеген ARM және MSP432 құжаттары бар, сондықтан мұның бәрін қайталамаймыз. Мен сонымен қатар стектің қолданылуын минимумға дейін сақтайтын боламын - қайтару мекенжайын (сілтеме тіркелімі) сақтаймын.

Негізінде бізге тек нұсқаулар қажет:

PUSH {регистрлер тізімі}

POP {регистрлер тізімі}

Немесе біздің жағдайда, атап айтқанда:

{LR} БАСУ

POP {LR}

Сонымен, құрастыру функциясы/қосалқы бағдарлама келесідей болады:

funcLabel:.asmfunc

PUSH {LR}; бұл кіру туралы алғашқы нұсқаулардың бірі болуы керек.; мұнда көбірек код жасаңыз..; бла.. бла… бла…; Жарайды, біз POP {LR} шақыру функциясына қайта оралуға дайын функцияны аяқтадық; бұл дұрыс қайтару мекенжайын қайта қоңырауға қайтарады; функция. BX LR; қайтару.endasmfunc

Бейне бірнеше кірістірілген функциялардың тікелей мысалы арқылы өтеді.

5 -қадам: Бағдарламалық қамтамасыз ету

«MSP432_Chapter …» деп белгіленген файлда MSP432 порттары туралы көптеген жақсы ақпарат бар және сол құжаттан біз келесі порттарды, регистрлерді, мекен -жайларды және т.б. аламыз, бірақ бұл сәл ескірген. Алайда, мен 5 -ші портқа дейінгі егжей -тегжейлі мекен -жайларды көрмедім. (тек «баламалы функциялар»). Бірақ бұл әлі де пайдалы.

Біз екі портты қолданамыз. P5, P7, P1 және P2.

P5.3 (бір разрядты) шығыс сенсордағы IR светодиодты қосуды басқару болады. Біз P5.3 қолданамыз, себебі бұл сенсорлық массивке өтетін басқа MSP432 қосылымдары сияқты бір тақырыптағы ашық түйреуіш.

P7.0 - P7.7 датчиктен деректерді жинайтын сегіз кіріс болады; ол «көреді».

P1.0 - бұл жалғыз қызыл жарық диоды, және біз оны деректердің кейбір көрсеткіштерін беру үшін қолдана аламыз.

P2.0, P2.1, P2.2 - бұл RGB светодиоды, және біз оны сенсорлық деректерді көрсету үшін түрлі түсті мүмкіндіктермен пайдалана аламыз.

Егер сіз бұған қатысты алдыңғы нұсқаулықтардан өткен болсаңыз, онда сіз бағдарламаны қалай орнату керектігін білесіз.

Порттар мен биттерге арналған декларация бөлімі бар және т.

Сізде «негізгі» бөлім болады.

Біз цикл болуы керек, онда біз P7 деректерін үздіксіз оқимыз, сол туралы шешім қабылдаймыз және сәйкесінше екі жарықдиодты жарықтандырамыз.

Міне, тағы да порт регистрінің мекен -жайлары:

  • GPIO P1: 0x4000 4C00 + 0 (жұп мекенжайлар)
  • GPIO P2: 0x4000 4C00 + 1 (тақ адрестер)
  • GPIO P3: 0x4000 4C00 + 20 (жұп мекенжайлар)
  • GPIO P4: 0x4000 4C00 + 21 (тақ адрестер)
  • GPIO P5: 0x4000 4C00 + 40 (жұп мекенжайлар)
  • GPIO P6: 0x4000 4C00 + 41 (тақ адрестер)
  • GPIO P7: 0x4000 4C00 + 60 (жұп мекенжайлар)
  • GPIO P8: 0x4000 4C00 + 61 (тақ адрестер)
  • GPIO P9: 0x4000 4C00 + 80 (жұп мекенжайлар)
  • GPIO P10: 0x4000 4C00 + 81 (тақ адрестер)

Қарапайым нәрсе - бұл нұсқаулық үшін біз қолданатын нәрсе.

IR детекторларын оқуға арналған бағдарлама қадамдары

Бағдарламаны C тілінде жазуға арналған төмендегі пседо-код, бірақ ол әлі де пайдалы және біз оны бағдарламаның құрастыру нұсқасында мұқият қадағалаймыз.

негізгі бағдарлама0) // порттарды инициализациялау кезінде (1) {1) P5.3 жоғары орнатыңыз (ИК жарықдиодты қосыңыз) 2) P7.0 шығысын жасаңыз және оны жоғары деңгейге қойыңыз (конденсаторды зарядтаңыз) 3) Бізді күтіңіз, Clock_Delay1us (10); 4) P7.0 -ді енгізу 5) Осы циклды 10 000 рет іске қосу a) P7.0 -ді оқу (P7.0 -дегі кернеуді екілікке түрлендіру) b) Екіліктерді P1.0 -ге шығару (екіліктерді нақты уақытта көруге мүмкіндік береді)) 6) P5.3 төмен орнатыңыз (ИК жарықдиодты өшіріңіз, қуатты үнемдеңіз) 7) 10 мс күтіңіз, Clock_Delay1ms (10); } // қайталау (while () дегенге қайта оралу)

6 -қадам: Кодексті жетілдірейік

Pololu IR жарық диодты массивінің мақсаты немесе қолданылуы - бұл сызықты анықтау және роботтың (болашақтың) тікелей желіде немесе бір жақта орналасқанын білу. Сонымен қатар, сызықтың белгілі бір қалыңдығы болғандықтан, егер сенсорлық массив сызыққа тікелей перпендикуляр болса, сенсорлардың N саны басқаларға қарағанда басқа көрсеткішке ие болады, ал егер ИК жарық диодты массиві қандай да бір бұрышта болса (перпендикуляр емес), онда N+1 немесе N+2 IR жарықдиодты/детекторлық жұптар енді басқаша оқуы керек.

Осылайша, қанша сенсор сызықтың болуын көрсететініне байланысты, біз орталықта екенімізді, бұрышты немесе бұрышты емес екенін білуіміз керек.

Бұл соңғы эксперимент үшін сенсорлық массив бізге не айтатыны туралы қосымша ақпарат беру үшін қызыл жарықдиодты және RGB жарықдиодты ала алатынымызды білейік.

Бейне барлық егжей -тегжейлерді қамтиды. Сонымен қатар соңғы код қосылады.

Бұл GPIO -ға қатысты ARM құрастыру сериясын аяқтайды. Кейінірек тағы да ARM Ассамблеясымен ораламыз деп үміттенеміз.

Рақмет сізге.

Ұсынылған: