typedef struct {int theta_elec; // Output: Motor Electrical angle (Q15)
int theta_mech; // Output: Motor Mechanical Angle (Q15)
int DirectionQep; // Output: Motor rotation direction (Q0)
int QEP_cnt_idx; // Variable: Encoder counter index (Q0)
int theta_raw; // Variable: Raw angle from Timer 2 (Q0)
int mech_scaler; // Parameter: 0.9999/total count, total count = 4000 (Q26)
int pole_pairs; // Parameter: Number of pole pairs (Q0)
int cal_angle; // Parameter: Raw angular offset between encoder and phase a (Q0)
int index_sync_flag; // Output: Index sync status (Q0)
Uint32 SpeedScaler; // Parameter : Scaler converting 1/N cycles to a GLOBAL_Q speed (Q0) – independently with global Q
_iq Speed_pr; // Output : speed in per-unit
Uint32 BaseRpm; // Parameter : Scaler converting GLOBAL_Q speed to rpm (Q0) speed – independently with global Q
int32 SpeedRpm_pr; // Output : speed in r.p.m. (Q0) – independently with global Q
_iq oldpos; // Input: Electrical angle (pu)
_iq Speed_fr; // Output : speed in per-unit
int32 SpeedRpm_fr; // Output : Speed in rpm (Q0) – independently with global Q
void (*init)(); // Pointer to the init funcion
void (*calc)(); // Pointer to the calc funtion
} POSSPEED;
红色参数设置的作用是什么?初始化时 BaseRpm=6000 是不是选择电机的转速是6000转每分钟?
// 2. **min rpm ** = selected at 10 rpm based on CCPS prescaler options available (128 is greatest)
//
// 3. **SpeedRpm_pr**
// SpeedRpm_pr = X/(t2-t1) – Equation 4
// where X = QCAPCTL [UPPS]/4000 rev. (position relative to Index in 1 revolution)
// If max/base speed = 6000 rpm: // 6000 = (32/4000)/[(t2-t1)/(200MHz/64)]
// where 32 = QCAPCTL [UPPS] (Unit timeout – once every 32 edges)
// 32/4000 = position in 1 revolution (position as a fraction of 1 revolution)
// t2-t1/(200MHz/64), t2-t1= # of QCAPCLK cycles, and
// QCAPCLK cycle = 1/(200MHz/64)
// = QCPRDLAT
// // So: 6000 rpm = [32(200MHz/64)*60s/min]/[4000(t2-t1)]
// t2-t1 = [32(200MHz/64)*60s/min]/(4000*6000rpm) – Equation 5
// = 250 CAPCLK cycles = maximum (t2-t1) = SpeedScaler
//
// Divide both sides by (t2-t1), and:
// 1 = 32/(t2-t1) = [32(200MHz/64)*60 s/min]/(4000*6000rpm)]/(t2-t1)
// Because (t2-t1) must be < 250 for QPOSCNT increment:
// 250/(t2-t1) < 1 for CW rotation
// And because (t2-t1) must be >-250 for QPOSCNT decrement:
// 250/(t2-t1)> -1 for CCW rotation
// // eed_pr = 250/(t2-t1)
// or [32(200MHz/64)*60 s/min]/(4000*6000rpm)]/(t2-t1) – Equation 6
//
// To convert speed_pr to RPM:
// Multiply Equation 6 by 6000rpm:
// SpeedRpm_fr = 6000rpm * [32(200MHz/64)*60 s/min]/[4000*6000rpm*(t2-t1)]
// = [32(200MHz/64)*60 s/min]/[4000*(t2-t1)]
// or [(32/4000)rev * 60 s/min]/[(t2-t1)(QCPRDLAT)]- Final Equation
计算低速的公式推导,懂的大神能否详细说明一下。