当前位置:   article > 正文

FOC Circle_Limitation 磁链圆限制理解

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 ,32026 ,31790 ,31558 ,31332 ,31111 ,30894 ,30682 ,
                                        30474 ,30270 ,30070 ,29874 ,29682 ,29494 ,29309 ,29127 ,28949 ,28774 ,
                                        28602 ,28434 ,28268 ,28105 ,27945 ,27787 ,27632 ,27480 ,27330 ,27183 ,
                                        27038 ,26895 ,26755 ,26617 ,26481 ,26346 ,26214 ,26084 ,25956 ,25830 ,
                                        25705 ,25583 ,25462 ,25342 ,25225 ,25109 ,24994 ,24882 ,24770 ,24660 ,
                                        24552 ,24445 ,24339 ,24235 ,24132 ,24031 ,23930 ,23831 ,23733 ,23637 ,
                                        23541 ,23447 ,23354 ,23262 ,23170 }; //i = sqrt(64/m)*Q15   Q15 = 32768														
uint16_t MaxModule = 32767;	/**<  Circle limitation maximum allowed module */
uint8_t  Start_index = 64;	/**<  Circle limitation table indexing start */
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
qd_t Circle_Limitation(qd_t Vqd)
{
  uint16_t table_element;
  uint32_t uw_temp;
  int32_t  sw_temp;
  qd_t local_vqd = Vqd;

	sw_temp = ( int32_t )( Vqd.q ) * Vqd.q +			//temp = vq2 + vd2;
            ( int32_t )( Vqd.d ) * Vqd.d;

  uw_temp = ( uint32_t ) sw_temp;
  
  /* uw_temp min value 0, max value 32767*32767 */
  if ( uw_temp > ( MaxModule * MaxModule ))
  {
    uw_temp = (uw_temp - 64) / (MaxModule * MaxModule / 64) + 1;

    /* wtemp min value pHandle->Start_index, max value 127 */
    uw_temp -= Start_index;

    /* uw_temp min value 0, max value 127 - pHandle->Start_index */
    table_element = Circle_limit_table[uw_temp];

    sw_temp = Vqd.q * (int32_t)table_element;
    local_vqd.q = (int16_t)(sw_temp / 32768);

    sw_temp = Vqd.d * (int32_t)( table_element );
    local_vqd.d = (int16_t)(sw_temp / 32768);
  }
  return ( local_vqd );
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/羊村懒王/article/detail/247954
推荐阅读
相关标签
  

闽ICP备14008679号