Hi all,
I've run up against a wall with the dreaded Insta-spin Motion Lab 12b. After completing the RsRecalc estimation, the motor spins to a nearby position between two poles and locks. The motor shaft is vibrating slightly, and I can observe this with an oscilloscope on either of the A or B encoder lines. No matter where I set the value of USER_MOTOR_RES_EST_CURRENT, the locked rotor current is fixed at 2.13A, regardless of the setting for USER_MOTOR_RES_EST_CURRENT in user.h
For background's sake, I've run through the preceeding Instaspin Motion Labs and have the following parameters in the user.h file:
#elif (USER_MOTOR == Yaskawa_USASEM08FJ21_3POLE)
#define USER_MOTOR_TYPE MOTOR_Type_Pm
#define USER_MOTOR_NUM_POLE_PAIRS (3)
#define USER_MOTOR_Rr (NULL)
#define USER_MOTOR_Rs (0.6203403)
#define USER_MOTOR_Ls_d (0.003396241)
#define USER_MOTOR_Ls_q (0.003396241)
#define USER_MOTOR_RATED_FLUX (0.522265)
#define USER_MOTOR_MAGNETIZING_CURRENT (NULL)
#define USER_MOTOR_RES_EST_CURRENT (1.0)
#define USER_MOTOR_IND_EST_CURRENT (-1.0)
#define USER_MOTOR_MAX_CURRENT (5.3)
#define USER_MOTOR_IDENT_FREQUENCY_Hz (20.0)
#define USER_MOTOR_FLUX_EST_FREQ_Hz (80.0)
#define USER_MOTOR_ENCODER_LINES (4096.0)
#define USER_MOTOR_MAX_SPEED_KRPM (3.0)
//as defined using SpinTAC
//#define USER_SYSTEM_INERTIA (0.1129943132)
//#define USER_SYSTEM_FRICTION (0.4687358737)
//as defined with Quadrature encoder in Lab 12a
#define USER_SYSTEM_INERTIA (0.09917843342)
#define USER_SYSTEM_FRICTION (0.3583653569)
#define USER_SYSTEM_BANDWIDTH_SCALE (1.0)
Where I've manually set the USER_SYSTEM_BANDWIDTH rather than using the USER_SYSTEM_BANDWIDTH_SCALE definition (it didn't seem to update anything when changed).
#define USER_SYSTEM_BANDWIDTH (140.0)
I'm using the TMS320f28069M Launchpad XL, as well as the BOOSTXL-DRV8301 REV B add-on card. The Motor is rated for 3000RPM, at 200V, with a maximum continuous current of 5.3A. I'm limited to a 30Vdc/3A bench supply for this evaluation. The servo itself is a 3-phase, permanent magnet AC Servo Motor, not a true PMSM.
As well, I've read through this forum and attempted many of the suggested fixes for this issue; including:
Increasing the value of USER_MOTOR_RES_EST_CURRENT up to 3A in 0.5A increments
Varying the USER_SYSTEM_BANDWIDTH value between 20 and 160 by increments of 10
Adjusted the value for gMotorVars.Kp_Idq from 10.61325073 (default) +/- 50% in 10% increments
The incremental encoder is an aftermarket CUI AMT113S-V programmed for 4096 counts per rotation. Care has been taken to minimize encoder noise (shielded cables, as well as proper system grounding have all helped). I've verified that both the encoder and the electric angle of the motor are working in concert in Lab 12a, by watching both the st_obj.vel.conv.Pos_erev and st_obj.vel.conv.Pos_mrev, observing 3 pole pairs in Pos_erev and a real-world mechanical rotation equate to 1 in Pos_mrev. The direction of the manual rotation was counter-clockwise (facing the motor), which is consistent with the rotation of the labs prior to this.
datasheet for the encoder: www.cui.com/.../amt11.pdf
In lab 5d, the tuned system was able to rotate the motor at speeds as low as 2 RPM with minimal cogging.
The goal for this project is a speed-controlled servo drive, where the system's higher level instructions are decoded on a separate MCU in order to leverage our company's existing IP.
Given all of these things, is it common for the motor to vibrate while conducting the electric field to encoder alignment? This doesn't seem to make sense to me. Is the disturbance rejection under-damped? Is the motor over-spec'd for the bench supply? Could there be an irregularity accross one a single phase's impedance?
What am I missing?
Jamie Mascola