Sisällysluettelo:

Osa 3: GPIO: ARM-kokoonpano: Linjan seuraaja: TI-RSLK: 6 vaihetta
Osa 3: GPIO: ARM-kokoonpano: Linjan seuraaja: TI-RSLK: 6 vaihetta

Video: Osa 3: GPIO: ARM-kokoonpano: Linjan seuraaja: TI-RSLK: 6 vaihetta

Video: Osa 3: GPIO: ARM-kokoonpano: Linjan seuraaja: TI-RSLK: 6 vaihetta
Video: SKR V1.4 — Дополнительные сервоприводы 2024, Marraskuu
Anonim
Image
Image
Laitteisto
Laitteisto

Hei. Tämä on seuraava erä, jossa käytämme edelleen ARM-kokoonpanoa (korkeamman tason kielen sijasta). Tämän Instructablein inspiraationa on Texas Instruments Robotics System Learning Kit -tutkimuslaboratorion laboratorio 6 tai TI-RSLK.

Käytämme sarjan mikro -ohjainta, MSP432 LaunchPad -kehityskorttia, mutta ehkä löydät jotain hyödyllistä poimia tästä Instructable -ohjelmasta, vaikka et käytä LaunchPadia tai noudatat T. I. opetussuunnitelma.

Aloitimme Instructable -ohjelmassa, joka esitteli ARM -kokoonpanon, kehitysympäristön ja projektin tekemisen.

Seuraava Instructable on ARM Assembly esitteli, miten vuorovaikutuksessa sisääntulon/lähdön (GPIO) kanssa.

Sitten laajensimme tietämystämme ja esittelimme toimintoja, LEDien ja kytkimien ohjaamista.

Nyt tämän Instructable -ohjelman avulla voimme käyttää oppimaamme tekemään jotain hauskempaa ja hyödyllisempää: havaita viiva.

Tämä voi auttaa meitä myöhemmin, kun rakennamme linjanseurantarobotin.

Opetussuunnitelmassa suurin osa ohjelmoinnista tehdään C- tai C ++-kielellä, mutta on hyödyllistä tutustua kokoonpanoon ennen kuin aloitamme riippuen korkeamman tason kielistä ja kirjastoista.

Vaihe 1: Laitteisto

Laitteisto
Laitteisto
Laitteisto
Laitteisto
Laitteisto
Laitteisto

En halua uudistaa laitteistoa yksityiskohtaisesti, koska lähteitä on jo olemassa, mutta lisäämme selityksiä tarvittaessa.

Tässä opetusohjelmassa käytämme Pololun heijastusanturijärjestelmää, koska se tulee osana TI-RSLK: ta (robottipaketti). Sitä käytetään kurssilla ja opetussuunnitelman laboratoriossa 6.

Jos sinulla ei ole sitä, voit käyttää läsnäoloa ja poissaoloa millä tahansa IR -ilmaisimella (tai niiden sarjalla), joka lähettää digitaalisen signaalin, HIGH tai LOW.

Matriisianturi on paras, koska se voi auttaa havaitsemaan, olemmeko linjan keskellä vai toisella puolella. Lisäksi, kuten näemme myöhemmin, se voi auttaa meitä havaitsemaan robotin kulman linjaan nähden.

Heijastinryhmässä on ilmaisimet hyvin lähellä toisiaan. Tämä tarkoittaa sitä, että meidän pitäisi saada useita tunnistussignaaleja tietysti linjan paksuudesta riippuen.

Jos näin on, niin jos robotti ei ole suorassa linjassa linjan kanssa, sen pitäisi palauttaa tulos, jonka linja on leveämpi kuin sen pitäisi olla (koska olemme kulmassa).

Selvittääksesi paremmin yllä olevaa, katso Lab 6 -asiakirjaa.

Ohjeita anturin kytkemiseen / liittämiseen MSP432 LaunchPad -kehityskorttiin on tässä hyödyllisiä ohjeita.

Olen myös lisännyt samat (samanlaiset?) Pdf -ohjeet tähän vaiheeseen.

Jos luet huolellisesti Pololu -asiakirjat, ne selittävät syyn "3,3 V: n ohitukseen", että haluat hypätä, jos käytät 3,3 V: ta 5 V: n sijasta.

Koska emme ole vielä rakentamassa robottia, vaan opimme vain ARM -kokoonpanosta ja myös vuorovaikutuksesta robotin osien (osajärjestelmien) kanssa, meidän ei tarvitse noudattaa yllä olevia ohjeita.

Toistaiseksi linja -anturiryhmän liittäminen vain kiehuu/supistuu seuraavaan:

  • liitä 3.3V ja GND MSP432 -kortilta anturiryhmään.
  • liitä MSP432: n porttitappi (ehdotan P5.3) linja -anturiryhmän LED -käyttöönottotappiin. Anturin nasta on välillä 3.3V ja GND.
  • yhdistä kaikki yhden portin kahdeksan nastaa/bittiä (ehdotan P7.0 - P7.7) anturiryhmän kahdeksaan nastaan, jotka on merkitty "1" - "8". Nämä linjat menevät KORKEA tai MATALA riippuen siitä, mitä he tuntevat.

Kuten tämän vaiheen kuvista ja videosta näet, en kiinnittänyt anturia robotin runkoon, koska halusin ohjelmoinnin, virheenkorjauksen, testauksen ja oppimisen helppoutta.

Joten kun kaikki on yhdistetty, olemme valmiita pääsemään ohjelmistoon.

Vaihe 2: Rivin seuranta

Linjaa seuraa
Linjaa seuraa
Linjaa seuraa
Linjaa seuraa

Heijastusmatriisianturi on melko näppärä, koska se voi auttaa ainakin kahdella tavalla.

  • Määritä, onko robotti keskellä linjaa vai ajautumassa toiselle puolelle.
  • Onko robotti linjassa linjan suuntaan vai onko se kulmassa.

Jokainen ryhmän ilmaisin antaa olennaisesti yhden bitin tietoa, joko HIGH tai LOW.

Ajatuksena on yhdistää kaikki nämä bitit yhdeksi numeroksi tai yhdeksi bittikuvioksi ja käyttää tätä mallia päätösten tekemiseen (jotta ne voivat liikkua oikein).

Vaihe 3: Ennen kuin voimme todella aloittaa …

.. meidän on opittava jotain uutta ARM -kokoonpanon ohjelmoinnista. Enkä tarkoita vain toista ohjetta. Ne ovat yleensä pieniä.

Tähän mennessä emme ole käyttäneet "pinoa" ohjelmissamme.

Olemme luottaneet useimpien ydinprosessorekisterien käyttöön maailmanlaajuisesti eri aliohjelmissa.

Ainoa asia, jonka teimme, oli tallentaa ja palauttaa LR (linkkirekisteri) -osoite yhdelle toiminnolle - se, joka kutsui useita muita toimintoja. (Käytän tässä "funktiota" ja "aliohjelmaa" keskenään).

Se, mitä olemme tehneet, ei ole hyvä. Mitä jos haluamme liittää muita toimintoja? Entä jos meillä on useita pesimätasoja?

Aiemmissa esimerkeissä päätimme käyttää rekisteriä R6 LR- tai palautusosoitteen tallennustilana. Mutta jos haluamme tehdä pesimistä pidemmälle/syvemmälle, emme voi jatkaa R6: n arvon muuttamista. Meidän olisi valittava toinen rekisteri. Ja toinen. Ja sitten tulee raskaaksi seurata, mikä ydin -CPU -rekisteri pitää minkä LR: n palauttaa mihin toimintoon.

Joten nyt katsomme "pinoa".

Vaihe 4: Pino

Tässä on lukemista, joka selittää pinon.

Olen isompi parin idean kannattaja:

  • vain niin paljon teoriaa kuin tarvitaan, siirry käytännön nopeasti
  • oppia tarpeen mukaan, keskittyä todelliseen tekemiseen eikä vain tarkoituksettomiin harjoituksiin tai esimerkkeihin.

Verkossa on paljon ARM- ja MSP432 -dokumentaatiota, jotka kertovat pinosta, joten älä aio hajottaa kaikkea uudelleen. Aion myös pitää pinon käytön täällä minimissä - palautusosoitteen (linkkirekisterin) tallentaminen.

Pohjimmiltaan tarvitsemme vain ohjeet:

PUSH {rekisteröintilista}

POP {rekisteröintilista}

Tai meidän tapauksessamme erityisesti:

PUSH {LR}

POP {LR}

Joten kokoonpanotoiminto/aliohjelma näyttäisi tältä:

funcLabel:.asmfunc

PUSH {LR}; tämän pitäisi olla luultavasti yksi ensimmäisistä ohjeista.; tee lisää koodia täällä..; blaa blaa blaa…; ok, olemme saaneet toiminnon valmiiksi palaamaan takaisin soittotoimintoon POP {LR}; tämä palauttaa oikean palautusosoitteen takaisin puheluun; toiminto. BX LR; return.endasmfunc

Video käy läpi live -esimerkin useista sisäkkäisistä toiminnoista.

Vaihe 5: Ohjelmisto

Liitetiedostossa "MSP432_Chapter…" on paljon hyvää tietoa MSP432 -porteista, ja tästä asiakirjasta saamme seuraavat portit, rekisterit, osoitteet jne. Se on kuitenkin hieman vanhentunut. En kuitenkaan nähnyt yksityiskohtaisia osoitteita, jotka on lueteltu portille 5 ja ylöspäin. (vain "vaihtoehtoiset toiminnot"). Mutta siitä on silti hyötyä.

Käytämme kahta porttia. P5, P7, P1 ja P2.

P5.3 (yhden bitin) ulostulo ohjaa anturin IR-LED-käyttöönottoa. Käytämme P5.3: ta, koska se on paljastettu nasta samassa otsikossa kuin muut anturiryhmään menevät MSP432 -liitännät.

P7.0 - P7.7 ovat kahdeksan tuloa, jotka keräävät tietoja anturista; mitä se "näkee".

P1.0 on yksittäinen punainen LED, ja voimme käyttää sitä antamaan meille joitain tietoja tiedoista.

P2.0, P2.1, P2.2 on RGB -LED, ja voimme myös käyttää sitä eri värimahdollisuuksillaan ilmaistaksemme anturitiedot.

Jos olet käynyt läpi aiemmat tähän liittyvät ohjeet, tiedät jo, miten ohjelma asennetaan.

On vain ilmoitusosa porteille ja biteille jne.

Sinulla on "pääosa".

Pitäisi olla silmukka, jossa luemme jatkuvasti tietoja P7: stä, teemme päätöksen tiedoista ja sytytämme kaksi LEDiä vastaavasti.

Tässä ovat jälleen satamarekisterin osoitteet:

  • GPIO P1: 0x4000 4C00 + 0 (parilliset osoitteet)
  • GPIO P2: 0x4000 4C00 + 1 (parittomat osoitteet)
  • GPIO P3: 0x4000 4C00 + 20 (parilliset osoitteet)
  • GPIO P4: 0x4000 4C00 + 21 (parittomat osoitteet)
  • GPIO P5: 0x4000 4C00 + 40 (parilliset osoitteet)
  • GPIO P6: 0x4000 4C00 + 41 (parittomat osoitteet)
  • GPIO P7: 0x4000 4C00 + 60 (parilliset osoitteet)
  • GPIO P8: 0x4000 4C00 + 61 (parittomat osoitteet)
  • GPIO P9: 0x4000 4C00 + 80 (parilliset osoitteet)
  • GPIO P10: 0x4000 4C00 + 81 (parittomat osoitteet)

Lihavoitu on se, mitä käytämme tässä Instructable -ohjelmassa.

Ohjelman vaiheet IR -ilmaisimien lukemiseksi

Seuraava on psuedo-koodi ohjelman kirjoittamiseen C-kielellä, mutta se on edelleen hyödyllinen, ja seuraamme sitä melko tarkasti ohjelman kokoonpanoversiossa.

pääohjelma0) Alusta // portit (1) {1) Aseta P5.3 korkeaksi (kytke IR -valo päälle) 2) Tee P7.0: sta lähtö ja aseta se korkeaksi (lataa kondensaattoria) 3) Odota 10 us, Clock_Delay1us (10); 4) Tee P7.0: sta tulo 5) Suorita tämä silmukka 10 000 kertaa a) Lue P7.0 (muuntaa P7.0: n jännitteen binääriseksi) b) Lähtö binaariksi P1.0: ksi (voit nähdä binäärin reaaliajassa) 6) Aseta P5.3 matalaksi (sammuta IR -LED, säästää virtaa) 7) Odota 10 ms, Clock_Delay1ms (10); } // toista (takaisin hetkeen ())

Vaihe 6: Parannetaan koodia

Pololu IR LED -ryhmän tarkoitus tai käyttö on havaita linja ja tietää, onko robotti (tulevaisuus) suoraan linjan keskellä vai toisella puolella. Lisäksi koska viivalla on tietty paksuus, jos anturiryhmä on suoraan kohtisuorassa viivaan nähden, anturien lukumäärä N on eri lukema kuin muut, kun taas jos IR -LED -ryhmä on jossain kulmassa (ei kohtisuorassa), N+1- tai N+2 -IR -LED/ilmaisinparien pitäisi nyt antaa eri lukema.

Siksi sen mukaan, kuinka monta anturia ilmaisee viivan läsnäolon, meidän pitäisi tietää, olemmeko keskellä ja onko kulma vai ei.

Tässä viimeisessä kokeessa katsotaan vain, saammeko punaisen LEDin ja RGB -LEDin antamaan meille lisätietoja siitä, mitä anturiryhmä kertoo meille.

Video menee kaikkiin yksityiskohtiin. Lopullinen koodi on myös liitteenä.

Tämä täydentää GPIO: hon liittyvän ARM Assembly -sarjan. Toivomme palata lisää ARM -kokoonpanoa myöhemmin.

Kiitos.

Suositeltava: