CONTROL DE MOTORES


El estamento Off( ) hace que El motor se pare inmediatamente. Mantiene la posición. Ejemplo: Off(OUT_A);

Mediante los comandos Coast( ) y Float( ) podemos cortar el suministro de energía a los motores realizando una parada suave sin la acción del freno.

Existen una serie de comandos más avanzados

        OnFwdReg(‘ports',‘speed',‘regmode') conduce los motores especificados en "ports" a la velocidad "speed" con un modo de regulación del tipo OUT_REGMODE_IDLE, OUT_REGMODE_SPEED or OUT_REGMODE_SYNC. El modo "Idle" no aplica una regulación PID. El modo SPEED regula un único motor para obtener una velocidad constante, aunque varíe la carga de motor. Para el caso de el modo SYNC la pareja de motores se moverán de forma síncrona. El comando OnRevReg(‘ports',‘speed',‘regmode') hace lo mismo pero moviendo los motores hacia atrás.

En el siguiente programa se producen tres situaciones:

a)     OnFwdReg(OUT_AC,50,OUT_REGMODE_IDLE);
        Wait(2000);
        Off(OUT_AC);

        PlayTone(4000,50);
        Wait(1000);

        ResetTachoCount(OUT_AC);

Los motores giran hacia adelante y si intentamos frenar alguno no ocurre nada. Al final suena un pitido.

b)     OnFwdReg(OUT_AC,50,OUT_REGMODE_SPEED);
        Wait(2000);
        Off(OUT_AC);
        PlayTone(4000,50);
        Wait(1000);

Los motores giran hacia adelante y si intentamos frenar alguno, éste aportara más potencia para intentar compensar la carga extra y seguir a la misma velocidad.

c)     OnFwdReg(OUT_AC,50,OUT_REGMODE_SYNC);
        Wait(2000);
        Off(OUT_AC);

Los motores van hacia adelante y cuando frenamos uno el otro también se frena para conseguir una velocidad común.

 

l

CONTROL PID - RotateMotorPID(port,speed, angle, Pgain,Igain,Dgain)

El firmware del NXT implementa un controlador PID digital para regular la posición y velocidad de los motores con precisión. Este tipo de controlador en lazo cerrado es uno de los más simples y efectivos en automática y se utiliza muy a menudo.

Tu programa indicará al controlador un punto de referencia  a alcanzar R(t), acciona el motor con una orden U(t) y mide la posición Y(t) con el encoder y calcula un error E(t) = R(t) - Y(t). Esta es la realimentación para calcular el error. El controlador transforma el error E(T) en una señal U(t) de la siguiente manera:

U(t) = P(t) + I(t) + D(t)

donde
    P(t) = KP·E(t),
    I(t) = KI·( I(t–1) + E(t) )
    D(t) = KD·(E(t) – E(t –1))

El comando es la suma de tres contribuciones, una parte proporcional P(t), una parte integral I(t) y una  derivativa D(t). P(t) hace que que el controlador actúe rápido pero no asegura un error nulo en equilibrio. I(t) da una "memoria" al controlador, en el sentido de que realiza un trazo de los errores acumulados y los compensa garantizando un error nulo en el equilibrio. D(t) aporta una "predicción futura" al controlador, acelerando la respuesta.

El comando RotateMotorPID(port,speed, angle, Pgain,Igain,Dgain) permite mover el motor estableciendo diferentes ganancias :

(50,0,0): El motor no rota exactamente 180º, ya que permanece un error no compensado.(0,x,x): (0, x, x): sin parte proporcional, el error es muy grande
(40,40,0): hay un exceso, lo que significa que el eje del motor se mueve más allá del punto de ajuste y luego vuelve
(40,40,90): la precisión y la buen tiempo de establecimiento (tiempo para alcanzar el punto de ajuste)
(40,40,200): el eje oscila, ya que la ganancia derivativa es demasiado alta
Pruebe otros valores para descubrir cómo estos logros influyen en el rendimiento de un motor.