Ik ben bezig met een robot,
alleen hoe moet ik de servos (ik heb F 3003's) aansturen ?
Ik heb dit al gezien, maar op het forum heb ik ook al gelezen dat je het gewoon met een PIC kan doen.
Wat kan ik nu het beste doen ?

Dat hangt af van de hoeveelheid servo's die je aan wilt sturen.
wat voor robot ben je aan het bouwen? bij een wat groter aantal servo's kan je het beste een seriele servo interface gebruiken, of die servo driver die jij aangaf.
bij quadrapod's, biped's, hexapod's en robotarmen(servo-angedreven natuurlijk) worden eigenlijk altijd servo interfaces gebruikt.

bij 2 servo's voor de aandrijving van een rijdend robotje kan je net zo goed een pic of avr gebruiken.

gr madthijs

de servo controllers die te koop zijn op internet werken zeer goed maar zijn een beetje prijzig. je kunt beter een pic of avr programmeren als servocontroller en dan via rs232 of I²C commando's doorsturen die dan omgezet worden in beweging. Ik weet niet wat uw programmeer ervaring is maar je kunt dit doen op volgende :

een servo heeft om de 20 ms een puls nodig met een tijdsduur van 0.5 ms tot 2.4ms ( hangt af van servo tot servo maar in mijn geval is dit het geval).Dus dan kan je eigelijk om de 2.5 ms veranderen van servo multiplexen (zie tekening)noemt da. zo kun je in 20ms 6 servo's aansturen. als je nu in om de 2.5ms 2servo's aanstuurt vlak achter elkaar dan kun tot 14servo's aansturen met 1pic. werkt heel goed bij mij.Via een timerinterrupt kun je deze tijd creeren. mijne interrupteert om de 10 µs dus kan niet echt veel anders met uw interupt doen. da zorgt dus voor een resolutie van 190 stappen. je kunt nog kleiner maar is ni echt nodig want 1stap zie je bijna niet.

http://www.uploadarchief.net/files/download/servo%20aansturing.JPG

Ik ben de PlexiBot V aan het nabouwen,
alleen wil ik er dan nog een dubbele arm bovenop maken.
Om dingen te kunnen verplaatsen.

http://www.circuitsonline.net/forum/view/29812

Hier heb ik een tijd geleden eea gezet, als je nog meer wilt weten mag je dat in dat topic posten, dan kan ik er wel wat bij verzinnen.

Op 12 september 2006 19:48:22 schreef Bjorn85:
de servo controllers die te koop zijn op internet werken zeer goed maar zijn een beetje prijzig. je kunt beter een pic of avr programmeren als servocontroller en dan via rs232 of I²C commando's doorsturen die dan omgezet worden in beweging. Ik weet niet wat uw programmeer ervaring is maar je kunt dit doen op volgende :

een servo heeft om de 20 ms een puls nodig met een tijdsduur van 0.5 ms tot 2.4ms ( hangt af van servo tot servo maar in mijn geval is dit het geval).Dus dan kan je eigelijk om de 2.5 ms veranderen van servo multiplexen (zie tekening)noemt da. zo kun je in 20ms 6 servo's aansturen. als je nu in om de 2.5ms 2servo's aanstuurt vlak achter elkaar dan kun tot 14servo's aansturen met 1pic. werkt heel goed bij mij.Via een timerinterrupt kun je deze tijd creeren. mijne interrupteert om de 10 µs dus kan niet echt veel anders met uw interupt doen. da zorgt dus voor een resolutie van 190 stappen. je kunt nog kleiner maar is ni echt nodig want 1stap zie je bijna niet.

[afbeelding]

Dat kan veel efficienter...
Als je een loop maakt waar in het begin alle pulssignalen aangaan, en na verloop van tijd uitgezet worden afhankelijk van de gewenste positie heb je ongeveer 18ms per loop om gegevens te ontvangen verwerken ;)

Iets in de trant van...


Basic:

symbol servoa = porta.0
symbol servob = porta.1
...
symbol servox = porte.3

dim sa as byte
dim sb as byte
...
dim sx as byte

dim count as byte

While (1)
   Set_Values: ;in dit label moeten de waardes berekent worden voor alle servo`s sa ... sx. Ook andere berekeningen
      sa = 100
      sb = 50
      ...
      sx = 125
      
      delayms ? ; zorg dat van label Set_Values tot hier altijd(!) +- 18ms duurt.

   Pulsout:
   servoa = 1
   servob = 1
   ...
   servox = 1

   For count = 0 to 255
      if count = sa then
         servoa = 0
      endif
      if count = sb then
         servob = 0
      endif
      ...
      if count = sx then
         servox = 0
      endif

      delayms 15 ;Zorg dat de totale loop hier op (2ms / 255) uitkomt
   Next

Wend

[Bericht gewijzigd door elmowww op ]

Op 13 september 2006 10:20:32 schreef elmowww:
[...]

Dat kan veel efficienter...
Als je een loop maakt waar in het begin alle pulssignalen
aangaan, en na verloop van tijd uitgezet worden afhankelijk van de gewenste positie heb je ongeveer 18ms per loop om gegevens te ontvangen verwerken ;)

idd :) veel efficienter. De manier die ik gebruikt hebt was de eerste die ik wou proberen en heb daarna eigelijk ni vereenvoudigd maar misschien pas ik het in de loop van de tijd wel op deze manier aan.

Maar je kan dus ook met die servo controller,
die 4 die ik heb aansturen ?
Want ik ben bang dat het er snel meer gaan worden. (die servos :P)