问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

电机关键数据采集方法详解:M法、T法和M/T法

创作时间:
作者:
@小白创作中心

电机关键数据采集方法详解:M法、T法和M/T法

引用
CSDN
1.
https://blog.csdn.net/weixin_42037809/article/details/143752848

本篇文章深入探讨了FOC(磁场定向控制)电机控制中的电机关键数据采集方法,特别是电机测速的三种方法:M法、T法和M/T法。文章详细解释了每种方法的原理,并给出了具体的实现代码。内容专业且深入,适合电机控制领域的工程师和技术人员阅读。

前言

本专栏专注分享在 FOC(基于磁场定向控制的 BLDC 电机控制器)方面的学习过程和心得体会。包括 FOC 控制算法时的实验成果和代码实现,和一些电机控制方面的基础知识和实用技巧。通过这些内容的分享,希望能够帮助更多的人理解和掌握 FOC 控制算法,让大家能够更加轻松地开发和控制电机。

由于在电机控制应用中需要了解电机的性能以及行业对限流的要求,因此,对于每一个规格型号的电机,都需要测试其相关性能,以便得到相关的数据支撑。对于电机测试有以下测试目标:

  • 需要记录下每个转速的空载Vs值和电机空载所能达到的最大转速。
  • 数据记录完成后,进行相关的数据分析,包括但不限于:拟合测功机实测电功率和程序计算电功率;拟合iq与扭矩的关系曲线;分析限流值和限扭矩值的曲线(包括速度分界点和曲线关系等,实现低速限扭矩,高速限功率)。
  • 测试数据的选择基于转速和扭矩进行划分。

电机测试步骤:

  • 测试之前需明确限速值对应的转速,电源限流值等参数。
  • 在硬件允许的范围内将限流值和保护值设置的尽量大
  • 在空载下测试能达到的最大转速
  • 在低速下不断加载,观察能电机能正常运行的最大转矩
  • 在高速下限制电源电流

另外,电机测速也是尤为重要的一项。编码器输出的AB信号可以有效反应电机的转子位置,同时也可以根据AB信号的变化计算出电机转速,常用的编码器测转速的方法有M法、T法和M/T法。电机转速也是速度,也符合路程除以时间,只是表示不同。(n = θ t n=\frac{θ}{t}n=tθ )

一、M法(从路程入手):

所谓M法(如图1),即计算在特定的时间段内转子旋转过的角度,即t tt固定,根据θ θθ计算转速n nn。


图1:M法(黄色为时间脉冲,蓝色为位置脉冲)

编码器输出的脉冲数可以等效为转子走过的角度,比如时间t tt内编码器输出脉冲数为M 1 M_1M1 (不考虑倍频),则转速为:n ( M ) = 60 ∗ M 1 t n_{(M)}=60*\frac{M_1}{t}n(M) =60∗tM1 此方法在转速较高的情况下适用,举例,若电机转速较慢,在时间t tt内M 1 M_1M1 可能为0,此时计算出转速为0,但电机仍然有速度,只是很慢而已。

二、T法(从时间入手)

所谓T法(如图2),即计算走过特定脉冲所使用的时间,即θ θθ固定,根据t tt算转速n nn。


图2:T法测速(红色为时间脉冲,蓝色为位置脉冲)

一般情况下都是采用定时器捕获脉冲的上升沿或下降沿,即路程固定为1个脉冲。转子旋转一圈编码器输出的脉冲总数为C,则路程为:θ = 1 C θ=\frac{1}{C}θ=C1 此时需要计算走过这个脉冲所用的时间,一般是用另一个高频定时器来计数,其计数的个数M 2 M_2M2 再乘以计数频率则为时间:T = M 2 ∗ 1 f T=M_2 * \frac{1}{f}T=M2 ∗f1 则转速公式为:n ( T ) = 1 C ÷ M 2 f = f C M 2 n_{(T)}= \frac{1}{C} ÷\frac{M_2}{f}=\frac{f}{CM_2}n(T) =C1 ÷fM2 =CM2 f 此种测速方法不适用于高速,例如,电机转速很高,两个位置脉冲之前切换的很快,此时时间脉冲还未来得及加1,则分母为0,转速无穷大,但是电机有一个实际转速,所以不符合。

三、M/T测速法:

M/T测速法相比于前两种,其特点在于不存在固定的量,而是不同的位置脉冲对应不同的时间脉冲,即脉冲加的多了,所需的时间也多了,不影响最终转速的结果(比如脉冲增加了5个,时间花了5ms,脉冲增加了10个,时间花了10ms,算出来的转速都是一样的)。

通过某些条件首先确定位置脉冲的增量M 1 M_1M1 ,则路程为M 1 C \frac{M_1}{C}CM1 ,然后计算这M 1 M_1M1 个脉冲所花费的时间,仍然采用定时器来计数时间(公式1.3所示)。此时转速:n ( M / T ) = 60 ∗ M 1 C ÷ M 2 f = 60 f M 1 C M 2 n_{(M/T)}=60* \frac{M_1}{C} ÷\frac{M_2}{f}=\frac{60fM_1}{CM_2}n(M/T) =60∗CM1 ÷fM2 =CM2 60fM1 式中,根据不同的触发条件,位置增量M 1 M_1M1 多,则时间M 2 M_2M2 也随之增大,所以不会影响转速的计算。

四、实现过程:

TMR2做编码器的计数器,通过捕获A信号上升沿,在中断服务函数里计算脉冲个数M 1 M_1M1 ,并且计算时间脉冲的计数个数M 2 M_2M2 ;TMR3做时间计数器,记录走过脉冲数所用的时间,并且以其更新中断作为测速的触发条件。f ff为计数频率,144MHz。

/* M/T cal speed-M1 */
  switch (handle->u1_encoder_cnt_dir)
  {
  case COUNT_UP://count direction up
    if (handle->u2_encoder_count > handle->u2_encoder_count_pre)
    {
      handle->u2_encoder_pulse = handle->u2_encoder_count - handle->u2_encoder_count_pre;
    }
    else
    {
      handle->u2_encoder_pulse = UINT32_MAX - (handle->u2_encoder_count_pre - handle->u2_encoder_count);
    }
    
    break;
  case COUNT_DOWN://count direction down
    if (handle->u2_encoder_count > handle->u2_encoder_count_pre)
    {
      handle->u2_encoder_pulse = UINT32_MAX - (handle->u2_encoder_count - handle->u2_encoder_count_pre);
    }
    else
    {
      handle->u2_encoder_pulse = handle->u2_encoder_count_pre - handle->u2_encoder_count;
    }
    break;
  
  default:
    break;
  }
  handle->u2_encoder_count_pre = handle->u2_encoder_count;
  
/* M/T cal speed-M2 */
  counter_temp = TMR3->cval-counter_pre;
  counter_pre = TMR3->cval;
  counter_temp += ((handle->u2_encoder_counter_cnt - handle->u2_encoder_counter_cnt_old) * PWM_PERIOD_COUNT);
  handle->u2_encoder_counter = counter_temp;
  handle->u2_encoder_counter_cnt_old = handle->u2_encoder_counter_cnt;
  
/* n=60*(f*M1)/(C*M2) */
void encoder_MT_cal_speed(mg_mtr_encoder_t* handle)
{
  handle->encoder_wheel_speed = 60 * ((144000000 * (handle->u2_encoder_pulse)) / handle->u2_encoder_counter);
  handle->encoder_wheel_speed /= encoder_max;
  handle->encoder_motor_speed = handle->encoder_wheel_speed * N_BASE;
}
  

模拟输出5K的AB脉冲,则经过4倍频后为20K;假设一圈的脉冲最大为36K,则电机转速应为:20 ÷ 36 ∗ 60 = 33.33 ( r / m i n ) 20÷36*60=33.33(r/min)20÷36∗60=33.33(r/min)

与计算结果一致。

总结

本章介绍了电机测试的要求和方法,着重讲解了电机测速的各种方法及实现。

本文原文来自CSDN博客

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号