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.

Start and low speed with load problem

Other Parts Discussed in Thread: DRV8301-69M-KIT, DRV8301, MOTORWARE

Hi all,

I'm developing the code for our custom board with instaspin.

Running our motor at speed of 1kRPM (not so low) with some load applied, we notice something strange.

Our motor car run from 1kRPM to 40kRPM with this parameter:

Rs = 1ohm

Ls = 45uH

Flux = 0.024V/Hz

I max = 6A

We try to start with no load and the motor run at 1kRPM, after that we applied the load of about 12.644 N mm with an electronic brake.

With CCS we notice that the estimated flux change from 0.024 to 0.033 and the motor slow down even if the SpeedRef value doesen't change.

Finally when the motor reach about 600RPM it stall until the load was removed.

Why the flux increase? It could be possible that the estimator are not aligned with the rotor position?

An other question, we added some inductance (10uH) in series with rotor windings for emi purpouse, the Ls value of the user.h must be updated with this value?

Thanks,

Alessandro.

  • Which HW?

    Bus Voltage?

    what settings did you change in user.h?

    Did you use the "setting your user.h" spreadsheet?

    which project did you use to ID these parameters? (you MUST use proj_lab2c)

     

    Yes, if you add inductance ID the motor (using proj_lab2c and proper settings) and use those values.

     

  • Hi Chris,

    we test it on our designed board based on the DRV8301-69M-KIT.

    The Bus voltage is normally at 32V, but we test also lowering the bus voltage and chage the voltage feedback.

    Yes we use the spreadsheet and we identified the motor parameter with the kit and proj_lab2c but we try also with the parameters indicated from the manifacturer.

    Now I'll try to enable Rs Online but the flux remain costant with load applied, it's increasing with the temperature of the motor. It could be a solution?

  • Rs only has an effect at lower speeds. At high speed your Ls is critical.

    It could be your Ls value is wrong, or it is changing dramatically at load. Too low and you will lose a bit of efficiency, but too high and you will go unstable. So best to be low.  Try setting it to 20uH and see if it improves.

    If you add external inductance you need to ID or add this into the the Ls value in user.h

    The flux changing is  more concerning. This is usualy from the HW voltage filter poles not matching (due to error, drift, poor components, etc)  the SW voltage filter pole in user.h.   You can "tune" the user.h software filter pole by increasing the filter pole if the flux is rising with increased speed and decreasing the filter pole if it is falling.  You want the flux stable at stable speeds.

     

  • I have done tests with Ls = 10uH, 55uH and 100uH but nothing is changed.

    The Flux reach the max value (after, the CCS does not update this value) at 12 N mm of load and the motor decreases the speed and stall.

    This is done at 1kRPM that is our lower speed value (range 1-40kRPM) for our two pole motor.

    This torque at this speed is about 1/4 of the max torque produced by my customer's competitor motor control board (that use BLDC technique instead of FOC).

    What can I do to try to increase this value and obtain a better torque?
    The fact that the flux increase and the speed decreased is due to a not aligned vector of driving?

    Thanks.

  • Which compiler are you using? Need to be at 6.2.3+

    Keep forgetting to have people check this first...sticky on this forum though.

  • Compiler? I think it's 6.2.4 but I'm not sure. I'll check when I come back to office on monday.

    What could be the problem concerning the compiler version?

  • the 6.2.0-6.2.2 compilers have a nasty bug that effects IQsat function. Check that first...

  • I've checked, compiler version 6.2.4, CCS version 5.3.

  • please upload your user.h

    are your offsets saved or are you running OffsetCalc?

     

  • This is the user.h.

    Yes, I'm running the OffsetCalc

    4810.user.h

  • Try using attached and running proj_lab2c to ID your motor.

    Also, I changed the IQ_VOLTAGE so you will have to update your V offsets in user.h again. If you are using

    www.ti.com/tool/instaspinfocmotorwaregui

    you can simply copy/paste from the GUI window...and/or just keep OffsetCalc enabled.

     

     

    user.h
  • Some other thoughts...

    - The Ls for these motors don't seem correct.  The Ls is much lower than required for a good R / L and proper short circuit current for a relatively low current motor....it just doesn't make sense.  An Ls = 300uH (30 x the 10uH you are sometimes using) would support 1 kHz+ operation and 12A of short circuit current.  I'm hoping you will ID something closer to this now.

    - have you tried these motors with the DRV8301 EVM?  Perhaps you have a HW issue somewhere....would be good to check with known HW.

     

     

  • - The Ls of the motor is about 45uH for our motor and with the 10uH series inductor, we obtained 55uH that is the value in the user.h.
    The motor have some phisical constrain and cannot have more windings to increase Ls. All of the motors of this kind have same values of inductance and resistance

    - I starting develop this code for this motor from the first revision of the motorware with DRV8301-69M-KIT. I can check the motor with latest release of motorware, I haven't made big modification in the hardware of the kit in order to make our board. Where could be the HW issues regarding my problem?

    Thanks.

  • If you are confident on the parameters of the motor being correct, I would have to suspect

    • getting good data in
      • Are we representing the number correctly
        • scale of HW to scale of SW for currents & voltages. 
        • offsets calculated at the IQ_V / IQ_I and Vbus currently running (or run OffsetCalc which you say you are doing)
      • clean current signals, and ability to sense them at the correct time
      • proper phase voltage filters that are accurate and have a matching SW pole in user.h
    • are the parameters changing
      • loading the motor can cause an increase in Rs which will make the estimator drift....use RsOnline feature
      • loading the motor can cause the difference in Ls_d and Ls_q to show themselves (maybe you have a salient motor)....this is typically only enough to effect the angle slightly to reduce max torque / max efficiency

     

    Can you reduce the load and keep stability?  I.e. is the angle just slightly off where 90% load is still ok? 80%?  Or is it catastropic?

    Can you try this motor and test with DRV8301 EVM to see if it's your HW somehow?

     

  • Hi,

    I've checked the current and voltage scaling, it seems to be ok. I've also checked the current and voltage signals. What do you mean with "the ability to sense them at the correct time", it could be that the adc sample the value at the correct instant? I've increased up to 60Hz the PWM frequency (as user.h suggests for low inductance motors), it could be a problem?

    I also think on the Rs changing with motor heating but the problem of flux increasing and motor deceleration occur also when the motor is cold. Could be the difference between Ls_d and Ls_q, our customer said that the motor is not a salient motor.

    If I reduce the load the motor is stable (also if the flux is slightly increased) and work correctly but the value of torque is small regarding to other competitor's control boards.

    Now I'm going to try the motor with DRV8301 and motorware 12.

    If the problem is due to difference between Ls_d and Ls_q, can I setup different value in user.h?

  • I've tested the motor with DRV8301 KIT and motorware 12 but the motor run in the same way as in our custom HW.

  • even with DRV8301 EVM you are seeing the flux value saturate / clip and stall occur?

    I was pretty sure it was a hardware/software issue with the voltage filters.....but if the two different HW behaves the same it has to be something else.

     

  • Yes, even with DRV8301. I've made some modification on the default value of the EVM components in order to fit the motor's parameters. I've changed:

    R80, R81 and R82 (shunt resistors) from 0.002 to 0.02 ohm

    R60, R61 and R63 (voltage feedback) from 95.3k to 56k

    R62, R64 and R65 (voltage feedback) from 4.99k to 4.7k

    We changed the USER_VOLTAGE_FILTER_POLE_HZ to 367.048 using the default value of C67,C68,C69 of 100nF.

    The our custom HW is based on EVM connection, it's not so different.

  • Please upload the uesr.h that corresponds to this circuit.

     

    With the last user.h (that I modified and uploaded) you had

    #define USER_IQ_FULL_SCALE_VOLTAGE_V      (24.0)

    but your values above would give you

    #define USER_IQ_FULL_SCALE_VOLTAGE_V      (42.62)

    and you had

    #define USER_ADC_FULL_SCALE_CURRENT_A        (16.5)

    but your values above would give you half of that I believe

    #define USER_ADC_FULL_SCALE_CURRENT_A        (8.25)

     

    your filter pole is

    #define USER_VOLTAGE_FILTER_POLE_Hz  (386.86)

    but your values above would give you

    #define USER_VOLTAGE_FILTER_POLE_Hz  (367.24)

    // this is probably close enough

     

     

  • Here the user.h of the kit used to make the tests.

    6170.user.h

  • 1. Your current scaling is incorrect for your hardware

    Rfbk / Rin = 1.65 / (Current * Rshunt)

    20K / 1k = 1.65 / (Current * 0.02)

    Current = +/- 4.125

    #define USER_ADC_FULL_SCALE_CURRENT_A        (8.25)

    #define USER_IQ_FULL_SCALE_CURRENT_A          (5.0)

     

    2. your clocking is wrong

    Try running the Motor ID with PWM 15 KHz. We have recently found that this may help on the DRV8301 EVM. 

    #define USER_PWM_FREQ_kHz                (15.0)
    #define USER_NUM_PWM_TICKS_PER_ISR_TICK        (1)
    #define USER_NUM_ISR_TICKS_PER_CTRL_TICK       (1) 
    #define USER_NUM_CTRL_TICKS_PER_CURRENT_TICK   (1)
    #define USER_NUM_CTRL_TICKS_PER_EST_TICK       (1)
    #define USER_NUM_CTRL_TICKS_PER_SPEED_TICK  (15)
    #define USER_NUM_CTRL_TICKS_PER_TRAJ_TICK   (15)

    After you have ID'd you can try to increase the PWM frequency.

    #define USER_PWM_FREQ_kHz                (45.0)
    #define USER_NUM_PWM_TICKS_PER_ISR_TICK        (3)

    3. try lowering this, 300 Hz was probably a bit to aggressive for your motor

    #define USER_R_OVER_L_EST_FREQ_Hz (150) 

    4. Your motor parameters

    Are you sure they are in the right ballpark?  This R/L (if using 10uH) is 100 KHz, which is absurd.  And the Isc = 366A. Yet you say this is only a 600-700 Hz machine with 8A max current (and you can only measure 4A on your hardware).  This doesn't add up.

    For the Hz and Max Current limits - assuming the Rs and Flux are correct - I would expect an Ls in the 150-500uH range.

    #if (USER_MOTOR == TKD_Definitive_IND10uH)
    #define USER_MOTOR_TYPE                 MOTOR_Type_Pm
    #define USER_MOTOR_NUM_POLE_PAIRS       (1)
    #define USER_MOTOR_Rr                   (NULL)
    #define USER_MOTOR_Rs                   (1.0)
    #define USER_MOTOR_Ls_d                 (0.0000550)
    #define USER_MOTOR_Ls_q                 (0.0000550)
    #define USER_MOTOR_RATED_FLUX           (0.02386)
    #define USER_MOTOR_MAGNETIZING_CURRENT  (NULL)
    #define USER_MOTOR_RES_EST_CURRENT      (0.8)
    #define USER_MOTOR_IND_EST_CURRENT      (-0.8)
    #define USER_MOTOR_MAX_CURRENT          (8.0)
    #define USER_MOTOR_FLUX_EST_FREQ_Hz     (60.0)

    5. Your power supply

    What voltage and amperage do youhave available?  If the motor has the parameters listed (super high Isc) it will require a very high first current as it starts up.  I don't think this motor is actually that high though...your Ls value must just be completely wrong.

     

  • Chris,

    1.

    Sorry, also the R95, R103, R105, R107, R108, R113 was changed from 20k to 10k so the Current is +/- 8.25A. The define :

    #define USER_ADC_FULL_SCALE_CURRENT_A        (16.5)
    #define USER_IQ_FULL_SCALE_CURRENT_A          (9.0)

    Could be ok?

    2.

    Ok I can try with this PWM frequency, I've setup higher frequency as you suggest in the user.h.

    Why with DRV8301 need this low frequency? Could be due to the MOS?

    3.

    Ok, I try with 150. Why is too aggressive?

    4.

    Why you say 10uH? The motor inductance, as manufacturer say, is 45uH. In the user.h I've setup Ls = 55uH that is the motor inductance plus the series inductance for emi reduction.

    The manufacturer want to run the motor from 1 to 40 kRPM so the max speed is 666.66Hz, what is wrong?

    5.

    I've a power supply of 32V 5A, the motor run correctly, the problem is during rotation when we apply the load (and not the full load)..

  • 1. ok, that looks correct

    2. the current measurement on this board just isn't good enough. The faster PWM may be doing more harm than good in creating a stable signal to measure.

    3. We updated this from (100) to (300) on the DRV8301 based hardware due to so many peopl using these little hobby motors with 1500 Hz+ frequencies.  Your motor isn't that fast, so reducing it is better.

    4. I was looking at the name you used for your motor TKD_Definitive_IND10uH. I thought the 55uH for USER_MOTOR_Ls_d  was because you added external inductance.

    5. hmmmm. but this is at higher frequencies, right? 16.6 Hz (1 KRPM for 1 polepair motor) which is 2% of your full scale frequency.

    Well, with your very small Flux value (0.023 V/Hz), even at 16.6 Hz you are only producing 0.38 V of Bemf and you are trying to resolve that on a 42.6V ADC scale.  That's 0.9%, or 38 out of 4096 12-bit counts.

    IMO, FAST tracking has probably degraded too much at that point for full torque...that's probably the main usse at this point.  For continuous low speed you need to get as much voltage signal resolution as possible into the algorithm.  This is very challenging for low voltage, low flux motors...

    one small thing
    with your 733 Hz full scale and USER_ZEROSPEEDLIMIT   (0.001), you are setting a ForceAngle switching point of 0.73 Hz.  This is much too low for this motor.  If you are using ForceAngle you probably want something like 5 Hz minimum for this motor....and you shouldn't plan to operate at this range for continous operation as you can see the difficulty you are having at 16.6 Hz.

    USER_ZEROSPEEDLIMIT   (0.007)   // 0.007 * 733 = 5.1 Hz

    #define USER_FORCE_ANGLE_FREQ_Hz            (11.0) // set to > 2* 5.1 Hz

     

  • 5.

    Yes this could be an issue, I've tested our custom HW scaling down the voltage feedback and the DC bus voltage. I try with 33k and 4k7 that produce USER_ADC_FULL_SCALE_VOLTAGE_V of 26.47 but noting seems changed.

    I'll test with other values in order to increse the voltage feedback signals.

    With the user.h configuration applying partial load, the motor run ok at 1kRPM, the estimated flux increase from it's original (no load) value but the rotation speed is correct.

    Why with full torque have problems in voltage feedback? Too much noise?

    It seems like it was an error on the rotor position estimate that increases with load. This error cause an increase of Id (and the estimated flux) and a related decrease of Iq (the motor slows down). Could be?

    I have enabled RsOnline Recalibration on the DRV8301 EVM and the performance of the motor seem to be increased but I have to do more tests on it.

  • Can you try doubling your speed and seeing if the torque under load gets better? This will give us a feeling if it is the feedback into the estimator breaking down. 

    While this is a small flux, I've certainly seen just barely larger fluxes able to go significantly lower in speed. My expectation for this motor - based on experience - would be worst case of 6 Hz.

    Can you try using the SpinTAC controller in labs 5c-5f? The speed control tuning is critical for low speed and SpinTAC is superior for this purpose (both in control capability and ease of tuning a stiff controller). This will at least take the speed loop out of the possible issues and let you determine when FAST and the Torque control system hits the continuous low speed operation limit. 

  • I've tested the EVM at speed of 1k, 2k and 4k with different loads.

    The 1k and 2k are similar, the flux increase is of the same value with same load. When the flux reached the max value the motor stall.

    At 4k the increase of the flux is less with same load and the motor generate a good torque.

    Which parameter or measure influence the max value of the flux estimated by the fast?

    If the worst case was 6Hz it's good, our customer want a lower speed of 1kRPM -> 16Hz.

    Next step I'll try with SpinTAC as you suggest.

  • ok, try SpinTAC.

    But the fact that it is happening at 2 KRPM (33 Hz) is troubling....the estimator is providing bad angle data, so that means that the motor parameters are incorrect / changing or the data into the ADC is not good (bad filtering, bad resolution, noise, etc)