Մաս 3 ՝ GPIO ՝ ARM հավաք. Գծի հետևորդ ՝ TI-RSLK ՝ 6 քայլ
Մաս 3 ՝ GPIO ՝ ARM հավաք. Գծի հետևորդ ՝ TI-RSLK ՝ 6 քայլ
Anonim
Image
Image
Սարքավորումը
Սարքավորումը

Բարեւ Ձեզ. Սա հաջորդ մասն է, որտեղ մենք շարունակում ենք օգտագործել ARM հավաքածուն (ավելի բարձր մակարդակի լեզվի փոխարեն): Այս Instructable- ի ոգեշնչումը Texas Instruments Robotics System Learning Kit- ի Lab 6-ն է կամ TI-RSLK- ը:

Մենք կօգտագործենք հավաքածուի միկրոկառավարիչը ՝ MSP432 LaunchPad զարգացման տախտակը, բայց գուցե օգտակար բան գտնեք այս Instructable- ից հանելու համար, նույնիսկ եթե չեք օգտագործում LaunchPad- ը կամ հետևում եք T. I. ուսումնական պլան.

Մենք սկսեցինք հրահանգով ներկայացնելով ARM ժողովը, զարգացման միջավայրը և ինչպես կազմել նախագիծ:

ARM Assembly- ի հաջորդ Instructable- ը ներկայացրեց, թե ինչպես փոխազդել մուտքի/ելքի (GPIO) հետ:

Հետո մենք ընդլայնեցինք մեր գիտելիքները և ներդրեցինք գործառույթներ ՝ վերահսկելով LED- ները և անջատիչները:

Այժմ այս Instructable- ի միջոցով մենք կարող ենք սովորածը օգտագործել ավելի զվարճալի և ավելի օգտակար բան անելու համար. Հայտնաբերել տող:

Սա կարող է օգնել մեզ հետագայում, երբ կառուցում ենք գծերի հետևորդ ռոբոտ:

Ուսումնական ծրագրում ծրագրավորման մեծ մասը կատարվում է C կամ C ++ լեզվով, բայց օգտակար է ծանոթանալ հավաքմանը, նախքան ավելի բարձր մակարդակի լեզուներից և գրադարաններից կախված լինելը սկսելը:

Քայլ 1: Սարքավորումը

Սարքավորումը
Սարքավորումը
Սարքավորումը
Սարքավորումը
Սարքավորումը
Սարքավորումը

Ես չեմ ուզում մանրամասն վերամշակել սարքավորումները, քանի որ արդեն կան աղբյուրներ, բայց անհրաժեշտության դեպքում մենք կավելացնենք բացատրություններ:

Այս Instructable- ի համար մենք կօգտագործենք Pololu- ի Reflectance Sensor Arrray- ը, քանի որ այն գալիս է որպես TI-RSLK (ռոբոտների հավաքածուի) մաս: Դա այն է, որն օգտագործվում է դասընթացում և ուսումնական ծրագրի 6 -րդ լաբորատորիայում:

Եթե դա չունեք, կարող եք օգտագործել ցանկացած IR դետեկտոր (կամ դրանց շարք), որը թվային ազդանշան է տալիս ՝ HIGH կամ LOW, առկայության և բացակայության համար:

Arանգվածի սենսորը ամենալավն է, քանի որ այն կարող է օգնել հայտնաբերել, թե արդյոք մենք գտնվում ենք գծի կենտրոնում, թե մի կողմ: Բացի այդ, ինչպես կտեսնենք ավելի ուշ, այն կարող է օգնել մեզ հայտնաբերել ռոբոտի անկյունը գծի նկատմամբ:

Անդրադարձման զանգվածն ունի դետեկտորներ, որոնք շատ մոտ են միմյանց: Դա նշանակում է, որ մենք պետք է ստանանք բազմաթիվ հայտնաբերման ազդանշաններ ՝ կախված, իհարկե, գծի հաստությունից:

Եթե այո, ապա եթե ռոբոտը ուղիղ ներդաշնակ չէ գծի հետ, ապա այն պետք է վերադարձնի ելք, որն այն ավելի լայն է, քան պետք է լինի (քանի որ մենք անկյան տակ ենք):

Վերոնշյալի ավելի լավ բացատրության համար նայեք Lab 6 փաստաթղթին:

Էլեկտրագծերի / սենսորը MSP432 LaunchPad զարգացման տախտակին միացնելու հարցում օգնության համար ահա որոշ օգտակար հրահանգներ:

Այս քայլին ես ավելացրել եմ նույն (նման?) Pdf հրահանգները:

Եթե դուք ուշադիր կարդաք Pololu- ի փաստաթղթերը, դրանք բացատրում են «3.3V շրջանցման» պատճառը, որ դուք կցանկանաք ցատկել, եթե 5V- ի փոխարեն օգտագործում եք 3.3V:

Քանի որ մենք դեռ չենք կառուցում ռոբոտը, այլ փոխարենը մենք պարզապես սովորում ենք ARM- ի հավաքման և նաև, թե ինչպես փոխազդել ռոբոտի կտորների (ենթահամակարգերի) հետ, մենք ստիպված չենք հետևել վերը նշված հրահանգներին:

Առայժմ գծի տվիչների զանգվածը միացնելը պարզապես եռում/նվազում է մինչև հետևյալը.

  • միացրեք 3.3V և GND MSP432 տախտակից սենսորային զանգվածին:
  • միացրեք միացքի պին (ես առաջարկում եմ P5.3) MSP432- ից LED- ի միացման փին գծի սենսորային զանգվածի վրա: Սենսորի վրա այդ քորոցը գտնվում է 3.3V- ի և GND- ի միջև:
  • միացրեք մեկ պորտի բոլոր ութ կապում/բիթերը (ես առաջարկում եմ P7.0- ից P7.7) «1» - ից «8» պիտակավորված սենսորային զանգվածի ութ կապում: Սրանք այն տողերն են, որոնք կբարձրանան ԲԱՐՁՐ կամ OWԱOWՐ `կախված զգացածի զգացումից:

Ինչպես տեսնում եք այս քայլի պատկերներում և տեսանյութում, ես սենսորը չեմ կցել ռոբոտի շասսիին, քանի որ ցանկանում էի ծրագրավորման, կարգաբերման, փորձարկման, սովորելու հեշտություն:

Այսպիսով, կապված ամեն ինչի հետ, մենք պատրաստ ենք մուտք գործել ծրագրակազմ:

Քայլ 2: Հետևեք տողին

Հետևում է տողին
Հետևում է տողին
Հետևում է տողին
Հետևում է տողին

Ռեֆլեկտիվության զանգվածի սենսորը բավականին սրամիտ է, քանի որ այն կարող է օգնել առնվազն երկու եղանակով:

  • Որոշեք ՝ ռոբոտը կենտրոնացած է գծի վրա կամ սահում է մի կողմ:
  • Արդյո՞ք ռոբոտը հավասարեցված է գծի ուղղությամբ, թե՞ այն անկյան տակ է:

Theանգվածի դետեկտորներից յուրաքանչյուրը, ըստ էության, տրամադրում է մեկ բիթ տեղեկատվություն ՝ կամ Բարձր կամ OWԱOWՐ:

Գաղափարն այն է, որ այդ բոլոր բիթերը միավորեն մեկ թվի կամ մեկ բիթ-օրինակի մեջ և օգտագործեն այդ օրինակը որոշումներ կայացնելու համար (ճիշտ շարժվելու համար):

Քայլ 3: Նախքան մենք իսկապես կարող ենք սկսել…

.. մենք պետք է նոր բան սովորենք ARM հավաքների ծրագրավորման վերաբերյալ: Եվ ես նկատի չունեմ այլ հրահանգ: Նրանք հակված են չնչին լինելու:

Մինչ այժմ մենք մեր ծրագրերում չենք օգտագործել «բուրգը»:

Մենք ապավինել ենք գլոբալ պրոցեսորների գրանցամատյանների մեծ մասի օգտագործմանը տարբեր ենթածրագրերի միջոցով:

Միակ բանը, որ մենք արեցինք, այն էր, որ պահպանենք և վերականգնենք LR (հղումների գրանցամատյան) հասցեն մեկ գործառույթի համար `այն, որը կանչեց մի քանի այլ գործառույթներ: (Այստեղ ես փոխադարձաբար օգտագործում եմ «գործառույթ» և «ենթածրագիր»):

Այն, ինչ մենք անում էինք, լավ չէ: Ի՞նչ անել, եթե ուզում ենք այլ գործառույթների բույն դնել: Իսկ եթե մենք ունենանք բնադրման մեկից ավելի մակարդակ:

Նախորդ օրինակներում մենք ընտրեցինք օգտագործել R6 գրանցամատյանը որպես պահեստ LR- ի կամ վերադարձի հասցեի համար: Բայց եթե մենք ցանկանում ենք ավելի/ավելի խորը բույն դնել, մենք չենք կարող շարունակել փոխել R6- ի արժեքը: Մենք ստիպված կլինենք ընտրել մեկ այլ գրանցամատյան: Եվ մեկ այլ: Եվ այնուհետև ծանրաբեռնված է դառնում հետևել, թե որ հիմնական պրոցեսորի գրանցամատյանը որ LR- ն է պահում, որը որ գործառույթը վերականգնել:

Այսպիսով, այժմ մենք մի հայացք ենք նետում «դեղին»:

Քայլ 4: The Stack

Ահա մի քանի ընթերցման նյութ, որը բացատրում է կույտը:

Ես մի երկու գաղափարների ավելի մեծ կողմնակից եմ.

  • միայն այնքան տեսություն, որքան պահանջվում է, արագ անցեք գործնականին
  • սովորել ըստ անհրաժեշտության, կենտրոնանալ իրականում ինչ -որ բան անելու և ոչ միայն անիմաստ վարժությունների կամ օրինակների վրա:

Առցանց առկա են բազմաթիվ ARM և MSP432 փաստաթղթեր, որոնք խոսում են դեղաքանակի մասին, այնպես որ այդ ամենը չվերանայելու համար: Ես նաև մտադիր եմ այստեղ պահեստավորման օգտագործումը հասցնել նվազագույնի `պահպանելով վերադարձի հասցեն (հղումների գրանցում):

Ըստ էության, մեզ անհրաժեշտ են միայն հրահանգներ.

PUSH {գրանցման ցուցակ}

POP {գրանցման ցուցակ}

Կամ, մեր դեպքում, մասնավորապես.

ՀՐԱՄԱՆ {LR}

POP {LR}

Այսպիսով, հավաքման գործառույթը/ենթածրագիրը նման կլինի հետևյալին.

funcLabel:.asmfunc

PUSH {LR}; սա, հավանաբար, պետք է լինի մուտքի առաջին հրահանգներից մեկը:; այստեղ ավելի շատ կոդ արա..; բլա.. բլա… բլա…; լավ, մենք ավարտեցինք գործառույթը, պատրաստ ենք վերադառնալ POP {LR} գործառույթին վերադառնալու համար. սա վերադարձնում է ճիշտ վերադարձի հասցեն զանգին: գործառույթը: BX LR; վերադարձ.endasmfunc

Տեսահոլովակն անցնում է մի քանի բնադրված գործառույթների կենդանի օրինակով:

Քայլ 5: Theրագրակազմ

«MSP432_Chapter…» պիտակով կցված ֆայլը շատ լավ տեղեկություններ ունի MSP432 նավահանգիստների մասին, և այդ փաստաթղթից մենք ստանում ենք հետևյալ նավահանգիստները, գրանցամատյանները, հասցեները և այլն: Այնուամենայնիվ, դա մի փոքր թվագրված է: Այնուամենայնիվ, ես չտեսա մանրամասն հասցեները, որոնք թվարկված են 5 -րդ և ավելի բարձր նավահանգիստների համար: (միայն «այլընտրանքային գործառույթներ»): Բայց դա դեռ օգտակար է:

Մենք կօգտագործենք երկու նավահանգիստ: P5, P7, P1 և P2:

P5.3 (մեկ բիթ) ելքը պետք է լինի սենսորի վրա IR LED միացման վերահսկումը: Մենք օգտագործում ենք P5.3- ը, քանի որ այն բաց վերնագիր է նույն վերնագրի վրա, ինչպես մյուս MSP432 միացումները, որոնք անցնում են սենսորային զանգվածին:

P7.0- ից P7.7- ը կլինեն ութ մուտք, որոնք տվյալները հավաքում են սենսորից. այն, ինչ «տեսնում է»:

P1.0- ը միակ կարմիր LED- ն է, և մենք կարող ենք օգտագործել այն ՝ տվյալների որոշ ցուցումներ տալու համար:

P2.0, P2.1, P2.2- ը RGB LED- ն է, և մենք կարող ենք դա օգտագործել նաև իր տարբեր գունային հնարավորություններով ՝ սենսորների տվյալների վերաբերյալ մեզ նշումներ տալու համար:

Եթե անցել եք այս ամենի հետ կապված նախորդ Instructables- ով, ապա արդեն գիտեք, թե ինչպես կարգավորել ծրագիրը:

Ուղղակի ունեցեք հայտարարությունների բաժին նավահանգիստների և բիթերի համար և այլն:

Դուք կունենաք «հիմնական» բաժին:

Պետք է լինի մի հանգույց, որտեղ մենք անընդհատ կարդում ենք P7- ի տվյալները, որոշում ենք այդ տվյալները և համապատասխանաբար լուսավորում ենք երկու LED- ները:

Ահա կրկին նավահանգստի գրանցման հասցեները.

  • 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 (կենտ հասցեներ)

Այն, ինչ համարձակ է, այն է, ինչ մենք կօգտագործենք այս Instructable- ի համար:

IRրագրային քայլեր IR դետեկտորներ կարդալու համար

Ստորև բերված է psuedo-code ծրագիրը C- ով գրելու համար, բայց այն դեռ օգտակար է, և մենք դրան բավականին ուշադիր հետևելու ենք ծրագրի հավաքման տարբերակում:

հիմնական ծրագիր 0) Նախաստորագրել // նավահանգիստները մինչ (1) {1) P5.3 բարձր դնել (միացնել IR LED- ը) 2) P7.0- ը դարձնել ելք և բարձր դնել այն (լիցքավորելով կոնդենսատորը) 3) Սպասել մեզ 10, Clock_Delay1us (10); 4) P7.0- ը մուտքագրեք 5) Գործարկեք այս հանգույցը 10.000 անգամ ա) Կարդացեք P7.0 (P7.0- ի լարումը փոխակերպում է երկուականի) բ) Երկուական ելքը P1.0- ի (թույլ է տալիս տեսնել իրական երկուականությունը իրական ժամանակում) 6) P5.3 ցածր դնել (անջատել IR LED- ը, էներգիայի խնայողությունը) 7) Սպասել 10 ms, Clock_Delay1ms (10); } // կրկնել (վերադառնալ մինչ ())

Քայլ 6: Եկեք բարելավենք օրենսգիրքը

Pololu IR LED զանգվածի նպատակը կամ օգտագործումը գիծ հայտնաբերելն է և իմանալ, արդյոք ռոբոտը (ապագան) ուղղակիորեն կենտրոնացած է գծի վրա, թե՞ մի կողմ: Բացի այդ, քանի որ գիծն ունի որոշակի հաստություն, եթե սենսորային զանգվածը ուղիղ ուղղահայաց է գծին, սենսորների N թիվը կունենա այլ ընթերցում, քան մնացածը, մինչդեռ եթե IR LED զանգվածը որոշ անկյան տակ է (ոչ ուղղահայաց), ապա N+1 կամ N+2 IR LED/դետեկտոր զույգերը այժմ պետք է այլ ընթերցում տան:

Այսպիսով, կախված նրանից, թե քանի սենսորներ են նշում գծի առկայությունը, մենք պետք է իմանանք ՝ կենտրոնացած ենք, և թեքված ենք, թե ոչ:

Այս վերջին փորձի համար եկեք միայն տեսնենք, թե արդյոք մենք կարող ենք ստանալ կարմիր LED- ը և RGB LED- ը, որոնք մեզ ավելի շատ տեղեկություններ կտան այն մասին, թե ինչ է մեզ ասում սենսորային զանգվածը:

Տեսանյութը ներառում է բոլոր մանրամասները: Կցված է նաև վերջնական ծածկագիրը:

Սա ավարտում է GPIO- ի հետ կապված ARM Assembly- ի շարքը: Հուսով ենք, որ ավելի ուշ կվերադառնանք ARM- ի համագումարով:

Շնորհակալություն.

Խորհուրդ ենք տալիս: