Classe+StepperMotorTm

Home > Robótica > Bibliotecas **Recursos** > RunTimer > Timer2 > CircularBuffer > SerialLog > ActionPlan **Dispositivos** > Ultrassom > Array de sensores > NRF24L01 > Wireless log > RF24Control **Movimento** > StepperMotor > **StepperMotorTm** > StepperRobot Inicialização > StepperRobot Operação > Recursos

Esta classe, descendente de //**StepperMotor**//, acrescenta recursos mais sofisticados para o controle do motor de passo. A classe faz a temporização dos pulsos e também permite estabelecer uma velocidade de partida e uma velocidade de cruzeiro. O motor inicia seu movimento na velocidade de partida e depois acelera gradativamente até atingir a velocidade de cruzeiro. Também para parar é feita uma desaceleração da velocidade de cruzeiro até a velocidade de partida. Para entender a necessidade da aceleração em um motor de passo leia a discussão feita na descrição da classe //**StepperMotor**//, em especial o tópico //**Duração dos pulsos**//.

O uso da classe é bastante simples. Assim como na classe //**StepperMotor**//, é preciso indicar os pinos de controle do motor ao criar uma instância. A principal diferença é que o método de inicialização ( //**init**// ) tem 2 parâmetros: //**startSpeed**// e //**cruizeSpeed**//. Indicam respectivamente a velocidade de partida e de cruzeiro. As velocidades são informadas em pulsos (ou passos) por segundo. Por exemplo, o valor 100 indica 100 pulsos por segundo, o que equivale a pulsos com duração de 10 milissegundos. Abaixo a declaração pública da classe:

code format="java5" typedef unsigned int uint;

class StepperMotorTm: public StepperMotor { public: StepperMotorTm(int mPin_1, int mPin_2, int mPin_3, int mPin_4); // construtor

void init(uint startSpeed, uint cruizeSpeed); // inicialização void moveSteps(int steps, int direction);    // inicia o movimento void addStepsToMove(uint steps);  // Adiciona passos ao movimento corrente void run;                       // temporização, chame este método a cada iteração do loop principal void stopNow;                   // parada imediata void decelStop;                 // parada com desaceleração boolean isMoving;               // informa se o motor está em movimento int getDir;                     // retorna a direção do movimento atual

// métodos herdados de StepperMotor void turboOn;     // ativa o modo turbo (duplo torque) void turboOff;    // desliga o modo turbo void halfStepOn;  // ativa o modo meio-passo void halfStepOff; // desliga o modo meio-passo void motorOff;    // desliga as bobinas boolean halfStep; // informa se o modo meio-passo está ativo

protected: virtual void onMoveDone(int steps, int direction){} // evento disparado sempre que um movimento é completado virtual void onStepDone(int direction){}           // evento disparado após cada passo };

code

Depois de inicializar a instância no //**setup**//, é preciso chamar o método //**run**// pelo menos uma vez a cada iteração do loop principal. Para iniciar um movimento, chame o método //**moveSteps**// indicando a quantidade de passos e a direção (1, -1 ou zero). Depois de executados os passos indicados, o movimento é encerrado e as bobinas são desligadas. Se precisar parar o motor antes da execução dos passos solicitados, use o método //**stopNow**// para parada imediata ou //**decelStop**// para parada com desaceleração. O método **//addStepsToMove//** adiciona passos ao movimento em curso. Não tem efeito se o motor não está em movimento ou se já está na fase de desaceleração. Os modos de operação implementados na classe //**StepperMotor**// (passo completo, meio-passo ou turbo) funcionam do mesmo jeito. É altamente recomendada a leitura da discussão sobre a classe **//StepperMotor// **para entender melhor o funcionamento desta classe.

.