Micro Servo Controller Problem

I am having a problem with my micro serial servo controller. I am setting the position with the 7bit position command (position 65) and the servo immediately moves to one of it’s extents. If I try to set the position with the absolute position command (position 3000) I get the same results. I have reset the servo numbering to 0-7 and I am still having the same results. I am sending the serial signals from an Arduino Decimilia and the reply from the MSSC is the same data as I am sending so the communication is good. I don’t have a scope to check the output of the MSSC.

Sorry to hear you’re having trouble, but at least your servos are moving, so you’re half way there! Can you post your Arduino code here? Also, since you’re trying to use Pololu mode, do you have the mode selection jumper removed?

-Adam

Here is an excerpt from my code that uses the 7bit position, command 2.

// send the data for servo 0
  Serial.print(128, BYTE);  // synchronization value as specified in the controller documentation 0x80
  Serial.print(1, BYTE);    // pololu device type number as specified in the controller documentation 0x01
  Serial.print(2, BYTE);    // command number 2 is for set 7bit position
  Serial.print(0, BYTE);    // servo number that this data applies to
  Serial.print(beta0, BYTE);// data to send to the controller

beta0 is a variable that is calculated elsewhere in the program and is a value between 0 and 127. The vaule I am passing to the servo controller is 65 at the current time.

the bytes that are being passed to and from the servo controller are as follows. Verified by monitoring the rx and tx lines of the servo controller.
128 1 2 0 65

I have also reduced the range of servo motion to approximately 48 degrees by changing the range factor from 15 to 8 with Command 0. This has not changed the servo motion.

I also tried to use a piece of code that uses the command 4. I believe that you posted this code before and it has worked for you.

void setup()// run once, when the sketch starts
{
   Serial.begin(9600);// set up Serial library at 9600 bps
   delay(100);
}

void put(int servo, int angle)
{//servo is the servo number (typically 0-7)
//angle is the absoltue position from 500 to 5500

   unsigned char buff[6];

   unsigned int temp;
   unsigned char pos_hi,pos_low;
   
   temp=angle&0x1f80;
   pos_hi=temp>>7;
   pos_low=angle & 0x7f;

   buff[0]=0x80;//start byte
   buff[1]=0x01;//device id
   buff[2]=0x04;//command number
   buff[3]=servo;//servo number
   buff[4]=pos_hi;//data1
   buff[5]=pos_low;//data2

   for(int i=0;i<6;i++){
      Serial.print(buff[i],BYTE);
   }
}

void loop()// run over and over again
{
   put(0,3000);
   while(1);
}

You are correct I am using Pololu mode and the jumper is not installed on the servo controller. In fact I did not install the headers for the jumper since I will only be using the Pololu mode.

I will have access to an Oscilloscope tomorrow night so I will be able to check the servo controller output.

I appreciate any help.

The code looks good (and quite familiar), curiouser and curiouser. So, a few more basic questions:

What is your power setup? Specifically how are you powering your Arduino, Servo controller logic, and servo bus?

Can you tell that the servo is moving in response to the code you send, as opposed to just as soon as the boards are powered up? You could test this by extending the delay in the setup function.

Have you seen this behavior with several servos, or just one? What is the brand/model of servo?

Are the servo controller LEDs behaving well (yellow LED on at power-up, all LEDs off after you send serial bytes, except for the green LED flickering as data comes in)?

A quick oscilloscope test should narrow down the possibilities, let us know what you find out.

-Adam

My arduino is powered from a li-po battery pack or from the usb power bus. The logic side of the MSSC is powered from this same supply. The servo side is powered by a high current 4.8v RC battery pack. I have bypassed the servo power bus on the MSSC because I will be using six high torque servos that will potentially pull 2A each. The servos are Futaba High Torque models and I have tried some other servos just to make sure it was not a servo issue. I am currently only using one servo for debugging purposes.

My servo power supply setup has power and ground for the servos supplied to a harness from the RC battery pack. The servo power never touches the MSSC. The PWM signal from the MSSC is brought into the harness and attached to the servo connection. Do I need to attach my servo power to the MSSC just for ground purposes? I guess this might be the problem. Let me know what you think.

Thanks

Wiring power directly to your servos is a good idea in this case, but you do need to make a ground connection (only ground is fine) between your servo battery pack and the servo controller. This is almost definitely causing the behavior you’re seeing.

-Adam

IT’S ALIVE.

It was the ground issue. Thanks for your help. I think the manual should be updated to include a note stating the servo battery must be grounded to the board when using direct wiring. This would have saved me a lot of headaches and time. I really appreciate the help.

Thanks,

Jim