ST Motor FOC库-Circle Limitation功能理解

ST Motor FOC库-Circle Limitation功能理解

功能介绍

源代码位于MC_FOC_DRIVE.c,处于PID环节之后;

个人理解,由于PID对于Vd,Vq的输出是相对独立的,因此很有可能会出现矢量过调制的现象,需要对输出的Vd,Vq进行处理,使其始终保持在单位矢量圆内部(单位矢量圆指调制比达到100%时构成的电压矢量圆),就是合成电压矢量在圆内的,保持原值,超出限制圆的,一律按照限制圆半径处理(所有的处理都是为了保持Vd,Vq合成的电压矢量保持在限制圆内部)。

同时由于死区时间,PWM开关频率的影响,通常会限制的更深一点,即处理后的电压矢量要控制在比单位圆半径更小一点的圆中。
在这里插入图片描述


算法介绍

假设令所能允许的矢量圆半径为 M A X _ M O D U L E MAX\_MODULE MAX_MODULE,PID输出为 V q p i d Vq_{pid} Vqpid V d p i d Vd_{pid} Vdpid,经过Circle Limitation后的输出为 V q o u t Vq_{out} Vqout V d o u t Vd_{out} Vdout,则显然有:
V q p i d V q o u t = V q p i d 2 + V d p i d 2 M A X _ M O D U L E 2 \frac{Vq_{pid}}{Vq_{out}}=\sqrt{\frac{Vq_{pid}^2+Vd_{pid}^2}{MAX\_MODULE^2}} VqoutVqpid=MAX_MODULE2Vqpid2+Vdpid2
V d p i d V d o u t = V q p i d 2 + V d p i d 2 M A X _ M O D U L E 2 \frac{Vd_{pid}}{Vd_{out}}=\sqrt{\frac{Vq_{pid}^2+Vd_{pid}^2}{MAX\_MODULE^2}} VdoutVdpid=MAX_MODULE2Vqpid2+Vdpid2

这里取等式右边为 1 S c o f \frac1{S_{cof}} Scof1,于是上式可变形为

V q o u t = V q p i d ∗ S c o f Vq_{out}=Vq_{pid}*S_{cof} Vqout=VqpidScof

V d o u t = V d p i d ∗ S c o f Vd_{out}=Vd_{pid}*S_{cof} Vdout=VdpidScof

这里的系数 S c o f S_{cof} Scof计算是重点,由于涉及平方根求取,ST采用了查表法来计算。

S c o f = M A X _ M O D U L E 2 V q p i d 2 + V d p i d 2 S_{cof}=\sqrt{\frac{MAX\_MODULE^2}{Vq_{pid}^2+Vd_{pid}^2}} Scof=Vqpid2+Vdpid2MAX_MODULE2

因为 V q p i d Vq_{pid} Vqpid V d p i d Vd_{pid} Vdpid的输出范围是已知的,则 S c o f S_{cof} Scof的范围也是可以确定的,那么是否可以提前将 S c o f S_{cof} Scof划分,然后根据 V q p i d 2 + V d p i d 2 Vq_{pid}^2+Vd_{pid}^2 Vqpid2+Vdpid2来查表呢。

个人猜测ST源代码里提供了一种巧妙的思路,先假定ST的单位矢量圆半径是32768,即当Vq,Vd的合成矢量满足满调制比时,合成矢量的大小为32768,由此可得出从PID环节输出来的Vq_pid和Vd_pid能够合成的电压矢量范围为0— V q p i d 2 + V d p i d 2 = 2 ∗ 3276 8 2 \sqrt{{Vq_{pid}^2+Vd_{pid}^2}}=\sqrt{2*32768^2} Vqpid2+Vdpid2 =2327682 ,注意,这个范围远远超出了电压调制范围,因此需要在内部加一个限制,以此为基础有:

  1. 将0— 2 ∗ 3276 8 2 {2*32768^2} 2327682划分成128等分;
  2. 设定最大调制比为0.98,则得出满足调制的最大电压矢量 M A X _ M O D U L E MAX\_MODULE MAX_MODULE(约为32111),当 V q p i d Vq_{pid} Vqpid V d p i d Vd_{pid} Vdpid达到可以合成的最大电压矢量时,即满足 V q p i d 2 + V d p i d 2 = M A X _ M O D U L E 2 Vq_{pid}^2+Vd_{pid}^2=MAX\_MODULE^2 Vqpid2+Vdpid2=MAX_MODULE2,此时在128等分中为第61个,即这128等分的前61个电压矢量是可以被利用的。
  3. 因为只有当合成矢量大于限制圆时,才需要限制,即处于128等分的后67等分里才需要处理,所以只需要对后67个等分对应的S_cof列表即可。
  4. ST代码中先计算PID环节出来后电压矢量所处的等分点区间,然后减去限制圆内的等分点个数,得到在67个等分点范围内的节点号,再去查表得到 S _ c o f S\_cof S_cof,然后重新计算 V q o u t Vq_{out} Vqout V d o u t Vd_{out} Vdout;
void RevPark_Circle_Limitation(Volt_Components Stat_Volt_q_d)
{
   s32 temp;
             
   temp = Stat_Volt_q_d.qV_Component1 * Stat_Volt_q_d.qV_Component1 
             + Stat_Volt_q_d.qV_Component2 * Stat_Volt_q_d.qV_Component2;  
    // min value 0, max value 2*32767^2
              
   if( temp > (u32)(( MAX_MODULE * MAX_MODULE) ) ) // (Vd^2+Vq^2) > MAX_MODULE^2
   {
		 u16 index;
								
		 temp /= (u32)(512*32768);  
       //temp = temp * 128 / (2 * 32768^2)算出所处的等分节点
		 temp -= START_INDEX ;   // min value 0, max value 127 - START_INDEX
       //只需要用到超出限制圆的节点坐标值(剩下的67个点),做这一步方便索引
		 index = circle_limit_table[(u8)temp];
	   //取值						
		 temp = (s16)Stat_Volt_q_d.qV_Component1 * (u16)(index);
       //对应上面的公式,但需要注意的是,按道理sqrt之后的值是一个0-1的小数,
       //因此这里索引值放大了32768,这也是为什么后面要除以32768的原因。
		 Stat_Volt_q_d.qV_Component1 = (s16)(temp/32768);  
								
		 temp = (s16)Stat_Volt_q_d.qV_Component2 * (u16)(index); 
		 Stat_Volt_q_d.qV_Component2 = (s16)(temp/32768);  
   }

}

  • 4
    点赞
  • 34
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
### 回答1: ST Motor FOC中的Circle Limitation功能是一种用于电机控制的功能。它主要用于限制电机运动范围,确保电机在特定圆内运动。这个功能的设计初衷是为了避免电机在运行过程中超出特定半径的范围,从而保护电机及其驱动系统。 使用Circle Limitation功能时,首先需要定义一个半径,表示电机在运动过程中所允许的最大范围。当电机开始运行时,控制算法会监测电机位置,并通过调整电机的控制信号来确保电机保持在定义的圆内。 具体而言,Circle Limitation功能通过控制电机的速度和加速度来达到限制电机运动范围的目的。一旦电机接近或超出了定义的圆半径,控制算法会减小电机的速度或加速度,使电机返回到圆内。这个过程是自动进行的,无需人为干预。 Circle Limitation功能在许多应用中都很有用,特别是在需要限制电机运动范围的场景下。比如在机器人控制中,当电机控制机器人的手臂或移动平台时,该功能可以确保机器人不会超出特定范围,从而防止机械部件的碰撞或损坏。 总之,ST Motor FOC中的Circle Limitation功能是一种用于限制电机运动范围的控制功能,通过调整电机的控制信号来确保电机保持在定义的圆内,以保护电机及其驱动系统的安全运行。 ### 回答2: ST Motor FOC中的Circle Limitation(圆限制)功能是一种用于控制电机转动的特殊功能。圆限制功能主要用于保持电机在特定范围内旋转,避免超过设定的限制范围。 Circle Limitation功能通常在机器人、无人机和电动车等应用中使用。在这些应用中,电机通常需要在特定的路径或轨迹中移动,并且不能超出规定的圆形工作区域。 使用Circle Limitation功能,我们可以在代码中指定电机的工作区域的半径和中心坐标。电机控制系统将会监测电机的位置,一旦电机越过设定的工作区域,控制系统就会采取措施将电机强制限制在工作区域内。 Circle Limitation功能通过使用电机的位置反馈来实现。电机控制系统会持续测量电机的位置,并与设定的工作区域进行比较。如果电机的位置超出了工作区域,控制系统将会调整电机的速度和/或方向,确保电机继续在限制范围内运动。 使用Circle Limitation功能,我们可以有效地控制电机在预定的圆形区域内运动。这对于需要精确控制电机的应用非常重要,因为它可以防止电机超过规定的工作区域,从而保护设备和提供更稳定的性能。 总而言之,ST Motor FOC中的Circle Limitation功能是一种用于控制电机旋转范围的特殊功能,可以保持电机在指定的工作区域内移动。它通过监测电机的位置并调整电机的速度和方向,以确保电机始终保持在限制范围内。 ### 回答3: ST Motor FOC中的Circle Limitation功能是一种电机控制功能,旨在限制电机运行时的速度。它可以通过限制电机的速度范围来保护电机和驱动器。具体来说,Circle Limitation功能可以将电机的转速限制在一个设定的范围内,防止超过设定范围导致电机受损。 Circle Limitation功能的原理是通过对电机的电流控制,来限制电机的转速。当电机的转速接近或超过限制范围时,控制算法会自动调整电机的电流控制使其保持在限制范围内。这样一来,即使在高负载或者异常情况下,电机也能保持在安全的转速范围内。 通过Circle Limitation功能,用户可以设置电机的最大和最小转速限制,以满足特定应用的需求。当电机的运行速度超过最大转速限制时,系统将自动降低电机的输出电流,从而限制电机的转速。当电机的运行速度低于最小转速限制时,系统将自动增加电机的输出电流,以提供足够的扭矩将电机带动起来。 总结来说,Circle Limitation功能ST Motor FOC中的一项重要功能,可以提供对电机转速的限制和保护。它通过控制电机的电流,保持电机的转速在一个设定的范围内,避免了转速过高或过低对电机和驱动器的损坏。这项功能可以根据应用需求进行设置和调整,为电机的安全和稳定运行提供保障。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值