|
|
@@ -239,7 +239,6 @@ void PMSM_FOC_CoreInit(void) {
|
|
|
gFoc_Ctrl.plot_type = Plot_None;
|
|
|
}
|
|
|
|
|
|
-//#define CONFIG_USER_PHASE_LFP
|
|
|
static __INLINE void PMSM_FOC_Update_Input(void) {
|
|
|
AB_t iAB;
|
|
|
|
|
|
@@ -270,6 +269,9 @@ static __INLINE void PMSM_FOC_Update_Input(void) {
|
|
|
SinCos_Lut(gFoc_Ctrl.in.s_motAngle, &gFoc_Ctrl.out.sin, &gFoc_Ctrl.out.cos);
|
|
|
|
|
|
Park(&iAB, gFoc_Ctrl.in.s_motAngle, &gFoc_Ctrl.out.s_RealIdq);
|
|
|
+
|
|
|
+ LowPass_Filter(gFoc_Ctrl.out.s_FilterIdq.d, gFoc_Ctrl.out.s_RealIdq.d, 0.004f);
|
|
|
+ LowPass_Filter(gFoc_Ctrl.out.s_FilterIdq.q, gFoc_Ctrl.out.s_RealIdq.q, 0.004f);
|
|
|
}
|
|
|
|
|
|
#ifdef CONFIG_DQ_STEP_RESPONSE
|
|
|
@@ -320,6 +322,11 @@ void PMSM_FOC_Schedule(void) {
|
|
|
float err = target_d - gFoc_Ctrl.out.s_RealIdq.d;
|
|
|
gFoc_Ctrl.in.s_targetVdq.d = PI_Controller_RunSerial(&gFoc_Ctrl.pi_id, err);
|
|
|
|
|
|
+ /* update kp&ki from lq for iq PI controller */
|
|
|
+ float lq = motor_get_lq_from_iq((s16)gFoc_Ctrl.out.s_FilterIdq.q);
|
|
|
+ gFoc_Ctrl.pi_iq.kp = ((float)nv_get_foc_params()->n_currentBand * lq);
|
|
|
+ gFoc_Ctrl.pi_iq.ki = (nv_get_motor_params()->r/lq);
|
|
|
+
|
|
|
/* limiter Vq output for PI controller */
|
|
|
float max_vq = sqrtf(SQ(max_vd) - SQ(gFoc_Ctrl.in.s_targetVdq.d));
|
|
|
gFoc_Ctrl.pi_iq.max = max_vq;
|
|
|
@@ -357,9 +364,6 @@ void PMSM_FOC_Schedule(void) {
|
|
|
pwm_update_duty(gFoc_Ctrl.out.n_Duty[0], gFoc_Ctrl.out.n_Duty[1], gFoc_Ctrl.out.n_Duty[2]);
|
|
|
pwm_update_sample(gFoc_Ctrl.out.n_Sample1, gFoc_Ctrl.out.n_Sample2, gFoc_Ctrl.out.n_CPhases);
|
|
|
|
|
|
- LowPass_Filter(gFoc_Ctrl.out.s_FilterIdq.d, gFoc_Ctrl.out.s_RealIdq.d, 0.004f);
|
|
|
- LowPass_Filter(gFoc_Ctrl.out.s_FilterIdq.q, gFoc_Ctrl.out.s_RealIdq.q, 0.004f);
|
|
|
-
|
|
|
if (gFoc_Ctrl.plot_type != Plot_None) {
|
|
|
if (gFoc_Ctrl.ctrl_count % 5 == 0) {
|
|
|
if (gFoc_Ctrl.plot_type == Plot_Phase_curr) {
|
|
|
@@ -518,7 +522,7 @@ static __INLINE void PMSM_FOC_idq_Assign(void) {
|
|
|
}
|
|
|
}else if ((gFoc_Ctrl.out.n_RunMode == CTRL_MODE_TRQ) || (gFoc_Ctrl.out.n_RunMode == CTRL_MODE_SPD) ||
|
|
|
(gFoc_Ctrl.out.n_RunMode == CTRL_MODE_EBRAKE)) {
|
|
|
- mpta_fw_lookup(gFoc_Ctrl.in.s_motRPM, gFoc_Ctrl.in.s_targetTorque, &gFoc_Ctrl.in.s_targetIdq);
|
|
|
+ motor_mpta_fw_lookup(gFoc_Ctrl.in.s_motRPM, gFoc_Ctrl.in.s_targetTorque, &gFoc_Ctrl.in.s_targetIdq);
|
|
|
}
|
|
|
u32 mask = cpu_enter_critical();
|
|
|
FOC_Set_iDqRamp(&gFoc_Ctrl.idq_ctl[0], gFoc_Ctrl.in.s_targetIdq.d);
|