FOC中的Clarke变换_TI和ST电机控制库的源码实现

FOC中的Clarke变换_TI和ST电机控制库的源码实现
FOC中的PARK变换_TI和ST电机控制库的源码实现
FOC中的反PARK变换_TI和ST电机控制库的源码实现

Clarke变换

这个变换的目的是将平衡的三相量转换为平衡的两相正交量。

这三相电流理论上是相位相差120度的正弦波:

{ I a = I × cos ⁡ ( w t ) I b = I × cos ⁡ ( w t − 2 π / 3 ) I c = I × cos ⁡ ( w t − 4 π / 3 ) \left\{ \begin{array}{l} Ia=I\times \cos \left( wt \right)\\ Ib=I\times \cos \left( wt-2\pi /3 \right)\\ Ic=I\times \cos \left( wt-4\pi /3 \right)\\ \end{array} \right. Ia=I×cos(wt)Ib=I×cos(wt2π/3)Ic=I×cos(wt4π/3)

在这里插入图片描述

空间矢量表示这a,b,c三相电流。
在这里插入图片描述

我们更习惯于二维平面图中的直角坐标系。可以把这(Ia,Ib,Ic)三个基向量做一个很简单的正交化。

α − β 坐 标 系 \alpha -\beta 坐标系 αβ
变换公式:

{ I α = I a − cos ⁡ ( π 3 ) I b − cos ⁡ ( π 3 ) I c I β = sin ⁡ ( π 3 ) I b − sin ⁡ ( π 3 ) I c \left\{ \begin{array}{l} I\alpha =Ia-\cos \left( \frac{\pi}{3} \right) Ib-\cos \left( \frac{\pi}{3} \right) Ic\\ I\beta =\sin \left( \frac{\pi}{3} \right) Ib-\sin \left( \frac{\pi}{3} \right) Ic\\ \end{array} \right. {Iα=Iacos(3π)Ibcos(3π)IcIβ=sin(3π)Ibsin(3π)Ic
基尔霍夫电流定律(KCL):

I a + I b + I c = 0 Ia+Ib+Ic=0 Ia+Ib+Ic=0
所以我们可以得到

{ I α = I a I β = ( 2 I b + I a 3 ) \left\{ \begin{array}{l} I\alpha =Ia\\ I\beta =\left( \frac{2Ib+Ia}{\sqrt{3}} \right)\\ \end{array} \right. {Iα=IaIβ=(3 2Ib+Ia)

{ I α = I × cos ⁡ ( w t ) I β = I × sin ⁡ ( w t ) \left\{ \begin{array}{l} I\alpha =I\times \cos \left( wt \right)\\ I\beta =I\times \sin \left( wt \right)\\ \end{array} \right. {Iα=I×cos(wt)Iβ=I×sin(wt)
完成转换成了两相正交量。
在这里插入图片描述

TI的Digital Motor Control库中的实现:

使用了IQmath的库:把运算浮点数速度提高。定点DSP实现精确的浮点运算。

typedef struct {  _iq  As;  		// Input: phase-a stator variable
				  _iq  Bs;			// Input: phase-b stator variable
				  _iq  Cs;			// Input: phase-c stator variable  
				  _iq  Alpha;		// Output: stationary d-axis stator variable 
				  _iq  Beta;		// Output: stationary q-axis stator variable
		 	 	} CLARKE;	            
/*-----------------------------------------------------------------------------
	Default initalizer for the CLARKE object.
-----------------------------------------------------------------------------*/  
#define CLARKE_DEFAULTS { 0, \
                          0, \
                          0, \
                          0, \
                          0, \
              			} 

//  1/sqrt(3) = 0.57735026918963
#define  ONEbySQRT3   0.57735026918963    /* 1/sqrt(3) */
	
// Clarke transform macro (with 2 currents)
// 只采用两相电流,另一相Ia+Ib+Ic=0得到
// beta = (2*b+a)/sqrt(3)
//==========================================
#define CLARKE_MACRO(v)										\
v.Alpha = v.As;												\
v.Beta = _IQmpy((v.As +_IQmpy2(v.Bs)),_IQ(ONEbySQRT3));

// Clarke transform macro (with 3 currents)
// 三相电流时beta = (b-c)/sqrt(3)
//==========================================
#define CLARKE1_MACRO(v)									\
v.Alpha = v.As;											    \
v.Beta  = _IQmpy((v.Bs - v.Cs),_IQ(ONEbySQRT3));

ST的电机库的实现函数:

st库只使用了两相电流,一堆限幅检测猛如虎。

typedef struct
{
  int16_t a;
  int16_t b;
} ab_t;

#define divSQRT_3 (int32_t)0x49E6    /* 1/sqrt(3) in q1.15 format=0.5773315*/

/**
  * @brief  This function transforms stator values a and b (which are
  *         directed along axes each displaced by 120 degrees) into values
  *         alpha and beta in a stationary qd reference frame.
  *                               alpha = a
  *                       beta = -(2*b+a)/sqrt(3)
  * @param  Input: stator values a and b in ab_t format
  * @retval Stator values alpha and beta in alphabeta_t format
  */
__weak alphabeta_t MCM_Clarke( ab_t Input  )
{
  alphabeta_t Output;

  int32_t a_divSQRT3_tmp, b_divSQRT3_tmp ;
  int32_t wbeta_tmp;
  int16_t hbeta_tmp;

  /* qIalpha = qIas*/
  Output.alpha = Input.a;

  a_divSQRT3_tmp = divSQRT_3 * ( int32_t )Input.a;

  b_divSQRT3_tmp = divSQRT_3 * ( int32_t )Input.b;

  /*qIbeta = -(2*qIbs+qIas)/sqrt(3)*/
  // 这里的右移15位,除以32768。
  // divSQRT_3  = 0x49E6 / 32768 = 0.5773315
#ifdef FULL_MISRA_C_COMPLIANCY
  wbeta_tmp = ( -( a_divSQRT3_tmp ) - ( b_divSQRT3_tmp ) -
                 ( b_divSQRT3_tmp ) ) / 32768;
#else
  /* WARNING: the below instruction is not MISRA compliant, user should verify
    that Cortex-M3 assembly instruction ASR (arithmetic shift right) is used by
    the compiler to perform the shift (instead of LSR logical shift right) */

  wbeta_tmp = ( -( a_divSQRT3_tmp ) - ( b_divSQRT3_tmp ) -
                 ( b_divSQRT3_tmp ) ) >> 15;
#endif

  /* Check saturation of Ibeta */
  if ( wbeta_tmp > INT16_MAX )
  {
    hbeta_tmp = INT16_MAX;
  }
  else if ( wbeta_tmp < ( -32768 ) )
  {
    hbeta_tmp = ( -32768 );
  }
  else
  {
    hbeta_tmp = ( int16_t )( wbeta_tmp );
  }

  Output.beta = hbeta_tmp;

  if ( Output.beta == ( int16_t )( -32768 ) )
  {
    Output.beta = -32767;
  }

  return ( Output );
}

__weak 前缀的函数称这个函数为“弱函数”。

若两个或两个以上全局符号(函数或变量名)名字一样,而其中之一声明为weak属性,则这些全局符号不会引发重定义错误。链接器会忽略弱符号,去使用普通的全局符号来解析所有对这些符号的引用,但当普通的全局符号不可用时,链接器会使用弱符号

当有函数或变量名可能被用户覆盖时,该函数或变量名可以声明为一个弱符号。

参考:
稚晖大佬:
http://www.pengzhihui.xyz/2020/07/02/foc/#more
STM32 FOC 软件培训库pdf
TI DMC MATH_13.1pdf


被抛弃的写随笔公众号改写技术文章了,感兴趣的可以关注公众号:王崇卫
在这里插入图片描述

  • 5
    点赞
  • 59
    收藏
    觉得还不错? 一键收藏
  • 9
    评论
### 回答1: instaspin_foc_kpki_ti是德州仪器(TI)公司为高性能电机控制而开发的一种技术。InstaSPIN是一种用于电机控制的自动化软件技术,能够快速准确地自适应电机参数和控制环路,从而实现高效的电机控制FOC(Field-Oriented Control)是一种电机控制方法,通过将电机的旋转磁场划分为直流分量和交流分量,使得电机的性能更加精确可控。KP-KI是一种比例-积分(Proportional-Integral)控制器,用于实现电机的速度和位置控制,确保电机系统的稳定性和响应性。 InstaSPIN-FOC-KPKI-TI将这些技术整合在一起,提供了一种快速可靠的解决方案,适用于各种类型的电机控制应用。这个解决方案包括了TI公司的控制器芯片和相关软件,集成了InstaSPIN自动化软件技术、FOC电机控制方法和KP-KI控制器。通过使用这种技术,工程师可以快速搭建电机控制系统,准确地控制电机的速度、位置和扭矩,并实现高性能和高效率的电机运行。 InstaSPIN-FOC-KPKI-TI技术的应用范围很广,可以用于各种类型的电机控制系统,包括工业驱动、家电、汽车和机器人等领域。它具有简单易用、快速调试和自适应能力等优点,可以帮助工程师们加快产品开发周期,提高电机系统的性能和效率。同时,德州仪器(TI)公司也提供专业的技术支持和培训,帮助客户充分利用InstaSPIN-FOC-KPKI-TI技术,实现电机控制的成功应用。 ### 回答2: instaspin_foc_kpki_ti是德州仪器(Texas Instruments)公司推出的一种电机控制软件和硬件解决方案。它主要用于实现无刷直流电机(BLDC)和永磁同步电机(PMSM)的高性能控制。该解决方案结合了硬件模块、软件算法和开发工具,提供了一种简化和加速电机控制设计的方法。 instaspin_foc_kpki_ti提供了多种驱动模式和算法,包括速度控制、位置控制和电流控制。它的主要特点是具有高度的可编程性和灵活性,可以根据具体的应用需求进行参数配置和调整。 该解决方案采用了电流、速度和位置的反馈控制,通过准确的电机模型和自适应算法来实现高效的控制。它能够实时监测电机的转速、电流和位置,并根据需要进行调整。 instaspin_foc_kpki_ti还提供了丰富的开发工具和资源,包括调试器、仿真器和开发环境。开发人员可以使用这些工具对电机控制系统进行调试和优化,从而提高系统的性能和效率。 通过使用instaspin_foc_kpki_ti,用户可以快速开发高性能的电机控制系统,提高产品的竞争力和市场份额。它广泛应用于工业自动化、汽车、电动工具和家电等领域,为用户带来了更好的效果和体验。 ### 回答3: Instaspin_foc_kpki_ti 是德州仪器(Texas Instruments)公司推出的一款以InstaSPIN-FOC控制算法为基础的电机控制解决方案。InstaSPIN-FOC是一种传感器less矢量控制技术,能够实时感测电机状况并进行闭环控制,提供高效的电机运行和精确的位置、速度控制。 Instaspin_foc_kpki_ti的主要优势在于其提供了快速和简化的开发过程。该解决方案具有预先优化的默认参数,使得用户只需简单设置少量参数即可进行电机控制。此外,该控制方案还提供了自适应校正和自动调谐功能,能够自动准确地校正电机参数并调整控制策略,从而实现最佳性能。 Instaspin_foc_kpki_ti还具备丰富的扩展性和灵活性。用户可以根据自己的需求选择合适的硬件平台,并使用TI的MotorWare软件套件来进行开发。此外,该解决方案还支持外部编码器和传感器的集成,以提供更精确的位置和速度反馈。 总体而言,Instaspin_foc_kpki_ti是一种先进的电机控制解决方案,能够为用户提供快速、简化的开发过程和高效精确的控制性能。无论是在工业应用还是在消费类电子产品,该技术都能够发挥重要作用,并为用户带来更好的使用体验。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值