Fried servo halts project

The Project:

I have an Arduino that is acting as an RC transmitter. It generates a PPM signal into a DragonLink UHF system which then sends PPM output to a receiver located on an Axial Wraith. As a test, I hooked up 4 servos to the receiver located on the RC car. I am successfully able to control the servos from my Arduino, kind of.

The Problem:

Here is where it gets strange, while controlling the servos from the Arduino, I am not getting full rotation. The servo moves maybe +/- 25 degrees. To counter this, I added 1000 to each write operation. This actually fixed the problem, though I have no idea why(See code below). Once I had the servos working, I decided to hook up the expensive servo. Aka the steering servo on the Wraith. Sure enough it worked like a charm. I decided to put the following line inside the setup() function. My intent was to play with the angle that the wheels start at when the Arduino powers on.

ppm.write(secondChannel, 1500);

This was a big mistake. Within seconds the servo started smoking and sizzling.

The Questions:

1.) Normally when I work with servos, I map an analog input to a value of between 0 and 180 degrees.

        val = analogRead(potpin);
        val = map(val, 0, 1023, 0, 179);
	myservo.write(val);

Since the Arduino is acting as an RC transmitter, there is no write operation to the servo, in fact, the servo(steering for example) is located on the rc cars and is controlled by the receiver.
The receiver is not an Arduino, it is an rc rx that receives a PPM signal. The question is, based on the code below, am I missing an extra step. I feel like something can definitely be wrong here.

2.) My assertion is that I over rotated the servo within the setup() function. For example maybe the servo was trying to rotate 200 degrees when really it is only capable of 180 degrees. Therefore it overworked itself and burnt up? Is this possible?

Additional Information:

  • Everything was working fine. I wanted the steering servo to start off directly straight so I put the following test method call within the setup() function(1500 was just some arbitrary value)

pulsePositionOutput.write(secondChannel, 1500);

  • Within seconds of running the code, I burnt the servo to a crisp.
  • I removed that line of code, swapped a cheap servo in just incase. Everything was back to working just fine. I do not think wiring is the issue here since everything worked until I set 1500 in setup.
  • Analog input source is a set of parallax dual axis joysticks
  • Servo that burnt up is an Axial AS-3

MetaData:

The code:

#include <PPMLib.h>

/* Set the default value */
unsigned int tiltValue = 0;
unsigned int panValue = 0;
unsigned int throttleValue = 0;
unsigned int steerValue = 0;

/* Channels consist of pan/tilt and thvia dual axis joysticks */
static const unsigned  int analogTiltPin = A0;
static const unsigned int analogPanPin = A1;
static const int unsigned analogThrottlePin = A2;
static const int unsigned analogSteerPin = A3;

/* Channels */
static const byte firstChannel = 1;
static const byte secondChannel = 2;
static const byte thirdChannel = 3;
static const byte fourthChannel = 4;

/* PPM output pin */
static const byte ppmOutputPin = 5;

/* Instantiate PPM construct */
PPMLib ppm;

/* Initialize PPM output on pin 5, or whatever pin ppmOutput has been set to */
void setup() {
  
  ppm.begin(ppmOutputPin);
  // As soon as I included this line of code, the servo started smoking and the ceased
  // ppm.write(secondChannel, 1500);
}

void loop() {

  /* Capture values */
  tiltValue = analogRead(analogTiltPin);
  panValue = analogRead(analogPanPin);
  throttleValue = analogRead(analogThrottlePin);
  steerValue = analogRead(analogSteerPin);
  
  /* Write to channel */
  ppm.write(firstChannel, tiltValue + 1000);
  // Testing +1000 works for some reason, without this the servo moves very little. With the +1000 the servo is able to move just
  // just around 90 degrees back and fourth with pot
  ppm.write(secondChannel, panValue + 1000); 
  ppm.write(thirdChannel, throttleValue + 1000);
  ppm.write(fourthChannel, steerValue + 1000);
}

Thanks for looking this over. Any additional help is greatly appreciated!

Can only suggest to get a fuse on the power. When a motor gets stalled the current demand can go very high compared to normal operation. A fuse to blow first or even a small resistor rated at 1/4 or 1/2 Watt (or whatever) is cheap protection.

Therefore it overworked itself and burnt up? Is this possible?

Typical analog servos will rotate one direction until they are against the internal hard stop when sent corrupt/bad control signals. If your servos test ok with servo library code then burn up with your code, then I would suspect your code has issues.