|
|
@@ -85,7 +85,7 @@ static void smo_observer(float uAlpha, float uBeta, float iAlpha, float iBeta) {
|
|
|
smo.est_eBeta_Filted = smo.est_eBeta;
|
|
|
#endif
|
|
|
}
|
|
|
-#define angle_clamp(a) {while (a >= M_PI*2) a-=M_PI*2;while (a < 0) a +=M_PI*2;};
|
|
|
+
|
|
|
#ifdef USE_ARCTAN
|
|
|
static void smo_arctan(void) {
|
|
|
float ealpha_in = -smo.est_eAlpha_Filted;
|
|
|
@@ -93,7 +93,7 @@ static void smo_arctan(void) {
|
|
|
|
|
|
float angle = fast_atan_2(ealpha_in, ebeta_in); //通过反正切获取电角度
|
|
|
UTILS_NAN_ZERO(angle);
|
|
|
- angle_clamp(angle);
|
|
|
+ norm_angle_rad(angle);
|
|
|
float prev_angle = smo.est_angle;
|
|
|
float comp_angle = 0.0f;
|
|
|
if (smo.dir_ccw) {
|
|
|
@@ -114,7 +114,7 @@ static void smo_arctan(void) {
|
|
|
smo.est_rad_pers_filted = smo.est_rad_pers;
|
|
|
/*低通滤波有相位滞后,需要补偿,同时电流和电压滞后一个控制周期,需要通过当前的电角速度对计算的角度进行补偿 */
|
|
|
smo.est_angle_out = smo.est_angle + fast_atan_2(smo.est_rad_pers_filted, smo.lpf_wc) + smo.est_rad_pers_filted * smo.ts;
|
|
|
- angle_clamp(smo.est_angle_out);
|
|
|
+ norm_angle_rad(smo.est_angle_out);
|
|
|
smo.est_rpm = (30.0f * smo.est_rad_pers_filted/M_PI/smo.motor_poles);
|
|
|
if (smo.est_rpm > CONFIG_HW_MAX_MOTOR_RPM) {
|
|
|
smo.est_rpm = CONFIG_HW_MAX_MOTOR_RPM;
|
|
|
@@ -140,7 +140,7 @@ static void smo_pll(void) {
|
|
|
smo.est_angle += smo.ts * smo.est_rad_pers; //角速度积分
|
|
|
|
|
|
smo.est_rad_pers_filted = do_lpf(smo.est_rad_pers_filted, smo.est_rad_pers, smo.lpf_ceof); //对速度低通滤波
|
|
|
- angle_clamp(smo.est_angle);
|
|
|
+ norm_angle_rad(smo.est_angle);
|
|
|
smo.est_rpm = (30.0f * smo.est_rad_pers_filted/M_PI/smo.motor_poles);
|
|
|
if (smo.est_rpm > CONFIG_HW_MAX_MOTOR_RPM) {
|
|
|
smo.est_rpm = CONFIG_HW_MAX_MOTOR_RPM;
|
|
|
@@ -149,7 +149,7 @@ static void smo_pll(void) {
|
|
|
}
|
|
|
/* 电流和电压滞后一个控制周期,需要通过当前的电角速度对计算的角度进行补偿 */
|
|
|
smo.est_angle_out = smo.est_angle + smo.est_rad_pers_filted * smo.ts;
|
|
|
- angle_clamp(smo.est_angle_out);
|
|
|
+ norm_angle_rad(smo.est_angle_out);
|
|
|
}
|
|
|
#endif
|
|
|
|