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.

MOTORWARE: Motor identification fails at input of over 38V with UCC27714 based 3 phase PMSM custom controller design.

Part Number: MOTORWARE
Other Parts Discussed in Thread: TIDA-00778, BOOSTXL-DRV8301,

Hi,

We have a 20 pole Surface Mount Permanent Magnet motor that we are trying to drive with a custom motor controller design based on the TIDA-00778 reference design.

We are experiencing some curious issues when trying to do motor identification.

We have successfully ran lab 2b with the BOOSTXL-DRV8301 and the parameters matched expected values at 20V input voltage.

We have successfully ran lab 2b with our custom hardware with an input voltage of 38V.

WIth an input voltage of 39V, however, we see a large amount of instantaneous current spikes and often a dead short pulling up to 60A.

The motor has a rated speed of 1300 rpm, rated current of about 100A, expected Ls of around 20 uH, and expected Rs of around 100 mOhms. We have successfully ran this motor with a commercial motor controller with a 150V input voltage without any issues.

Our custom controller design uses one of the ACS770LCB-100B-PFF-T current sensors on each phase instead of shunt resistors in the reference design. It is rated for +-100A with a bandwidth of 100kHz. They have an output of 0 to 5 V centered at 2.5 and we use a voltage divider to scale it to 3.3V max, centered at 1.65V.

Our hardware voltage filter pole is 250Hz on the phase voltage sense inputs.

Our switches consist of 2 parallel FETs rated to 200V and 88A. We also do not have C50 and C51 on the FET gates.

We have attached user.h and the only software change outside of it is we have set dead time to 10 system clocks on both rising and falling.

We have monitored the voltage sense, current sense, pwm to the driver, gate drive signals, and phase voltages while running lab 2b. We have also looked at the power supply to the gate drivers and it is steady throughout the test. We can't find anything that appears to be wrong.

We have also controlled each side of each phase manually by connecting a function generator to the gate driver input with a resistive load on the phase output. We have done this successfully up to 60V with nothing out of the ordinary seen on the output.

Does anyone have any advice on how to troubleshoot motor identification above 38V on this system?

Thanks.

5100.user_j1.h

  • At what stage of the identification do the current spikes occur? (See gMotorVars.EstState)
    Your speed controller is running at 666 Hz (30kHz/3/15), which is a bit low. I would suggest setting USER_NUM_CTRL_TICKS_PER_SPEED_TICK and USER_NUM_CTRL_TICKS_PER_TRAJ_TICK to 10 or 5 to get better speed control (more smaller steps).
    What bus voltage do you want to eventually use for this system? The USER_IQ_FULL_SCALE_VOLTAGE_V of 300 volt is more than your FETs are rated for, as is your USER_ADC_FULL_SCALE_VOLTAGE_V (250V). If the expected voltage is much lower than your current USER_ADC_FULL_SCALE_VOLTAGE_V, you may want to reduce the ADC voltage scale by modifying your voltage sense resistors. InstaSPIN performs better when the voltage scale matches the application.
    MotorWare bases the initial PID parameters on these scales, so having these scales set so high may cause motorware to pick some unstable initial values. You can try the identification again with USER_IQ_FULL_SCALE_VOLTAGE_V set lower, perhaps 100 or 50 volts.
  • Thanks for the fast reply.

    The current spikes occur right at the beginning of R/L. We have also ran with various values for USER_IQ_FULL_SCALE_VOLTAGE_V as low as 70V with the same results. I do agree that we probably should have set the voltage divider to something closer to 200V as our max voltage for the controller will be 150-170V. However I wouldn't think it would cause this kind of an issue.

    We ran the test again with USER_NUM_CTRL_TICKS_PER_SPEED_TICK and USER_NUM_CTRL_TICKS_PER_TRAJ_TICK set to 5 with USER_IQ_FULL_SCALE_VOLTAGE_V set to 70. We got the same results as previously.

    One thing we think might be a problem is our divider/filter circuit for our phase voltage input lines. Does a 500K series, and 6.4k parallel resistor with a 0.1uF capacitor in parallel seem reasonable? This gives us our voltage filter pole value of 250.
  • We have now tried changing the phase voltage divider/filter to max out at 202V. We have a 60.4K resistor in series and a 1k resistor and 0.47uF capacitor in parallel. This changes our filter pole frequency to about 344Hz.
    This appears to change nothing in comparison to the origional setup.

    We have also tried using the lab 2b setup for the HV-Kit instead of the BOOSTXL-DRV8301. After setting up user.h this did not even work at voltages under 39V. (We tried 32V)

    I am not sure what is causing these issues but is there some difference between the labs for the HV-Kit and the BOOSTXL-DRV8301 that might be causing it to behave even worse? Maybe this could illuminate the issue we were originally having.

    Thanks again.
  • I'm no expert on filters, but 250 and 344 Hz seem pretty normal to me.
    The USER_R_OVER_L_EST_FREQ_Hz of 300 is used during R/L measurement. It is usually set this high in motors with a light rotor, to make sure the motor does not start moving during the R/L test. If you have a heavier rotor, about 100 Hz is more appropriate. This also moves it below the filter pole, but I'm not sure that is of any influence.
    The dead time setting seems very low (110 ns). It is okay to set this to 2 us (180 counts at 90 MHz) initially and tune this later on, when you have done some oscilloscope measurement on the power stage. I know the bus voltage does influence the switching times.
    You say you tried using the lab 2b setup for the HV-Kit, what files did you use? The configuration and code that is specific to a board is spread across the user and hal modules, and switching to another board's files is not a simple matter you can try in a couple of hours without a good understanding of what the differences are.
    Since you have run lab 2b on your hardware successfully at the lower voltage, you can use the software you used there to run some tests. Are the current controllers stable during R/L, or are they saturating? See ctrlHandle->pid_Id and pid_Iq.
  • Yeah. We were more worried about the 500K resistor being too high but it looks like that wasn't our problem.

    We have tried setting USER_R_OVER_L_EST_FREQ_Hz to 100 before and there was no change. We have also tried increasing the dead time up to 2us and above and it seemed to change nothing or make it worse at higher levels.

    For the HV-Kit we used the lab in motorware under that board's folder. Actually you are right, we didn't double check if it used the same pins as the one for the 8301. That was probably our problem with that one.

    We will check on pid_Id and pid_Iq soon when we test today.
  • Hi Olson,

    Just wanted to check in and see if there is any update from your side, I haven’t heard from you for a week, so I’m assuming you were able to resolve your issue. Please let me know if you have any questions. We would like to close this thread if no any further questions. Thanks.