ユニポーラステッピングモータでマイクロステップを試すも脱調

t_micro=300(μsec)くらい(3300Hz)までいけるけど、脱調してる。

PWMで1023(Max)を普通に4分割してMOSFETのゲートに入れてるけど、
MOSFETの入力ー出力関係が線形じゃなかったらこのコードは意味がなくなる。

//STEPPER MOTOR DRIVING PROGRAM
//MOTOR 4209L-03-01
//int pin[4] = {10,11,12,13};//A,B,A-,B-

int pin[4] = {3,5,6,9};//for PWM output

int t_delay = 0;
int t_micro = 300;

//int pwmmax = 102;// 255*2/5, for 2V output
int pwmmax = 255; //success
//int pwmmax = 200;

void setup(){
  for(int i=0;i < 4;i++){
    pinMode(pin[i], OUTPUT);
  }
}

void loop(){
  rotate();
  //digitalWrite(pin[0],HIGH);
}

void rotate(){
    //STEP1
    analogWrite(pin[0],0);
    analogWrite(pin[1],0);
    analogWrite(pin[2],0);
    analogWrite(pin[3],pwmmax);
    delay(t_delay);
    delayMicroseconds(t_micro);
    //STEP2
    analogWrite(pin[0],pwmmax*0.25);
    analogWrite(pin[1],0);
    analogWrite(pin[2],0);
    analogWrite(pin[3],pwmmax*0.75);
    delay(t_delay);
    delayMicroseconds(t_micro);
    //STEP3
    analogWrite(pin[0],pwmmax*0.5);
    analogWrite(pin[1],0);
    analogWrite(pin[2],0);
    analogWrite(pin[3],pwmmax*0.5);
    delay(t_delay);
    delayMicroseconds(t_micro);
    //STEP4
    analogWrite(pin[0],pwmmax*0.75);
    analogWrite(pin[1],0);
    analogWrite(pin[2],0);
    analogWrite(pin[3],pwmmax*0.25);
    delay(t_delay);
    delayMicroseconds(t_micro);
    //STEP5
    analogWrite(pin[0],pwmmax);
    analogWrite(pin[1],0);
    analogWrite(pin[2],0);
    analogWrite(pin[3],0);
    delay(t_delay);
    delayMicroseconds(t_micro);
    //STEP6
    analogWrite(pin[0],pwmmax*0.75);
    analogWrite(pin[1],pwmmax*0.25);
    analogWrite(pin[2],0);
    analogWrite(pin[3],0);
    delay(t_delay);
    delayMicroseconds(t_micro);
    //STEP7
    analogWrite(pin[0],pwmmax*0.5);
    analogWrite(pin[1],pwmmax*0.5);
    analogWrite(pin[2],0);
    analogWrite(pin[3],0);
    delay(t_delay);
    delayMicroseconds(t_micro);
    //STEP8
    analogWrite(pin[0],pwmmax*0.25);
    analogWrite(pin[1],pwmmax*0.75);
    analogWrite(pin[2],0);
    analogWrite(pin[3],0);
    delay(t_delay);
    delayMicroseconds(t_micro);
    //STEP9
    analogWrite(pin[0],0);
    analogWrite(pin[1],pwmmax);
    analogWrite(pin[2],0);
    analogWrite(pin[3],0);
    delay(t_delay);
    delayMicroseconds(t_micro);
    //STEP10
    analogWrite(pin[0],0);
    analogWrite(pin[1],pwmmax*0.75);
    analogWrite(pin[2],pwmmax*0.25);
    analogWrite(pin[3],0);
    delay(t_delay);
    delayMicroseconds(t_micro);
    //STEP11
    analogWrite(pin[0],0);
    analogWrite(pin[1],pwmmax*0.5);
    analogWrite(pin[2],pwmmax*0.5);
    analogWrite(pin[3],0);
    delay(t_delay);
    delayMicroseconds(t_micro);
    //STEP12
    analogWrite(pin[0],0);
    analogWrite(pin[1],pwmmax*0.25);
    analogWrite(pin[2],pwmmax*0.75);
    analogWrite(pin[3],0);
    delay(t_delay);
    delayMicroseconds(t_micro);
    //STEP13
    analogWrite(pin[0],0);
    analogWrite(pin[1],0);
    analogWrite(pin[2],pwmmax);
    analogWrite(pin[3],0);
    delay(t_delay);
    delayMicroseconds(t_micro);
    //STEP14
    analogWrite(pin[0],0);
    analogWrite(pin[1],0);
    analogWrite(pin[2],pwmmax*0.75);
    analogWrite(pin[3],pwmmax*0.25);
    delay(t_delay);
    delayMicroseconds(t_micro);
    //STEP15
    analogWrite(pin[0],0);
    analogWrite(pin[1],0);
    analogWrite(pin[2],pwmmax*0.5);
    analogWrite(pin[3],pwmmax*0.5);
    delay(t_delay);
    delayMicroseconds(t_micro);
    //STEP16
    analogWrite(pin[0],0);
    analogWrite(pin[1],0);
    analogWrite(pin[2],pwmmax*0.25);
    analogWrite(pin[3],pwmmax*0.75);
    delay(t_delay);
    delayMicroseconds(t_micro);
}