|
|
@@ -201,7 +201,7 @@ static __INLINE void PMSM_FOC_Plot_Debug(void) {
|
|
|
//plot_3data16(_gFOC_Ctrl.in.s_motRPM, FtoS16x1000(_gFOC_Ctrl.out.s_RealIdq.d), FtoS16x1000(_gFOC_Ctrl.out.s_RealIdq.q));
|
|
|
//plot_3data16(FtoS16x1000(iabc[0]), FtoS16x1000(iabc[1]), _gFOC_Ctrl.out.test_sample*100);
|
|
|
//plot_2data16(FtoS16(_gFOC_Ctrl.in.s_hallAngle), FtoS16(encoder_get_pwm_angle()));
|
|
|
- plot_1data16(motor_encoder_get_vel_count() * 10);
|
|
|
+ plot_1data16(_gFOC_Ctrl.in.s_motRPM);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
@@ -443,10 +443,53 @@ bool PMSM_FOC_Set_Speed(float rpm) {
|
|
|
if (_gFOC_Ctrl.in.b_cruiseEna) {
|
|
|
return false;
|
|
|
}
|
|
|
- eCtrl_set_TgtSpeed(min(rpm, _gFOC_Ctrl.params.s_maxRPM));
|
|
|
+ eCtrl_set_TgtSpeed(min(ABS(rpm), _gFOC_Ctrl.params.s_maxRPM)*SIGN(rpm));
|
|
|
return true;
|
|
|
}
|
|
|
|
|
|
+bool PMSM_FOC_Set_epmMode(bool epm) {
|
|
|
+ if (_gFOC_Ctrl.in.b_epmMode != epm) {
|
|
|
+ if (PMSM_FOC_GetSpeed() != 0.0f) {
|
|
|
+ PMSM_FOC_SetErrCode(FOC_NowAllowed_With_Speed);
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ _gFOC_Ctrl.in.epmDirection = EPM_Dir_None;
|
|
|
+ _gFOC_Ctrl.in.b_epmMode = epm;
|
|
|
+ if (epm) {
|
|
|
+ PMSM_FOC_SpeedLimit(nv_get_foc_params()->s_maxEpmRPM);
|
|
|
+ eCtrl_set_TgtSpeed(0);
|
|
|
+ PMSM_FOC_SetCtrlMode(CTRL_MODE_SPD);
|
|
|
+ }else {
|
|
|
+ PMSM_FOC_SetCtrlMode(CTRL_MODE_TRQ);
|
|
|
+ PMSM_FOC_SpeedLimit(nv_get_foc_params()->s_maxRPM);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return true;
|
|
|
+}
|
|
|
+
|
|
|
+bool PMSM_FOC_is_epmMode(void) {
|
|
|
+ return _gFOC_Ctrl.in.b_epmMode;
|
|
|
+}
|
|
|
+
|
|
|
+bool PMSM_FOC_Start_epmMove(bool move, EPM_Dir_t dir) {
|
|
|
+ if (!_gFOC_Ctrl.in.b_epmMode) {
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ if (move) {
|
|
|
+ if (_gFOC_Ctrl.in.epmDirection != EPM_Dir_None) {
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ _gFOC_Ctrl.in.epmDirection = dir;
|
|
|
+ }else {
|
|
|
+ _gFOC_Ctrl.in.epmDirection = EPM_Dir_None;
|
|
|
+ }
|
|
|
+ return true;
|
|
|
+}
|
|
|
+
|
|
|
+EPM_Dir_t PMSM_FOC_Get_epmDir(void) {
|
|
|
+ return _gFOC_Ctrl.in.epmDirection;
|
|
|
+}
|
|
|
+
|
|
|
bool PMSM_FOC_Set_Current(float is) {
|
|
|
eCtrl_set_TgtCurrent(is);
|
|
|
return true;
|