¿Este fragmento de código sigue las restricciones de tiempo requeridas?

0

Estoy intentando conectar con una placa de controlador de motor paso a paso ( ST330-v3 - página 7)

Diagrama de tiempo de la hoja de datos:

Laplacanecesitaunasecuenciadeseñales,queintentécrearconestecódigo.peronoestásegurodesielcódigosigueeltiemporequeridoosedescribeenlahojadedatos.

Esporesoqueesperoquecualquieradeustedespuedarevisarelcódigoyversielmomentoseajustaono...

Aquíestáelcódigo:

archivo.h:

/*Class:stepper_motor*Info:containsthesetup,andprimaryinterfacetocontrol*thesteppermotor**stepper_motor():constructor-setuptheconnectiontothecontrolboard*voidstep_pwm():Movesthetilt-usesthebooltodeterminethedirection.*boolalive_bool:Iseitherhigh(1)orlow(0),usedforthealivevoid.*/#ifndefstepper_motor_h#definestepper_motor_h#include"Arduino.h"
#include "pins_arduino.h"

#define step_pin  D0
#define dir_pin   D1
#define en_pin    D2

 class stepper_motor
{
  public:
    stepper_motor();
    void alive();
    void init_communication();
    void step_pwm();
  private:
    bool alive_bool;
    bool position_bool;
};

#endif

archivo .cpp

#include "stepper_motor.h"

stepper_motor::stepper_motor()
{
  pinMode(BUILTIN_LED,OUTPUT);
  pinMode(step_pin,OUTPUT);
  pinMode(dir_pin,OUTPUT);
  pinMode(en_pin,OUTPUT);

  alive_bool = true;
  position_bool = true;
}


void stepper_motor::alive()
{
  if(alive_bool == true)
  {
    digitalWrite(BUILTIN_LED,HIGH); 
    alive_bool = false;
    delay(2000);
  }
  else if(alive_bool == false)
  {
    digitalWrite(BUILTIN_LED,LOW);
    alive_bool = true;
    delay(2000);
  }
}

void stepper_motor::init_communication()
{
  digitalWrite(step_pin, HIGH);
  digitalWrite(dir_pin,HIGH);
  digitalWrite(en_pin,LOW);

  delay(0.01); //t1

  digitalWrite(step_pin,HIGH);
  digitalWrite(dir_pin,HIGH);
  digitalWrite(en_pin,HIGH);

  delay(0.005); // t2

  digitalWrite(step_pin,HIGH);
  digitalWrite(dir_pin,LOW);
  digitalWrite(en_pin,HIGH);

  delay(0.005); //t4

  digitalWrite(step_pin,LOW);
  digitalWrite(dir_pin,LOW);
  digitalWrite(en_pin,HIGH);

  delay(0.0025); //t3

  digitalWrite(step_pin,HIGH);
  digitalWrite(dir_pin,LOW);
  digitalWrite(en_pin,HIGH);

  delay(0.0025);

  digitalWrite(step_pin,LOW);
  digitalWrite(dir_pin,LOW);
  digitalWrite(en_pin,HIGH);

  delay(0.0025);

  digitalWrite(step_pin,HIGH);
  digitalWrite(dir_pin,LOW);
  digitalWrite(en_pin,HIGH);


  delay(1000);

  digitalWrite(step_pin,HIGH);
  digitalWrite(dir_pin,HIGH);
  digitalWrite(en_pin,HIGH);

  delay(0.005);

  digitalWrite(step_pin,LOW);
  digitalWrite(dir_pin,HIGH);
  digitalWrite(en_pin,HIGH);

  delay(0.0025);

  digitalWrite(step_pin,HIGH);
  digitalWrite(dir_pin,HIGH);
  digitalWrite(en_pin,HIGH);

  delay(0.0025);

  digitalWrite(step_pin,LOW);
  digitalWrite(dir_pin,HIGH);
  digitalWrite(en_pin,HIGH);

  delay(0.0025);

  digitalWrite(step_pin,HIGH);
  digitalWrite(dir_pin,HIGH);
  digitalWrite(en_pin,HIGH);

}

El init_communication () está aquí en cuestión.

Gracias de antemano

    
pregunta Carlton Banks

1 respuesta

1

Esto no es una EEPROM, pantalla o acelerómetro que debe inicializar con una secuencia de pasos específicos antes de que funcione; Está malinterpretando los requisitos de tiempo como algún tipo de secuencia de inicialización. Esto es algo comprensible, dada la calidad de la hoja de datos.

Para obtener una mejor imagen, eche un vistazo a la hoja de datos del real controlador paso a paso IC utilizado.

En resumen, el TB6560AHQ es un controlador paso a paso de interfaz / dirección. Para mover un microstep en una dirección, maneja la línea del reloj hacia arriba y hacia atrás. El conductor simplemente cuenta la cantidad de pulsos que envía e incrementa la microinterrupción de la fase de conmutación con cada flanco ascendente de la señal de paso (reloj). Para invertir la dirección, simplemente cambie el estado de la señal de dirección. El conductor no realiza rampas de velocidad / aceleración del motor por sí mismo, por lo que tendrá que hacerlo en el software.

Para inicializar realmente el controlador, solo tiene que esperar un poco y luego jalar / restablecer y / habilitar alto y mantenerlos altos.

  

Enciende VDD. Luego, cuando el voltaje VDD se haya estabilizado, encienda VMA / B.   Mantenga los pasadores de entrada de control en posición baja mientras enciende VDD y VMA / B.   (Todos los pines de entrada de control se bajan internamente).   Después de que VDD y VMA / B se estabilicen completamente a los voltajes nominales, los pines RESET y ENABLE pueden ser   establecer alta. Si esta secuencia no se sigue correctamente, es posible que el IC no funcione correctamente, o que el IC y el   Las partes periféricas pueden estar dañadas

Si libera la línea de habilitación, el conductor simplemente desenergizará el motor y perderá pasos.

    
respondido por el jms

Lea otras preguntas en las etiquetas