DRV8830 controlador de motor: el variador funciona, pero el freno no

0

Hoja de datos de DRV8830 (controle la información en la página 11).

He obtenido este chip para ejecutar un motor con el siguiente código:

void drive(int speed) {
  // Write to the Fault Register to reset it
  Wire.beginTransmission(MOTORA_WRITE);
  Wire.write(FAULT_addr);
  Wire.write(0x80);
  Wire.endTransmission(true);

  // Write to the Control Register
  Wire.beginTransmission(MOTORA_WRITE);
  Wire.write(CONTROL_addr);
  byte regValue;
  regValue = (byte)abs(speed); // Find the byte abs value of the input
  if (regValue > 63) regValue = 63;
  regValue = regValue << 2; // Left shift to make room for bits 1:0
  if (speed < 0) regValue |= 0x01; // Set bits 1:0 based on sign of input.
  else regValue |= 0x02;
  Wire.write(regValue);
  Wire.endTransmission(true);

  delay(100);
}

Estas son las direcciones:

#define MOTORA_WRITE 0x64
#define CONTROL_addr 0x00
#define FAULT_addr 0x01

Aquí está mi código para frenar el motor:

void brake() {
  // Write to the Fault Register to reset it
  Wire.beginTransmission(MOTORA_WRITE);
  Wire.write(FAULT_addr);
  Wire.write(0x80);
  Wire.endTransmission(true);

  // Write to the Control Register
  Wire.beginTransmission(MOTORA_WRITE);
  Wire.write(CONTROL_addr);
  byte regValue=(byte)255;//0b11111111 -- I also tried 0b11 but that didn't work either
  Wire.write(regValue);
  Wire.endTransmission(true);

  delay(100);
}

El código para conducir el motor funciona como se espera. Sin embargo, cuando llamo freno, no frena, aunque los bits 1 y 0 del registro de control estén configurados en 1.

Estoy usando un ESP8266 para cualquier persona interesada.

    
pregunta Murey Tasroc

1 respuesta

0

¿Se pueden medir los voltajes OUT1 y OUT2 si es posible? En ambos cuando está habilitado para correr y cuando se aplican los frenos. Además, ¿no funcionan los comandos de marcha atrás y avance bien?

Pasos simples para asegurarse de que los comandos se estén transmitiendo o que los bits se interpreten correctamente.

Los comandos de avance y retroceso aseguran que se dirijan ambos bits.

El freno debería funcionar.

Si el motor no se detiene pronto, haría lo siguiente. Si se está ejecutando en dirección hacia adelante, lo habilito para que funcione en dirección inversa por un breve momento y luego aplico los frenos. Esto hace que el motor se detenga más rápidamente.

    
respondido por el Umar

Lea otras preguntas en las etiquetas