Satura rādītājs:

3. daļa: GPIO: ARM Montāža: Līnijas sekotājs: TI-RSLK: 6 soļi
3. daļa: GPIO: ARM Montāža: Līnijas sekotājs: TI-RSLK: 6 soļi

Video: 3. daļa: GPIO: ARM Montāža: Līnijas sekotājs: TI-RSLK: 6 soļi

Video: 3. daļa: GPIO: ARM Montāža: Līnijas sekotājs: TI-RSLK: 6 soļi
Video: Планируешь купить ноутбук? Смотри видео до конца! 2024, Jūlijs
Anonim
Image
Image
Aparatūra
Aparatūra

Sveiki. Šī ir nākamā daļa, kurā mēs turpinām izmantot ARM montāžu (nevis augstāka līmeņa valodu). Šīs pamācības iedvesma ir Texas Instruments Robotics System Learning Kit jeb TI-RSLK 6. laboratorija.

Mēs izmantosim mikrokontrolleri no komplekta, MSP432 LaunchPad izstrādes paneļa, bet, iespējams, jūs atradīsit kaut ko noderīgu, lai iegūtu šo instrukciju, pat ja neizmantojat LaunchPad vai sekojat T. I. mācību programma.

Mēs sākām ar pamācību, kas iepazīstināja ar ARM asambleju, izstrādes vidi un to, kā izveidot projektu.

Nākamā Instructable on ARM Assembly iepazīstināja ar to, kā mijiedarboties ar ievadi/izvadi (GPIO).

Tad mēs paplašinājām savas zināšanas un ieviesām funkcijas, kontrolējot gaismas diodes un slēdžus.

Tagad, izmantojot šo pamācību, mēs varam izmantot to, ko esam iemācījušies, lai darītu kaut ko jautrāku un noderīgāku: noteiktu līniju.

Tas mums var palīdzēt vēlāk, kad mēs veidojam līnijas sekotāju robotu.

Mācību programmā lielākā daļa programmēšanas tiek veikta C vai C ++ valodā, taču ir lietderīgi iepazīties ar montāžu, pirms sākam atkarībā no augstākā līmeņa valodām un bibliotēkām.

1. darbība: aparatūra

Aparatūra
Aparatūra
Aparatūra
Aparatūra
Aparatūra
Aparatūra

Es nevēlos detalizēti pārskatīt aparatūru, jo avoti jau ir, taču, ja nepieciešams, mēs pievienosim paskaidrojumus.

Šajā instrukcijā mēs izmantosim atstarošanas sensora masīvu no Pololu, jo tas ir daļa no TI-RSLK (robotu komplekts). Tas ir tas, kas tiek izmantots kursā un mācību programmas 6. laboratorijā.

Ja jums tā nav, klātbūtnei un neesamībai varat izmantot jebkuru IR detektoru (vai to sēriju), kas izvada HIGH vai LOW ciparu signālu.

Masīva sensors ir labākais, jo tas var palīdzēt noteikt, vai mēs atrodamies līnijas centrā vai vienā pusē. Turklāt, kā redzēsim vēlāk, tas var palīdzēt mums noteikt robota leņķi attiecībā pret līniju.

Atstarošanas masīvam detektori ir ļoti tuvu viens otram. Tas nozīmē, ka mums vajadzētu iegūt vairākus noteikšanas signālus, protams, atkarībā no līnijas biezuma.

Ja tā, tad, ja robots nav tieši vienā līnijā ar līniju, tam vajadzētu atgriezt rezultātu, ka līnija ir platāka, nekā tai vajadzētu būt (jo mēs esam leņķī).

Lai labāk izskaidrotu iepriekš minēto, apskatiet Lab 6 dokumentu.

Šeit ir sniegti daži noderīgi norādījumi, lai iegūtu vadu / savienotu sensoru ar MSP432 LaunchPad izstrādes paneli.

Šim solim esmu pievienojis arī tādas pašas (līdzīgas?) Pdf instrukcijas.

Ja uzmanīgi lasāt Pololu dokumentus, tie izskaidro “3.3V apvedceļa” iemeslu, ka jūs vēlaties pārslēgties, ja izmantojat 3.3V, nevis 5V.

Tā kā mēs vēl neveidojam robotu, bet tā vietā mēs tikai mācāmies par ARM montāžu un arī par to, kā mijiedarboties ar robota daļām (apakšsistēmām), mums nav jāievēro iepriekš minētie norādījumi.

Pagaidām līnijas sensoru masīva pievienošana tikai uzvārās/samazinās līdz šādam:

  • savienojiet 3.3V un GND no MSP432 plates ar sensoru masīvu.
  • savienojiet porta tapu (es iesaku P5.3) no MSP432 ar LED iespējošanas tapu līnijas sensoru masīvā. Šī sensora tapa ir starp 3.3V un GND.
  • savienojiet visas viena porta astoņas tapas/bitus (es iesaku P7.0 līdz P7.7) ar sensoru masīva astoņām tapām ar apzīmējumu "1" līdz "8". Šīs ir līnijas, kas būs AUGSTAS vai ZEMAS atkarībā no tā, ko tās uztver.

Kā redzams šī soļa attēlos un video, es nepiestiprināju sensoru pie robota šasijas, jo vēlējos programmēšanas, atkļūdošanas, testēšanas, mācīšanās vieglumu.

Tātad, kad viss ir savienots, mēs esam gatavi iekļūt programmatūrā.

2. darbība: sekojiet rindai

Rinda seko
Rinda seko
Rinda seko
Rinda seko

Atstarošanas masīva sensors ir diezgan jauks, jo tas var palīdzēt vismaz divos veidos.

  • Nosakiet, vai robots ir centrēts līnijā vai novirzās uz vienu pusi.
  • Vai robots ir izlīdzināts līnijas virzienā, vai tas ir leņķī.

Katrs no masīva detektoriem būtībā nodrošina vienu informācijas bitu - HIGH vai LOW.

Ideja ir apvienot visus šos bitus vienā skaitlī vai vienā bitu modelī un izmantot šo modeli lēmumu pieņemšanai (lai pareizi pārvietotos).

3. solis: pirms mēs patiešām varam sākt…

.. mums jāiemācās kaut kas jauns par ARM montāžas programmēšanu. Un es nedomāju tikai citu norādījumu. Tie mēdz būt nelieli.

Līdz šim mēs savās programmās neesam izmantojuši “kaudzīti”.

Mēs esam paļāvušies uz lielākās daļas CPU reģistru izmantošanu dažādās apakšprogrammās visā pasaulē.

Viena lieta, ko mēs darījām, bija saglabāt (atjaunot) saites reģistra adresi vienai funkcijai - tai, kas izsauca vairākas citas funkcijas. (Šeit es lietoju "funkciju" un "apakšprogrammu" savstarpēji aizstājami).

Tas, ko mēs darījām, nav labi. Ko darīt, ja vēlamies ligzdot citas funkcijas? Ko darīt, ja mums ir vairāk nekā viens ligzdošanas līmenis?

Iepriekšējos piemēros mēs izvēlējāmies izmantot reģistru R6 kā LR vai atgriešanās adreses krātuvi. Bet, ja mēs vēlamies ligzdot tālāk/dziļāk, mēs nevaram turpināt mainīt R6 vērtību. Mums vajadzētu izvēlēties vēl vienu reģistru. Un vēl viens. Un tad kļūst apgrūtinoši izsekot, kurā centrālajā CPU reģistrā ir kurš LR, kuru funkciju atjaunot.

Tāpēc tagad mēs ieskatāmies "kaudzē".

4. solis: kaudze

Šeit ir lasāmviela, kas izskaidro kaudzīti.

Esmu lielāks ideju atbalstītājs:

  • tikai tik daudz teorijas, cik nepieciešams, ātri dodieties uz praktisko
  • mācieties pēc vajadzības, koncentrējieties uz kaut ko reālu darīšanu, nevis tikai bezmērķīgiem vingrinājumiem vai piemēriem.

Tiešsaistē ir daudz ARM un MSP432 dokumentācijas, kurās tiek runāts par kaudzīti, tāpēc visu to nepārspriedīsim. Es arī samazināšu steka izmantošanu šeit līdz minimumam - saglabājot atgriešanās adresi (saišu reģistru).

Būtībā mums ir nepieciešami tikai norādījumi:

PUSH {reģistra saraksts}

POP {reģistru saraksts}

Vai arī mūsu gadījumā konkrēti:

PUSH {LR}

POP {LR}

Tātad montāžas funkcija/apakšprogramma izskatītos šādi:

funcLabel:.asmfunc

PUSH {LR}; iespējams, tam vajadzētu būt vienam no pirmajiem ievadīšanas norādījumiem.; izdariet vairāk kodu šeit; blah blah blah…; Labi, mēs esam pabeiguši funkciju un esam gatavi atgriezties pie zvanīšanas funkcijas POP {LR}; tas atjauno pareizo atgriešanās adresi zvanīšanai; funkciju. BX LR; atgriezt.endasmfunc

Video iet caur vairāku ligzdotu funkciju tiešu piemēru.

5. solis: programmatūra

Pievienotajā failā ar nosaukumu "MSP432_Chapter…" ir daudz labas informācijas par MSP432 portiem, un no šī dokumenta mēs iegūstam šādus portus, reģistrus, adreses utt. Tomēr tas ir nedaudz novecojis. Tomēr es neredzēju detalizētās adreses, kas norādītas 5. un jaunākām ostām. (tikai "alternatīvas funkcijas"). Bet tas joprojām ir noderīgi.

Mēs izmantosim divas ostas. P5, P7, P1 un P2.

P5.3 (viena bita) izeja būs kontrolēt sensora IR LED iespējošanu. Mēs izmantojam P5.3, jo tā ir atklāta tapa tajā pašā galvenē kā citi MSP432 savienojumi, kas iet uz sensoru masīvu.

P7.0 līdz P7.7 būs astoņas ieejas, kas apkopo datus no sensora; ko tas "redz".

P1.0 ir viena sarkana gaismas diode, un mēs to varētu izmantot, lai sniegtu mums dažas norādes par datiem.

P2.0, P2.1, P2.2 ir RGB gaismas diode, un mēs to varam izmantot arī ar dažādām krāsu iespējām, lai sniegtu mums norādes par sensora datiem.

Ja esat izgājis iepriekšējās instrukcijas, kas saistītas ar šo visu, tad jūs jau zināt, kā iestatīt programmu.

Vienkārši izveidojiet deklarācijas sadaļu ostām un bitiem utt.

Jums būs sadaļa "galvenā".

Jābūt cilpai, kurā mēs nepārtraukti lasām datus no P7, pieņemam lēmumu par šiem datiem un attiecīgi iedegas abas gaismas diodes.

Šeit atkal ir ostu reģistra adreses:

  • GPIO P1: 0x4000 4C00 + 0 (pat adreses)
  • GPIO P2: 0x4000 4C00 + 1 (nepāra adreses)
  • GPIO P3: 0x4000 4C00 + 20 (pat adreses)
  • GPIO P4: 0x4000 4C00 + 21 (nepāra adreses)
  • GPIO P5: 0x4000 4C00 + 40 (pat adreses)
  • GPIO P6: 0x4000 4C00 + 41 (nepāra adreses)
  • GPIO P7: 0x4000 4C00 + 60 (pat adreses)
  • GPIO P8: 0x4000 4C00 + 61 (nepāra adreses)
  • GPIO P9: 0x4000 4C00 + 80 (pat adreses)
  • GPIO P10: 0x4000 4C00 + 81 (nepāra adreses)

Treknrakstā mēs izmantosim šo pamācību.

Programmas soļi, lai lasītu IR detektorus

Tālāk ir norādīts psuedo kods programmas rakstīšanai C valodā, taču tas joprojām ir noderīgs, un mēs to diezgan rūpīgi sekosim programmas montāžas versijai.

Galvenā programma (10); 4) Padariet P7.0 par ieeju) 6) Iestatiet P5.3 zemu (izslēdziet IR LED, taupot enerģiju) 7) Pagaidiet 10 ms, Clock_Delay1ms (10); } // atkārtot (atpakaļ uz laiku ())

6. darbība: uzlabosim kodu

Pololu IR LED masīva mērķis vai izmantošana ir noteikt līniju un zināt, vai robots (nākotne) ir tieši centrēts uz līnijas vai no vienas puses. Turklāt, tā kā līnijai ir noteikts biezums, ja sensoru masīvs ir tieši perpendikulārs līnijai, N sensoru skaitam būs atšķirīgs rādījums nekā pārējiem, turpretī, ja IR LED masīvs atrodas kādā leņķī (nevis perpendikulāri), tad N+1 vai N+2 IR gaismas diožu/detektoru pāriem tagad ir jānodrošina atšķirīgs rādījums.

Tādējādi, atkarībā no tā, cik sensoru norāda līnijas klātbūtni, mums jāzina, vai esam centrēti un vai esam leņķiski vai nē.

Šim pēdējam eksperimentam redzēsim, vai mēs varam iegūt sarkano gaismas diodi un RGB gaismas diodi, lai sniegtu mums vairāk informācijas par to, ko mums stāsta sensoru masīvs.

Video iekļaujas visās detaļās. Pievienots arī galīgais kods.

Tas pabeidz ar GPIO saistīto ARM asamblejas sēriju. Mēs ceram atgriezties ar vairākām ARM asamblejām vēlāk.

Paldies.

Ieteicams: