bluebird servo aansturen

Discussie in 'Modelbouwsoftware' gestart door Tomt0m, 21 jun 2010.

  1. Tomt0m

    Tomt0m Guest

    Ik gebruik een stingray robot met parallax board.
    Hiermee wil ik mijn bluebird bms631 servo aansturen.
    Ik heb mijn servo omgebouwd naar continious rotation, maar ik heb bij andere servo's ervaren dat dit geen invloed moet hebben op de code.

    Nu heb ik de volgende 2 code's om de servo aan te sturen:
    Code:
    PUB Set(Pin, Width)|S_Width                                                     'Set Servo value
          S_Width := LowRange #> Width <# HighRange                                 'limit Width value
          Pin :=    0 #> Pin <# 31                                                  'limit Pin value between 0 and 31
          if RampFlag == 0
             ServoData[Pin] := (clkfreq / _1uS * S_Width)                           'calculate # of clocks for a specific Pulse Width
          else
             ServoData[Pin] := ((clkfreq / _1uS * S_Width)/SERVO#CoreSpeed)*SERVO#CoreSpeed
              
          ServoTarget[Pin] := ServoData[Pin]
          
          if S_Width==Width 
             dira[Pin] := 1                                                         'set selected servo pin as an OUTPUT
          else
             dira[Pin] := 0                                                         'set selected servo pin as an INPUT only if Width out of range 
          ServoPinDirection := dira                                                 'Read I/O state of ALL pins
    Code:
    PUB lift(Pin, Delay, Count)
    dira[Pin]~~
    repeat Count
      !outa[Pin]
      waitcnt(Delay + cnt)
    De 1e code zou moeten werken bij de Width van 1000 voor de ene richting en 2000 voor de andere richting. (1500 betekent stil staan).
    Deze code werkt maar sporadisch, ik heb geen idee waarom.

    De 2e code zou moeten werken met een delay van 1_000_000 of 100_000. De count zorgt hier voor het aantal stappen, wat er voor zorgt dat ik precies het aantal rotaties kan bepalen. helaas werkt deze code helemaal niet bij deze servo.


    Mijn vraag is of iemand, hopelijk met ervaring met deze servo, mij kan helpen met de aansturing.

    Alvast bedankt.
     
  2. Anko

    Anko

    Lid geworden:
    25 feb 2008
    Berichten:
    4.996
    Locatie:
    Hoorn (NH)
    De potmeter kent geen endless rotation.. dus het gaat sowieso niet lukken.... wat wel kan, potmeter centreren, waardes opnemen en vervangen voor vaste weerstanden waarmee het feitelijk een vertraagde puls gestuurd motortje wordt..
     
  3. Tomt0m

    Tomt0m Guest

    De potmeter is wel gecentreerd, daarom werkt de 2e code ook. Hiermee zet je de servo in een principe maar doordat de potmeter is gecentreerd is, komt hij nooit op deze positie en blijft dus eindeloos ronddraaien.
    Het is echt mogelijk om volle rotaties te maken, maar het probleem zit in de software.
     

Deel Deze Pagina