|
|
@@ -15,6 +15,8 @@ void smo_observer_init(float pll_bandwith, float lpf_wc, float Ksmo, float Ksta)
|
|
|
smo.pll_max_rad_pers = CONFIG_MAX_MOT_RPM/30.0f * M_PI;
|
|
|
smo.lpf_wc = lpf_wc;
|
|
|
smo.lpf_ceof = (lpf_wc*2*M_PI/(float)FOC_PWM_FS);
|
|
|
+ smo.Ksmo = Ksmo;
|
|
|
+ smo.Ksta = Ksta;
|
|
|
smo.motor_r = nv_get_motor_params()->r;
|
|
|
smo.motor_ld = nv_get_motor_params()->ld;
|
|
|
smo.motor_lq = nv_get_motor_params()->lq;
|
|
|
@@ -37,7 +39,7 @@ static void smo_observer(float uAlpha, float uBeta, float iAlpha, float iBeta) {
|
|
|
|
|
|
float err_iAlpha = smo.Ialpha_hat - iAlpha;
|
|
|
|
|
|
- smo.est_eAlpha = fclamp(err_iAlpha, -smo.Ksta, smo.Ksta * smo.Ksmo);
|
|
|
+ smo.est_eAlpha = fclamp(err_iAlpha, -smo.Ksta, smo.Ksta) * smo.Ksmo;
|
|
|
smo.est_eAlpha_Filted = do_lpf(smo.est_eAlpha_Filted, smo.est_eAlpha, smo.lpf_ceof);
|
|
|
|
|
|
/* est beta back emf */
|
|
|
@@ -46,7 +48,7 @@ static void smo_observer(float uAlpha, float uBeta, float iAlpha, float iBeta) {
|
|
|
|
|
|
float err_iBeta = smo.IBeta_hat - iBeta;
|
|
|
|
|
|
- smo.est_eBeta = fclamp(err_iBeta, -smo.Ksta, smo.Ksta * smo.Ksmo);
|
|
|
+ smo.est_eBeta = fclamp(err_iBeta, -smo.Ksta, smo.Ksta) * smo.Ksmo;
|
|
|
smo.est_eBeta_Filted = do_lpf(smo.est_eBeta_Filted, smo.est_eBeta, smo.lpf_ceof);
|
|
|
|
|
|
}
|
|
|
@@ -68,10 +70,9 @@ static void smo_pll(void) {
|
|
|
}
|
|
|
smo.est_rad_pers_filted = do_lpf(smo.est_rad_pers_filted, smo.est_rad_pers, smo.lpf_ceof); //对速度低通滤波
|
|
|
smo.est_angle += smo.ts * smo.est_rad_pers; //角速度积分
|
|
|
-
|
|
|
+ angle_clamp(smo.est_angle);
|
|
|
/* 对低通进行角度补偿 */
|
|
|
- smo.est_angle_out = smo.est_angle + fast_arctan2(smo.est_rad_pers_filted, smo.bandwith*2*M_PI);
|
|
|
-
|
|
|
+ smo.est_angle_out = smo.est_angle + fast_arctan2(smo.est_rad_pers_filted, smo.lpf_wc*2*M_PI);
|
|
|
angle_clamp(smo.est_angle_out);
|
|
|
}
|
|
|
|