|
|
@@ -213,11 +213,41 @@ static __INLINE void phase_curr_unbal_check(mot_contrl_t *ctrl) {
|
|
|
a_max = b_max = c_max = 0;
|
|
|
}
|
|
|
}
|
|
|
-
|
|
|
+#define norm_rad(a) {while (a >= M_PI*2) a-=M_PI*2;while (a < 0) a +=M_PI*2;};
|
|
|
+
|
|
|
+static __INLINE void mot_contrl_update_phase_vol(mot_contrl_t *ctrl) {
|
|
|
+ float phase_vol[3];
|
|
|
+ get_uvw_phases_raw(phase_vol);
|
|
|
+ /* 三相端电压转到alpha-beta轴的相电压 */
|
|
|
+ ctrl->phase_v_ab.a = (2 * phase_vol[0] - phase_vol[1] - phase_vol[2])/3.0f;
|
|
|
+ ctrl->phase_v_ab.b = (phase_vol[1] - phase_vol[2]) * ONE_BY_SQRT3;
|
|
|
+ /* 当前电气频率 除于相电压低通滤波器截止频率 */
|
|
|
+ float We_hz = (ctrl->foc.in.mot_velocity / 60.0f * mc_conf()->m.poles);
|
|
|
+ float w_r_wc = We_hz / PHASE_VOL_LPF_BAND;
|
|
|
+ /* 计算低通滤波器的幅度补偿系数*/
|
|
|
+ float mag_mul = sqrtf(1 + SQ(w_r_wc));
|
|
|
+ ctrl->phase_v_ab.a *= mag_mul;
|
|
|
+ ctrl->phase_v_ab.b *= mag_mul;
|
|
|
+ /* 计算低通相位延时 */
|
|
|
+ float angle_rad = fast_atan_2(We_hz, PHASE_VOL_LPF_BAND);
|
|
|
+ /* 延时半周期*/
|
|
|
+ angle_rad += (We_hz * 2 * M_PI * ctrl->foc.ts / 2);
|
|
|
+ norm_rad(angle_rad);
|
|
|
+ /* 补偿 alpha-beta的相位 */
|
|
|
+ float sin,cos;
|
|
|
+ arm_sin_cos(-pi_2_degree(angle_rad), &sin, &cos);
|
|
|
+ float alpha = ctrl->phase_v_ab.a * cos + ctrl->phase_v_ab.b * sin;
|
|
|
+ float beta = ctrl->phase_v_ab.b * cos - ctrl->phase_v_ab.a * sin;
|
|
|
+
|
|
|
+ ctrl->phase_v_ab.a = alpha;
|
|
|
+ ctrl->phase_v_ab.b = beta;
|
|
|
+}
|
|
|
|
|
|
bool mot_contrl_update(mot_contrl_t *ctrl) {
|
|
|
foc_t *foc = &ctrl->foc;
|
|
|
|
|
|
+ mot_contrl_update_phase_vol(ctrl);
|
|
|
+
|
|
|
phase_current_get(foc->in.curr_abc);
|
|
|
clark(foc->in.curr_abc[0], foc->in.curr_abc[1], foc->in.curr_abc[2], &foc->in.curr_ab);
|
|
|
|