|
|
@@ -60,7 +60,7 @@ static __INLINE float Circle_Limitation(DQ_t *vdq, float vDC, float module, DQ_t
|
|
|
#ifdef VD_PRIO_HIGH
|
|
|
out->d = vdq->d;
|
|
|
out->q = sqrtf(sq_vDC - out->d*out->d);
|
|
|
- return 1.1f;
|
|
|
+ return 1.1f; //just return the modulation big than 1.0
|
|
|
#else
|
|
|
float r = sqrtf(sq_vDC / sq_vdq);
|
|
|
out->d = vdq->d * r;
|
|
|
@@ -308,12 +308,21 @@ float target_q = 0.0f;
|
|
|
static u32 PMSM_FOC_Debug_Task(void *p) {
|
|
|
if (gFoc_Ctrl.in.b_motEnable) {
|
|
|
#ifdef CONFIG_DQ_STEP_RESPONSE
|
|
|
- plot_2data16(FtoS16x10(target_q), FtoS16x10(gFoc_Ctrl.out.s_RealIdq.q));
|
|
|
+ if (gFoc_Ctrl.plot_type == Plot_D_Step) {
|
|
|
+ plot_2data16(FtoS16x10(target_d), FtoS16x10(gFoc_Ctrl.out.s_RealIdq.d));
|
|
|
+ }if (gFoc_Ctrl.plot_type == Plot_Q_Step) {
|
|
|
+ plot_2data16(FtoS16x10(target_q), FtoS16x10(gFoc_Ctrl.out.s_RealIdq.q));
|
|
|
+ }
|
|
|
#else
|
|
|
- //plot_3data16(FtoS16x10(gFoc_Ctrl.in.s_iABCFilter[0]), FtoS16x10(gFoc_Ctrl.in.s_iABCFilter[1]), FtoS16x10(gFoc_Ctrl.in.s_iABCFilter[2]));
|
|
|
- //plot_3data16(gFoc_Ctrl.in.s_targetTorque, gFoc_Ctrl.in.s_targetRPM, gFoc_Ctrl.in.s_motRPM);
|
|
|
- //plot_3data16(FtoS16x10(gFoc_Ctrl.out.s_RealIdq.d), FtoS16x10(gFoc_Ctrl.out.s_RealIdq.q), FtoS16x10(gFoc_Ctrl.idq_ctl[1].s_FinalTgt));
|
|
|
- //plot_3data16( gFoc_Ctrl.in.s_motRPM, speed_td.target, speed_td.diff);
|
|
|
+ if (gFoc_Ctrl.plot_type == Plot_D_flow) {
|
|
|
+ plot_2data16(FtoS16x10(gFoc_Ctrl.idq_ctl[0].s_Cp), FtoS16x10(gFoc_Ctrl.out.s_RealIdq.d));
|
|
|
+ }else if (gFoc_Ctrl.plot_type == Plot_Q_flow) {
|
|
|
+ plot_2data16(FtoS16x10(gFoc_Ctrl.idq_ctl[1].s_Cp), FtoS16x10(gFoc_Ctrl.out.s_RealIdq.q));
|
|
|
+ }else if (gFoc_Ctrl.plot_type == Plot_DQ_Curr) {
|
|
|
+ plot_2data16(FtoS16x10(gFoc_Ctrl.out.s_RealIdq.d), FtoS16x10(gFoc_Ctrl.out.s_RealIdq.q));
|
|
|
+ }else if (gFoc_Ctrl.plot_type == Plot_Spd_flow) {
|
|
|
+ plot_2data16(gFoc_Ctrl.in.s_targetRPM, gFoc_Ctrl.in.s_motRPM);
|
|
|
+ }
|
|
|
#endif
|
|
|
}
|
|
|
return 1;
|
|
|
@@ -339,8 +348,6 @@ void PMSM_FOC_Schedule(void) {
|
|
|
#endif
|
|
|
err = target_q - gFoc_Ctrl.out.s_RealIdq.q;
|
|
|
gFoc_Ctrl.in.s_targetVdq.q = PI_Controller_RunSerial(gFoc_Ctrl.pi_iq, err);
|
|
|
- gFoc_Ctrl.out.test_targetIQ = target_q;
|
|
|
-
|
|
|
}else {
|
|
|
gFoc_Ctrl.in.s_targetVdq.d = FOC_Get_DqRamp(&gFoc_Ctrl.vdq_ctl[0]);
|
|
|
gFoc_Ctrl.in.s_targetVdq.q = FOC_Get_DqRamp(&gFoc_Ctrl.vdq_ctl[1]);
|
|
|
@@ -357,9 +364,14 @@ 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);
|
|
|
|
|
|
- if (gFoc_Ctrl.ctrl_count % 5 == 0) {
|
|
|
- plot_3data16(FtoS16x10(gFoc_Ctrl.in.s_iABCFilter[0]), FtoS16x10(gFoc_Ctrl.in.s_iABCFilter[1]), FtoS16x10(gFoc_Ctrl.in.s_iABCFilter[2]));
|
|
|
- //plot_3data16((s16)gFoc_Ctrl.out.s_RealIdq.d, (s16)gFoc_Ctrl.out.s_RealIdq.q, (s16)gFoc_Ctrl.idq_ctl[1].s_Cp);
|
|
|
+ if (gFoc_Ctrl.plot_type != Plot_None) {
|
|
|
+ if (gFoc_Ctrl.ctrl_count % 5 == 0) {
|
|
|
+ if (gFoc_Ctrl.plot_type == Plot_Phase_curr) {
|
|
|
+ plot_3data16(FtoS16x10(gFoc_Ctrl.in.s_iABCFilter[0]), FtoS16x10(gFoc_Ctrl.in.s_iABCFilter[1]), FtoS16x10(gFoc_Ctrl.in.s_iABCFilter[2]));
|
|
|
+ }else if (gFoc_Ctrl.plot_type == Plot_Phase_vol) {
|
|
|
+ plot_3data16(FtoS16x10(gFoc_Ctrl.in.s_vABC[0]), FtoS16x10(gFoc_Ctrl.in.s_vABC[1]), FtoS16x10(gFoc_Ctrl.in.s_vABC[2]));
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
|
|
|
@@ -842,6 +854,10 @@ void PMSM_FOC_ClrCriticalError(u8 err) {
|
|
|
u32 PMSM_FOC_GetCriticalError(void) {
|
|
|
return gFoc_Ctrl.out.n_CritiCalErrMask;
|
|
|
}
|
|
|
+
|
|
|
+void PMSM_FOC_Set_PlotType(Plot_t t) {
|
|
|
+ gFoc_Ctrl.plot_type = t;
|
|
|
+}
|
|
|
//获取母线电流
|
|
|
float PMSM_FOC_Calc_iDC(void) {
|
|
|
float vd = gFoc_Ctrl.out.s_OutVdq.d;
|