Servo not reaching full travel


Closed Thread
Results 1 to 40 of 40
  1. #1

    Default Servo not reaching full travel

    Hi guys,

    I've made a circuit that i use to work with a futaba servo.

    The problem is that i cannot get it to reach it's extremes.
    The max i can get is a total of 90º from left to right ( and i know these servos move more that this ).

    I'm running the code like this...

    ( sample )

    Moving left:
    if pos > 25 then
    pos = pos - 50
    servo =1
    pauseus 1000+pos
    servo =0

    Moving right:
    if pos <1300 then
    pos = pos + 50
    servo =1
    pauseus 1000+pos
    servo =0

    I tryed to change the limits but the servo does not move pass it ( upper limit is 1300 and center is 700 )

    Thanks in advance

  2. #2
    Join Date
    May 2004
    Location
    NW France
    Posts
    3,614


    Did you find this post helpful? Yes | No

    Question What's that ???

    Hi ruijc

    I'd be VERY surprised those lines give something you 'd waited for ...

    <<
    if pos > 25 then
    pos = pos - 50
    servo =1
    pauseus 1000+pos
    servo =0
    >>

    Now,

    Which processor ?
    Initialisation lines ???
    variables ? ( plus which type: bit, byte, Words, longs ???? )

    try a little effort ... for others to undunstand what you've done ( or tried to do ...)

    Alain
    ************************************************** ***********************
    Why insist on using 32 Bits when you're not even able to deal with the first 8 ones ??? ehhhhhh ...
    ************************************************** ***********************
    IF there is the word "Problem" in your question ...
    certainly the answer is " RTFM " or " RTFDataSheet " !!!
    *****************************************

  3. #3


    Did you find this post helpful? Yes | No

    Default

    Hi Alan,

    I tryed diferent pics like 16F84, 16F628, 16F88 and speeds of 3Mhz, 4Mhz and 8Mhz.

    Here is the all code ( setting lines learned from you ):

    '************************************************* ****************************
    '19/12/2007
    '
    'PWM experience to control servo
    '
    'PIC 16F628 @ 4Mhz

    '************************************************* ****************************
    'Config

    PIE1 = 0 'off
    PIR1 = 0 'off
    CMCON = 7 'comparator off
    VRCON = 0 'Vref Off
    T1CON = 0


    '************************************************* ****************************
    'DEFINEs
    '************************************************* ****************************

    'OSC

    DEFINE osc 4


    '************************************************* ****************************
    ' variables

    va1 var word
    va2 var word
    ser var word
    pos var word
    na var word
    nb var word

    CLEAR

    '************************************************* ****************************
    'I/O's

    PORTA = %00000000
    PORTB = %00000000

    TRISA = %00000011
    TRISB = %00000011

    '************************************************* ****************************
    'PINS

    bu1 var PORTA.0
    bu2 var PORTA.1
    a2 var PORTA.2
    a3 var PORTA.3
    a4 var PORTA.4
    MCLR var PORTA.5
    a6 var PORTA.6
    a7 var PORTA.7

    b4 var PORTB.4
    b5 var PORTB.5
    b6 var PORTB.6
    b7 var PORTB.7

    bu4 var PORTB.0
    bu3 var PORTB.1
    led var PORTB.2
    servo1 var PORTB.3


    '************************************************* ****************************

    Start:


    Low servo1
    Gosub center

    mainloop:

    If bu1 = 1 Then
    Gosub left
    Endif
    If bu2 = 1 Then
    Gosub center
    Endif
    If bu3 = 1 Then
    Gosub right
    Endif

    servo1 = 1
    Pauseus 1000 + pos
    servo1 = 0
    Pause 16

    Goto mainloop

    left:
    high led
    If pos < 1800 Then
    pos = pos + 75
    Endif
    servo1 = 1
    Pauseus 1000 + pos
    servo1 = 0
    Pause 16
    low led
    Return

    right:
    high led
    If pos > 25 Then
    pos = pos - 75
    Endif
    servo1 = 1
    Pauseus 1000 + pos
    servo1 = 0
    Pause 16
    low led
    Return

    center:
    high led
    High 5
    Pause 500
    pos = 700
    Pause 500
    servo1 = 1
    Pauseus 1000 + pos
    servo1 = 0
    Pause 16
    low led
    Return

    end

  4. #4
    Join Date
    Mar 2006
    Location
    China
    Posts
    266


    Did you find this post helpful? Yes | No

    Default Hmmm

    Let's just go over the basic idea:

    Center position of futaba servo is 1.52ms puls length sent approx every 20 ms. To move it to min position 1 ms and to max position 2 ms.

    But when I recently did a thingy for a RC receiver I found out that the pulses are acctually more in the 0.8 ms - 2.2 ms range to allow for trim settings.

    If you plan to have more than one servo I would recommend you to have a look at DT software PWM.

    If you want to have bigger movement try to change your limit values.

    /me

  5. #5


    Did you find this post helpful? Yes | No

    Default

    Hi Jumper,

    when you say change the limit values you mean the :

    If pos < 1800 Then

    and

    If pos > 25 Then

    right ?

    I added a lcd and did some studies. I did increased the upper value but the servo just stops when it reaches +- 1500.

    The center is 700

    I cant work with numbers bellow 0 i'm affraid.

    The plan is to have only one servo, but i need to use it with more travel ( not continuous ) as 90º is too short

    .

  6. #6
    Join Date
    Mar 2006
    Location
    China
    Posts
    266


    Did you find this post helpful? Yes | No

    Default Try this

    Hi,

    Hook up a 10k potentiometer (or whatever you have in your drawer) to i.e AN0. Vdd on one side of the pot. GND on the other and the wiper goes to AN0. Put a 0.1 uF cap between wiper and GND to reduce noice .Connect the servo on i.e PORTB.1 ... if you use a voltage meter on the wiper and adjust the voltage to ~3 V you should get a 1.5 ms pulse every 20ms. Now you can turn the pot and then you can try the end positions... your LCD will be great here.


    DEFINE ADC_BITS 8

    ' DEFINE YOUR LCD SETTINGS HERE

    SERVO1 Var PORTB.1
    AD0 var word
    SERVO1_Pulse var byte
    Total_Delay var word
    n var byte

    TRISA 255 ' PORTA to input
    ?????????? 'set up as analog CHECK DATASHEET for you PIC
    ?????????? ' turn off comparators CHECK DATASHEET

    n=0
    Goto main


    update_LCD:
    n=0 'reset LCD loop counter
    'Here you write your LCD code to send the Servo1_pulse value to your LCD
    RETURN

    main:

    ADCIN 0, AD0 'READ POT
    SERVO1_Pulse=AD0*10 'Scale value max = 2550 us
    SERVO1=1 'Start the servo pulse
    Pauseus(SERVO1_Pulse) 'wait a while
    CH1=0 'Stop the pulse
    Total_Delay=(20000-Servo1_Pulse) 'calculate loop delay so we
    Pauseus(Total_Delay) 'get approx 20 ms loop time
    N=n+1
    if n>=50 then gosub update_LCD 'update LCD every 50 loops i.e once per second
    goto main

    end


    try it and if it doesnt work let me know so I can help. This code is untested but should work if you set up the analog port correctly. After this you will atleast know how far your servo will travel.

    /me
    Last edited by Jumper; - 22nd December 2007 at 12:58.

  7. #7


    Did you find this post helpful? Yes | No

    Default

    Hi Jumper,

    Fist of all thanks for your help

    I had some issues with your code but i got the idea ( nice one by the way )

    The problem is that even so the servo just moves a total of 90º

    I've googled a bit and for futaba servos they state that you need :

    center : 1,5ms
    0º : 1ms
    120º : 2ms
    30º : 1.16ms

    ( stop time can vary from ~15ms to 30 ms - not critical )

    I'm not being able to apply this to my servos

    Even with a simple pauseus 1000 ( that should be 1ms and the servo should center ) this does not happen

    .

  8. #8
    Join Date
    Mar 2006
    Location
    China
    Posts
    266


    Did you find this post helpful? Yes | No

    Default Try again

    Do you have more servos? Try a different one since the one you are using might be bad.

    If you connect the servo to a normal RC receiver what result do you get then?


    /me

  9. #9
    skimask's Avatar
    skimask Guest


    Did you find this post helpful? Yes | No

    Default

    Quote Originally Posted by ruijc View Post
    center : 1,5ms
    0º : 1ms
    120º : 2ms
    30º : 1.16ms
    Even with a simple pauseus 1000 ( that should be 1ms and the servo should center ) this does not happen
    .
    It looks to me like you might be confusing a couple of the values you stated above.
    From what I'm seeing, you want 1000 to be center and work around that. That's all fine and dandy, but you want the rest of the program to work around it also, which it isn't doing.
    Instead of thinking about it in terms of 0, 90, 120, whatever degrees, think of it in terms of -90 , 0 , +90, etc. degrees, where 0 is center.

    Using your original code...with a few changes...

    Code:
    '.....set up your ports, adcon, cmcon, whatever else is required...
    
    leftend = 1000
    center = 1500
    rightend = 2000
    stepval = 50
    pos = center
    
    moveleft:
    pause 19 'pause 19ms
    if pos > leftend then
    pos = pos - stepval
    else
    goto moveright
    endif
    servo = 1 : pauseus pos : servo = 0 : goto moveleft
    
    Moveright:
    pause 19 'pause 19ms
    if pos < rightend then
    pos = pos + stepval
    else
    goto moveleft
    endif
    servo = 1 : pauseus pos : servo = 0 : goto moveright
    
    end
    And with that code, when pos = 1500, the servo should be centered. pos decreases to leftend, servo moves left, pos gets to leftend, jumps to other loop, pos increases to rightend, servo moves right, pos gets to rightend, jumps to other loop, and over and over.
    Change the value of stepval to change how fast the servo moves back and forth. Simple enough.
    But if it really doesn't work, and your ports are set up correctly, you've got the right config fuses set, etc.etc., then, as Jumper said, it sounds to me like a goofy servo. What kind of Futaba servo are you using? A standard S148 or what?

  10. #10


    Did you find this post helpful? Yes | No

    Default

    Jumper, skimask,

    i did some more digging but all returning to the same thing...

    I tryed skimask's code and the servo uses no more same travel than before.

    I'm using a Futaba's S3152 which is a good servom ( IMO ) ...and so i left the "bad servo" mark to the end.

    I tryed it with a receiver and same thing.

    I'm guessing the servo is really goofy.

    .

  11. #11
    skimask's Avatar
    skimask Guest


    Did you find this post helpful? Yes | No

    Default

    Quote Originally Posted by ruijc View Post
    Jumper, skimask,
    i did some more digging but all returning to the same thing...
    I tryed skimask's code and the servo uses no more same travel than before.
    I'm using a Futaba's S3152 which is a good servom ( IMO ) ...and so i left the "bad servo" mark to the end.
    I tryed it with a receiver and same thing.
    I'm guessing the servo is really goofy.
    .
    Does it move equal distances to the 'left' and 'right' as measured from 'center'? Or is one more than the other? What happens if you change 'leftend' to 500 and 'rightend' to 2500? Does it bind at one end or the other?
    Are you sure you're PIC is running at the same oscillator speed as you have DEFINE'd?

    I haven't done any checking lately, but, is a Futaba S3152 a 'standard' servo? Is it one of the new digital servo's? I don't have any of those, I haven't played with them, so I don't know about their operational characteristics. I'd ASSUME they would operate the same if they're backwards compatible, but I could be wrong...

  12. #12
    Join Date
    Mar 2006
    Location
    China
    Posts
    266


    Did you find this post helpful? Yes | No

    Default hmmm

    http://www.futaba-rc.com/servos/digitalservos.pdf

    the s3152 is a digital servo but as the link sais... it is more or less the same thing. No special codeing and other stuff. Have you torn it apart and had a look at the feedback potentiometer. That pot is the one that feedbacks the position of the servo-horn to the MCU inside the servo (since it is a digital servo).

    Did you try with some other servo yet?

    /me

  13. #13


    Did you find this post helpful? Yes | No

    Default Digital servo tricks and traps

    1. Centre adjustment.
    In most better class servos there is a centre adjustment. To access this, take the servo horn off and use a very small flat blade screwdriver to tweak the potentiometer at the bottom of the servo horn screw mount. This allows you to make an electrical zero adjustment instead of the normal linkage length adjustment.

    2. Digital servos will self destruct if driven against their internal stops.
    Analog servos are fairly benign when driven past their normal stops. They will stall and draw a few hundred milliamps which is tolerable for a few tens of seconds. A digital servo however draws several amps when moving to the command position and if up against the stops the servo motor will get so hot it melts the plastic coil former used in the coreless motor in seconds. Been there, done that - costs hundreds of dollars when the code in a UAV gets it wrong at power up and burns out aileron and flap servos.

    3. Left Right rotation limits.
    1.5 mSecs seems to be the universal centre position. 1 mSec is guaranteed to work for one direction and 2 mSec for the other direction with all brands and types of servos. Outside the 1 and 2 mSec limits you are on your own - it might work with brand/type A but not necessarily with brand/type B. There is NO agreement on normal rotation angles - even within one manufacturer. Servos can have +/- 45, +/- 60 and +/- 90 degrees as their internal design limits. Attempting to push a servo past that will shag the servo quick smart.

    4. PulsOut is a toggle.
    If your code uses the pulsout command to drive the servo make certain you preset the state of the servo drive pin before calling the pulsout command. This command is a toggle and merely sets the pin to the opposite state for the command period. You might be expecting the pin to be low and go high for the pulsout period but real world interference can trip you up and give you the opposite effect. Been there - done that.

    Use
    Low ServoPin
    Pulsout ServoPin, 150 'etc

    HTH
    Brian

  14. #14


    Did you find this post helpful? Yes | No

    Default

    Hi all,

    skimask,

    i'm not really sure if the servo moves equally to both sides because it will depend on where the center is.
    In my program the center is at pos = 700

    The servo never came to the point of hitting it's internal stops and "keeping the motor running" ( if you know what i mean )

    I can increase the pos value but the servo stops when reaching pos +- 1300.

    I think that the minimum value could be the key here...i mean...the min value is 25...can i go lower than this ( minus ) ???

    Jumper,

    I did not opened the servo yet.

    BrianT,

    My servos do not have the center adjustment screw. Were did you see this ? I have never seen this in any of my servos ( hitec, futaba, digital/analog ).

    About the pulsout method...i tryed once that but for some reason it didnt worked as well as my code above...will try it again though

    .

  15. #15


    Did you find this post helpful? Yes | No

    Default Centre adjustment

    Not all servos have a centre adjustment. To check, remove the philips head screw that holds the servo arm on. Look down the hole in the splined shaft that holds the servo arm. If your servo has a centre adjustment, you will see a very small flat blade screwdriver slot. That is the centre adjustment.

    HTH
    Brian

  16. #16
    skimask's Avatar
    skimask Guest


    Did you find this post helpful? Yes | No

    Default

    Quote Originally Posted by ruijc View Post
    Hi all,
    i'm not really sure if the servo moves equally to both sides because it will depend on where the center is.
    In my program the center is at pos = 700
    Put a mark on the servo horn and eyeball it.

    The servo never came to the point of hitting it's internal stops and "keeping the motor running" ( if you know what i mean )
    Stalling perhaps?

    I can increase the pos value but the servo stops when reaching pos +- 1300.
    I think that the minimum value could be the key here...i mean...the min value is 25...can i go lower than this ( minus ) ???
    Somehow, I think you're Oscillator and you're DEFINE's don't match up. Grab an LED, and try a simple one second per flash LED flasher type thing and see what happens.
    I still get the feeling that you're a magnitude or two off the mark here.
    The servo stopping at 1300, tells me that if your oscillator was off by a factor of 2, that the 1300 might actually be 2600. A pulse width of 2.6ms on a servo is 'off the scale' at one end by quite a bit, I don't think it's completely unreasonable that you'd be hitting a stop there rather than around 2-2.1 ms like it should be.

    And another thing...You also said that your center is 700.
    Well, 700 (.7ms) x 2 = 1400 (1.4ms) ....pretty close to 1500 (1.5ms) dontcha think!

    Double check your oscillator settings, frequency, code, etc.etc.etc. I'm sticking with that theory for now....in the absense of better information of course...

  17. #17


    Did you find this post helpful? Yes | No

    Default

    skimask ,


    just a note:
    When i say the center is pos = 700 means that it's 1700 (pauseus 1000+pos ) which is equal to say 1.7ms, right ? ( pretty close to those 1.5ms ).

    About the osc you are right because i already did some work there. I started with a define for a 4mhz speed and ended at a 3 mhz define ( with a define osc 3 i got closer to the real thing )

    this is because i noticed that using define osc 3 i could get more travel with the lower limit ( pos = 25 ) rather than with define osc 4

    .

  18. #18
    Join Date
    Mar 2006
    Location
    China
    Posts
    266


    Did you find this post helpful? Yes | No

    Default Caps

    Hi

    DEFINE OSC 4

    you must use capital letters in the define line.

    /me

  19. #19


    Did you find this post helpful? Yes | No

    Default

    Opps...i did not knew that

    Does that mean that if i use like :

    DEFINE osc 3

    it will not work ?

    shouldnt pbp recognize it anyway ?

    .

  20. #20
    Join Date
    Mar 2006
    Location
    China
    Posts
    266


    Did you find this post helpful? Yes | No

    Default PBP manual section 4.16

    All definitions must be in UPPER CASE .... or the compiler MAY not recognize them.

    This goes for the entire DEFINE STATEMENT. It has to be exactly as stated in the PBP manual or ....... but I guess the warning in the manual about this has to be for a reason.

    I have not spent any time to figure out what if this and what if that. I just stick to the manual and spend my time with writing the code instead.


    shouldnt pbp recognize it anyway ? - May or may not...

    I really don't know but I am sure DEFINE OSC 3 will do the job.

    /me

  21. #21
    skimask's Avatar
    skimask Guest


    Did you find this post helpful? Yes | No

    Default

    Quote Originally Posted by ruijc View Post
    When i say the center is pos = 700 means that it's 1700 (pauseus 1000+pos ) which is equal to say 1.7ms, right ? ( pretty close to those 1.5ms ).
    Ok, that makes a bit more sense now...

    About the osc you are right because i already did some work there. I started with a define for a 4mhz speed and ended at a 3 mhz define ( with a define osc 3 i got closer to the real thing )
    You do realize that DEFINE OSC 3 doesn't really define 3Mhz, it's actually 3.58Mhz, (14.31818 / 4, for use with colorburst crystals, which used to be dirt cheap and easy to find and accurate).

  22. #22


    Did you find this post helpful? Yes | No

    Default

    Thanks for the warning Jumper,

    i have to be more carefull with that from now on

    skimask,

    i've checked my pbp manual and you are right. Osc 3 is really 3.58 Mhz.

    I will try with lower speeds...maybe using the internal oscilators and see what happens

    .

  23. #23
    skimask's Avatar
    skimask Guest


    Did you find this post helpful? Yes | No

    Default

    Quote Originally Posted by ruijc View Post
    skimask,
    i've checked my pbp manual and you are right. Osc 3 is really 3.58 Mhz.
    I will try with lower speeds...maybe using the internal oscilators and see what happens
    .
    That's the thing...you shouldn't have to do that.
    I can run servo's just as happily running 48mhz on the 18F4550 as I can at 4mhz on the same PIC, same program, same everything, just a different DEFINE OSC at the beginning.
    You've got something else going on that's preventing you from doing so.
    Port not set right, interrupt's bugging something, register not set up right or something...

    And if I remember right, I don't think I've seen your FULL code yet...just fragments.
    That doesn't work so good.
    Time and time again, somebody says, 'well, the problem can't be over there, 'cause that's got nothing to do with anything over here'.
    Well, guess what.....the problem was over there because it had everything to do with all of it over here in one way or the other...

    If you run the servo to an endpoint (at least an endpoint that you've found using the PIC and it's software), how much farther (if any) can you make it move after removing power by manually turning it?

  24. #24


    Did you find this post helpful? Yes | No

    Default

    skimask ,

    the full code with settings is in my 2nd post.

    I ran the program again and moved the servo to the far right and then i moved it with my fingers and yes...it moved a bit more !

    this means that it can move a bit more to the right but it's limited with the low 25 ( 1025 ms ).

    To the left it goes all the way !

    This also means that center is not where i though it was .

    .

  25. #25
    skimask's Avatar
    skimask Guest


    Did you find this post helpful? Yes | No

    Default

    Quote Originally Posted by ruijc View Post
    This also means that center is not where i though it was .
    How are you quantifying 'CENTER' on the servo right now? I mean how are you determining 'center'?
    Are you trying to let the program do it for you?
    Are you moving it manually from end to end and splitting the difference and making a mark at that 'center'?
    If you're looking at center and saying that's 'CENTER' because you want it to be center, well, that ain't gonna work.
    Take that manual method described above of moving the servo and write a program to send the servo a 1.5ms pulse and see how far off the two marks are. Let the servo tell YOU where center is.

    If you are still running that code in your second post, I think you should abandon that code until you figure out how to get full left and right out of your servo's first, before you start adding in buttons and stuff...
    Go back to that code in Post #9 and play with that.
    Using those values, the servo should move equally left and right (not just a little left and a lot right, 'cause that would mean that your idea of center and the servo's idea of center are two different things, which I think is wrong) and it should do that without binding at either end.
    Last edited by skimask; - 27th December 2007 at 22:23.

  26. #26


    Did you find this post helpful? Yes | No

    Default

    skimask,

    i ran my code and yours ( as transcribed bellow ) and this was what i got ( please see attached pic ):

    Manually found left and right limits of this servo and marked it's true center

    Fisical center matches the 1500 ms impulse

    With my code:
    max right = +- 2150ms
    max left = +- 1025 ms

    With your code :

    max right = +- 1950 ms
    max left = +- 1025 ms

    both are far from servo fisical limits ( fisical limits marked with in red )



    your code :

    '************************************************* ****************************
    '19/12/2007
    '
    'Skimask's servo code
    '
    'PIC 16F628 @ 4Mhz

    '************************************************* ****************************
    'Config

    PIE1 = 0 'off
    PIR1 = 0 'off
    CMCON = 7 'comparator off
    VRCON = 0 'Vref Off
    T1CON = 0

    ' internal osc selected in IC prog
    ' MCLR ON selected in IC prog

    '************************************************* ****************************
    'DEFINEs
    '************************************************* ****************************

    'OSC

    DEFINE OSC 4

    '************************************************* ****************************
    '
    'LCD

    ' DEFINE LCD pins
    DEFINE LCD_DREG PORTB
    DEFINE LCD_DBIT 4
    DEFINE LCD_RSREG PORTA
    DEFINE LCD_RSBIT 2
    DEFINE LCD_EREG PORTA
    DEFINE LCD_EBIT 3
    DEFINE LCD_BITS 4

    DEFINE LCD_COMMANDUS 2000

    '************************************************* ****************************
    ' variables

    va1 var word
    va2 var word
    ser var word
    pos var word
    na var word
    nb var word
    stepval var word
    center var word
    leftend var word
    rightend var word

    CLEAR

    '************************************************* ****************************
    'I/O's

    PORTA = %00000000
    PORTB = %00000000

    TRISA = %00000011
    TRISB = %00000011

    '************************************************* ****************************
    'PINS

    bu1 var PORTA.0
    bu2 var PORTA.1
    R_S var PORTA.2
    E var PORTA.3
    a4 var PORTA.4
    MCLR var PORTA.5
    a6 var PORTA.6
    a7 var PORTA.7

    DATA1 var PORTB.4
    DATA2 var PORTB.5
    DATA3 var PORTB.6
    DATA4 var PORTB.7

    bu4 var PORTB.0
    bu3 var PORTB.1
    led var PORTB.2
    servo1 var PORTB.3


    '************************************************* ****************************
    '************************************************* ****************************

    pause 200 'init LCD
    lcdout $fe,1 'clear LCD

    Start:

    leftend = 1000
    center = 1500
    rightend = 2000
    stepval = 20
    pos = center

    moveleft:
    pause 19 'pause 19ms
    if pos > leftend then
    pos = pos - stepval
    else
    goto moveright
    endif
    servo1 = 1 : pauseus pos : servo1 = 0 : goto moveleft

    Moveright:
    pause 19 'pause 19ms
    if pos < rightend then
    pos = pos + stepval
    else
    goto moveleft
    endif
    servo1 = 1 : pauseus pos : servo1 = 0 : goto moveright

    end




    EDIT:

    I just changed your settings to :
    leftend = 500
    center = 1500
    rightend = 2500

    and i got more travel to the right ( more that i got before with mine )
    This means that the servo is working bellow 1ms
    Attached Images Attached Images  
    Last edited by ruijc; - 28th December 2007 at 15:49.

  27. #27


    Did you find this post helpful? Yes | No

    Default

    Just an update of my previous post:

    I changed the values as far as :

    leftend = 200
    center = 1500
    rightend = 3000

    ( the servo moved a bit more but stopped before reaching it's fisical limits. Also, these values do not represent the true extreme limits )

    The new max travel made by the servo is marked in this new picture.

    .
    Attached Images Attached Images  

  28. #28
    skimask's Avatar
    skimask Guest


    Did you find this post helpful? Yes | No

    Default

    I'm thinking (supposing really) that maybe just because a servo has a physical limit, doesn't mean that the electronics inside will let it reach those physical limits. I don't know.
    Those marks you made, the black ones, look like a halfway decent 90 degree angle.

    How about trying this out for grins:
    Code:
    ....all the setup you've already got...it looks like it should work just fine....
    Start:
    leftend = 100 : center = 1500 : rightend = 2900 : stepval = 20 : pos = center
    
    moveleft:
    pauseus 20000 - pos  'pause 20ms - servo pulse width, should keep a more constant refresh rate closer to 50hz
    if pos > leftend then
    pos = pos - stepval
    else
    goto moveright
    endif
    servo1 = 1 : pauseus pos : servo1 = 0 : goto moveleft
    
    Moveright:
    pauseus 20000 - pos  'pause 20ms - servo pulse width, should keep a more constant refresh rate closer to 50hz
    if pos < rightend then
    pos = pos + stepval
    else
    goto moveleft
    endif
    servo1 = 1 : pauseus pos : servo1 = 0 : goto moveright
    
    end
    I changed it a bit, added a bit of code to keep the refresh rate a bit closer to 50Hz. Maybe the newer servo's are a bit more sensitive to that sort of thing.
    Also, I changed leftend and rightend to EXTREME values. They're almost GUARANTEED to bind your servo's at the extreme's.
    See what happens.
    Are you actually using a real 16F628 or a 16F628A?

  29. #29


    Did you find this post helpful? Yes | No

    Default

    Hi skimask,

    i'm using a 16F628A.

    With your new code the servo moves all the way up to the new red marks ( as showned in pic # 2 ).

    It is still not at it's fisical limit but i think that probably these are the electronic limits of the servo.

    .

  30. #30
    skimask's Avatar
    skimask Guest


    Did you find this post helpful? Yes | No

    Default

    Quote Originally Posted by ruijc View Post
    Hi skimask,
    i'm using a 16F628A.
    With your new code the servo moves all the way up to the new red marks ( as showned in pic # 2 ).
    It is still not at it's fisical limit but i think that probably these are the electronic limits of the servo.
    .
    Could be the electronic limit thing saving the servo and the gears themselves. Maybe get your hands on an older analog type (i.e. S148) and see what happens.

    Also, you said that your center isn't quite right. Could be because you're using the internal oscillator and it's not quite on spec. Datasheet says you could have up to about 5% slop on that (Table 17-5).

  31. #31
    Join Date
    May 2004
    Location
    NW France
    Posts
    3,614


    Did you find this post helpful? Yes | No

    Talking Rtfds !!!

    Hi,

    Just remember this is a DIGITAL Servo, and digital servos have "software" programmed travel limits ...

    from the Datasheet ...

    << This digital servo cannot be used with the following * AM *
    transmitters as the servo neutral signal is: 1310us).
    CONQUEST AM, FG Series (T4FG, T5FGK,T6FG, T6FGK, T7FGK), New Terratop,
    T3EGX, T3PGE, T2NL, T2LGX, T2FR, T2PK series.

    ***** Do not use digital servos with older AM systems *****
    >>

    Some brands, like hitec, sell the programming box to trim your own parameters ( travel, speed ... etc.)

    They also can recognize a valid signal frame ...

    so, shortly said, they do not allow you to make "uncontrolled things" ...

    Once more reading the servo DATASHEET could have helped !!! ...

    Alain
    Last edited by Acetronics2; - 29th December 2007 at 10:32.
    ************************************************** ***********************
    Why insist on using 32 Bits when you're not even able to deal with the first 8 ones ??? ehhhhhh ...
    ************************************************** ***********************
    IF there is the word "Problem" in your question ...
    certainly the answer is " RTFM " or " RTFDataSheet " !!!
    *****************************************

  32. #32


    Did you find this post helpful? Yes | No

    Default

    Acetronics,

    true about that...

    BUT

    If it wasnt for skimask i woudnt be able to get that extra travel


    PS. - do you have the link for the s3152 datasheet ?
    .

  33. #33
    Join Date
    Sep 2004
    Location
    montreal, canada
    Posts
    6,898


    Did you find this post helpful? Yes | No

    Default

    Steve

    It's not a bug, it's a random feature.
    There's no problem, only learning opportunities.

  34. #34


    Did you find this post helpful? Yes | No

    Default

    Thanks mister_e,

    " the neutral is at 1310ms " ... weird

    .

  35. #35
    Join Date
    May 2004
    Location
    NW France
    Posts
    3,614


    Did you find this post helpful? Yes | No

    Angry

    Hi, Ruijc

    Having tortured ( also build and modified ...) dozens of servos ...

    I can tell you EVEN Analog ones do not meet your requirements , as the linear response of futaba analog servos is only about 1/2 of the physical range ...

    for the full mechanical travel of a S3001, I've measured the pulse width from 200 µs ( full left ) to 2500µs ( full right ) with an awful ( LOL ) non-linearity between 200 and 800 µs ...

    Now ... Digital. " a 1.3 ms neutral won't work... " ... as classical travel is +/- 0.5 ms
    that means roughly only .9 to 2.1ms range will be accepted by the digital "amplifier" ... or will give a proportionnal output.


    STOP DREAMING this servo will NEVER REACH ITS PHYSICAL LIMITS !!! otherwise, that would mean you can burn the output stage of the amp ...


    Skimask's lines permit you to measure the input range of your servo ... cause exploring from 100 to 2900 µS.
    You're then sure you've seen ALL the travel your servo gan give ... no need to try to get more, unless modifying the servo amp factory settings !!!

    Alain
    Last edited by Acetronics2; - 29th December 2007 at 13:18.
    ************************************************** ***********************
    Why insist on using 32 Bits when you're not even able to deal with the first 8 ones ??? ehhhhhh ...
    ************************************************** ***********************
    IF there is the word "Problem" in your question ...
    certainly the answer is " RTFM " or " RTFDataSheet " !!!
    *****************************************

  36. #36
    Join Date
    May 2004
    Location
    NW France
    Posts
    3,614


    Did you find this post helpful? Yes | No

    Default

    Quote Originally Posted by ruijc View Post
    Thanks mister_e,

    " the neutral is at 1310ms " ... weird

    .

    Nooooooooooooo,

    Those OLD systems HAD a 1310 µs neutral ... from Robbe ( German brand ); Lextronic ( French brand ) and Multiplex had a 1.65 ms neutral, KRAFT ( US ) had a 1.70 or 1.80 ms neutral ...

    Now, it's 1500µs for Everyone !!!

    Alain
    Last edited by Acetronics2; - 29th December 2007 at 13:21.
    ************************************************** ***********************
    Why insist on using 32 Bits when you're not even able to deal with the first 8 ones ??? ehhhhhh ...
    ************************************************** ***********************
    IF there is the word "Problem" in your question ...
    certainly the answer is " RTFM " or " RTFDataSheet " !!!
    *****************************************

  37. #37
    skimask's Avatar
    skimask Guest


    Did you find this post helpful? Yes | No

    Default

    Thanks Alain...a lot of good info I wasn't even aware existed...
    I would've figure since these were servos in fast moving vehicles that they would've been a bit 'tighter' from day 1, with all the damage they could possibly inflict.
    More info to stuff in the head for future use...

  38. #38
    Join Date
    May 2004
    Location
    NW France
    Posts
    3,614


    Did you find this post helpful? Yes | No

    Talking a little New year present ...

    Hi,

    a little gadget for your servos ...

    xxx...84 shows the auto left>right>left>right ...etc. function
    xxx...84+ shows no auto function but allows a different neutral setting and memorizing ... and 1500µs recovering.

    note ... C4 is a little 1206 size CMS .22µ capacitor placed just between V+ and GND PIC pins, ... on the copper side !!!

    a Happy new year to Everyone !!!

    Alain
    Attached Files Attached Files
    Last edited by Acetronics2; - 31st December 2007 at 12:56.
    ************************************************** ***********************
    Why insist on using 32 Bits when you're not even able to deal with the first 8 ones ??? ehhhhhh ...
    ************************************************** ***********************
    IF there is the word "Problem" in your question ...
    certainly the answer is " RTFM " or " RTFDataSheet " !!!
    *****************************************

  39. #39


    Did you find this post helpful? Yes | No

    Default

    Thanks Alain

    Will have a look

    .

  40. #40
    Join Date
    May 2004
    Location
    NW France
    Posts
    3,614


    Did you find this post helpful? Yes | No

    Talking

    Quote Originally Posted by ruijc View Post

    Will have a look

    .
    Service, Sir ...
    ************************************************** ***********************
    Why insist on using 32 Bits when you're not even able to deal with the first 8 ones ??? ehhhhhh ...
    ************************************************** ***********************
    IF there is the word "Problem" in your question ...
    certainly the answer is " RTFM " or " RTFDataSheet " !!!
    *****************************************

Similar Threads

  1. More Servo Woes
    By chrisshortys in forum mel PIC BASIC Pro
    Replies: 10
    Last Post: - 13th May 2009, 08:40
  2. Problem with 12F629, servo and EEPROM
    By Atom058 in forum mel PIC BASIC Pro
    Replies: 13
    Last Post: - 1st March 2008, 09:53
  3. Servo does not move
    By ruijc in forum General
    Replies: 12
    Last Post: - 12th November 2007, 19:14
  4. Beginner + Servo
    By james in forum mel PIC BASIC Pro
    Replies: 3
    Last Post: - 31st July 2007, 21:31
  5. Help with Servo Control Please!
    By wireman22 in forum mel PIC BASIC Pro
    Replies: 7
    Last Post: - 7th June 2007, 18:15

Members who have read this thread : 1

You do not have permission to view the list of names.

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts