How to build een self navigeren Robot How (5 / 7 stap)

Stap 5: Details van software: snelheid, controle- en andere basisfuncties


Het programma is volledige interrupt gestuurde . Bij het opstarten na initialisatie, wordt ingevoerd in een zeer eenvoudige main-lus, fungeert als een statusmachine. Het programma controleert vlaggen ingeschakeld door externe gebeurtenissen in de main-loop, en het in de relatieve staat volgens hun waarden invoert.

Aangezien het is een soort van een zeer eenvoudige coöperatie moet "real-time Operating systeem ," elke routine worden uitgevoerd in de kortst mogelijke tijd, het systeem vrijmaken om te zorgen voor de zeer frequente interrupts.
Er zijn geen "wachten" en geen vertraging in de code. Wanneer mogelijk interrupts worden gebruikt, in het bijzonder voor langzame bewerkingen zoals het zenden of ontvangen van tekenreeksen. UART mededeling neemt de advantege van de DMA-mogelijkheden van de dsPIC33F op te slaan van de CPU-tijd doen alle 'vuile' werk in hardware.

Randapparatuur gebruikt op dsPIC33FJ128MC802:
-QEIs voor het berekenen van het reisde pad.
-Input Capture (IC) snelheid te berekenen.
-A/D converters te lezen motor stroom.
-Verbeterde PWMs te rijden van de motoren.
-UARTs om te communiceren met de buitenwereld

QEI modules worden gebruikt om te weten hoeveel de wielen hebben reisde en in welke richting. Deze waarde is algebraïsch gecumuleerd in een variabele elke 1ms en verzonden naar de functies van de toezichthouder op haar verzoek. Nadat de waarde wordt verzonden, worden de variabelen worden gereset.

Snelheid wordt gemeten aan de elke encoder pulse zoals hieronder beschreven. Elke 1ms het berekent de gemiddelde snelheid met gemiddeld monsters, PID algoritme uitvoert, en corrigeert de motorsnelheid dienovereenkomstig aan het resultaat, PWM taakcyclus wijzigen. Zie voor een gedetailleerde beschrijving van de C30 PID bibliotheektoepassing, Microchip codevoorbeeld: CE019 - met behulp van proportioneel integrale afgeleide (PID) controllers in Closed-loop controlesystemen. http://WW1.microchip.com/downloads/en/DeviceDoc/CE019_PID.zip

Snelheid variaties van de motoren uitgevoerd soepel, versnellen of vertragen met een stijgende of dalende Schuine oprit, ter voorkoming van zware mechanische spanning en wiel ontsporing, die fouten in de odometry veroorzaken kan. Vertraging is sneller dan de versnelling te vermijden hobbels met obstakels tijdens het remmen.

IC , input capture modules worden gebruikt voor het meten van de tijd die is verstreken tussen twee pulsen gegenereerd door het coderingsprogramma, s wil zeggen wanneer de wielen voor een bekende vaste hoeveelheid ruimte (constante SPACE_ENC reisde ). Aangesloten parallel aan de QEA (intern naar de DSC dankzij de mogelijkheden van perifere Pin selecteren van de dsPIC33F), vangen ze verstreken tijd aan stijgende rand van signalen van de encoders. TIMER2 wordt gebruikt in de free-running modus. Bij elke interrupt IC TMR2 de huidige waarde is opgeslagen en de vorige waarde wordt afgetrokken van het; Dit is de periode van de pols. Vervolgens wordt de huidige waarde de vorige waarde, in afwachting van de volgende interrupt. TMR2 de vlag moet worden gecontroleerd om te weten als een overloop in the16-bits register gebeurd. Zo ja, is het verschil tussen 0xFFFF en in het vorige voorbeeld worden toegevoegd aan de huidige waarde. Monsters worden algebraïsch toegevoegd in IcPeriod variabele volgens _UPDN bits, om te bepalen ook de richting van de snelheid. Dit is een van de voorgestelde methoden in Microchip toepassing notitie AN545 .
De variabele IcIndx bevat het aantal monsters toegevoegd in IcPeriod .
Elke 1ms is de gemiddelde snelheid berekend als V ruimte/tijd =
waar ruimte = SPACE_ENC•IcIndx
(= ruimte bedekt met een encoder pulse • aantal pulsen)
en keer = TCY•IcPeriod
(= enkele TMR periode • sommatie van perioden is opgetreden).
Single_TMR_period = DL = 1/FCY (klokfrequentie).
Zo V=Kvel•(IcIndx/IcPeriod)
waar Kvel = SPACE_ENC•FCY snelheid in m/s hebben.
15 bits Kvel const verschuiving links (KvelLong = Kvel << 15 ) de snelheid is al berekend in de decimale indeling (ook als alleen integer variabelen worden gebruikt) klaar om te worden gebruikt in routine van PID. Zie "descrEng.txt" bestand in MPLAB-project voor een meer gedetailleerde beschrijving.

A/D converters continu meten motoren huidige, tijdwaarden op te slaan in de 16 posities ADCBUF buffers. Buffers zitten vol, een interrupt optreedt als een gemiddelde waarde wordt berekend ongeveer elke 1ms.

UARTs worden gebruikt om opdrachten van buiten te ontvangen en voor het terugsturen van de resultaten van de metingen. Het communicatie gedeelte van het programma wordt uitgevoerd als een statusmachine. Status variabelen worden gebruikt voor het uitvoeren van acties in de juiste volgorde. Erg makkelijk en snel onderbreken Service Routines (ISR) krijgen of elke één byte van of naar een buffer, en instellen van de juiste vlaggen te laten de juiste functie moet worden uitgevoerd.

Als elke vorm van fout optreedt tijdens het ontvangen van de UART (, controlesom, parsing fouten), de variabele status is ingesteld op een negatief getal en de rode led wordt gevoed omhoog te communiceren extern deze schuld voorwaarde. Zie "descrEng.txt" bestand in MPLAB-project voor een volledige lijst van mogelijke fouten.

Het protocol dat wordt gebruikt voor de handdruk fysieke laag onafhankelijk is, en kan worden gebruikt met de I2C of RS485 bus zo goed te communiceren.
De eerste laag wordt gecontroleerd door dsPIC peripheral interface. Frame of overschrijding fouten (UART) of botsingen (I2C) worden gedetecteerd door de hardware, de juiste vlag instelt.
De tweede laag wordt afgehandeld door ISR routines. Ze vullen de RX-buffer met de bytes dat is ontvangen van de interfaces. Ze detecteren ook bufferoverloop en opdracht overschreden.
UartRx of UartRx2 functies beheren de derde laag . Zoals reeds beschreven fungeren (Zie ook stroomschema's) deze routines als een statusmachine, krijgen van bytes van de buffer en decoderen de opdrachtreeks.
De bytes worden uitgewisseld tussen de tweede en derde lagen (ISR en UartRx functie) via een circulaire buffer. ISR een byte ontvangt, slaat deze op in een matrix en een pointer naar de matrix, verhoogd als de muisaanwijzer bereikt het einde van de array dat het opnieuw wordt opgestart naar het begin. De functie UartRx heeft zijn eigen pointer naar het lezen van dezelfde array, verhoogd (in een circulaire veel te) zodra de byte in de huidige status van de RX is gedecodeerd. Belangrijkste lus roept de functie van de UartRx wanneer de aanwijzer "in" "out" aanwijzer verschilt.

Elk commando-pakket bestaat uit:
0 - header @
1 - ASCII ID 0-9
2 - Cmd A-Z ASCII
3 - CmdLen-N 1-MAX_RX_BUFF = aantal navolgende bytes (controlesom inbegrepen)
4 - data...
...
N-1-gegevens
N - checksum 0-255 verkregen door gewoon te tellen in een 8 bits variabele, alle bytes componeren het bericht (controlesom zelf uitgesloten).

Deze laag controleert timeout checksum fouten, alsmede packet consistentie (juiste header, juiste lengte). Als alles ok is hierdoor Parser routine (vierde laag ) om het bericht te decoderen en de vereiste actie uitvoeren. Deze routine stelt u de vlag van het juiste fout als de code van de bericht ontvangen is niet bekend.

TMR1 genereert een 1000 Hz timing klok - de hartslag van het programma. Op elke TMR1 de interrupt, interne timers worden bijgewerkt, de watchdog is uitgeschakeld en een vlag is ingesteld op het inschakelen van de functie waarin u wordt gevraagd de waarde reisde ruimte. Elke 10ms "All_Parameters_Ask"-functie (snelheid, positie, huidige) is ingeschakeld.

Gerelateerde Artikelen

Domo Kun WobblyBot, eenvoudige Self Balancing Robot

Domo Kun WobblyBot, eenvoudige Self Balancing Robot

Een self balancing robot van de twee wielen die wiebelt, vandaar de naam WobblyBot.Misschien wel de eenvoudigste ontwerp voor een robot die zelf (soort van) op twee wielen, zonder het gebruik van de gyroscoop, versnellingsmeter en microcontroller eve
Make a Halloween Pumpkin wandelen door de self balancing Robot

Make a Halloween Pumpkin wandelen door de self balancing Robot

Pompoen is een typische symbool van Halloween. Je heb ooit wilde een wandelende pompoen maken.Hier zal ik u tonen mijn werk van het gebruik van een Self-balancing Robot een lichtend pompoen om rond te bewegen.Stap 1: voorbereiding Belangrijkste stukl
How to Build een Raspberry Pi nul humanoïde Robot met Java

How to Build een Raspberry Pi nul humanoïde Robot met Java

Hallo ga ik tonen u hoe maak je een humanoïde robot met pi nulStap 1: onderdelende totale lijst wordt als aanleiding voor het voeden van de sensoren en PI:* Raspberry PI nul + 16GB micro-SD kaart* Micro-USB-hub + Wifi Dongle* AdaFruit Powerboost 1000
How to Build een koepel van Earthbag

How to Build een koepel van Earthbag

Opmerking: Als u nieuw bij earthbag bouwen bent, eerst lezen de inleidende Stapsgewijze Earthbag gebouw Instructable en How to Build een Earthbag Roundhouse . Ook zijn mijn nieuwe Earthbag gebouw gids en Earthbag gebouw DVD nu beschikbaar.Wij dit ear
How to Build een 3-voudige Chinese picknickmand

How to Build een 3-voudige Chinese picknickmand

How to Build een 3-voudige Chinese picknickmandIn één keer een cadeau voor een pas getrouwd stel, het trapsgewijze picknickmand is een nogal ongewone item en niet een project waarvoor gemakkelijk u instructies voor vandaag vindt. Dit instructable bev
How to Build een frisdrank fles raketwerper

How to Build een frisdrank fles raketwerper

How to Build een frisdrank fles raketwerperDus we een picknick werk hadden en we wilden sommige kinda geeky fun... werd een frisdrank fles raket lanceren gesuggereerd... probleem is we hebben niet een draagraket en de picknick was binnenkort! Nooit a
How to build een elektrische Longboard met telefoon control how

How to build een elektrische Longboard met telefoon control how

Elektrische longboards zijn awsome!TEST BEELDEN IN DE VIDEO HIERBOVENHOW TO BUILD EEN ELEKTRISCHE LONGBOARD BEDIEND VANAF EEN TELEFOON MET BLUETOOTHUpdate #1: Grip tape geïnstalleerd, enkele aanpassingen aan de snelheidsregelaar hebben betekend ik he
How To Build een grimmige industrieën Iron Man Arc Reactor... Zeer zeer low-cost...

How To Build een grimmige industrieën Iron Man Arc Reactor... Zeer zeer low-cost...

How To Build een grimmige industrieën Iron Man Arc Reactor... Zeer zeer low-cost arc reactor diede meeste kan zeer gemakkelijk maken.nu heb ik een vinyl cutter en ik heb gebruik van een stuurlieden cnc router maar het gaat hier om een te bouwen datie
How to Build een Website

How to Build een Website

Leer hoe een Website te bouwen. Eerst moet je een idee, wat je het maken van de website over. Een vindplaats voor info, entertainment, of blog. U wilt een onderwerp waarin u geïnteresseerd bent, zodat u houden toe te voegen post of pagina's. Hopelijk
How to Build een Lightsaber in Word 2010

How to Build een Lightsaber in Word 2010

How to Build een Lightsaber in Word 2010.Stap 1: Stap 1Open Word 2010Stap 2: Stap 2Ga naar invoegen en klikt u op shapesStap 3: Stap 3Bouwen van uw gevestStap 4: Stap 4 Het toevoegen van een mes met behulp van een afgeronde rechthoek. Merk de witte b
How To Build een boekenplank

How To Build een boekenplank

How To Build een boekenplank
How to Build een Truck Bed organisator

How to Build een Truck Bed organisator

How to Build een veelzijdig en verstelbaar Truck Bed organisatorGotta vrachtwagen? Die niet nodig een vrachtwagen bed organisator of een opslagsysteem dat weerhoudt dat kleinere punten rollen rond in het bed van de vrachtwagen en uit bereiken?Ik weet
How to Build een statiefkop

How to Build een statiefkop

How to Build een 3D statief hoofdU kunt zien dat kunnen we deze hoofd http://dpr.org.ua/index.files/Tour_Pizza.html
Build A Cookie Monster Robot

Build A Cookie Monster Robot

Hallo iedereen!Mijn nieuwste robot is een beetje uit mijn gewone maar blijft met mijn huisdier thema van de robot. De code is geëvolueerd van K @ tot K9 naar Wall-E en woont nu in mijn Cookie Monster.Bekijk de video: You TubeDe code had gewijzigd zod