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: An issue while Driving Ceiling Fan using DRV10983

Part Number: DRV10983
Other Parts Discussed in Thread: DRV10987

Hello all,

I'm driving Ceiling fan BLDC motor with interfaced DRV10983 driver. My problem is BLDC motor isn't rotating smoothly and as per require speed.

I think i have problem with configuration I2C register.

Can anyone suggest me a solution for that?

Motor parameter:

24volt

1.5 Amps

36Watt

340RPM

Phase resistance: 2.78Ohm

Kt: 440

  • I'm assuming you were able to reach closed loop running of the motor.
    1) We have a tuning guide to tune the register settings such that the motor spins as desired. (www.ti.com/.../slou395d.pdf). Please use that for guidance, and let us know if you have any questions.
    2) Make sure your phase resistance and kt are accurate. Also try tuning the T control advance time, and see if the spinning and current of the motor gets more sinusoidal and smoother.
  • Hello Sanmesh,

    I have tried your suggestion of tuning guide pdf.

    Set all the parameter accordingly, but i think motor isn't rotating in open loop mode.

    For more clear communication i can give you my EEPROM register value which i used to set for motor.

    Thanks,

    Vrajesh Prajapati

  • Hello Sanmesh,

    Finally my motor rotate in open loop mode.

    But still i'm having problem in close loop mode.

    As soon as i enter in open to close loop mode motor speedup and stop rotation.

    Vrajesh Prajapati
  • Try to use the locks to see what locks are triggering when hitting closed loop mode.
    In general, what I'd recommend is use conservative parameters for all acceleration parameters.
    Maybe make the "closed loop accelerate" parameter the minimum.
    Can you attach you eeprom register parameters either as .csv or as screen captures?
  • Hello Sanmesh,

    Thanks for replaying my query time to time.

    I have enabled all Lock. And when i read fault detection in close loop mode it shows stuck in close loop fault.

    I have also tried both IPD and align and go method. But same problem facing, motor stop in close loop.

    I have changed my Kt and Phase resistance value.

    I've set following EEPROM parameter to run motor.

    Address          Value

    0x20         =         0x5E
    0x21         =         0x81
    0x22         =         0x3A
    0x23         =         0x05
    0x24         =         0x80
    0x25         =         0xFD
    0x26         =         0x4A
    0x27         =         0xF0
    0x28         =         0x0F
    0x29         =         0xF9
    0x2A         =         0x0C
    0x2B         =         0x0F

    Once motor start running in open loop i change 0x2B register value into 0x0E for enter into close loop. That's where motor stops running.

  • Try these parameters:

    DRV10983 0x20 0x5E
    DRV10983 0x21 0x1
    DRV10983 0x22 0x3A
    DRV10983 0x23 0x5
    DRV10983 0x24 0x90
    DRV10983 0x25 0xFD
    DRV10983 0x26 0x88
    DRV10983 0x27 0xF0
    DRV10983 0x28 0xAF
    DRV10983 0x29 0xF9
    DRV10983 0x2A 0xC
    DRV10983 0x2B 0xF

    Overall what I did:

    1) Increase the open to closed loop threshold to 25.6Hz. Usually closed loop can fail if you are not transitioning from open to closed loop at a high enough speed. Thus, you want to make this value bigger.

    2) Put an acceleration current limit to avoid current hitting the current lock. You can play around with this depending on how much current you're drawing.

    3) Made Adj Mode to full cycle.

    Notes:

    1) phase resistance (phase to center tap) and phase to phase Kt is set as  4.33 ohms and 920m (mV/Hz). phase resistance is twice the resistance that you mentioned (2.78Ohm), and the Kt is extremely small. When you said Kt = 440, what is the units? If its mV/Hz, you need to change the Kt value to that in the eeprom. I would check this and this could be the reason closed loop fails.

    You might want to check the actual kt of the motor by measuring it on the oscilloscope as well.

    Also see what the drv10987 device reads as kt as well from the MotorKt register at address 0x03.

    Let me know if you get a breakthrough through this.

  • Hello Sanmesh,

    A big thank you for such a big support.


    My motor finally rotate with 0x20(address) = 0xCA(value) and 0x21(address) = 0xDE(value).
    It is rotating smoothy and open to close loop handshaking is also smooth and perfect.


    Now I'm almost on finishing stage with some question.

    1) If i make my duty in between 0to50 motor rotate clock wise, but when duty is in between 51to100 it rotate anticlockwise, so why is that?

    2) Similar thing with I2C SpeedCtrl1 and SpeedCtrl2 register, when i make their value in between 0to255(decimal) motor is rotating, at 256 value motor stops, again after 257to511 motor is rotate with same direction, so why is that?

    3)What does DIR pin do?
  • 1) Depending on whether the DIR pin is grounded or 3.3V, it will either keep the default motor spin direction or reverse it. Make sure it is not Hi-Z, and that it is set to 0V or 3.3V. Also maybe put the dir pin on oscilloscope to make sure it isn;t changing value and causing the direction to change

    2) Make sure when the device stops and rotates at a different direction, a lock isn;t hitting and the motor isn't restarting. Also maybe disable reverse drive if you dont need it.

    Try these two things and let me know what you find.

  • Again Thank you.

    Now for duty 0to100 my speed varies perfectly.
    Actual problem was on driver Pin connection, Dir and Speed pin was short so given pwm are also enters into Dir pin, so that's makes the problem.

    And in I2C speed control register, there was a problem from my side which is i made mistake of shifting register.

    For now motor is rotating perfectly with both PWM and I2C speed control.

    Thank you Sanmesh Udhayakumar.

    Vrajesh Prajapati

  • Hello Sanmesh,

    Right now I'm running my Fan with Load(Flaps).

    But there are some issue with load.

    1) When fan is running at its full speed, i turn off PWM and immediately after i again start giving PWM, fan speed decrease and make it self zero than it is start back to require speed, All i want is to continue fan rotating even when i turn OFF and turn ON fan.

    In short all i want is Image below:

    2) In the same case above turning OFF PWM and immediately turning ON PWM makes the "Speed abnormal" fault flag ON.

  • 1) Motor with load might need different eeprom tuning parameters compared to motor without load, so doing this may remove abnormal speed fault.

    2) In order to go directly from spinning forward in an undriven state to closed loop, select "Enable Initial Speed Detect", then as long as the speed of the motor is greater than "initial Speed Detect Threshold", the motor should go directly to closed loop. Otherwise, it will brake, and then restart. To learn more about ISD please see in our datasheet () section 8.4.3.1

  • Hello Sanmesh,

    I already gone through drv10983 datasheet many times. I already enabled the ISD with different ISDThr 0.8Hz to 6Hz. but it did not resolved issue.


    Mean while i'm trying your suggestion of tuning Fan On load.
  • I accidentally clicked TI thinks resolved, so I apologize. you can deny its resolved.

    Below is the decision diagram of motor with ISD involved. you can use this to try to see what's happenning

    1) When turnining off and on the pwm, after the motor goes to zero speed, is there any locks that trigger and does the motor seem to go to align and go immediately? I want to see if the motor for some reason isnt direclty trying to go to closed loop using ISD.

    2) Disable Reverse Drive and see if that fixes the issue,

    3) Use this e2e thread as a reference of how to debug ISD issue (). 

    Please give a little more detail in what's happening in your case, and I will in parallel also talk to my team to try to give any suggestions.

  • I think the get rid of noise messing up ISD, please look at this E2E thread ().

    Basically you can do the following:

    1) "If you are using the linear regulator in Buck mode (with an inductor) obtain a shielded inductor or switch to a resistor instead

    Our experiments showed that the inductor on the board acted as an antenna that picked up noise from the evironment and physical phase windings of the motor. Shielding would help prevent the pick up of extrinsic noise

    Or remove the inductor and put the linear regulator in Linear mode (with a resistor) because a resistor will pick up a lot less extrinisic noise compared to the inductor (This is recommended if VREG is not powering any external components)"

    2) If you are using your own pcb, "optimize the layout so there is a sufficient GND plane to prevent switching noise

    Circuits that switch in reference to GND (such as VREG) will cause a lot of ripple on the ground plane. Optimizing layout so switching noise on the ground plane will not couple into the phases could be very helpful

    This change is tough and can be rather expensive if not fixed the first time"

  • Hello Sanmesh,

    I don't think i have any kind of problem that you suggest above two, one shielded inductor and second sufficient ground.

    I calculate Kt again. my motor RPM is 340 and i select mt Kt in EEPROM is 411mV/Hz, according to tuning guide pdf on page no5 formula for 340 rpm motor require Kt which i calculate is around 1050mV/Hz (4 pole pair and 340rpm). But at 1050 Kt motor isn't rotating it shows the lock current detection error. But at 411 Kt motor perfectly rotate.

    So my question is,
    Is this parameter affecting on ISD problem?
    And is it ok to use 411Kt even if calculation says Kt should be 1050.
  • 1) From the description in the datasheet of how ISD works, I dont think Kt will affect ISD working. It will affect the motor being able to spin if the motor enters closed loop using ISD, but if the locks are enabled, it should trigger showing that the motor isnt spinning if the motor goes to closed loop.

    2)The Kt = 1050mV/Hz is an estimated approximate value to be only used when u cant measure motor kt directly through spinning the rotor and doing the Kt = Ep * Te as mentioned in section 2.3 of the tuning guide (www.ti.com/.../slou395d.pdf)

    I want to confirm the results of the questions I asked you previously.

    1) When turnining off and on the pwm, after the motor goes to zero speed, is there any locks that trigger and does the motor seem to go to align and go immediately? I want to see if the motor for some reason isnt direclty trying to go to closed loop using ISD.

    2) Disable Reverse Drive and see if that fixes the issue,
  • Hello Sanmesh,

    When turning off and on the pwm, after the motor goes to zero speed, there is no lock detect, But until motor speed not reach to zero it keep on showing abnormal speed, and lock detection current limit. After 3 second fan start rotating.

    I already disable the revere drive.

    I'm sure that i don't have any inductor problem.

    I have my own pcb and with sufficient ground present there.

    Tell me if i didn't clear any of question.

    One more thing i want to add which is: When pwn is maximum 100 and fan is at it's full speed i read the Motor speed resister, It keep on varying and maximum value it shows the 0x21E (0x11=0x02 and 0x12=0x1E). I think it should show 0xFFFF around. Is it?
  • Give me a couple of days to get back to you on this, as I will be coming back on tuesday to work.

    Just immediate thoughts:
    1) I think because we see a speed abnormal lock while the motor speed is decreasing to 0, I think the ISD does successfully get the motor to closed loop, but the motor is just failing to spin in closed loop.
    2) motor speed 1 and 2 registers denote the electrical speed of the motor in Hz. So its value should correspond to the speed of the motor according to the following equation: Velocity (Hz) = {MotorSpeed1:MotorSpeed2} / 10. So only if motor velocity = 0xFFFF/10 = 6553.5 Hz, then motor speed registers should be 0xFFFF. SpeedCmd register should be 0xFF indicating 100% speed command, unless it is limited by software current limit (SWiLimitThr register). You can find descriptions of the registers in the datasheet.
  • Hey Vrajesh,

    Like I mentioned in my previous reply, the abnormal speed lock triggering suggests that I think the ISD does successfully get the motor to closed loop, but the motor is just failing to spin in closed loop. The only options I can think of right now are below:
    1) Make closed loop parameters more conservative such as making closed loop acceleration the minimum. Also try adjusting other parameters such as the t control advance, make control coefficient 1, and/or enable double the output pwm frequency.
    2) Try to spin at a higher speed or turn the pwm off and on quicker so that the motor will start spinning again from a higher speed.

    Let me know if any of this helps. Basically you will have to tune the closed loop settings,
  • Hello Sanmesh,

    1)Some parameter i already set before your advise.
    closed loop acceleration = 0.045
    Control Coef = 1
    Output PWM Freq = 50Khz(DoubleFreq = 1)
    After your advise, I try TctrlAdv with different value but problem remains same.

    2)At higher speed if i turn off PWM and quickly turn ON PWM motor continue rotating in close loop,
    But i want same thing with more than quicker time period.
  • When you say "i want same thing with more than quicker time period", I'm assuming your saying you want the motor to start from a lower speed and be able to spin successfully. 

    I will check with my coworkers on this, and get back to you.

  • Hey Vrajesh,

    The abnormal speed lock appearing might have to do with the kt and R being entered being wrong. What is your kt phase to phase and Rphase_to_CT entered? Is it 411 mV/Hz and 1.54 ohms as mentioned before?
    1) For Kt, make sure your motor kt is actually 411 mV/Hz or whatever you entered by manually measuring it with an oscilloscope as mentioned in the tuning guide (www.ti.com/.../slou395d.pdf). Also when the motor is spinning, check what the Kt is being measured in registers MotorKt1 and MotorKt2, and see if it matches what you entered. Kt (mV/Hz)= {MotorKt1:MotorKt2 Hex value} *1000 / 2 /1090. Let me know what the kt being measured by the MotorKt1 and MotorKt2 registers is. Also try entering the kt value calculated from MotorKt1 and MotorKt2 in the MotorParam2 Kt[6:0] field.
    2) For R, if your listed 2.78Ohm is your Phase to phase resistance, phast to CT resistanc entered in the GUI should be 2.78 ohms/2 = 1.39 ohms.

    Let me know if this helps.
  • Hello Sanmesh,

    Excuse me for late reply,

    Yes, I want start motor from a lower speed and be able to spin

    My Kt is 411mV/Hz and R=1.54Ohm entered in EEPROM.

    Let me check the MotorKt1 and MotorKt2 value. And i will reply back.

    Mean while i will also try your suggestions.
  • Hey Vrajesh,

    Any update? I understand it may not be possible to get the exact desired behavior of ISD, so just let me know if this is the case. Also, let me know if I can help in any other way.

    Sincerely,
    Sanmesh U.
  • Hey Vrajesh,

    Since its been a week, ill close this thread. If you want to follow up, just reply to this thread or start a new one and I'll gladly answer.

    Sincerely,
    Sanmesh U,