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.

DRV8312 Crossover Distortion

Other Parts Discussed in Thread: DRV8312

I am working on a project that will use a motor driver to drive a three phase BLDC motor.  The driver/commutator needs to be able to drive the motor in both a positive and negative direction and so I have modified the BLDC_sensored example to reverse the current drive by switching the commutation phases.  I have traced some issues I am seeing to what appears to be a significant nonlinearity in PWM duty cycle in to current out.  If I take the unmodified BLDC_sensored example, compile it in Level2, and then adjust the DfuncTesting variable in steps of about 200, starting from zero, and observe the DCbus_current for each setting, I get the following response:

As is seen, the response is quite non-linear and this shows up as significant crossover distortion when I use it in a closed loop circuit that can be driven in the positive or negative directions.  Is there something that can be done to make this more linear?  What is causing the nonlinear behavior?

Thanks,

Mitch

  • Hi Mitch

    Did you find this on our DRV8312-C2-Kit EVM? and the current is taken on a running motor or other loads?

    PWM duty to current may have some degree of nonlinearity due to the motor's feature. Anyway, let's have a wait for our C2000 experts to give the comments.

    Thanks.

    Wilson Zuo

  • This was taken on a DRV8312-69M-KIT with a non-standard motor of slightly larger size than the one that comes with the kit.  The measurements were taken with the motor held stationary. 

    Mitch

  • Mitch,

    DC_Bus_Current to duty-ratio relation would be non-linear and in my opinion what you have observed is expected.

    DC-BUS_Current is decided by total input power taken from system and it reflects: Output Power+ loss in system, so when duty cycle increases, output current increases and it increases the losses in DRV8312 (both conduction as well as Switching) therefore DC-bus current start to increase at higher rate than at lower duty values.

    To verify linearity with duty-ratio you must measure average output voltage only. In your case, as long as motor is halted, it just simple series R-L circuit and there is no electromechanical power conversion, you should get pretty linear average motor (assuming very lower core-looses) current but same experiment with running motor, may deliver non-linear behavior for motor current because motor losses will come into play.

    Best Regards

    Milan

  • Milan,

    From the schematic and code it appears that DCBus_current is measured from a sense resistor that sits between the summation point of the three phases and ground.  Therefore its voltage is a measure of the sum of the currents going through the phases.  In the BLDC_sensored code current only flows between two of the three nodes at any one time.  So the conductive losses you speak of should only be in the FET's associated with that particular 'ON' path.  These FETs have an 'ON' resistance of 80mohms so their effect is small but also linear with duty-ratio because they are in series with the load. 

    Assuming the average output voltage, which appears across the load, is linear with duty-ratio as you say, then the current through the load should be linear with duty-ratio as well, since the resistive-inductive load is linear.  My motor inductive-resistive time constant is 1.28mH/.5ohms = 2.56mS which is much slower than the PWM period of 40uS so this assumption should hold.  

    In my testing the current begins to increase at a duty cycle of around 800/32768 = 2.4% which with a PWM period of 40uS is a 960nS pulse width.  If switching losses are the problem, then that must mean that the switches don't begin to respond until a pulse width of 960nS.  Is this what is expected?  I don't see this specified in the DRV8312 spec so I can't tell. Given that the sense resistance is 5mohms, the sense amp gain is 38x, and the ADC range is 1.65 volts, the full current sense range is around 8.7A (1.65/(.005 * 38) and the one-sided deadband due to this nonlinearity is 8.7 * .024 = 210mA, which is quite significant. 

    Is there a way to improve this performance, or was this motor driver not meant to be used for bidirectional control?

    Mitch

  • It seems that it will work better for a bidirectional driver to drive the switches both directions with 50% duty cycle for zero average current and increasing or decreasing from there for positive or negative current.  That should avoid tiny pulse widths and balance any non-ideal behavior between the two directions.  I'm assuming the ripple can be kept small enough to not cause heating or other problems. Does T.I. have any example code for this kind of implementation? 

    Mitch

  • Mitch,

    May be I miss-interpreted your earlier question? My explanation was based on average value of DC-bus current which reflects total input power of system and this would be non-linear with respect to duty as explained, even with ideal linear R-L load at output.

    Well at halt conditions, we can assume that motor is 100 % linear R-L circuit and you should get pretty linear motor current with respect to duty ratio.  However in actual conditions, motor inductance may change as current increase depends upon saturation level in the stator iron, plus resistance will also change due to heating effect. But I would still assume that these are secondary effects should not affect the linearity of motor current significantly, as much as effected by dead-time.

    To get answer for code availability on bipolar PWM scheme with 50% duty cycle for zero average voltage/current, I will forwarding this query to C2000 expert. You should be able to get the answer soon.

    Best Regards

    Milan

  • Mitch,

    Unfortunately, we do not have code available for bipolar PWM scheme with 50% duty cycle.

    Best Regards

    Milan