servos con arduino para barco RC

Hola programadores.
Estoy a un tris de lanzar por la borda la parte del proyecto que corresponde a Arduino, debido a mi incapacidad para conseguir que funcione correctamente.

Os explico brevemente.
Me funciona, pero me hace cosas raras que no consigo entender por qué pasan y mucho menos solucionarlo.
Un código simple para leer el canal 3 de la radio y hacer que el servo 2 obedezca a esa señal. Esta es la base sobre la que si consigo que funcione ampliare con más servos. La primera sorpresa era que me salían valores negativos para el ángulo del servo. Esto lo solucioné añadiendo un if y una multiplicación *-1 convenientemente añadida, no será ortodoxo pero parecía funcionar. De hecho todo el código completo, con todas las ordenes a los distintos servos, en el simulador funciona perfectamente. El problema, como siempre, está cuando pasamos de lo virtual a la p... realidad.
Cuando conectamos el sistema, durante unos dos minutos el servo reacciona correctamente hasta que comienza un comportamiento errático y luego deja de funcionar, debiendo resetear el Arduino. He constatado que aunque no muevas el servo, pasado esos dos minutos, también deja de funcionar.
Esto con un servo normal, cuando le aplico los multivueltas que me veo obligado a usar, el comportamiento es peor, la última parte de su recorrido en un sentido la hace a trompicones, llegado al final de carrera retrocede 45º para volver a hacer el camino de nuevo constantemente y finalmente se bloquea como el normal.
Un desastre de funcionamiento. Estoy convencido que soy yo y no la placa, el culpable de que no funcione.
Si me podéis echar un cabo os lo agradeceré, en caso contrario lanzo por la borda el Arduino (sentido figurado) y controlo los servos manualmente desde la radio, como toda la vida.
Os pongo el código usado a ver si alguno encontráis en donde fallo.

Gracias por vuestro tiempo.

int ch3; // canal a leer de la radio, en este caso ch3
unsigned int valorsenalradio;  //valor prporcional de la radio a grados de giro
int senal;// Esta variable definira la posicion del servo en grados de giro Por alguna razón
// que desconozco, para evitar un valor negativo en el resultado final, genero esta variable 
//que luego sí puedo corregirle el signo, ya que a "valorsenalradio" no me deja ¿?.
#include <Servo.h>           // Incluimos la libreria para poder controlar los servos.


Servo servoMotor2;//servo foque y foque volante babor

void setup()
{
  
  pinMode(6, INPUT); // pin'6'como entrada  para el canal 3 de la radio. 
  
  
  // Iniciamos los servos para que empiecen a trabajar con los pines 2,3,4 y 5
  servoMotor2.attach(2);
  
  Serial.begin(9600); //Iniciamos Serial
}

void loop()





{    
  
  
  
  
  ch3 = pulseIn(6, HIGH, 20000); //Leemos el canal 3 de la radio
  
  valorsenalradio = map(ch3,1000,2000,0,180);
  senal = valorsenalradio;
  
  if (senal< 0)
  {
    servoMotor2.write(senal*-1); //servoMotor2 obedece a la radio canal 3.
    
  }   
  
  else   
  {
    servoMotor2.write(senal);//servoMotor2 obedece a la radio canal 3.
  }
}