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.