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.

New motor configuration issue

Genius 5910 points

Hi,

I have a high voltage servomotor controller with highly modified Intraspin software with resolver feedback. This works ok with one type of motor.

I want to configure a new type of motor. Then some strange things are happening and I don't understand why.

 I got no errors when the motor starts. only a high pitch noise. I already the bandwidth to 1.

when I give a command to spin the motor I see ctrlHandle->Idq_ref.value[1] increase. So the current PI controller gets a reference. But the motor doesn't rotate.

To verify that rotate field and resolver are aligned in the same direction. I changed L1 and L3. At startup the motor starts spinning at a controlled speed. So the speed controller does work.

So what are possible causes of the high pitch noise? The resolver signal is a strong and stable signal. I lowered the bandwidth already to 1.

Thanks.

 

This are the motor parameters:

#define USER_MOTOR_TYPE MOTOR_Type_Pm                    // Motor_Type_Pm (All Synchronous: BLDC, PMSM, SMPM, IPM) or Motor_Type_Induction (Asynchronous ACI)
#define USER_MOTOR_NUM_POLE_PAIRS (5)                    // PAIRS, not total poles. Used to calculate user RPM from rotor Hz only
#define USER_MOTOR_Rr (NULL)                            // Identified phase to neutral in a Y equivalent circuit (Ohms, float) NULL for PM
#define USER_MOTOR_Rs (3.41)                                // Identified phase to neutral in a Y equivalent circuit (Ohms, float)
#define USER_MOTOR_Ls_d  (0.0105)                            // For Induction, Identified average stator inductance  (Henry, float)
#define USER_MOTOR_Ls_q  (0.0105)                            // For Induction, Identified average stator inductance  (Henry, float)
#define USER_MOTOR_RATED_FLUX (0.8165*230.0/466.6)        // sqrt(2/3)* Rated V (line-line) / Rated Freq (Hz)  (maxspeed(hz) * pole pairs
#define USER_MOTOR_MAGNETIZING_CURRENT (NULL)            // Identified magnetizing current for induction motors, else NULL
#define USER_MOTOR_RES_EST_CURRENT (0.15)                // During Motor ID, maximum current (Amperes, float) used for Rs estimation, 10-20% rated current
#define USER_MOTOR_IND_EST_CURRENT (-0.15)                // During Motor ID, maximum current (negative Amperes, float) used for Ls estimation, use just enough to enable rotation
#define USER_MOTOR_MAX_CURRENT             (1.42)            // CRITICAL: Used during ID and run-time, sets a limit on the maximum current command output of the provided Speed PI Controller to the Iq controller
#define USER_MOTOR_IDENT_FREQUENCY_Hz     (20.0)            // During Motor ID, maximum commanded speed (Hz, float), ~10% rated
#define USER_MOTOR_FLUX_EST_FREQ_Hz     (5.0)           // During Motor ID, maximum commanded speed (Hz, float). Should always use 5 Hz for Induction.
    // Number of lines on the motor's quadrature encoder
#define USER_MOTOR_ENCODER_LINES        (360.0)            // Number of lines on the motor's quadrature encoder

#define USER_MOTOR_MAX_SPEED_KRPM       (5.6)              // Maximum speed that the motor
#define USER_SYSTEM_INERTIA             (0.01)    // Inertia of the motor & system, should be estimated by SpinTAC Velocity Identify
#define USER_SYSTEM_FRICTION            (0.01)    // Friction of the motor & system, should be estimated by SpinTAC Velocity Identify
#define USER_SYSTEM_BANDWIDTH_SCALE        (0.5)

  • Hi evs,


    if i got you right than your motor runs fine you only want to get rid of the strange noise at the startup, right? I'm not complete sure how a high pitch noise sounds but the MCU is by default measuring the serial resistance Rs of the motor with a DC current.

    As a reference it is using the specified estimation current.

    USER_MOTOR_RES_EST_CURRENT (0.15)

    you could try to switch this feature off by disabling the flag gMotorVars.Flag_enableRsRecalc. Let me know if this helped!

  •  I have 2 motors one runs fine and the other not!

    The one that is not running. generate no errors and makes a high pitch noise at startup.

    When I start the controller with Flag_enableUserParams = false; the motor moves and no high pitch. when finished =>  CTRL_State_Idle and  EST_State_Idle I can't get any movement out of it.

    When I modify  the controller to a torque controller  => ctrlHandle->Idq_ref.value[1] . There are no error but also no movement. When I read Id, I see the maximal current. So the motor is powered.

    So at this moment I think the problem is in the current controller bandwidth or position feedback

    I double checked the quality of my resolver end I got some noise at the 4 digit (0.000x)  when the motor is enabled. Think that is good enough.

    It is a 5 pole pairs motor. Is there something wrong  with the offset between the mech and electrical angle.

    The resolver is not aligned with the a motor pole?  How to check that?

  • Which lab are you using?

    If you run the software with Flag_enableUserParams = false; then it should execute the identification process.
    can you please confirm if the identification process is ran successful; meaning that after the motor begins to rotate it will not stop until the very end of the process and if the identified motor parameters R/L and flux are correct.

    Can you run the motor directly after the identification by activating: gMotorVars.Flag_Run_Identify?
  • I use a heavy/complete modified lab5/lab12 program. After the identification process the motor doesn't work. But the motor spins when It identifies. Probably because it use sensorless/Flag_enableForceAngle.

    I appreciate your tying to help me. But I don't think the problem is solved with tweaking toplevel parameters. I need someone who has a extended knowledge of the lowlevel part of the library. I probably messed up some imported part of the code in making the demo program in something useful. The inner workings are not very well documented so debugging that part is mostly try and error. I realize this is a long shot. But maybe there is someone who give me a hint in which part to look for in the lowlevel part of the library. or which user.h parameters are imported for the current controller. There is not very much library left when using a torque controller. So what are potential reasons the motor is not spinning when a id current is applied?
  • I understand. My idea was that maybe your motor runs well in a sensorless configuration (with well identified parameters). Then the issue is more likely to be on a higher level; perhaps the encoder signal.
  • I also think it is likely that it is the feedback signal. But the quality of the signal is really excellent. So I don't think it is the signal self. But something related. Like signal feedback delay or mismatch between mechanical angle and feedback angle. But why it is a problem with one motor and not with the other. I try too narrow it down but still no luck.
  • When you say you use a heavily modified version of lab5/12, are you referring to labs 5a and 12b? Are you able to spin the motor with one of the base labs instead of your customized version? I would want to know if you can use lab12b successfully first before we start picking apart your code

    Sean
  • Sean Bigley said:
    When you say you use a heavily modified version of lab5/12, are you referring to labs 5a and 12b? Are you able to spin the motor with one of the base labs instead of your customized version? I would want to know if you can use lab12b successfully first before we start picking apart your code

    Sean

    I use my own hardware. So I'm unable to run any of the labs and the motors are also resolver based motors that don't work with any of the labs.

    My code base is working I have one type of motor where I did the mayor of the development and that works fine. But a there type not that different from it isn't working. But again I need someone that has a  Intraspin method understanding of the library and not at source level. I did a major rewrite of the code to fit my needs. So I think I have some understanding of how the code works.

    Where is Adam?

  • Problem solved. Sometimes the hardest part is searching in the right direction.
    The problem was that resolver sin and cos signal where mixed up.

    Thanks for the help. Writing down my problem helps me order it.