Sisällysluettelo:
- Vaihe 1: Laitteisto
- Vaihe 2: Rivin seuranta
- Vaihe 3: Ennen kuin voimme todella aloittaa …
- Vaihe 4: Pino
- Vaihe 5: Ohjelmisto
- Vaihe 6: Parannetaan koodia
Video: Osa 3: GPIO: ARM-kokoonpano: Linjan seuraaja: TI-RSLK: 6 vaihetta
2024 Kirjoittaja: John Day | [email protected]. Viimeksi muokattu: 2024-01-30 09:01
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
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
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:
Linjan seuraaja Tinkercadissa: 3 vaihetta
Linjan seuraaja Tinkercadissa: A-linjan seuraajarobotti, kuten nimestä voi päätellä, on automatisoitu ohjattava ajoneuvo, joka seuraa visuaalista linjaa, joka on upotettu lattiaan tai kattoon. Yleensä visuaalinen viiva on polku, jolla linjanseurantarobotti kulkee, ja se on musta viiva
PID -linjan seuraaja Atmega328P: 4 vaihetta
PID-linjan seuraaja Atmega328P: JOHDANTO Tämä ohje on tehokkaan ja luotettavan linjaseurannan tekeminen PID (suhteellinen-integraali-johdannainen) -ohjauksella (matemaattinen) aivoissa (Atmega328P). Linjan seuraaja on itsenäinen robotti, joka seuraa joko b
Yksinkertainen linjan seuraaja Arduinon avulla: 5 vaihetta
Yksinkertainen linjanseuraaja Arduinon avulla: Arduino -linjan seuraajarobotti Tässä opetusohjelmassa keskustelemme Arduino -linjan seuraavan robotin toiminnasta, joka seuraa mustaa viivaa valkoisella taustalla ja ottaa oikean käännöksen aina, kun se saavuttaa tiensä käyrät. Arduino Linen seuraajayhteisö
GoPiGo3 -linjan seuraaja: 8 vaihetta
GoPiGo3 -linjan seuraaja: Tässä opetusohjelmassa otamme linjan seuraajan ja käytämme sitä GoPiGo3: ssa, jotta se seuraa mustaa viivaa
GiggleBot -linjan seuraaja Pythonin avulla: 5 vaihetta
GiggleBot-linjan seuraaja Pythonin avulla: Tällä kertaa ohjelmoimme MicroPythonissa Dexter Industries GiggleBotin seuraamaan mustaa viivaa sisäänrakennetun linjaseurantatunnistimensa avulla. hallita asianmukaisesti. jos