Olha controlar a velocidade e sentido depente do tempo e a sequencia de acionamento das bobinas...
Montei um Fuso com uma velha maquina de xerox que usei um 16F676 por causa do AD ,usei uma rotina que toda hora era chamada pela main :
(no CCS)
#define C1 PIN_C1 // motor bobina 1 #define C2 PIN_C2 // motor bobina 2 #define C3 PIN_C3 // motor bobina 3 #define C4 PIN_C4 // motor bobina 4 void h_step_drive() { if(Passo<8) Passo++; else Passo=1; switch(Passo) { case 1 : { output_high(C1); output_high(C2); output_low(C3); output_low(C4); break; } case 2 : { output_low(C1); output_high(C2); output_low(C3); output_low(C4); break; } case 3 : { output_low(C1); output_high(C2); output_high(C3); output_low(C4); break; } case 4 : { output_low(C1); output_low(C2); output_high(C3); output_low(C4); break; } case 5 : { output_low(C1); output_low(C2); output_high(C3); output_high(C4); break; } case 6 : { output_low(C1); output_low(C2); output_low(C3); output_high(C4); break; } case 7 : { output_high(C1); output_low(C2); output_low(C3); output_high(C4); break; } case 8 : { output_high(C1); output_low(C2); output_low(C3); output_low(C4); break; } } } void main() { ... ... ... ... //LOOP: for(; { delay_ms(4); // motor mais rápido OU delay_ms(35); //motor mais lento h_step_drive(); } }
Para mudar o sentido da rotação você inverte o sentido de acionamento das bobinas
C1 - C2 - C3 -C4 para C4 -C3 - C2 -C1
É algo bem mais simples... mais não terá muito dificuldade de colocar um rotina que faz a mudança de velocidade e sentido do motor via RS232
Também aconselho usar o TIMER0 para o motor e a main para a rs232
Espero te dado um luz
Outra coisa usei Tip41 para acionar o motor (no caso core de 6v)