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.

Collapse of the "sinusoidal" current

Other Parts Discussed in Thread: DRV8301

Hello!

I’m using Instaspin-foc on an own board based on the DRV8301-HC-C2-KIT for controlling a PMSM with low inductance. The motor has 6 poles. The motor current doesn’t look like a sine wave. There is a heavy collapse at the peak of the sine. The collapse will be bigger by increasing the speed. I think that’s the reason why I don’t achieve higher speed (I get less than half of the nominal speed, n_n=30krpm).  Does the Instaspin-FOC use an algorithm to add the third harmonic? This impact is very harsh and I don’t know how to fix this. I also verify the measuring of the current by sampling the ADC-results and visualizing them in the graph window. For better understanding I attached an image of the phase current (blue) and the voltage between two phases (red).

I hope someone has an explanation for this phenomenon or a guess to improve the current profile.

Thanks a lot!

  • is this using InstaSPIN-FOC?

    please attach your user.h

  • yes. I attached the file.

    user.h
  • #define USER_VOLTAGE_FILTER_POLE_Hz  (1636.0)   // results from voltage divider 39k / 4.99k and 22n Capacitor

    this value is too high.

    I know the UG states to keep the filter above your max frequency but this is not true. (I've been trying to get this changed and I capture this in the setting user.h spreadsheet).  Please change your HW & SW to (max_freq + 10% buffer) / 4.

    If your motor is to run 1600 Hz you can try (1600 * 1.1) / 4 = ~440 Hz

    (with your 6 pole motor this is 32 KRPM. Sound right?)

    the main problem is that your Ls value is incorrect. You show < 1uH, which is not realistic.  You need to use proj_lab02c to ID the low inductance motor and make sure you get a real value.  a few uH is the lowest I've ever seen.

    The Rs on your motor is pretty absurdly low. One of the lowest I've ever seen.  To support 1600 Hz you essentially need your Ls to be 1uH.  This is not a good motor design at all.   To be honest, this is hardly a motor. It has almost no magnetic material (0.0037 V per Hz), no resistance, and no inductance.  Trying to sample and control the current on this motor is impossible.

    To go with that, your hardware is set for 29 V.  Based on the Bemf of this motor it should run full speed at well under 12V, so you are wasting resolution.  Are you running at 28Vdc bus per the IQ_VOLTAGE?

    And then I look at your current....412A!!!  What is this motor really rated?  It doesn't really have enough flux to support this much current.

    I've seen people using DRV8301 and // legs of FETs to get up into the 300A+ range...there are MANY hardware challenges to work through, so I automatically question / would be suspect on everything to do with the drive stage before I even started looking at the SW.

    This is minor, but I would set this to (20) since your main tick is at 20 KHz

    #define USER_NUM_CTRL_TICKS_PER_SPEED_TICK  (15)   // 15 Typical to match PWM, ex: 15KHz PWM, controller, and current loop, 1KHz speed loop


    #define USER_NUM_CTRL_TICKS_PER_TRAJ_TICK   (15)   // 15 Typical to match PWM, ex: 10KHz controller & current loop, 1KHz speed loop, 1 KHz Trajectory

    Minor, but I would use these values

    #define USER_ZEROSPEEDLIMIT (4.0 / USER_IQ_FULL_SCALE_FREQ_Hz)
    #define USER_FORCE_ANGLE_FREQ_Hz (2.0 * USER_ZEROSPEEDLIMIT * USER_IQ_FULL_SCALE_FREQ_Hz)