Control de velocidad de motor de CD

Buenas, actualmente estoy diseñando un brazo robotico, la interfaz la hice en Matlab y el programa hace los calculos de los movimientos que deben realizar los motores.

Los motores que estoy utilizando son de corriente directa de 12V con encoder, el sentido de giro y velocidad es controlado con ayuda de una placa L298D, todo anda bien cuando los motores hacen el primer movimiento. Sin embargo cuando tienen que hacer un segundo movimiento los motores giran muy rápido y pareciera que no respetan el valor PWM que estoy fijando para el arranque.

Este es el código en Matlab para un motor, básicamente los otros 2 motores funcionan igual.

motor1 = round(q(1) - mq(1));  %%q(1) - angulo deseado mq(1)-angulo anterior

        if(motor1>0)
            motor1 = abs(motor1);
            for x = mq(1):0.5:q(1)
                y=x*pi/180;
                w.R1.rotation = [0 1 0 y];
                vrdrawnow
            end
      %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%      
            pulsos = -1.3491*motor1^1.1978;
            conteo = 0;

            a.digitalWrite(22,1)
            a.digitalWrite(24,0)


            while(conteo>pulsos)

                vel = round(((pulsos - conteo)/pulsos)*80);
                a.analogWrite(4,vel);
                conteo = a.encoderRead(0);
                
            end
            a.digitalWrite(22,0)
            pause(1)
            conteo = a.encoderRead(0)

 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
        elseif(motor1<0)
            motor1 = abs(motor1);
            for x = mq(1):-0.5:q(1)
                y=x*pi/180;
                w.R1.rotation = [0 1 0 y];
                vrdrawnow
            end
      %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%      
            pulsos = 1.3491*motor1^1.1978;
            conteo = 0;
            
            a.digitalWrite(22,0)
            a.digitalWrite(24,1)
            

            while(conteo<pulsos)

                vel = round(((pulsos - conteo)/pulsos)*80);
                a.analogWrite(4,vel);
                conteo = a.encoderRead(0);
                
            end
            a.digitalWrite(24,0)
            pause(1)
            conteo = a.encoderRead(0)
            
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%           
        end
        
        mq(1)=q(1);

Si intento hacer un tercer movimiento los motores ya no se mueven, aqui revise que valor en el encoder y la cantidad de pulsos que muestra sobrepasa el deseado por lo cual no se mueve. Pero no se porque me da ese valor si no se ha movido en lo absoluto.

-Martin

Bienvenido @mercadomartinp al foro Arduino.

Tu pregunta es mas apropiada al foro de Matlab que a este.
No hay código de Arduino en lo que muestras y poco podemos decirte ya que toda la interfaz esta manejada por Matlab.