Arduino robot arm servo probleem


Bedankt voor je snelle reactie.

Uit jou link concludeer ik dat de verkoper mij waardeloze servo’s heeft verkocht.
Ik realiseer me dat ik wellicht vrij goedkope servo’s heb gekocht maar om eens mee te experimenteren leek me dit geen probleem, kennelijk heb ik Mn ervaring met Servo kwaliteit ondervonden.

Ik contact de verkoper en ik hoop dat hij een (werkend) alternatief heeft.
Weet Iemand toevallig een betaalbaar alternatief ? Gezien ik niet zo thuis ben in servoland.
Het is enkel experimenteel.

Bedankt !

Wordt de Servo wel juist aangestuurd door de arduino. In bovenstaande specs zie ik dat het over een digitale servo gaat. Deze heeeft een ander stuur signaal dan een analoge.
Zie volgende site : https://www.futabarc.com/servos/digitalservos.pdf

In de modelbouw zijn hier ook vaak problemen mee, ontvangers die het ene type servo wel aanstuurt en het andere niet, heet lopende servo's, servo's die niet juist positioneren,.....

[Bericht gewijzigd door Electroman op 5 januari 2018 07:54:45 (27%)]

Je originele verhaal klinkt mij een beetje in de oren alsof de servo aangepast is om als wiel aandrijving dienst te kunnen doen. Zet je dan 1ms pulsen op de ingang dan is dat dus vollekracht vooruit!

four NANDS do make a NOR . Kijk ook eens in onze shop: http://www.bitwizard.nl/shop/

@rew

In de notes van de specs staat dus inderdaad :

Notes
This servo can be purchased with 180 or 360 degree rotation for robotics applications.

De kans bestaat dus dat het een 360° versie is.

@Electroman,

Ik zal vanavond eens een servo.writemicroSecond op 1500 signaal uit tsturen.
Ik dacht dat de Arduino dit zelf zou doen tijdens de mapping van 0 naar 180 en het uitgangs signaal hetzelfde zou doen. Wellicht heb je gelijk.

Leverancier benadrukte wel dat het om een 180 Servo gaat en dus inderdaad een PWM signaal tussen 500 en 2500 us nodig heeft.

Ben benieuwd

Nou, ik heb onderstaande sketch geprobeerd.
wederom eerst met de 9G servo, wat werkte. keurig van 90° naar 180° en terug enz.
Vervolgens de MG996R servo en werkte totaal niet.
Hij blijft continu 360° roteren.
Geen van de 6 lijkt te doen wat ik wil.

Waar gaat dit dan fout ?

@rew:

Ik heb de servo open gemaakt en heb hierin een potmeter welke 180°+ draait maar absoluut geen volledige 360°.
Het lijkt me dan ook niet dat het een 360° servo betreft of vergis ik me ?

code:



 #include <Servo.h> 

Servo myservo;

void setup() 
{ 

  myservo.attach(9, 500, 2500);
  myservo.writeMicroseconds(1500);  
  
} 

void loop() {
 myservo.writeMicroseconds(2500);
 delay(200);
 myservo.writeMicroseconds(500);
delay(200);
myservo.writeMicroseconds(2500);
 delay(200);
 myservo.writeMicroseconds(500);
delay(200);
myservo.writeMicroseconds(2500);
 delay(200);
 myservo.writeMicroseconds(500);
delay(200);
}
  
Lambiek

Special Member

Op 5 januari 2018 00:01:23 schreef MYH1990:
De motor draait dwars door de potmeter heen.

Bij een goede servo kan dat niet, er zit een mechanische eind stop op zodat de servo niet rond kan draaien.

Hier wat meer info over servo's.

https://www.circuitsonline.net/artikelen/view/48

Op 5 januari 2018 07:51:07 schreef Electroman:
In bovenstaande specs zie ik dat het over een digitale servo gaat. Deze heeeft een ander stuur signaal dan een analoge.

Zelf gebruik ik best wel eens servo's zowel analoog als digitaal, stuur ik aan met een pic controller. En ik heb nog nooit dit probleem gehad, dus denk dat het toch in de manier van aansturen zit. Ik gebruik voor beide types de zelfde code.

Als je haar maar goed zit, GROETEN LAMBIEK.

Op 6 januari 2018 11:57:19 schreef Lambiek:
[...]
Bij een goede servo kan dat niet, er zit een mechanische eind stop op zodat de servo niet rond kan draaien.

Ik heb de servo open gehad en het is alleen de potmeter die zou kunnen dienen als mechanische eindstop.
Maar hier drukte de motor, en zeker met behulp van de gearbox met gemak doorheen.

[...]
Zelf gebruik ik best wel eens servo's zowel analoog als digitaal, stuur ik aan met een pic controller. En ik heb nog nooit dit probleem gehad, dus denk dat het toch in de manier van aansturen zit. Ik gebruik voor beide types de zelfde code.

Ik heb veel gelezen over analoge en digitale servo's en voor zover ik heb begrepen kunnen ze beide overweg met dit signaal.Daarnaas word deze servo veelvoudig in gebruikt in projecten op inet.

Als ik hun opstellen gerbuik, blijven ze roteren.

Ik begin zelf aardig de indruk te krijgen dat de servo's niet goed zijn...maar 6 stuks lijkt me gewoon teveel.
De servo's zijn volgens de leverancier getest na productie.
Leverancies verkoopt ook alleen maar de 180gr servo's.

Iemand nog een andere sketch waarmee elke digitale servo zou moeten werken?
Mocht iemand nog andere ideeën hebben hoor ik het graag.

Lambiek

Special Member

Op 8 januari 2018 13:28:12 schreef MYH1990:
Ik heb de servo open gehad en het is alleen de potmeter die zou kunnen dienen als mechanische eindstop.

Dan heb je geen goede of een slechte qualiteit servo te pakken. Er hoort een flinke nok te zitten die als mechanische eind stop dient. en niet de flut eind stop van de potmeter.

....., en voor zover ik heb begrepen kunnen ze beide overweg met dit signaal.

Dat is ook zo, zelf doe ik niet anders.
Maar hou je ook die 20mS aan "de 50Hz frequentie dus" want dat is wel belangrijk.

Als je haar maar goed zit, GROETEN LAMBIEK.

Op 8 januari 2018 14:02:24 schreef Lambiek:
[...]

Dat is ook zo, zelf doe ik niet anders.
Maar hou je ook die 20mS aan "de 50Hz frequentie dus" want dat is wel belangrijk.

Nou daar zeg je me wat,
Misschien denk ik nu helemaal de verkeerde kant op hoor.
Maar 20 millisec= 20.000 microseconden.

In mijn sketch heb ik 2000 microsec staan.
Hierdoor zou de puls 10x groter(of langer) zijn.

Of is dit een compleet verkeerde beredenering ?

Lambiek

Special Member

Ik weet niet hoe dat met een Arduino zit, maar in je code staat "delay200" ik weet niet wat dat is. Is dat 200mS of 200uS? of iets anders?

En de puls breedte voor je servo zit normaal zo'n beetje tussen de 1000 en 2000mS, maar dat kan per type ook verschillen.

Staat allemaal in de link die ik gepost heb.

Als je haar maar goed zit, GROETEN LAMBIEK.

In dit geval is de delay hoelang hij de servo in die stand houdt.
Dus ik geef eerst het PWM signaal in microsec.
Vervolgens geef ik een delay en houd hij de servo dus 200 milliseconden vast op die positie.

void loop() {
myservo.writeMicroseconds(2500);hier geef ik de freq aan.

Lambiek

Special Member

Ik denk niet dat het goed werkt op die manier, en dat blijkt eigenlijk ook wel.

Je moet de positie bepalen, en dan eigenlijk iets van een "for next" lus gebruiken voor de wacht tijd. Of iets met een teller, want op deze manier weet de servo elektronica niet wat die waardes zijn.

Normaal als ik een servo naar een X positie stuur doe ik dat op deze manier:

pic basic code:


Symbol SNELHEID = 20   ; Frequentie servo 50Hz

pic basic code:


For POSITIE_R = 1000 To 2600 Step 5  
     Servo MOTOR_R,POSITIE_R                                 
      DelayMS SNELHEID                      
    Next                      
   
    For POSITIE_L = 2600 To 1000 Step - 5    
     Servo MOTOR_L,POSITIE_L                  
      DelayMS SNELHEID                      
    Next 

Met "step 5" bepaal je hoe snel er door "for next" gelopen wordt, en "delayms snelheid" staat voor 20mS is 50Hz. En als je de servo een X tijd wil laten wachten voor dat hij naar een andere positie gaat zet je een wachttijd tussen de twee for next lusjes in. De positie in het voorbeeld ligt tussen de 1000 en 2600, de gebruikte servo haalde dat wel.

Het is helaas niet in Arduino gebrabbel, maar ik heb niet anders.

Als je haar maar goed zit, GROETEN LAMBIEK.

Ik waardeer je meedenken.
Ik zal vanavond de oscilloscoop er eens aanhangen.
Als ik een puls heb van 1.5 milliseconden dan is mn uitgangssignaal gewoon goed en zal de servo stil moeten staan en niet roteren.

Dus als ik 1.5 millisec continu meet, en hij draait toch, is mijn conclusie :servo niet goed.

Eens?

Onderstaand was voor mn koffie en sloeg nergens op besef ik me nu.

Op 8 januari 2018 14:27:10 schreef MYH1990:
[...]

Nou daar zeg je me wat,
Misschien denk ik nu helemaal de verkeerde kant op hoor.
Maar 20 millisec= 20.000 microseconden.

In mijn sketch heb ik 2000 microsec staan.
Hierdoor zou de puls 10x groter(of langer) zijn.

Of is dit een compleet verkeerde beredenering ?

Lambiek

Special Member

Op 8 januari 2018 15:32:31 schreef MYH1990:
Als ik een puls heb van 1.5 milliseconden dan is mn uitgangssignaal gewoon goed en zal de servo stil moeten staan en niet roteren.

Dus als ik 1.5 millisec continu meet, en hij draait toch, is mijn conclusie :servo niet goed.

Eens?

Ja, mits dat bij een frequentie is van 50Hz.

Dit dus:

Blokschema modelbouw servo.BMP

Kijk bij imput.

Als je haar maar goed zit, GROETEN LAMBIEK.

Duidelijk ! bedankt zover.

Ik heb nog wel een aantal vragen over de interne werking van de servo, maar ik ga eerst even googlen voordat ik vragen stel waar ik zelf het antwoord op kan vinden.

Ik laat hier het resultaat van de meting even weten.
Mocht het signaal niet kloppen, kan er verder gediscussieerd worden.

Maar omdat de motor nu dwars door de potmeter heen gedraaid is staat de potmeter niet meer op zn "Oorspronkelijke" stand. Maar in mijn redenering maakt dat niet uit als ik nu gewoon een 1.5ms signaal naar de servo stuur toch?

Hij moet toch gewoon naar 90gr draaien en weet wanneer hij daar is doormiddel van de potmeter?( mits hij wel binnen de goede helft van de potmeter staat en niet in het "doorgedraaide" deel)

En de waarde van de potmeter( 0-3.2Kohm) heeft ook weinig invloed omdat deze dient als spanningsdeler en niet als variabele weerstand, begrijp ik goed toch?

Lambiek

Special Member

Op 8 januari 2018 16:02:14 schreef MYH1990:
Ik heb nog wel een aantal vragen over de interne werking van de servo, maar ik ga eerst even googlen voordat ik vragen stel waar ik zelf het antwoord op kan vinden.

Staat ook in het artikel. :)

Maar omdat de motor nu dwars door de potmeter heen gedraaid is staat de potmeter niet meer op zn "Oorspronkelijke" stand. Maar in mijn redenering maakt dat niet uit als ik nu gewoon een 1.5ms signaal naar de servo stuur toch?

Als de potmeter nog heel is zou je dat wel denken.

Hij moet toch gewoon naar 90gr draaien en weet wanneer hij daar is doormiddel van de potmeter?

Ja.

En de waarde van de potmeter( 0-3.2Kohm) heeft ook weinig invloed omdat deze dient als spanningsdeler en niet als variabele weerstand, begrijp ik goed toch?

Begrijp niet wat je hier mee bedoeld? Bedoel je hier de interne potmeter mee van de servo?

Even tussen door, wat is het merk/type van je robotarm?

Als je haar maar goed zit, GROETEN LAMBIEK.

Ja, ik bedoel inderdaad de Servo potmeter maar heb uitgebreid je link gelezen en die sprak boekdelen, dus bij deze vraagt beantwoord.

Robot arm is merk onbekend.
T zijn eigenlijk gewoon wat beugels en servo’s die samen een armpje vormen.
De Servo zijn van merk towertop,type MG996R.

Ik heb gelezen dat er meer mensen zijn met problemen met dit type.

Ik heb nu twee andere servo’s geopend, en jawel, 1 ervan had een mechanische eindstop.
De andere had enkel een gaatje in het tandwiel waar deze eindstop(een pennetje) in hoort.

Daarnaast heb ik de oscilloscoop aan Mn PWM draad gehangen en keurig een signaal van 5volt voor de duur van 1,5millisec per 20millisec.

Ik ga een ander type Servo bestellen met hetzelfde koppel en eens kijken hoe het daarmee gaat.

Dat het niet gaat werken met deze servo’s heb ik me bij neergelegd.
De rede waarom kan ik nog niet loslaten.

Maar ik beschouw de kosten die ik heb gemaakt voor deze slechte servo’s maar als winst op Mn kennis op Servo gebied want ik heb hier een hoop kennis aan verworven.

Zodra ik de nieuwe servo’s binnen heb test ik ze meteen en zal ik laten weten of deze wel werken met dezelfde code.

Bedankt zover en word vervolgt !

@ Lambiek,

Ik kan het toch niet helemaal los laten.
stel:
Ik haal de servo helemaal uit elkaar, inclusief de potmeter.
Ik stuur vervolgens een PWM van 1,5milliseconden.
Dan moet hij blijven draaien totdat ik de servo handmatig draai toch?

Want als ik dat nu doe blijft hij gewoon ronddraaien.
Degene met mechanische eindstop loop tegen z'n stop aan maar blijft doorduwen.
Nogmaals, volgens m'n scoop zend ik echt een 1,5 ms signaal uit.

Ik wil gewoon weten wat het is, minder fijne eigenschap...haha

Op 9 januari 2018 08:15:46 schreef MYH1990:

Dan moet hij blijven draaien totdat ik de potmeter handmatig draai toch?

ik bedoel potmeter natuurlijk...

Ik wil duidelijk hebben wat continue draaien is. Is dat heen en weer wiebelen of steeds de zelfde kant op draaien? Meerdere rondjes dus.

Zoals lambiek al zegt, ook de super goedkope 9g sevros hebben een redelijke eindstop waar de motor echt niet doorheen kan draaien.

Dan over de aansturing: met herhaling 50Hz /20 ms, een puls van 1-2 ms. Daar zou je een verdraaing van min 180gr mee moeten kunnen krijgen. Omdat de pot wel 270 kan draaien is het voor de fabrikant gratis om extra verdraaing buiten de 1-2 ms toe te voegen. In dit stadium zou ik me eerst tot het normale 1-2ms bereik beperken.

four NANDS do make a NOR . Kijk ook eens in onze shop: http://www.bitwizard.nl/shop/
Lambiek

Special Member

Op 9 januari 2018 08:15:46 schreef MYH1990:
stel:
Ik haal de servo helemaal uit elkaar, inclusief de potmeter.
Ik stuur vervolgens een PWM van 1,5milliseconden.
Dan moet hij blijven draaien totdat ik de servo handmatig draai toch?

Ja, dan blijft de motor draaien totdat je de interne potmeter verdraaid en de signalen gelijk zijn en dan zou de motor moeten stoppen.

Want als ik dat nu doe blijft hij gewoon ronddraaien.

en als je nu de waarde eens helemaal veranderd, geen 1.5mS maar hoger of lager. Misschien zit er wel een hele grote afwijking in.

Als je haar maar goed zit, GROETEN LAMBIEK.

Op 9 januari 2018 09:18:02 schreef rew:
Ik wil duidelijk hebben wat continue draaien is. Is dat heen en weer wiebelen of steeds de zelfde kant op draaien? Meerdere rondjes dus.

Niet wiebelen maar continu 360gr rondjes draaien, als een normale motor.

Zoals lambiek al zegt, ook de super goedkope 9g sevros hebben een redelijke eindstop waar de motor echt niet doorheen kan draaien.

Van de 6 die ik gekocht heb, ontbreken bij 2 stuks de mechanische eindstop. dit is eenvoudig op te lossen door een pen of bus of iets in het gaatje monteren waar de originele pen in hoort.

Dan over de aansturing: met herhaling 50Hz /20 ms, een puls van 1-2 ms. Daar zou je een verdraaing van min 180gr mee moeten kunnen krijgen. Omdat de pot wel 270 kan draaien is het voor de fabrikant gratis om extra verdraaing buiten de 1-2 ms toe te voegen. In dit stadium zou ik me eerst tot het normale 1-2ms bereik beperken.

Dat begijp ik, het punt is echter dat wanneer ik dit doe, de servo 1 kant op blijft draaien, ongeacht of ik nou 1ms of 1,5 of 2ms uitstuur,
Motor blijft 1 kan op draaien (tegen de klok in).
Ook degene met mechanisch3e eindstop, alleen loop hij hier tegen aan en maar blijft kracht uitoefenen en de motorstroom neemt toe.

wanneer ik een 9g servo pak, werkt alles naar behoren.

@Lambiek

en als je nu de waarde eens helemaal veranderd, geen 1.5mS maar hoger of lager. Misschien zit er wel een hele grote afwijking in.

Dit kan ik eens proberen.

Dan is het gewoon toch duidelijk: Jij hebt gewone servos willen kopen, en hebt grotendeels gemodificeerd voor wielmotor dienst gekregen. En degenen waar de eindstop nog inzit kennelijk is daar toch ook al de koppeling tussen de pot en de as verbroken.

Het modificeren voor "continue rotatie" heb IK ooit als volgt gedaan: Pot in het midden zetten en mechanische eindstop en verbinding met pot verbreken. Andere optie is om de elektrische verbinding naar de pot te verbreken en dan elektrisch extra componentjes te gaan toevoegen. Omdat dit extra werk is heb ik dat toen niet gedaan. Die mechanische verbinding moet je toch slopen, anders loopt de pot tegen zijn eindstop aan.

Dus... mij lijkt het dat je de rejects uit een "modificeer naar continue rotatie" fabriekje hebt gekregen.

four NANDS do make a NOR . Kijk ook eens in onze shop: http://www.bitwizard.nl/shop/