This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

针对InstaSPIN-FOC在Motor ID(参数辨识)过程中User.h配置探讨(一)

Other Parts Discussed in Thread: LAUNCHXL-F28027F, BOOSTXL-DRV8305EVM, MOTORWARE

本人最近在评估TI的InstaSPIN-FOC算法。在研究user.h参数配置方面的问题。

控制板:LAUNCHXL-F28027F LaunchPad

功率板:BOOSTXL-DRV8305EVM

软件:CCS5.5

电机参数:

电压:24V 最大转速:185rpm 连续电流:3A 峰值电流:6A。

1.使用TI的GUI Composer有两种方式:Standalone和Inside of CCS。在standalone模式下,MotorWare projects需要根据电机的相关参数修改user.h文件,然后编译文件,将生成的appProgram.out文件下存放在GUI目录下。Launch the GUI,即可进行Motor identify过程:

2.在进行User.h配置的过程中,我怀疑过合理的配置参数文件是否能一定程度上提升参数辨识的精度?关键参数和配置原则如下:

#define USER_IQ_FULL_SCALE_FREQ_Hz        (500.0) //GUI_QSG推荐设置500Hz

#define USER_IQ_FULL_SCALE_VOLTAGE_V      (24.0)  //一般等于母线电压(24V

#define USER_PWM_FREQ_kHz                (30.0) //30K PWM

#define USER_NUM_PWM_TICKS_PER_ISR_TICK        (3) //10k ISR

#define USER_NUM_ISR_TICKS_PER_CTRL_TICK       (1)      // 10k CTRL

#define USER_NUM_CTRL_TICKS_PER_CURRENT_TICK   (1)      // 10k CURRENT

#define USER_NUM_CTRL_TICKS_PER_EST_TICK       (1)      //  10K EST

#define USER_NUM_CTRL_TICKS_PER_SPEED_TICK  (10)   // 1K SPEED

#define USER_NUM_CTRL_TICKS_PER_TRAJ_TICK   (10)   // 1K TRAJ

#define USER_MOTOR My_Motor

#define USER_MOTOR_TYPE                 MOTOR_Type_Pm//PMSM

#define USER_MOTOR_NUM_POLE_PAIRS       (8) //8对极(Pole pairs)

#define USER_MOTOR_RES_EST_CURRENT      (0.3)//10%*连续电流

#define USER_MOTOR_IND_EST_CURRENT      (-0.3)//-10%*连续电流

 

#define USER_MOTOR_MAX_CURRENT          (6)  //峰值电流6A

#define USER_MOTOR_FLUX_EST_FREQ_Hz     (30.0)//

3.关键参数:

  • #define USER_IQ_FULL_SCALE_FREQ_Hz (500.0) //

Hz = RPM * poles / 120。GUI_QSG推荐设置500Hz,即使低速电机。

但这里就存在一个问题,低速电机反电势系数大,就会造成电机参数辨识完成后Flux*FULL_SCALE_FREQ_Hz > FULL_SCALE_VOLTAGE_V。界面报错显示。当然这样的报错究竟会有什么影响不得而知。假如想在GUI屏蔽该错误:对于低速电机建议降低FULL_SCALE_FREQ_Hz ,也可以适当提升FULL_SCALE_VOLTAGE_V的值。

  • PWM_FREQ_kHz 需要针对电机特性合理设置。对于高速低电感电机:45K-80K。普通电机:8K-30K。ISR、Current、EST和频率可按实际情况设置。

 

  • #define USER_MOTOR_FLUX_EST_FREQ_Hz     (30.0)//

       ~10% of rated max speed =  Hz * 10%

对于低速电机(最高转速在200rpm左右)假如按照上述公式配置,MOTOR_FLUX_EST_FREQ_Hz 的值将很小。通过实验证明FLUX_EST_FREQ_Hz 的值太低,将直接影响到参数辨识的精度。推荐设置在30Hz以上,即使是低速电机。

  • #define USER_R_OVER_L_EST_FREQ_Hz     (300.0)//

高速电机配置为300,普通电机可减小到100。

  • 当辨识的Lsd < 0.001mH时,建议使用proj_lab02c进行 Motor ID。

以上都是我实际调试经验总结,希望探讨~

 

  • 非常不错的总结。

    首先,合理的配置user.h中的参数,肯定会对参数识别或是对电机控制有影响。如电阻识别的电流,电感识别的电流,以及识别的时候电机要运转到哪个转速。通过实际电机调试,可以慢慢积累一些经验。

    其次,关于对flux比较大的情况,出现报错,是因为程序中初始化的时候增加了一些判断代码,去提醒客户是否在配置上有出错的地方。按这个例子,之所以出错,原因是因为你用的电机反电动势比较大,输入的电压又太小,所以程序担心电机带动不起来,所以就报错。

    ERIC

  • 非常感谢您的解答~对于InstaSPIN-FOC来说电流环和速度环都是基于常规PID算法,尤其是电流环参数都是依赖于电机参数辨识结果运算得出。所以觉得最好还是合理配置User.h文件,反复实验提高参数辨识的精度(对于使用者也只能够做这些了)。最后在对电流环和速度还PID参数进行微调,可以提高系统性能。这里还有个问题向您请教:TI的GUI Composer有两种方式:Standalone:就是配置好参数文件user.h,然后用CCS编译生成appProgram.out文件,放到GUI目录下,就可以运行GUI(自动下载appProgram.out)进行调试。inside of CCS :我的理解应该就是InstaSPIN-foc算法的在线调试。可以自己编程调用API函数。

    我的疑问:个人觉得使用InstantSPIN-foc算法进行项目开发,应该不会选择选择使用TI的GUI吧,而是自己编程调用API方式,针对项目需求还要完成附加功能算法的设计。也就是说对于项目开发(control design),应该是使用Inside of CCS的方式。而使用TI的GUI Composer 可以帮助初学者快速旋转电机和test our  board。

    我不知道我的上述理解是否有误,为什么TI GUI QSG上推荐使用Standalone 方式进行Control design,推荐使用Inside of CCS方式评估 InstaSPIN-foc。感觉正好与我的理解相反,希望您能帮忙解释一些。谢谢~

  • 控制板:LAUNCHXL-F28027F LaunchPad

    功率板:BOOSTXL-DRV8301B

    我在做参数辨识时,Ls每次测出来都不一样,变化比较大,Rs,Flux比较稳定,请问这种情况可能是哪里设置有问题?

  • 首先你的电机是什么电机,高速伺服电机还是低速的力矩电机还是别的什么,假如你的电机电感比较小,误差会比较大,电感这个东西本身辨识起来自感和互感都存在所以辨识起来精度都不会太高的。

    • 当辨识的Lsd < 0.001mH时,建议使用proj_lab02c进行 Motor ID。
  • 方便的话,可以把你的电机参数和user.h文件关键参数贴出来分析下~

  • #define USER_MOTOR_TYPE MOTOR_Type_Pm
    #define USER_MOTOR_NUM_POLE_PAIRS (7)
    #define USER_MOTOR_Rr (NULL)
    #define USER_MOTOR_Rs (1.679999828338623)
    #define USER_MOTOR_Ls_d (NULL)
    #define USER_MOTOR_Ls_q (NULL)
    #define USER_MOTOR_RATED_FLUX (0.01599999889731407)
    #define USER_MOTOR_MAGNETIZING_CURRENT (NULL)
    #define USER_MOTOR_RES_EST_CURRENT (0.5)
    #define USER_MOTOR_IND_EST_CURRENT (-0.5)
    #define USER_MOTOR_MAX_CURRENT (20.0)
    #define USER_MOTOR_FLUX_EST_FREQ_Hz (630.0)

     350kv 16v bldc电机

    转速提升至5400,后进入flux直接就是停转发出呲呲的声音,参数无法识别

    USER_SYSTEM_FREQ_MHz  60
    Maximum Bus Voltage 48
    Maximum Target RPM  5600
    USER_MOTOR_NUM_POLE_PAIRS  7
    USER_PWM_FREQ_kHz 30
    USER_NUM_PWM_TICKS_PER_ISR_TICK  3
    USER_NUM_ISR_TICKS_PER_CTRL_TICK  1
    USER_NUM_CTRL_TICKS_PER_CURRENT_TICK 1
    USER_NUM_CTRL_TICKS_PER_EST_TICK  1
    USER_ZEROSPEEDLIMIT 0.002

  • 为什么参考指南上这么说?和你说的是矛盾的,怎么解释?

  • 楼主您好,能否告诉我你这个文件在哪里可以下载呢

  • 附件。

    ERIC

  • 太好了,就是需要这个文档,感谢

  • 我的是无人机上面的电机,30V,10000rpm,用lab2c识别

    #define USER_MOTOR_Rs (0.1122601)
    #define USER_MOTOR_Ls_d (3.810458e-12)
    #define USER_MOTOR_Ls_q (USER_MOTOR_Ls_d)
    #define USER_MOTOR_RATED_FLUX (0.01633655)

    但是写入user.h,运行lab3a,gMotorVars.Flag_enableSys无法置1,

    应该是

    if(gMotorVars.UserErrorCode != USER_ErrorCode_NoError)
    {
    for(;;)
    {
    gMotorVars.Flag_enableSys = false;
    }
    }这一段有问题,说明我的参数有error,但是我不知道错在哪里。


  • 如果把这一段注释掉,电机不运行

  • #define USER_MOTOR_Rs (0.1122601)
    #define USER_MOTOR_Ls_d (3.810458e-12)
    #define USER_MOTOR_Ls_q (USER_MOTOR_Ls_d)
    #define USER_MOTOR_RATED_FLUX (0.01633655)

    但是写入user.h,运行lab3a,gMotorVars.Flag_enableSys无法置1,

    应该是

    if(gMotorVars.UserErrorCode != USER_ErrorCode_NoError)
    {
    for(;;)
    {
    gMotorVars.Flag_enableSys = false;
    }
    }这一段有问题,说明我的参数有error,但是我不知道错在哪里。

    ERIC:

    在expression窗口中查看变量gMotorVars.UserErrorCode, 看是什么错误,然后修正。

  • 您好,您的这个user.h在那个文件夹下面?您能说一下路径么?新手我一直找不到

  • 导入到CCS,你就找到了

  • 您说的“将生成的appProgram.out文件下存放在GUI目录下”这个“GUI目录”具体是那个文件夹里呢?因为我用的是motorware启动的gui不是那composer的gui