Design et kontrollbord for et Romi Robot Chassis

✔ Minecraft: How to make a Treadmill (Juni 2019).

$config[ads_text] not found
Anonim

Design et kontrollbord for et Romi Robot Chassis


I denne artikkelen diskuterer vi maskinvareutformingen for en robotteknikk, og vi vil skrive fastvare for å styre to DC-motorer.

støttende informasjon

  • Utform en tilpasset Microcontroller Programmering og Testing Board
  • Tilpasset PCB-design med en EFM8 Microcontroller
  • Samle og analysere robotens akselerometerdata

Botten

Den mekaniske maskinvaren som vi skal jobbe med, er Romi-chassis, solgt av Pololu. Det er et billig plastramme-plus-motors-plus-hjulsett som er relativt enkelt å montere.

  • Sette inn motoren i motorholderen er litt sketchy. Plastkantstykkene må bøye seg ganske mye. Og på en eller annen måte kjørte jeg en plastflik inn i motorsykkelen; Den resulterende kampen endte med en ødelagt plastfane. Jeg tror ikke botens ytelse vil lide så lenge jeg ikke går for høy fart over grovt terreng, men åpenbart bør du forsøke å samle din Romi uten å bryte noe. Så vær forsiktig når du setter inn motorene.

DXF

En enkel ting å glemme når du designer en PCB er monteringshullene. De er ikke alltid nødvendige, men vanligvis er det bedre å inkludere dem. Romi kommer med mange forgjengede hull; du bruker bare en mutter på undersiden av rammen for å sikre en bolt som passerer gjennom monteringshullet i PCB, som er på oversiden av rammen (dette er vist i monteringsvideoen). Spørsmålet er, hvordan sikrer du at monteringshullene justeres med hullene i rammen "// www.pololu.com/product/3500/resources" target = "_ blank"> her og se etter "Front, top og sidevisning av Romi-chassiset "). Hvis CAD-programvaren støtter DXF-import (jeg tror at dette er vanlig funksjonalitet), kan du inkorporere rammeoversikten i PCB-oppsettet, som følger:

Du lurer kanskje på noe. . .

Hva i verden er dette? Vel, det skal være All About Circuits-logoen. Da jeg lastet opp designet til MacroFabs brukergrensesnitt, brukte jeg ODB ++ filformatet i stedet for gerbers. Med CAD-programvaren (DipTrace) er det enklere å generere ODB ++-filer. Totalt var jeg fornøyd med prosedyren, men tilsynelatende var det et problem med denne delen av silkscreen. Jeg vil være klar over at jeg ikke skylder MacroFab her fordi PCB-forhåndsvisningen tydelig viste dette nøyaktige problemet, men jeg bestemte meg for å håp at programvaren som ble brukt til å lage forhåndsvisningsbildet, gjorde silketrykket feil, og at den faktiske fabrikasjonen ville være fint. Vel, jeg tok feil.

Her er PCB-oppsettet:

Romi-motorer trekker maksimal (dvs. stall) strøm på 1, 25 A hver, men normal drift er bare 130 mA. Jeg var ikke sikker på om 1 A-veggtransformatoren ville være tilstrekkelig for å starte opp motoren, men det virker som om det virker bra.

Motor kontroll

Vi kommer ikke til å dekke alle underkretsene i denne artikkelen. For øyeblikket tar vi bare en kort titt på motordrevet kretsen, fordi den første hovedtestingen er å sikre at vi kan styre motoren. Hvis du er ivrig etter å se alle designdetaljer, kan du laste ned hele skjematisk ved hjelp av følgende lenke (det er en zip-fil som også inneholder BOM):

Skjematisk og BOM

Egentlig kommer jeg ikke engang til å si mye om motordrevet kretsen, fordi den er nesten identisk med den som diskuteres i denne artikkelen. Den primære forskjellen er at jeg endret verdien av følelsesmotstanden (R3 i skjematisk under) i henhold til stallstrømmen til Romi-motorer. Jeg følte meg også komfortabel med å bruke en mindre massekondensator (C21), fordi motorene ikke er like heftige som de som brukes til C-BISCUIT demo-botten.

Vi vil at roboten skal bevege seg fremover når retningspinnen er logisk høy. For å gjøre dette, må du skru opp skrueterminaler til motorforbindelsene som følger:

Vi har fire funksjoner for grunnleggende motorbevegelse:

 void FullSpeed_Forward(void) { MOT_R_nEN = 1; MOT_L_nEN = 1; MOT_R_PWM = 1; MOT_L_PWM = 1; MOT_R_DIR = 1; MOT_L_DIR = 1; MOT_R_nEN = 0; MOT_L_nEN = 0; } void FullSpeed_Reverse(void) { MOT_R_nEN = 1; MOT_L_nEN = 1; MOT_R_PWM = 1; MOT_L_PWM = 1; MOT_R_DIR = 0; MOT_L_DIR = 0; MOT_R_nEN = 0; MOT_L_nEN = 0; } void FullSpeed_TurnRight(void) { MOT_R_nEN = 1; MOT_L_nEN = 1; MOT_R_PWM = 1; MOT_L_PWM = 1; MOT_R_DIR = 0; MOT_L_DIR = 1; MOT_R_nEN = 0; MOT_L_nEN = 0; } void FullSpeed_TurnLeft(void) { MOT_R_nEN = 1; MOT_L_nEN = 1; MOT_R_PWM = 1; MOT_L_PWM = 1; MOT_R_DIR = 1; MOT_L_DIR = 0; MOT_R_nEN = 0; MOT_L_nEN = 0; } 

Den generelle driftssekvensen er den samme for hver funksjon: deaktiver motorene, sett PWM-signalene til logisk høy, sett retningen i henhold til bevegelsesoperasjonen, og aktiver deretter motorene. For å stoppe motorene bringer vi bare aktiveringsnålene til logikken høyt:

 void StopMotors(void) { MOT_R_nEN = 1; MOT_L_nEN = 1; } 

Testkoden sykler gjennom de fire bevegelsesoperasjonene, og stopper motoren før du begynner sekvensen igjen:

 while (1) { FullSpeed_Forward(); C2ADAPTER_LEDGRN = !C2ADAPTER_LEDGRN; Delay_seconds(7); FullSpeed_Reverse(); C2ADAPTER_LEDGRN = !C2ADAPTER_LEDGRN; Delay_seconds(7); FullSpeed_TurnLeft(); C2ADAPTER_LEDGRN = !C2ADAPTER_LEDGRN; Delay_seconds(7); FullSpeed_TurnRight(); C2ADAPTER_LEDGRN = !C2ADAPTER_LEDGRN; Delay_seconds(7); StopMotors(); Delay_seconds(7); } 

Du kan laste ned kilde- og prosjektfilene via følgende lenke.

Kilde og prosjektfiler

Sammendrag

I denne artikkelen presenterte jeg Romi roboten chassis fra Pololu og introduserte den spesialdesignede PCB som styrer roboten. Vi drev opp styret og koblet til motoren, da vi verifiserte motorstyringsfunksjonalitet med noen enkle testkode. Merk at EFM8-mikrokontrolleren ble programmert ved hjelp av C2-adapterkortet som er omtalt i denne artikkelen. Vi vil utforske ytterligere deler av kontroll PCB i fremtidige prosjekter.

Gi dette prosjektet et forsøk for deg selv! Få BOM.