INHOUDSOPGAWE:
- Stap 1: Die hardeware
- Stap 2: Lyn volg
- Stap 3: Voordat ons regtig kan begin …
- Stap 4: Die stapel
- Stap 5: Die sagteware
- Stap 6: Kom ons verbeter die kode
Video: Deel 3: GPIO: ARM-samestelling: lynvolgers: TI-RSLK: 6 stappe
2024 Outeur: John Day | [email protected]. Laas verander: 2024-01-30 07:25
Hallo. Dit is die volgende aflewering waar ons voortgaan met die gebruik van ARM (in plaas van 'n hoër vlak). Die inspirasie vir hierdie Instructable is Lab 6 van die Texas Instruments Robotics System Learning Kit, oftewel TI-RSLK.
Ons gebruik die mikrobeheerder uit die stel, die MSP432 LaunchPad -ontwikkelbord, maar miskien vind u iets nuttig om uit hierdie instruksies te onttrek, selfs as u nie die LaunchPad gebruik nie, of die T. I. kurrikulum.
Ons het begin met 'n Instructable -bekendstelling van ARM Assembly, die ontwikkelingsomgewing en hoe om 'n projek te maak.
Die volgende Instructable on ARM Assembly het bekendgestel hoe u met input/output (GPIO) kan omgaan.
Daarna het ons ons kennis uitgebrei en funksies bekendgestel, wat LED's en skakelaars beheer.
Met hierdie Instructable kan ons dit wat ons geleer het, gebruik om iets leuks en nuttigs te doen: om 'n lyn op te spoor.
Dit kan ons later help as ons 'n lynvolgrobot bou.
In die kurrikulum word die meeste programme in C of C ++ gedoen, maar dit is handig om vertroud te raak met die samestelling voordat ons begin afhang van tale en biblioteke op hoër vlak.
Stap 1: Die hardeware
Ek wil nie die hardeware in detail herhaal nie, aangesien daar reeds bronne is, maar ons sal waar nodig verduidelikings byvoeg.
Vir hierdie instruksies gebruik ons die Reflectance Sensor Arrray van Pololu, aangesien dit deel uitmaak van die TI-RSLK (die robotstel). Dit is die een wat in die kursus gebruik word, en in Lab 6 van die kurrikulum.
As u dit nie het nie, kan u 'n IR -detektor (of 'n reeks daarvan) gebruik wat 'n digitale sein, HOOG of LAAG, afgee vir afwesigheid en afwesigheid.
Die array -sensor is die beste omdat dit kan help om vas te stel of ons in die middel van die lyn is of aan die een kant is. Boonop, soos ons later sal sien, kan dit ons help om die hoek van die robot met betrekking tot die lyn op te spoor.
Die reflektansierangskikking het detektors wat baie naby mekaar is. Dit beteken dat ons veelvoudige opsporingseine moet kry, natuurlik, afhangend van die dikte van die lyn.
As dit so is, dan moet die robot, as die robot nie direk in lyn met die lyn is nie, 'n uitset lewer wat die lyn wyer is as wat dit behoort te wees (omdat ons skuins is).
Kyk na die Lab 6 -dokument vir 'n beter verduideliking van bogenoemde.
Hier is 'n paar nuttige instruksies vir hulp met die bedrading / aansluiting van die sensor op die MSP432 LaunchPad -ontwikkelbord.
Ek het ook dieselfde (soortgelyke?) Pdf -instruksies by hierdie stap gevoeg.
As u die Pololu -dokumente noukeurig lees, verduidelik hulle die rede vir die "3.3V bypass", wat u wil spring as u 3.3V in plaas van 5V gebruik.
Aangesien ons nog nie die robot bou nie, maar ons leer eerder oor ARM -samestelling en ook hoe ons met stukke (subsisteme) van die robot kan omgaan, hoef ons nie die bogenoemde instruksies tot op die letter te volg nie.
Op die oomblik kook/verminder die verbinding van die reeksensorskikking tot die volgende:
- koppel 3.3V en GND van die MSP432 -bord aan die sensorreeks.
- koppel 'n poortpen (ek stel voor P5.3) van die MSP432 aan die LED -insetspeld op die reëlsensorreeks. Die pen op die sensor is tussen 3.3V en GND.
- verbind al agt penne/stukkies van 'n enkele poort (ek stel voor P7.0 tot P7.7) met die agt penne van die sensorreeks gemerk "1" tot "8". Dit is die lyne wat hoog of laag gaan, afhangende van wat hulle voel.
Soos u kan sien op die afbeeldings van hierdie stap en in die video, het ek nie die sensor aan die robotonderstel geheg nie, want ek wou maklik programmeer, ontfout, toets, leer.
Met alles verbonde, is ons gereed om die sagteware te gebruik.
Stap 2: Lyn volg
Die reflektansie skakelsensor is redelik slim omdat dit op ten minste twee maniere kan help.
- Bepaal of die robot op die lyn gesentreer is of aan die een kant dryf.
- Is die robot in die rigting van die lyn in lyn, of is dit skuins.
Elkeen van die detektors van die skikking verskaf in wese een bietjie inligting, hetsy HOOG of LAAG.
Die idee is om al die stukkies in 'n enkele getal of enkele bispatroon te kombineer en die patroon te gebruik om besluite te neem (om korrek te beweeg).
Stap 3: Voordat ons regtig kan begin …
.. ons moet iets nuuts leer oor ARM -samestelling. En ek bedoel nie net nog 'n instruksie nie. Diegene is geneig om klein te wees.
Tot dusver het ons nie die 'stapel' in ons programme gebruik nie.
Ons het staatgemaak op die gebruik van die meeste kern -cpu -registers wêreldwyd in verskillende subroetines.
Die enigste ding wat ons gedoen het, was om die LR (skakelregister) adres vir een funksie op te slaan en te herstel - die een wat verskeie ander funksies genoem het. (Ek gebruik 'funksie' en 'subroutine' hier omruilbaar).
Wat ons gedoen het, is nie goed nie. Wat as ons ander funksies wil maak? Wat as ons meer as een vlak van nes het?
In vorige voorbeelde het ons gekies om register R6 te gebruik as die stoorplek vir die LR- of retouradres. Maar as ons verder/dieper nes wil doen, kan ons nie die waarde van R6 aanhou verander nie. Ons sal nog 'n register moet kies. En nog een. En dan word dit lastig om by te hou watter kern -cpu -register watter LR in watter funksie moet herstel.
So nou kyk ons na die "stapel".
Stap 4: Die stapel
Hier is 'n paar leesstof wat die stapel verduidelik.
Ek is 'n groter voorstander van 'n paar idees:
- slegs soveel teorie as wat nodig is, gaan vinnig na die praktiese
- leer soos nodig, fokus daarop om iets te doen en nie net doellose oefeninge of voorbeelde nie.
Daar is baie ARM- en MSP432 -dokumentasie aanlyn wat oor die stapel praat, so ek sal dit nie weer herhaal nie. Ek sal ook die gebruik van die stapel hier tot die minimum beperk - om die retouradres (die skakelregister) te stoor.
In wese hoef ons slegs instruksies:
STUKKE {register list}
POP {register list}
Of, in ons geval, spesifiek:
STUKKE {LR}
POP {LR}
'N Vergaderingsfunksie/subroetine sal dus so lyk:
funcLabel:.asmfunc
Druk {LR}; dit behoort waarskynlik een van die eerste instruksies vir inskrywing te wees.; doen meer kode hier..; blah blah blah…; ok, ons is klaar met die funksie, gereed om terug te keer na die oproepfunksie POP {LR}; dit herstel die korrekte terugkeeradres na die oproep; funksie. BX LR; terugkeer.endasmfunc
Die video gaan deur 'n lewendige voorbeeld van verskeie geneste funksies.
Stap 5: Die sagteware
Die aangehegte lêer met die naam "MSP432_Chapter …" bevat baie goeie inligting oor die poorte van die MSP432, en uit die dokument kry ons die volgende hawens, registers, adresse, ens. Dit is egter 'n bietjie gedateer. Ek het egter nie die gedetailleerde adresse vir Port 5 en hoër gesien nie. (slegs "alternatiewe funksies"). Maar dit is nog steeds nuttig.
Ons gaan twee hawens gebruik. P5, P7, P1 en P2.
P5.3 ('n enkele bis) uitset sal wees om die IR LED-aktiveer op die sensor te beheer. Ons gebruik P5.3 omdat dit 'n blootgestelde pen op dieselfde kop is as die ander MSP432 -verbindings wat na die sensorreeks gaan.
P7.0 tot P7.7 sal die agt insette wees wat die data van die sensor versamel; wat dit "sien".
P1.0 is die enkele rooi LED en ons kan dit gebruik om 'n paar aanduidings van die data te gee.
P2.0, P2.1, P2.2 is die RGB LED en ons kan dit ook met sy verskillende kleurmoontlikhede gebruik om ons 'n aanduiding te gee van die sensordata.
As u die vorige instruksies oor al hierdie dinge deurgegaan het, weet u reeds hoe u die program moet instel.
Het net 'n deklarasie -afdeling vir die poorte en stukkies, ens.
U het 'n 'hoof' afdeling.
Daar moet 'n lus wees, waar ons voortdurend die data van P7 lees, besluit oor die data en die twee LED's dienooreenkomstig verlig.
Hier is weer die Port Register -adresse:
- GPIO P1: 0x4000 4C00 + 0 (ewe adresse)
- GPIO P2: 0x4000 4C00 + 1 (onewe adresse)
- GPIO P3: 0x4000 4C00 + 20 (ewe adresse)
- GPIO P4: 0x4000 4C00 + 21 (onewe adresse)
- GPIO P5: 0x4000 4C00 + 40 (ewe adresse)
- GPIO P6: 0x4000 4C00 + 41 (onewe adresse)
- GPIO P7: 0x4000 4C00 + 60 (ewe adresse)
- GPIO P8: 0x4000 4C00 + 61 (onewe adresse)
- GPIO P9: 0x4000 4C00 + 80 (ewe adresse)
- GPIO P10: 0x4000 4C00 + 81 (onewe adresse)
Wat vetgedruk is, is wat ons vir hierdie instruksies sal gebruik.
Programstappe om IR -detektore te lees
Die volgende is psuedo-kode vir die skryf van die program in C, maar dit is nog steeds nuttig, en ons sal dit redelik noukeurig volg in die samestellingsweergawe van die program.
hoofprogram0) Initialiseer // poorte terwyl (1) {1) P5.3 hoog stel (IR -LED aanskakel) 2) Maak P7.0 'n uitset en stel dit hoog (laai die kapasitor) 3) Wag 10 uur, Clock_Delay1us (10); 4) Maak P7.0 'n inset 5) Begin hierdie lus 10 000 keer a) Lees P7.0 (skakel spanning op P7.0 om in binêre) b) Uitset binêre na P1.0 (waarmee u real -time binêre kan sien) 6) Stel P5.3 laag (skakel IR -LED af, spaar krag) 7) Wag 10 ms, Clock_Delay1ms (10); } // herhaal (terug na terwyl ())
Stap 6: Kom ons verbeter die kode
Die doel of gebruik van die Pololu IR LED -skikking is om 'n lyn op te spoor en om te weet of die robot (toekoms) direk op die lyn gesentreer is, of aan die een kant. Aangesien die lyn 'n sekere dikte het, as die sensorreeks regstreeks loodreg op die lyn is, sal die N -aantal sensors egter 'n ander lesing hê as die res, terwyl die IR -LED -skikking in 'n hoek (nie loodreg nie) is, dan N+1 of N+2 IR LED/detektorpare moet nou 'n ander lesing gee.
Afhangende van hoeveel sensors die teenwoordigheid van die lyn aandui, moet ons dus weet of ons gesentreer is en of ons skuins is of nie.
Vir hierdie laaste eksperiment, kyk net of ons die rooi LED en die RGB LED kan kry om ons meer inligting te gee oor wat die sensorreeks ons vertel.
Die video bevat alle besonderhede. Die finale kode is ook aangeheg.
Dit voltooi die reeks ARM Assembly wat verband hou met GPIO. Ons hoop om later weer met meer ARM -vergadering terug te keer.
Dankie.
Aanbeveel:
Lynvolgers op Tinkercad: 3 stappe
Line Follower op Tinkercad: A-Line Follower Robot, soos die naam aandui, is 'n outomatiese geleide voertuig wat 'n visuele lyn volg wat op die vloer of plafon ingebed is. Gewoonlik is die visuele lyn die pad waarin die lynvolgrobot gaan, en dit sal 'n swart lyn op 'n hoek wees
PID -lynvolgers Atmega328P: 4 stappe
PID Line Follower Atmega328P: INLEIDING Hierdie instruksie handel oor die maak van 'n doeltreffende en betroubare Line Follower met PID (proporsioneel-integraal-afgeleide) Control (Mathematical) in sy brein (Atmega328P)
Eenvoudige lynvolgers met behulp van Arduino: 5 stappe
Eenvoudige lynvolgers met behulp van Arduino: Arduino lynvolgersrobot In hierdie tutoriaal bespreek ons die werking van 'n Arduino -lynvolgende robot wat 'n swart lyn op 'n wit agtergrond sal volg en die regte draai sal neem wanneer dit krommes in sy pad bereik. Arduino Line Follower Co
GoPiGo3 -lynvolgers: 8 stappe
GoPiGo3 -lynvolgers: In hierdie tutoriaal neem ons 'n lynvolgers en gebruik dit op die GoPiGo3 om dit 'n swart lyn te laat volg
DEEL 2 - GPIO ARM VERGADERING - RGB - FUNKSIE OPROEP - Skakelaars: 6 stappe
DEEL 2 - GPIO ARM -VERGADERING - RGB - FUNKSIEOPROEPE - Skakelaars: In Deel 1 het ons geleer hoe om 'n enkele Rooi LED op die MSP432 LaunchPad -ontwikkelbord uit te skakel van Texas Instruments, met behulp van samestelling in plaas van C / C ++. In hierdie instruksies het ons sal iets soortgelyks doen - beheer 'n RGB -LED wat ook op die selfoon is