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.

DRV10983: Question

Part Number: DRV10983

Hello
I am using DRV10983. All registers can be written and read. But I do not understand the function of the register. I want to control the speed either through I2C or using PWM. However, adjusting the register value does not change the speed. I want to know the register address and the value. And the motor stops at too small a force. I want to increase the current value but it does not work well. Again, I want to know the register address and the value. I read the manual. But it is not well understood.

  I do not speak English well.

Please help me.

Daniel Jang

  • Hey Daniel,

    All register descriptions can be found in the "register map" section of the datasheet located towards the back of the datasheet. If you still need help, I have made an example below:

    The DRV10983 has 3 options for controling the motor speed: Analog voltage, PWM, or I2C. In this example, we need to change the behavior of the driver to accept I2C as the method for controling the speed. There is a bit called "OverRide" that allows the user to "write the speed command through I2C". The name "OverRide" can be found in the Data column of the table where the text can be found in the Description column.

    Following the row from right to left, we learn that the bit 7 of the 0x01 address holds the bit for "OverRide" but connecting the Data and Description columns with the Address and Bits columns. As a result, if we want to "write the speed command through I2C" we need to make bit 7 of 0x01 (or 0x01[7]) "high". Some example puesdo-code is shown below.

    • Reg1Value = I2CRead(Device_ID, 0x01); //Where I2CRead returns one byte
    • //Bit 7 = 0x80 in hex
    • temp = Reg1Value || 0x80; //bitwise OR to write 1 just into the 0x01[7]
    • I2CWrite(Device_ID, 0x01, temp); //Actual I2C write command

    The register for switching between Analog voltage mode and PWM mode can be found in 0x2B[1].

    If the motor stops with just a small force, we need to figure out what is happening. The FaultCode Register 0x1E can tell us why the device decided to stop driving the motor. My guess is that the motor is triggering the current limit. If you have not increased the current limit (HWiLimitThr), you can find it in SysOpt6 register 0x28[3:1].

    Best,

    -Cole

     

  • Thank you.

    I am very satisfied with your answer. I tried before asking your advice.

    But there is no control. I'll show you the register values I received from

    the DRV10983. Can you see where you're wrong?

  • Hey Daniel,

    I've copied your EEPROM settings based on your register values, let me know if these are what you expect. If not, I would make sure that your register writes are correct.

    This motor behavior usually results from 3 sources: incorrectly programmed Phase Resistance, incorrectly programmed Kt, and Tcontrol (lead time). Here's how I recommend you verify them.

    Phase to Phase resistance is found by taking a digital multimeter and measuring the resistance between any of the two phase wires, and phase resistance will be half the phase to phase resistance:

    R_ph_ph / 2 = R_ph_ct

    For Kt, we highly recommend finding that number by taking a scope probe between two of the phases, physically rotate the motor, and measure Voltage (peak to peak) and frequency of the BEMF. Then, Kt will come from dividing the peak to peak voltage by to 2 and dividing by frequency:

    Kt = (V_pk_pk/2)/(f_BEMF)

    For Tcontrol or lead time (Tdelay = 0x22[6:0]), go to the Control Advance Time Fine Tune section in the tuning guide and follow the instructions there. Tcontrol usually ranges between 30us to 450us. As a result, I'd recommend that you drastically decrease the Tdelay to 100us to start.

    Best,

    -Cole