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: I2C calculated motor current is zero or close to zero

Part Number: DRV10983

Hi,

Setup

- DRV10983

- BLDC motor with an impeller on its axis

- Diameter of impeller 13 millimeters, depth 7 millimeters, made of plastics

- Application: air flow generator in a measuring device

- Ambient temperature 25 °C

Startup phase

- Via I2C motor starts with any given speed setpoint value between 100 and 511

Analysis

1. Overall system performance:

-  System acts as expected

- Changing speed setpoint changes motor speed. This is verified twice via readback of motor period registers and calculation of rpm and an independent flow sensor that measures a change in flow when a change of speed setpoint occurs.

2. Motor current:

- Reading the motor current registers MotorCurren1 and MotorCurrent2 via I2C

- Resulting register values of {MotorCurrent[10:0]} are 0x3FE...0x402 regardless of speed setpoint!!!

- Calculating motor current according to post https://e2e.ti.com/support/motor-drivers/f/38/p/899148/3325060?tisearch=e2e-sitesearch&keymatch=DRV10983#3325060

- Problem, this results in current values around 0 A. Because the formula stated in the post above subtracts 1023 of the MotorCurrent[10:0] value.

3. Why does one have to subtract 1023 from the register value? Obviously this must result in values around zero. What is the solution to this problem?

  • Hi Marc,

    Thanks for posting your question in MD forum. We recently updated DRV10983 Datasheet. Please check Table 9 (Page 44) in the datasheet for the updated equations to calculate Motor current. Please note that the values that are read back from motor current registers might have errors (especially at low currents) due to current sense amplifier and ADC offset, gain and noise.

    Regards,

    Vishnu.

  • Hi Vishnu,

    1. I was aware of this equation on page 44 of SLVSCP6H

    2. I implemented this particular equation already:

    If ({ MotorCurrent[10:0]}) >=1023 Current (A) = 3 × ({MotorCurrent[10:0]}) - 1023) / 512

    else Current (A) = 3 × ({MotorCurrent[10:0]}) / 512

    in my software the following happened when calculating the motor current of the read register values:

    - Reading back MotorCurrent[10:0] with a value of 0x3FE and put into equation => 5,988 A

    - Reading back MotorCurrent[10:0] with a value of 0x3FF and put into equation => 0 A

    - Reading back MotorCurrent[10:0] with a value of 0x400 and put into equation => 0,00586 A

    3. As already told register values vary around 0x3FE and 0x401. Using the equation above makes things even worse than using equation shown in https://e2e.ti.com/support/motor-drivers/f/38/p/899148/3325060?tisearch=e2e-sitesearch&keymatch=DRV10983#3325060, because now the motor current value jumps around between 5,988 A, 0 and 0,00586 A which is definitely wrong. 

    4. What is the solution?

  • Hi Marc,

    FYI - We are having severe inclement weather in Dallas and multiple affected team members are without power. Please be patient with our response here.

    Thanks,

    Matt

  • Hi Marc,

    Thanks for your patience. Motor current readback gets inaccurate either because current decays due to low inductance or if the BEMF waveform isn't very sinusoidal. Is it possible for you share the actual/measured phase current or the BEMF waveform of the motor? Did you ensure the Motorcurrent1 and Motorcurrent2 registers were refreshed before reading back their values? 

    Regards,

    Vishnu

  • Hi Vishnu,

    - Phase to Phase inductance is 0,972 mH

    - We do not have an actual measurement of the phase current, but I will measure it next week,  not sure if we can measure it at all yet.

    - I did not find an information in the datasheet that one has to check if a value is refreshed before reading, beside the information that MotorCurrent1 needs to be read first which I do. Reading a value follows the process described in "Programming Guide for the DRV10983" (slvuaa5.pdf, version October 2014), Figure 9.

    Which chapter and which register contains the information that tells whether the MotorCurrent register is ready to read or not?

  • Hi Marc,

    Motorcurrent1 and Motorcurrent2 are non-EEPROM registers so there is no need to refresh them before reading them. Sorry for the confusion!

    I'm guessing this is an extremely low power motor with very low motor current and that's the reason why motor current readback is inaccurate. As i mentioned earlier, the values that are read back from motor current registers might have errors (especially at low currents) due to current sense amplifier and ADC offset, gain and noise.

    Regards,

    Vishnu