Duda con servo sg90

Hola a todos. Tengo este sencillo código y no sé por qué falla:

#include <Servo.h>
Servo servo1;

void setup(){
  servo1.attach(5)  }

void loop(){
  servo1.write(0);     //Lo pongo en posicion inicial
  delay(20);
  servo1.write(90);    //Lo pongo en 90º
  delay(20);
  servo1.write(180);   //Lo pongo en 180º
  delay(20);   }

No sé por qué el servo se queda como temblando. Creo entender por lo que he leido, que cada ciclo debe durar 20 ms, por eso hay un retraso de ese tiempo entre cada cambio.
¿Alguien me puede explicar qué está pasando? Si pongo el delay de 2000 ms sí funciona perfectamente, pero quisiera saber por qué.
Gracias y un saludo.

Moderador
Hola, bienvenido al foro Arduino en Español

Por favor edita tu post usando etiquetas de código.
Normas del foro

Tiembla porque en 20 mseg no puede moverse.
Aumenta esos tiempos a 2000 mseg para poder hacerlos visibles.

Hola, si es como dice @surbyte 20ms es nada, son movimientos mecanicos, en el segundo loop tienes que pasar bruscamente de 180 a 0.
Puedes hacer un degrade de 0 a 1, de 1 a 2, etc y luego bajar 180 a 179....
Saludos.

Gracias por las respuestas.
Un saludo.