|
|
@@ -308,17 +308,12 @@ static __INLINE void PMSM_FOC_Update_Hardware(void) {
|
|
|
|
|
|
static __INLINE void PMSM_FOC_Update_PI_Idq(void) {
|
|
|
/* update id pi ctrl */
|
|
|
- if (gFoc_Ctrl.out.n_RunMode == CTRL_MODE_TRQ) {
|
|
|
- gFoc_Ctrl.params.maxvDQ.d = gFoc_Ctrl.params.f_DCLim * gFoc_Ctrl.params.n_modulation;//CONFIG_RATED_DC_VOL;
|
|
|
- gFoc_Ctrl.params.minvDQ.d = -gFoc_Ctrl.params.f_DCLim * gFoc_Ctrl.params.n_modulation;//CONFIG_RATED_DC_VOL;
|
|
|
- gFoc_Ctrl.params.maxvDQ.q = gFoc_Ctrl.params.f_DCLim * gFoc_Ctrl.params.n_modulation;//CONFIG_RATED_DC_VOL;
|
|
|
- gFoc_Ctrl.params.minvDQ.q = -gFoc_Ctrl.params.f_DCLim * gFoc_Ctrl.params.n_modulation;//CONFIG_RATED_DC_VOL;
|
|
|
- }else {
|
|
|
- gFoc_Ctrl.params.maxvDQ.d = gFoc_Ctrl.in.s_vDC * gFoc_Ctrl.params.n_modulation;//CONFIG_RATED_DC_VOL;
|
|
|
- gFoc_Ctrl.params.minvDQ.d = -gFoc_Ctrl.in.s_vDC * gFoc_Ctrl.params.n_modulation;//CONFIG_RATED_DC_VOL;
|
|
|
- gFoc_Ctrl.params.maxvDQ.q = gFoc_Ctrl.in.s_vDC * gFoc_Ctrl.params.n_modulation;//CONFIG_RATED_DC_VOL;
|
|
|
- gFoc_Ctrl.params.minvDQ.q = -gFoc_Ctrl.in.s_vDC * gFoc_Ctrl.params.n_modulation;//CONFIG_RATED_DC_VOL;
|
|
|
- }
|
|
|
+ gFoc_Ctrl.params.f_DCLim = gFoc_Ctrl.in.s_vDC;
|
|
|
+ gFoc_Ctrl.params.maxvDQ.d = gFoc_Ctrl.params.f_DCLim * gFoc_Ctrl.params.n_modulation;//CONFIG_RATED_DC_VOL;
|
|
|
+ gFoc_Ctrl.params.minvDQ.d = -gFoc_Ctrl.params.f_DCLim * gFoc_Ctrl.params.n_modulation;//CONFIG_RATED_DC_VOL;
|
|
|
+ gFoc_Ctrl.params.maxvDQ.q = gFoc_Ctrl.params.f_DCLim * gFoc_Ctrl.params.n_modulation;//CONFIG_RATED_DC_VOL;
|
|
|
+ gFoc_Ctrl.params.minvDQ.q = -gFoc_Ctrl.params.f_DCLim * gFoc_Ctrl.params.n_modulation;//CONFIG_RATED_DC_VOL;
|
|
|
+
|
|
|
if (gFoc_Ctrl.params.maxvDQ.d != gFoc_Ctrl.pi_id->max) {
|
|
|
gFoc_Ctrl.pi_id->max = gFoc_Ctrl.params.maxvDQ.d;
|
|
|
}
|
|
|
@@ -521,14 +516,12 @@ static __INLINE float PMSM_FOC_Limit_iDC(float maxTrq) {
|
|
|
|
|
|
static __INLINE float PMSM_FOC_Limit_Speed(float maxTrq) {
|
|
|
#if 1
|
|
|
- gFoc_Ctrl.pi_torque->max = gFoc_Ctrl.in.s_vDC;
|
|
|
+ gFoc_Ctrl.pi_torque->max = maxTrq;
|
|
|
gFoc_Ctrl.pi_torque->min = 0;
|
|
|
|
|
|
float err = eRamp_get_intepolation(&gFoc_Ctrl.rtLim.rpmLimRamp) - gFoc_Ctrl.in.s_motRPM;
|
|
|
- gFoc_Ctrl.params.f_DCLim = PI_Controller_RunWithDiff(gFoc_Ctrl.pi_torque, err);
|
|
|
- return maxTrq;
|
|
|
+ return PI_Controller_RunLimit(gFoc_Ctrl.pi_torque, err);
|
|
|
#else
|
|
|
- gFoc_Ctrl.params.f_DCLim = gFoc_Ctrl.in.s_vDC;
|
|
|
return maxTrq;
|
|
|
#endif
|
|
|
}
|
|
|
@@ -624,6 +617,15 @@ bool PMSM_FOC_RunTime_Limit(void) {
|
|
|
return changed;
|
|
|
}
|
|
|
|
|
|
+
|
|
|
+bool PMSM_FOC_iDC_is_Limited(void) {
|
|
|
+ return (gFoc_Ctrl.protLim.s_iDCLim != HW_LIMIT_NONE);
|
|
|
+}
|
|
|
+
|
|
|
+bool PMSM_FOC_Torque_is_Limited(void) {
|
|
|
+ return (gFoc_Ctrl.protLim.s_TorqueLim != HW_LIMIT_NONE);
|
|
|
+}
|
|
|
+
|
|
|
void PMSM_FOC_Slow_Task(void) {
|
|
|
eRamp_running(&gFoc_Ctrl.rtLim.torqueLimRamp);
|
|
|
eRamp_running(&gFoc_Ctrl.rtLim.DCCurrLimRamp);
|
|
|
@@ -732,8 +734,9 @@ float PMSM_FOC_GetTorqueLimit(void) {
|
|
|
return gFoc_Ctrl.userLim.s_torqueLim;
|
|
|
}
|
|
|
|
|
|
-void PMSM_FOC_SeteBrkPhaseCurrent(float curr) {
|
|
|
- gFoc_Ctrl.userLim.s_PhaseCurreBrkLim = curr;
|
|
|
+void PMSM_FOC_SeteBrkPhaseCurrent(float phase_curr, float dc_curr) {
|
|
|
+ gFoc_Ctrl.userLim.s_PhaseCurreBrkLim = fclamp(phase_curr, 0, nv_get_foc_params()->s_PhaseCurreBrkLim);
|
|
|
+ gFoc_Ctrl.userLim.s_iDCeBrkLim = fclamp(dc_curr, 0, nv_get_foc_params()->s_iDCeBrkLim);
|
|
|
}
|
|
|
|
|
|
float PMSM_FOC_GeteBrkPhaseCurrent(void) {
|