Ultrasone obstakel-vermijden Robot (11 / 16 stap)

Stap 11: Controle en problemen van de servomotor


Controletheorie en mijn uitvoering

Hoe weten we hoe u iets? We kijken omhoog het gegevensblad. Dat is precies wat ik deed (lang geleden) met deze servo, en ontdekte dat ik nodig een 50Hz signaal van variabele pulserend sproeien. Dat is een beetje traag voor een hardware-PWM-module die we op korte met anyway (we ze nodig voor de track-rijden-motoren), dit servo-signaal moet beetje geneukt - software gegenereerd.

Dit wetende, berekend ik een timer voor het genereren van een interrupt elke 20ms. Hiervoor gebruikte ik de gratis Timer3-module van de microcontroller. Wetende dat:

FOSC = 48 [MHz], vinden we dat Fosc / 4 = 12 [MHz], en vanaf hier berekenen wij Tinstruction = 83.33 [ns]

Dit is de tijd die nodig is voor één instructie in de foto, en de tijd-base voor alle interne timer modules te voltooien. We weten ook dat Timer3 is een 16-bits timer/teller, dus het kan tot 65535 tellen, en overflow + een interrupt op de volgende toename geven. Men moet configureren zodat het geeft deze interrupt elke 20 [ms]. Voor dit berekend ik het aantal timer stappen die nodig zijn voor 20 [ms] verstrijken:

20 [ms] / 83.33 [ns] = 240096

Dit is een waarde die niet in de 16-bits teller vervoersketen, past dus we zullen moeten de toename snelheid een of andere manier vertragen: dit is gemakkelijk te doen met behulp van prescalers. Registreren waarde een tempo van vier keer langzamer dan deze interne klok van 83.33 [ns] door aan te wijzen een 1:4 prescaler deze timer, wij vertellen de PIC te hogen van de timer.

240096 / 4 = 60024

Dit vertaalt zich naar: met de snelheid van de telling verlaagd naar 332.33 [ns], zal de timer moet 60024 stappen totdat onze 20 [ms] verstrijkt. We moeten leiden tot een interrupt, wanneer dit gebeurt, en wanneer interrupts plaatsvinden? Wanneer de timer loopt over. Dat gezegd zijnde, wij deze waarde van de waarde van de overloop van 65536 aftrekken:

65536 - 60024 = 5512 = 0x1588

Als we dit in de keten van de teller TMR3 telkens de interrupt-vlag wordt ingesteld door de overloop gebeurtenis, zullen we een mooie 20 [ms] onderbreken tarief dat kan worden gebruikt voor dit servo-algoritme.

Vervolgens, hebben we te maken met het veranderen van het pulserend sproeien. Dit zou zeer gemakkelijk te doen als ik had een vergelijk module beschikbaar, maar helaas heb ik niet zijn geweest. Ik heb gedefinieerd om te overwinnen, een variabele die ik elke keer een interrupt kwam van een knevel gevoorzid. Kennen van de waarde van deze variabele stond me toe om te onderscheiden tussen twee verschillende interrrupts: degene die een stijgende rand activeerde aan het begin van de 20 [ms] periode, en dat leverde de dalende rand op basis van de vereiste taakcyclus. Omdat de stijgende rand verplicht, telkens wanneer de interrupt wordt geactiveerd is, een onze variabele is ingesteld op '0', we sturen de IO-pin te hoog staat. Gebaseerd op de vereiste op tijd (Neem 1 [ms] voor nu), we snel een nieuwe timer init itemwaarde, berekenen, zodat de timer na deze periode weer overloopt. Voor 1 [ms] is deze berekening als volgt:

1 [ms] / 333.3 [ns] = 3000

Dus we TMR3 de teller register ingesteld op:

TMR3 = 65536-3000 = 62536

en wachten tot de volgende interrupt. Wanneer deze optreedt, verzenden wij de IO-pin laag staat, en de TMR3 teller keten opnieuw configureren met het nummer voor 20 [ms]. We hebben rekening te houden, dat 1 [ms] van 20 [ms] al voorbij, dus de wiskunde er iets als dit voor de tweede TMR3-update ziet:

TMR3 = 5512 + 3000

Nadat we klaar bent met dit, wij onze variabele opnieuw in-/ uitschakelen en wachten op een interrupt. Dit zal leiden tot een stijgende rand en de 20 [ms] periode begint. Dan weer berekenen we de nieuwe TMR3, en dit gaat op en op en op, in een eindeloze lus. Door te kijken in het gegevensblad ik u over eerder vertelde, vinden we de maximale lengte van deze taakcyclus, software grenzen kunnen worden geschreven om te voorkomen dat de servo raken de uiteinden en worstelen om verder gaan (en consumeren 650mA...).

De servo's feedback is niet zo groot, zodat de servo schudden zal, zelfs wanneer het steeds voor eeuwig het dezelfde plicht - dit een of andere manier moet worden opgelost. Ik heb een software-teller die wordt verhoogd wanneer de 20 [ms] periode begint en toegevoegd wat code waarmee alleen een signaal met een bepaalde taak aan een beperkt aantal keren worden verzonden. Na 20 cycli, ik neem aan dat de schacht op de gewenste positie is, en ik stop nu met zenden signalen = de motor zal niet schud of buzz.

Problemen

Verschillende problemen voorgedaan totdat ik eindelijk te verplaatsen van de servo in een herhaalbare manier. Ik gebruikte servomotoren voor zonder problemen, wist wat voor soort besturingsseinen moet worden verstrekt, maar was alleen in staat om te schakelen van de servo zo nu en dan, willekeurig. Op een power-up van werkte het, op de volgende vijf die het niet. Ik vermoed ingangsspanning hangen, 5 [V] buck output voltage hangen, en maakte alle soorten tests om hen te elimineren één voor één. Tot slot, na het proberen van verschillende soorten batterijen, ik uiteindelijk om een omvangrijk 3300 [uF] condensator vlakbij het servo pin header- en voilá, het eindelijk meer gehoorzaam geworden.

Op dit punt is het goed om over te schakelen naar een lab PSU, indien beschikbaar

Wat kunt u doen om in dit soort situaties op te lossen? Als u vermoedt dat, dat er een soort van macht schommeling in je schakeling, zijn er enkele trucs die u gebruiken kunt voor het bijhouden van de fout. Ten eerste, het helpt veel als heb je een laboratorium power supply met de huidige limiet functie, Hiermee voorkomt u dat dingen in te blazen. Eenvoudig met behulp van de batterijen (ik probeerde ook met Li-Ion) is een beetje gevaarlijk aangezien degenen geven zal zo veel als ze, in geval van een korte kunnen, en waarschijnlijk alles op hun manier verbranden zal.

Test 1.
Dit was het voor de hand liggende testreeks: continuïteit proeven, proeven tegen shorts, standaard spullen. De LED's waren knippert, dus de 5V buck rail worden OK moest, dat nog steeds ik deed dit om zeker te zijn. Ik heb ook dubbel gecontroleerd dat de controle-signaal wordt inderdaad steeds naar de gele pin van de servo - het deed. Slechte verbindingen theorie busted was.

Test 2.

Er was een moment wanneer ik geloofde dat mijn batterijen gewoon niet genoeg sap te verplaatsen van de servo geven. Te bevestigen/bust dit, ik eindigde op zoek op het SG90 de parameterlijst, en vond dat de huidige stal 650 [mA is]! Ik dacht, dit zal het probleem, waardoor de batterijen kunnen niet hetzelfde als mijn PSU - huidige verzekeren dat dit een test nodig.

Ik nam een 1.2 Ohm weerstand, en zet het in serie met de robots negatieve ingangsdraad. De meting moest worden van de low-kant, omdat de werkingssfeer grond sonde en de PSU grond werden verbonden door middel van de aarde. Door meten spanning over de weerstand van een serie van bekende waarde, kan men het berekenen van de stroom die doorheen, de huidige consumptie van de robot in dit geval stroomt. Ik nam twee metingen, één met de Lithium-ion battery pack, en één met de PSU, kunt u deze aangesloten op deze stap. Degene met de spanning / divisie op 1 [V] is de test met de batterij, de andere met 500 [mV] per divisie is de PSU. Omdat de batterij lagere spanning dan de PSU-instelling, en de DC-DC converters trekken extra huidige moest te handhaven hun uitgangen geregeld: ziet u een 4 [A] piek!

Dit betekent dat de batterij kan bieden genoeg voor het hele circuit om op te starten, met inbegrip van de oorspronkelijke overbelasting op de servo wanneer het begint te draaien van de schacht. Dus deze theorie ook busted was.

Test 3.

Na het denken van hoe lang de 5 [V] zijn sporen en hoe hoog de stal is stroom van deze servo, heb ik besefte dat een lokale omvangrijk condensator zou een goed idee. Dit zou helpen met lokale spontane huidige trekt. Aangezien hierbij boren van gaten en het opzetten van een nieuwe cap, was ik een beetje tegen. Nochtans, wanneer een slimme vriend kwam met deze zeer suggestie zonder mij zelfs de vermelding van deze theorie, besliste ik te bijten de kogel en verlenen zulks te uitproberen. Ik nam een hoge kwaliteit (geborgen van een moederbord) 3300 [uF] / 6.3 [V] condensator, enkele gaten geboord voor het zeer dicht bij de servo uitgang pin header, en het ding in gesoldeerd. Ik heb de kracht ingeschakeld en het werkte!!! Deze theorie wordt bevestigd om waar te zijn, en gaan door met het bewezen te werken zoals te tovermiddel.

Conclusie en afwerking van deze testreeks

Nadat ik zag dit het werken met de Li-Ion accu en de test herhaalbare was, begon ik te denken over hoe de enorme batterijen op de robot te monteren. Ik probeerde zetten hen op de achterkant, maar dat resulteerde in de robot krijgen onevenwichtig - dus ik heb besloten om nog een schot op de Ni-MH batterijen, en het gebruik van de robots 4 x AA cel houder voor krachtbron. Ik maakte de noodzakelijke wijzigingen, de batterijen, aangesloten en weer: het werkte! Probleem opgelost, en het uiterlijk van het bot is serieus beter!

Gerelateerde Artikelen

BASIC ARDUINO obstakel vermijden ROBOT

BASIC ARDUINO obstakel vermijden ROBOT

maken een eenvoudige arduino gebaseerde obstakel vermijden robotStap 1: vereisten BENODIGDE MATERIALEN1. natuurlijk Arduino Uno (een andere compatibele board) X 12. Chasis voor robot (ik gebruikte een van mijn broer's RC auto)3. een L293D Dual h-brug
How to Build obstakel vermijden Robot voor Beginners met Arduino Tutorial

How to Build obstakel vermijden Robot voor Beginners met Arduino Tutorial

Deze Tutorial is voor iedereen aan de slag met arduino. Wij zullen bouwen obstakel te vermijden robot die gebruikmaakt van een ultrasone sensor voor HC SR-04 om objecten en 2 continu (360 graden) servo's aangesloten op een externe batterijvoeding te
Remote Controlled obstakel vermijden Robot met PIC Microcontroller

Remote Controlled obstakel vermijden Robot met PIC Microcontroller

Ik gebruik pic 16f877aservo motor ultrasone module afgestemd motor motor stuurprogramma en 20 mhz kristal.In robotica is obstakel te vermijden de taak van het voldoen aan enkele doelstelling van de controle niet-splitsing of niet-botsing functie bepe
Hoe maak je een obstakels vermijden Robot - Arduino stijl

Hoe maak je een obstakels vermijden Robot - Arduino stijl

je altijd al wilde maken van een van deze coole robots die in principe elk object kunnen vermijden. Maar je niet genoeg geld om te kopen een van die erg duur zijn hoefde, met reeds gesneden delen waar alle materialen waar er voor u. Als u als me bent
Arduino obstakel vermijden Robot

Arduino obstakel vermijden Robot

De kerels van Hey,Materiaal:1 Arduino Microcontroller - http://www.robotshop.com/en/arduino-uno-usb-microc...2 parallax continu roterende Servos - http://www.robotshop.com/en/parallax-futaba-contin...1 180 graad Hi-Tec HS-422 Servo - http://www.robot
Obstakel te vermijden Robot met arduino

Obstakel te vermijden Robot met arduino

OBSTAKEL - VERMIJDEN ROBOTEen obstakel te vermijden ROBOT is een die kan een obstakel te vermijden met behulp van ultrasone sensor en navigeren in haar eigen pad. Met een breadboard gekoppeld aan de robot kunt u plezier spelen binnen een korte period
Obstakel te vermijden Robot met behulp van IR Module geïnterfacet met een boord van Mediatek LinkIt

Obstakel te vermijden Robot met behulp van IR Module geïnterfacet met een boord van Mediatek LinkIt

In deze Intructable zal u worden kunnen te maken een obstakel vermijden Robot met behulp van IR module met L293D en Mediatek Linkit een boord.Stap 1: vereisten L293D Motor Driver IC.2 IR Sensor Modules.Chassi voor Bot.Mediatek LinkItOne-Board2 100 RP
TurtleDuino Object vermijden Robot

TurtleDuino Object vermijden Robot

Hallo, in dit instructable ik zal tonen u stap voor stap hoe te bouwen van de TurtleDuino, een object vermijden robot, met een Arduino UNO microcrontroller aan boord. Ik ontwierp de TurtleDuino met behulp van materiaal van de hardware winkel (Home De
Obstakel ontwijkt Robot met behulp van de Arduino Uno en de nabijheid van de IR Sensor

Obstakel ontwijkt Robot met behulp van de Arduino Uno en de nabijheid van de IR Sensor

Volg de stappen voor het maken van een obstakel vermijden Robot met behulp van Arduino Uno en IR Sensor van de nabijheidStap 1: Onderdelen die nodig zijn1) Arduino Uno R3 (kloon zal doen)2) IR naderingssensoren (2 aanbevolen)3) chassis met motoren4)
Hoe maak je een obstakel te vermijden Robot

Hoe maak je een obstakel te vermijden Robot

obstakel te vermijden robot is een eenvoudige robot die wordt beheerd door een arduino en wat het doet is dat het gewoon zwerft rond en vermijdt obstakels. Het detecteert de belemmeringen met een ultrasone sensor van HC-SR04 met andere woorden als de
Obstakel te vermijden Robot

Obstakel te vermijden Robot

Dit instructable is de schriftelijke versie van mijn "Arduino: hoe te bouwen een obstakel te vermijden Robot" Youtube-video die ik onlangs heb geüpload. Ik raden u om het te controleren.Dus, zonder dralen, laten we beginnen!Stap 1: Een chassis!
Arduino obstakel te vermijden Robot

Arduino obstakel te vermijden Robot

In dit instructable ik zal u tonen hoe te maken van uw eigen obstakel te vermijden robot!We zullen de Arduino uno board en een ultrasone sensor gebruiken. Als de robot een object voor, met de hulp van een kleine servomotor, detecteert scant het het g
Obstakel te vermijden Robot V2

Obstakel te vermijden Robot V2

ik deed onlangs een instructable op een eenvoudige belemmering vermijden robot. In dit instructable ik zal de uitvoering van een panning PING))) sensor, in tegenstelling tot de vorige robot die sensor werd stationaire. Ik zal gebruik maken van deze d
Obstakel te vermijden Robot - Motor Shield

Obstakel te vermijden Robot - Motor Shield

Hallo jongens! Dit is een eenvoudige en elementaire tutorial voor het maken van een obstakel te vermijden Robot... Lees verder...Stap 1: Benodigde materialen Het obstakel te vermijden Robot u nodig te bouwen-Arduino Uno R3 (aangeraden Arduino Uno r3