There are some problems when setting the registers. You must not use the |= operator, because there are bits set from arduino initializing, that must be cleared. Therefore use the '=' operator to set the control registers.
With a prescaler of 64, TOP must be set to 5000 to get a 20ms refresh rate.
Using 16-bit registers is ok, the compiler handles this correctly.
Try this:
TCCR1A=(1<<COM1A1)|(1<<COM1B1)|(1<<WGM11); //NON Inverted PWM
TCCR1B=(1<<WGM13)|(1<<WGM12)|(1<<CS11)|(1<<CS10); //PRESCALER=64 MODE=14(FAST PWM)
pinMode(9,OUTPUT);
pinMode(10,OUTPUT);
ICR1=5000; //fPWM=50Hz
N.B. You can have a better resolution with a prescaler of 8 and a TOP value of 40000.
In remote-controlled model flight, PPM is a mutliplex signal from the receiver that contains the information for all connected servos. Each individual servo receives a pure PWM signal, whereby the servo position does not depend on the pulse-pause ratio, but on the absolute pulse length ( 1..2ms ) with a constant repetition rate of 20ms ( the repetition rate is less important and may vary a bit without changing the servo position ).
And that's exactly what the timer creates. The timer pulses are much more stable than the ISR created pulses of the servo library.