几个不明白的点:
hall_timer_counter = timer_channel_capture_value_register_read(TIMER2,TIMER_CH_0)+1;
霍尔每次中断递增角度等于速度乘以时间,就是速度除以每次中断的频率;
hall_theta_inc = (PI/3)/((float)hall_timer_counter/HALL_TIMER_FREQ_HZ)/MOTOR_PWM_FREQ_HZ;
//霍尔速度等于60度/T;霍尔计数/霍尔频率,相当于霍尔周期/霍尔频率=周期=T
hall_speed = (PI/3)/((float)hall_timer_counter/HALL_TIMER_FREQ_HZ);
hall_state = hall_get();
if((hall_state > 0) && (hall_state <= 6))
{
hall_theta = hall_theta_tab[hall_state - 1] + PHASE_SHIFT_ANGLE;
//为什么加90度,霍尔的角度求出后是真实角度,需要加上90度转变为Q轴角度
}
此图的作用:由于电机内部电感的作用,一般在三个下管都打开的时候进行 ADC 采样才
能采集到正确的相电流,也就i是为000时刻,一个周期内,下管才处于打开的状态;
FOC采集的电流有正负;