|
|
@@ -201,7 +201,7 @@ void PMSM_FOC_CoreInit(void) {
|
|
|
gFoc_Ctrl.hwLim.s_PhaseVolMax = CONFIG_MAX_PHASE_VOL;
|
|
|
gFoc_Ctrl.hwLim.s_vDCMax = CONFIG_MAX_DC_VOL;
|
|
|
gFoc_Ctrl.hwLim.s_torqueMax = CONFIG_MAX_TORQUE;
|
|
|
-
|
|
|
+ gFoc_Ctrl.hwLim.s_FWDCurrMax = CONFIG_MAX_FW_D_CURR;
|
|
|
if (!g_focinit) {
|
|
|
PMSM_FOC_UserInit();
|
|
|
shark_task_create(PMSM_FOC_Debug_Task, NULL);
|
|
|
@@ -415,7 +415,16 @@ static __INLINE void PMSM_FOC_idq_Assign(void) {
|
|
|
float s, c;
|
|
|
normal_sincosf(degree_2_pi(gFoc_Ctrl.in.s_manualAngle + 90.0f), &s, &c);
|
|
|
gFoc_Ctrl.in.s_targetIdq.d = gFoc_Ctrl.in.s_targetCurrent * c;
|
|
|
- gFoc_Ctrl.in.s_targetIdq.q = gFoc_Ctrl.in.s_targetCurrent * s;
|
|
|
+
|
|
|
+ if (gFoc_Ctrl.in.s_targetIdq.d > gFoc_Ctrl.hwLim.s_FWDCurrMax) {
|
|
|
+ gFoc_Ctrl.in.s_targetIdq.d = gFoc_Ctrl.hwLim.s_FWDCurrMax;
|
|
|
+ gFoc_Ctrl.in.s_targetIdq.q = sqrtf(SQ(gFoc_Ctrl.in.s_targetCurrent) - SQ(gFoc_Ctrl.in.s_targetIdq.d));
|
|
|
+ }else if (gFoc_Ctrl.in.s_targetIdq.d < -gFoc_Ctrl.hwLim.s_FWDCurrMax) {
|
|
|
+ gFoc_Ctrl.in.s_targetIdq.d = -gFoc_Ctrl.hwLim.s_FWDCurrMax;
|
|
|
+ gFoc_Ctrl.in.s_targetIdq.q = sqrtf(SQ(gFoc_Ctrl.in.s_targetCurrent) - SQ(gFoc_Ctrl.in.s_targetIdq.d));
|
|
|
+ }else {
|
|
|
+ gFoc_Ctrl.in.s_targetIdq.q = gFoc_Ctrl.in.s_targetCurrent * s;
|
|
|
+ }
|
|
|
}else {
|
|
|
gFoc_Ctrl.in.s_targetIdq.d = 0;
|
|
|
gFoc_Ctrl.in.s_targetIdq.q = gFoc_Ctrl.in.s_targetCurrent;
|