|
@@ -9,6 +9,7 @@
|
|
|
#include "foc/core/svpwm.h"
|
|
#include "foc/core/svpwm.h"
|
|
|
#include "foc/core/torque.h"
|
|
#include "foc/core/torque.h"
|
|
|
#include "foc/samples.h"
|
|
#include "foc/samples.h"
|
|
|
|
|
+#include "app/nv_storage.h"
|
|
|
#include "bsp/pwm.h"
|
|
#include "bsp/pwm.h"
|
|
|
#include "libs/logger.h"
|
|
#include "libs/logger.h"
|
|
|
|
|
|
|
@@ -122,23 +123,23 @@ void PMSM_FOC_CoreInit(void) {
|
|
|
|
|
|
|
|
memset(&_gFOC_Ctrl.in, 0, sizeof(_gFOC_Ctrl.in));
|
|
memset(&_gFOC_Ctrl.in, 0, sizeof(_gFOC_Ctrl.in));
|
|
|
memset(&_gFOC_Ctrl.out, 0, sizeof(_gFOC_Ctrl.out));
|
|
memset(&_gFOC_Ctrl.out, 0, sizeof(_gFOC_Ctrl.out));
|
|
|
- _gFOC_Ctrl.params.s_maxiDC = (MAX_iDQ);
|
|
|
|
|
- _gFOC_Ctrl.params.s_maxiDC = (MAX_iDC);
|
|
|
|
|
- _gFOC_Ctrl.params.s_maxRPM = (MAX_SPEED);
|
|
|
|
|
- _gFOC_Ctrl.params.s_maxTorque = MAX_TORQUE;
|
|
|
|
|
- _gFOC_Ctrl.params.n_modulation = SVM_Modulation;
|
|
|
|
|
- _gFOC_Ctrl.params.n_PhaseFilterCeof = (0.2f);
|
|
|
|
|
- _gFOC_Ctrl.params.maxvDQ.d = MAX_vDC;
|
|
|
|
|
- _gFOC_Ctrl.params.minvDQ.d = -MAX_vDC;
|
|
|
|
|
- _gFOC_Ctrl.params.maxvDQ.q = MAX_vDC;
|
|
|
|
|
- _gFOC_Ctrl.params.minvDQ.q = -MAX_vDC;
|
|
|
|
|
- _gFOC_Ctrl.params.s_maxIdq = MAX_iDQ;
|
|
|
|
|
- _gFOC_Ctrl.params.s_minIdq = -MAX_iDQ;
|
|
|
|
|
- _gFOC_Ctrl.params.n_poles = MOTOR_POLES;
|
|
|
|
|
|
|
+ _gFOC_Ctrl.params.s_maxiDC = nv_get_foc_params()->s_maxiDC;//(MAX_iDQ);
|
|
|
|
|
+ _gFOC_Ctrl.params.s_maxRPM = nv_get_foc_params()->s_maxRPM;//(MAX_SPEED);
|
|
|
|
|
+ _gFOC_Ctrl.params.s_maxTorque = nv_get_foc_params()->s_maxTorque;//MAX_TORQUE;
|
|
|
|
|
+ _gFOC_Ctrl.in.s_vDC = nv_get_foc_params()->s_maxvDC;//(MAX_vDC);
|
|
|
|
|
+ _gFOC_Ctrl.params.maxvDQ.d = _gFOC_Ctrl.in.s_vDC;//MAX_vDC;
|
|
|
|
|
+ _gFOC_Ctrl.params.minvDQ.d = -_gFOC_Ctrl.in.s_vDC;//MAX_vDC;
|
|
|
|
|
+ _gFOC_Ctrl.params.maxvDQ.q = _gFOC_Ctrl.in.s_vDC;//MAX_vDC;
|
|
|
|
|
+ _gFOC_Ctrl.params.minvDQ.q = -_gFOC_Ctrl.in.s_vDC;//MAX_vDC;
|
|
|
|
|
+ _gFOC_Ctrl.params.s_maxIdq = nv_get_foc_params()->s_maxIdq;//MAX_iDQ;
|
|
|
|
|
+ _gFOC_Ctrl.params.s_minIdq = nv_get_foc_params()->s_minIdq;//-MAX_iDQ;
|
|
|
|
|
+ _gFOC_Ctrl.params.n_modulation = nv_get_foc_params()->n_modulation;//SVM_Modulation;
|
|
|
|
|
+ _gFOC_Ctrl.params.n_PhaseFilterCeof = nv_get_foc_params()->n_PhaseFilterCeof;//(0.2f);
|
|
|
|
|
+ _gFOC_Ctrl.params.n_poles = nv_get_motor_params()->poles;//MOTOR_POLES;
|
|
|
_gFOC_Ctrl.out.n_RunMode = CTRL_MODE_OPEN;
|
|
_gFOC_Ctrl.out.n_RunMode = CTRL_MODE_OPEN;
|
|
|
_gFOC_Ctrl.out.f_vdqRation = 0;
|
|
_gFOC_Ctrl.out.f_vdqRation = 0;
|
|
|
_gFOC_Ctrl.in.s_manualAngle = INVALID_ANGLE;
|
|
_gFOC_Ctrl.in.s_manualAngle = INVALID_ANGLE;
|
|
|
- _gFOC_Ctrl.in.s_vDC = (MAX_vDC);
|
|
|
|
|
|
|
+
|
|
|
|
|
|
|
|
FOC_DqRamp_init(&_gFOC_Ctrl.idq_ctl[0], 1);
|
|
FOC_DqRamp_init(&_gFOC_Ctrl.idq_ctl[0], 1);
|
|
|
FOC_DqRamp_init(&_gFOC_Ctrl.idq_ctl[1], 1);
|
|
FOC_DqRamp_init(&_gFOC_Ctrl.idq_ctl[1], 1);
|
|
@@ -317,7 +318,7 @@ void PMSM_FOC_idqCalc(void) {
|
|
|
if (_gFOC_Ctrl.out.n_RunMode == CTRL_MODE_CURRENT || _gFOC_Ctrl.out.n_RunMode == CTRL_MODE_CURRENT_BRK) {
|
|
if (_gFOC_Ctrl.out.n_RunMode == CTRL_MODE_CURRENT || _gFOC_Ctrl.out.n_RunMode == CTRL_MODE_CURRENT_BRK) {
|
|
|
_gFOC_Ctrl.in.s_targetCurrent = eCtrl_get_RefCurrent();
|
|
_gFOC_Ctrl.in.s_targetCurrent = eCtrl_get_RefCurrent();
|
|
|
if (_gFOC_Ctrl.out.n_RunMode == CTRL_MODE_CURRENT_BRK) {
|
|
if (_gFOC_Ctrl.out.n_RunMode == CTRL_MODE_CURRENT_BRK) {
|
|
|
- if (eCtrl_get_FinalCurrent() < 0.0001f && _gFOC_Ctrl.in.s_motRPM < 100) {
|
|
|
|
|
|
|
+ if (eCtrl_get_FinalCurrent() < 0.0001f && _gFOC_Ctrl.in.s_motRPM < MIN_RPM_EXIT_EBRAKE) {
|
|
|
_gFOC_Ctrl.in.s_targetCurrent = 0.0f;
|
|
_gFOC_Ctrl.in.s_targetCurrent = 0.0f;
|
|
|
eCtrl_enable_eBrake(false);
|
|
eCtrl_enable_eBrake(false);
|
|
|
}
|
|
}
|
|
@@ -326,7 +327,7 @@ void PMSM_FOC_idqCalc(void) {
|
|
|
float refTorque = eCtrl_get_RefTorque();
|
|
float refTorque = eCtrl_get_RefTorque();
|
|
|
_gFOC_Ctrl.pi_ctl_trq->max = refTorque;
|
|
_gFOC_Ctrl.pi_ctl_trq->max = refTorque;
|
|
|
_gFOC_Ctrl.pi_ctl_trq->min = -refTorque;
|
|
_gFOC_Ctrl.pi_ctl_trq->min = -refTorque;
|
|
|
- if ((eCtrl_get_FinalTorque() <= 0.0001f) && _gFOC_Ctrl.in.s_motRPM < 100) {
|
|
|
|
|
|
|
+ if ((eCtrl_get_FinalTorque() <= 0.0001f) && _gFOC_Ctrl.in.s_motRPM < MIN_RPM_EXIT_EBRAKE) {
|
|
|
_gFOC_Ctrl.pi_ctl_trq->max = 0;
|
|
_gFOC_Ctrl.pi_ctl_trq->max = 0;
|
|
|
_gFOC_Ctrl.pi_ctl_trq->min = 0; //防止倒转
|
|
_gFOC_Ctrl.pi_ctl_trq->min = 0; //防止倒转
|
|
|
}
|
|
}
|
|
@@ -339,7 +340,8 @@ void PMSM_FOC_idqCalc(void) {
|
|
|
if (_gFOC_Ctrl.in.b_cruiseEna) {
|
|
if (_gFOC_Ctrl.in.b_cruiseEna) {
|
|
|
refSpeed = _gFOC_Ctrl.in.s_cruiseRPM;
|
|
refSpeed = _gFOC_Ctrl.in.s_cruiseRPM;
|
|
|
}
|
|
}
|
|
|
- if ((eCtrl_get_FinalSpeed() == 0) && _gFOC_Ctrl.in.s_motRPM < 10) {
|
|
|
|
|
|
|
+ if ((eCtrl_get_FinalSpeed() == 0) && _gFOC_Ctrl.in.s_motRPM < MIN_RPM_EXIT_EBRAKE) {
|
|
|
|
|
+ _gFOC_Ctrl.pi_ctl_spd->max = 0;
|
|
|
_gFOC_Ctrl.pi_ctl_spd->min = 0; //防止倒转
|
|
_gFOC_Ctrl.pi_ctl_spd->min = 0; //防止倒转
|
|
|
}
|
|
}
|
|
|
float errRef = refSpeed - _gFOC_Ctrl.in.s_motRPM;
|
|
float errRef = refSpeed - _gFOC_Ctrl.in.s_motRPM;
|