This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

problem with DRV8810

hello.
i want to use a drv8810 for controlling two direct current engines with the help of pwm.
i already made the scheme, the scheme is attached in the mail. it is also found in the circuit's datasheet.
i managed to turn on the engines, but they don't do anything neither at the pwn signal, nor at the direction signal.
i tried different pwm frecuencies but it's no use.
if i turn them on with pwm=0, the engines stop. when i change the value, any value i have, the engines turn on, but with a constant speed, and they stay like that.
what is the problem? any suggestion?

  • Hi,

    You should be able to PWM the DC motor if you apply a PWM signal at the ENABLE line. On your schematic, it seems you are using the device as a dual DC motor driver. So there are a few steps you need to follow. You need to configure the device to operate as a dual DC motor. Assuming you have done this already, the motor speed should change as the duty cycle on the PWM input (ENABLE_AB or ENABLE_CD) changes.

    With regards to frequencies, what frequencies have you tried? I would recommend anything above 20 KHz, with 32 KHz being my personal favorite. I can not think of why a slow frequency would remove speed control, but that is something else to check.

    Other than that, as soon as nSLEEP is HI, the H bridges should be enabled according to ENABLE_AB, PHASE_AB and how you configured the device to operate while writing to the SETUP registers (when nSLEEP was LO).

    Another recommendation, I would connect the three VDIN input pins to the VM pin, whether you are using the regulators or not.

  • thanks for the advice!
    i will try a 30 KHz frecuency and connect the pins.
    can the problem be from the programming of the circuit?
    i program it when nSleep=Low, with an atmega128, using SPI.
    the command word for the circuit has 16 bytes and the atmega's spi has 8 bytes.
    i send two commands, one after another, in order to get a 16 bytes word.
    SPI_transmitt(0x04)
    SPI_transmitt(0x0C)  for (0x0c04)
    is this a problem?
    if it's necessary, i'll attach the C program.

  • That's good information. It should be OK to use an 8 bit SPI peripheral but make sure that the STROBE_AB signal does not latch each 8 bit data packet. If I remember correctly from my previous AVR experience, you have to control the SPI SLAVE SELECT pin as IO anyway. So make sure you send the 16 bits before the data packet is latched.

    You are correct in doing this while nSLEEP is LO. When this is the case, the Serial/Control pins behave as SPI port no matter how the device is configured to operate.

    Feel free to post those portions of C code you want us to take a look. Thanks!

  • i take the strobe signal after i send the two words.
    from the avr, for spi, i use only the sck and mosi pins (for the data).
    i give the strobe independently from spi.
    about the electrical scheme, after i connect the pins, is it ok?

  • i connected the VDIN pins at VM. i tried 20KHz, 30 kHz, 36 KHz, 40 KHz frequencies, but there is no use.
    the engines turn on,  and they keep a constant speed, but no reaction at the pwm. i checked the strobe_ab pin (pwm) at the osciloscope, and everything is fine. any other suggestion?