FOC Circle_Limitation 磁链圆限制理解
FOC流程图 Circle_Limitation所在位置
确定 MAX_MODULE 值
假设磁链圆的最大矢量值为1,但因FOC控制中需要设定PWM死区时间,以及PWM载波频率对AD采样时间的影响,使PWM占空比值最大不能达到100%,需要留出时间给ADC采样电机电流,所以矢量的最大值不能达到1。
因FOC中使用Q15格式处理小数,所以设定矢量为1时(PWM最大占空比100%) MAX_MODULE = 32767;若PWM占空比最大为97%,则MAX_MODULE = 0.97 × 32767;
磁链限制原理
Circle_Limitation函数在FOC流程框架图中,在PID控制器之后,而PID控制器是单独对Vd,Vq进行PID控制的,所以为了使Vd,Vq合成的电压矢量小于等于单位圆的边,即Vd² + Vq² ≤ MAX_MODULE²。
其原理公式如下,若Vd,Vq合成的矢量大于圆的最大矢量,则将其乘以一个缩放倍数i²,使其等于圆的最大矢量,i就是需要缩放的系数。
令 (vd² + vq² ) × i² = MAX_MODULE² ;
i = SQRT ( MAX_MODULE² / (vd² + vq²) );
STM32在计算开根号上比较费时,所以ST电机库中引入查表去查开根号值。
确定 START_INDEX值
因Vd与Vq都是int_16类型,其最大值为S16_MAX (32767)
所以需要限制的范围满足Vd² + Vq² > MAX_MODULE² 也就是 ( MAX_MODULE² + 1 )~ ( 2 × S16_MAX ² );
即需要制表的值i = SQRT ( MAX_MODULE² / ( MAX_MODULE² + 1) ~ MAX_MODULE² / ( 2 × S16_MAX ² ) );
而i = SQRT ( MAX_MODULE² / (0) ~ 1 ) 这段内容则不需要进行制表,所以需要定制一个制表的开头位置。
START_INDEX 是为了求出在全段范围内,不需要进行限制的个数。
设定 MAX_MODULE² / (0) ~ MAX_MODULE² / (2 × S16_MAX ²) 需要制定count个值,
则不需要限制范围个数 START_INDEX = (MAX_MODULE²) / (2 × S16_MAX ²) x count;
则制表需要数据个数 n = count - START_INDEX;
将制表的范围用MIN,MAX表示:
MIN = SQRT( MAX_MODULE² / ( MAX_MODULE² + 1 ) ) × Q15;
MAX = SQRT( MAX_MODULE² / ( 2 × S16_MAX ² ) ) × Q15;
则制表数组每个数值 i = MIN + (MAX - MIN)/n × x;
设定count = 128, 当PWM占空比最大为100%时, MAX_MODULE = 32767;
START_INDEX = 64;
n = 128 - 64 = 64;
则列出表为:
uint16_t Circle_limit_table[65] = {
32768, 32515 ,32268 ,