Ultrasonic hinder att undvika Robot (11 / 16 steg)

Steg 11: Kontroll och problem av servomotor



Reglerteknik och min genomförande

Hur vet vi hur man styr något? Tittar vi upp dess datablad. Det är precis vad jag gjorde (länge sedan) med denna servo, och fick reda på att jag behövde en 50Hz signal för rörlig tull cykel. Det är lite långsam för en hårdvara PWM modulen som vi är på kort med ändå (vi behöver dem för spår-köra motorerna), servo signalen måste vara lite slog - programvara som genereras.

Att veta detta, beräknat jag en timer för att generera ett avbrott varje 20ms. För denna uppgift använde jag gratis Timer3 modulen av mikrokontroller. Att veta att:

Fosc = 48 [MHz], finner vi att Fosc / 4 = 12 [MHz], och härifrån vi beräkna Tinstruction = 83,33 [ns]

Detta är den tid som behövs för en instruktion att slutföra i PIC och tid-basen för alla interna timern moduler. Vi vet också, att Timer3 är en 16-bitars timer/counter, så det kan räkna till 65535, och svämma över + ge ett avbrott på den nästa inkrement. Vi måste konfigurera den så det ger detta avbrott var 20 [ms]. För detta räknat jag antalet timer steg som behövs för 20 [ms] ska gå:

20 [ms] / 83,33 [ns] = 240096

Detta är ett värde som inte passar i 16-bitars räknare kedjan, så vi kommer att sakta öka hastigheten ner på något sätt: detta är lätt att göra med prescalers. Genom att tilldela en 1:4 prescaler denna timer, vi berättar PIC att öka timern registrera värdet i en takt fyra gånger långsammare än denna inre klocka av 83,33 [ns].

240096 / 4 = 60024

Detta kan översättas till: med greve hastigheten sjönk till 332.33 [ns], timern kommer att behöva vidta 60024 åtgärder tills våra 20 [ms] förflyter. Vi har att utlösa ett avbrott, när detta händer, och när avbrott förekommer? När timern svämmar över. Som sagt, subtrahera vi detta värde från spillområdet värde 65536:

65536 - 60024 = 5512 = 0x1588

Om vi sätter detta till TMR3 counter kedjan varje gång flaggan avbrott blir angetts av händelsen overflow, vi kommer att få en trevlig 20 [ms] avbryta som kan användas för denna servo algoritm.

Nästa, vi måste ta itu med att ändra intermittensen. Detta skulle ha varit mycket lätt att göra om jag hade en jämför modul tillgänglig, men tyvärr jag inte. För att övervinna detta, definieras jag en variabel som jag växlas varje gång ett avbrott kom. Att veta värdet av denna variabel tillät mig att skilja mellan två olika interrrupts: en som utlöste en stigande kant i början av 20 [ms] period, och som utlöste fallande kanten baserat på krävs intermittensen. Eftersom stigande kanten är obligatoriskt, varje gång avbrottet utlöses, en vår variabel är "0", vi skickar i/o pin till hög status. Baserat på krävs på tiden (Låt oss ta 1 [ms] för nu), vi snabbt beräkna en ny timer init räknarvärdet, så timern svämmar över igen efter denna tidsperiod. För 1 [ms] är detta beräkningen följande:

1 [ms] / 333.3 [ns] = 3000

Så satt vi TMR3's counter register till:

TMR3 = 65536-3000 = 62536

och vänta på nästa avbryta. När det uppstår, skickar vi IO pin låg stat och konfigurera TMR3 counter kedjan igen med nummer för 20 [ms]. Vi har att beakta, att 1 [ms] av 20 [ms] redan passerat, så matte kommer att se ut så här för den andra TMR3 uppdateringen:

TMR3 = 5512 + 3000

När vi är klar med detta, vi växla våra variabel igen och vänta på ett avbrott. Detta kommer att utlösa en stigande kant och 20 [ms] börjar period. Då beräknar vi den nya TMR3, och detta går på och så vidare, i en oändlig loop. Genom att titta i databladet jag berättade om tidigare, kan vi hitta den maximala längden av denna plikt cykel, programvara begränsningar kan skrivas till förhindra servo från att slå i ändarna och kämpar för att gå längre (och konsumerar 650mA...).

Servo är feedback är inte så bra alls, så servo kommer att skaka även när det blir samma skyldighet för evigt - detta måste lösas på något sätt. Jag satte en programvara räknare som ökar när 20 [ms] period börjar, och lagt till lite kod som bara tillåter en signal med en viss skyldighet att skickas ett begränsat antal gånger. Efter 20 cykler, jag antar att axeln är på önskad plats, och jag sluta skicka signaler = motorn inte skaka eller buzz.

Problem

Flera problem inträffade tills jag äntligen fick flytta servo på en repeterbar sätt. Jag Använd servomotorer innan utan problem, visste vilken typ av styrsignaler måste tillhandahållas, men bara kunde vända servo då och då, slumpmässigt. På en power-up fungerade det på de kommande fem så inte är fallet. Jag misstänkte inspänning sloka, 5 [V] buck output voltage sloka, och gjorde alla slags tester för att eliminera dem en efter en. Slutligen, efter att ha provat olika batterityper, slutade jag upp att sätta en skrymmande 3300 [uF] kondensator servo pin sidhuvud - och voilá, det slutligen blev mer lydig.

På denna punkt är det bra att byta till ett labb PSU, om tillgänglig

Vad kan du göra för att felsöka i situationer som denna? Om du misstänker, att det finns någon slags överspänningsskydd i din krets, finns det några knep du kan använda för att spåra upp felet. Först, det hjälper mycket om du har ett laboratorium strömförsörjning med nuvarande gräns funktionen, Detta förhindrar spränga saker. Helt enkelt använda batterier (jag försökt med Li-Ion också) är lite farligt eftersom de ger så mycket som de kan, vid en kort, och kommer förmodligen att bränna allt i deras väg.

Test 1.
Här var uppenbart Testserien: kontinuitet tester, tester mot shorts, vanliga saker. Lamporna blinkar, så 5V buck järnväg fick bli OK, fortfarande jag gjorde dessa för att vara säker. Jag också dubbel kollade att styrsignalen verkligen blir till servo gula stift - det gjorde. Dåliga anslutningar teori var trasig.

Test 2.

Det var ett ögonblick när jag trodde att mina batterier helt enkelt inte kan ge tillräckligt med juice att flytta servo. För att bekräfta/byst detta, jag slutade titta på den SG90 parameterlista, och fann att den nuvarande stall är 650 [mA]! Jag trodde, att detta kommer att vara problemet, och batterierna inte kan försäkra samma nuvarande som min PSU - detta behövs ett test.

Jag tog en 1.2 ohm motstånd, och lägga den i serie med robotar negativ input tråd. Mätningen hade vara låg-sida, eftersom omfattning marken sonden och PSU marken var ansluten via jorden. Genom att mäta spänningen över en serie motstånd av känt värde, kan man beräkna den ström som flyter genom den, den aktuella förbrukningen av roboten i detta fall. Jag tog två mätningar, en med Li-Ion batteripack, och en med PSU, kan du se dessa bifogas detta steg. En med spänningen / division 1 [V] är testet med batteriet, den andra med 500 [mV] per division är PSU. Eftersom batteriet hade lägre spänning än inställningen PSU, och DC-DC omvandlare hade att dra extra ström till upprätthålla deras produktion regleras: du kan se en 4 [A] topp!

Detta innebär att batteriet kan ge tillräckligt för hela kretsen till start, inklusive den ursprungliga överbelastning på servo när det börjar vrida skaftet. Denna teori var så trasig också.

Testa 3.

Efter att ha funderat hur länge 5 [V] spår är och hur hög stall är nuvarande av detta servo, insåg jag, att en lokal skrymmande kondensator skulle vara en bra idé. Detta skulle bidra med lokala spontana nuvarande drar. Eftersom detta innebar att borra hål och montering av en ny gemensam jordbrukspolitik, var jag lite emot det. Men när en smart vän kom med detta mycket förslag utan att jag ens nämna denna teori, beslöt jag att bita ihop och ge detta ett försök. Jag tog en hög kvalitet (räddas från ett moderkort) 3300 [uF] / 6.3 [V] kondensator, borrade några hål för det mycket nära servo utdata pin huvudet och lödda sak i. Jag aktiverat makten och det fungerade! Denna teori är bekräftat för att vara sant, och gå igenom med det visat för att arbeta som smort.

Avslutning och efterbehandling denna testserie

När jag såg detta arbetar med Li-Ion batteri, och testet var repeterbara, började jag fundera på hur man montera de enorma batterierna på roboten. Jag försökte att sätta dem på baksidan, men som resulterade i roboten att få obalanserad - så jag bestämd till ger en annan sköt till Ni-MH-batterier, och använda robotar 4 x AA cell hållare för strömkälla. Jag gjorde nödvändiga ändringar, ansluten batterierna, och igen: den arbetat! Problemet löst, och utseendet på bot är allvarligt bättre!

Se Steg
Relaterade Ämnen

Hur man gör ett hinder att undvika Robot

hinder att undvika robot är en enkel robot som drivs av en arduino och vad den gör är att det bara strövar runt och undviker hinder. Den upptäcker hinder med en HC-SR04 ultrasonic sensor med andra ord om roboten sinnen objekt nära till det, det tar a...

Hinder att undvika Robot med arduino

HINDER - ATT UNDVIKA ROBOTEtt hinder att undvika ROBOT är en som kan undvika ett hinder med hjälp av ultraljud sensor och gå i sin egen väg. Med en skärbräda bifogas roboten kan du spela roliga inom en kort tid. En sådan är vad vi ska diskutera här....

Hinder att undvika Robot med hjälp av ultraljud med evive (Arduino powered embedded plattform)

Vi har byggt ett hinder att undvika robot med evive. Till skillnad från andra, har vi monterat ultrasonic sensor på en servo. Så efter att ha upptäckt en kollision, roboten analyserar vilken riktning är bäst att gå med avstånd i olika vinklar från ul...

Hinder att undvika Robot V2

nyligen gjorde jag en instructable på en enkel hinder undvika robot. I detta instructable jag kommer att genomföra en panorering PING))) sensor, till skillnad från den tidigare roboten som har sensorn var stillastående. Jag kommer att använda denna t...

Hinder att undvika Robot

i denna tutorial jag arbetar med dig i en stegvis process som förklarar genom visuella och skriftliga instruktioner om hur du skapar ett hinder att undvika robotbil. Detta är en enkel starta projektet med arduino mikrokontroller och arduino motor skö...

Ljus som söker och hinder att undvika Robot

Syftet med detta projekt är att bygga en arduino robot som följer ljuset och undviker eventuella hinder i sin väg. Den är baserad på en Arduino Uno microcontroller ombord och den använder ljus beroende motstånd för att hitta mest ljusa ljuskällan sam...

Hur man gör ett hinder att undvika Robot Arduino stil

du alltid velat göra en av dessa coola robotar som kan i princip undvika alla objekt. Men du inte har tillräckligt med pengar för att köpa en av de riktigt dyra sådana, med redan skär delar där allt material där det för dig. Om du är lik mig gillar d...

RC bil till hinder att undvika Robot

detta är den gamla bilen.Jag hitta en gammal RC bil i mitt skjul.Hur jag förvandlas till en robot? Det är enkelt, jag kommer att förklara du i nästa steg.Steg 1: Den gamla RC bil 1. ta bort höljet2. ta bort kretsen.Steg 2: kontroll För att kontroller...

Hur man gör ett hinder att undvika Arduino Robot! "Min Robot V1"

Detta instructable visar steg instruktioner för att göra ett hinder att undvika robot med Arduino.Låt komma igångmin blogghttp://robot4pro.blogspot.com/p/My-robots.htmlSteg 1: Material som krävs förHär är allt du behöver för att MyRobotV1. Jag ska ge...

Robot-hinder att undvika.

HINDER ATT UNDVIKA ROBOTFINANSIERAS AV, INTEL KENYA TILLSAMMANS MED SOCIETY OF ENGINEERING STUDENTER AUTOMATION CLUB JKUAT.MEDLEMMAR:1 ANTONIUS KARIUKI2 ERIC KINYANJUI3 EMMANUEL KINYANJUIPROJEKTET INSTRUCTABLE:KRAV:1 INTEL GALILEO GENERATION 2 STYREL...

Autonomus vägg följande hinder att undvika Arduino Rescue Bot

jag är en ha som huvudämne elektroteknik och varje år mitt college gren av IEEE tävlar i en studenttävling hårdvara. Förra årets tävling var inspirerad av naturkatastroferna i Haiti och Chile (tävlingen hölls en vecka efter jordbävningen i Japan). De...

(Källa filer för) Hur man gör en OAWR (hinder att undvika Walking Robot)

detta är en utlöpare Instructable från hur man gör en OAWR (hinder att undvika Walking Robot) och innehåller versioner av filer från detta instructable i redigerbart format (alla trevliga och öppna source'ary jag gillar att tänka).(Om det finns någon...

Artoo [R2] (ATtiny2313 vägg att undvika Robot)

eftersom jag hade en massa ATtiny2313s liggande ville jag göra något häftigt med dem, jag tänkte ett tag och sedan beslutat att göra en enkel vägg att undvika robot med ATtiny2313, en ultrasonic sensor och 2 motorer.Dess en enkel att göra och enkel r...

Linkit ett objekt att undvika Robot

Denna i'ble behandlar objekt att undvika tekniker för linkit en.Dess enkla att göra ett objekt att undvika robot med linkit en. Anslut först HC-SR04 till linkit en än Anslut relä till linkit en och slutligen ansluta båda motorerna till relä och batte...

Raspberry Pi bygger väggen att undvika robot - FabLab NerveCentre

______________________________________________________________________________Observera: detta instructable är inte fullständigt - men kan vara till hjälpPublicerad för att den utmärkta människor på Derry's NerveCentre att ta koden ut till skolorJag...

Arduino vägg att undvika robot

Detta instructable förutsätter mycket lite med avseende på tidigare kunskap.Om det finns några områden som du känner skulle kunna förbättras eller förtydligas, gärna meddelande eller en kommentar och jag kommer att uppdatera.Här finns all information...

Hinder att undvika Arduino bil

Hej alla jag delar här vad jag göra ett hinder att undvika arduino bil. Jag använde här lätt tillgängliga material, dessa robo fortsätta springa fram tills och om inte hinder kom bilen så låt oss se och göra...Steg 1: material som krävs för 1-Arduino...

Billiga 4WD invända att undvika Robot med fyra IR närhet sensorer...

Detta är en billig grundläggande fyra motorer, fyra sensorer, programmerbara 8051 objekt att undvika robot med breadboad. Denna robot kan också användas som en linje efter robot bara ändra programmet. Jag installerade två batterier för mer makt, men...

Hur man gör ett hinder att undvika Arduino Robot

Hej alla! I detta Instructable kommer jag att visa dig hur man gör en robot som liknar "Mobile Arduino experimentella plattformen" (MAEP) som jag gjort. Den är utrustad med två motorer som kan styra roboten och förmågan att se hinder framför den...