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.
本人最近在评估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.关键参数:
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的值。
~10% of rated max speed = Hz * 10%
对于低速电机(最高转速在200rpm左右)假如按照上述公式配置,MOTOR_FLUX_EST_FREQ_Hz 的值将很小。通过实验证明FLUX_EST_FREQ_Hz 的值太低,将直接影响到参数辨识的精度。推荐设置在30Hz以上,即使是低速电机。
高速电机配置为300,普通电机可减小到100。
以上都是我实际调试经验总结,希望探讨~
非常感谢您的解答~对于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。感觉正好与我的理解相反,希望您能帮忙解释一些。谢谢~
首先你的电机是什么电机,高速伺服电机还是低速的力矩电机还是别的什么,假如你的电机电感比较小,误差会比较大,电感这个东西本身辨识起来自感和互感都存在所以辨识起来精度都不会太高的。
#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 |
我的是无人机上面的电机,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, 看是什么错误,然后修正。
您说的“将生成的appProgram.out文件下存放在GUI目录下”这个“GUI目录”具体是那个文件夹里呢?因为我用的是motorware启动的gui不是那composer的gui