主题中讨论的其他器件:controlSUITE、 MOTORWARE
您好!
我们在定制板上使用无传感器 Instaspin 运动软件来控制 BLDC 电机的速度、但我们无法使其旋转。 一旦我们输入速度命令、电机就会开始振动、几乎不会旋转。 估算器速度(EST_getSpeed_krpm)的读数是无效的、随机抽取正值和负值。
我们不是从头开始设计软件、而是使用以前 的传感 Instaspin 运动项目、该项目工作得非常完美。 我们所做的更改是禁用 QEP 模块并将 STPOSCONV 函数替换为 FAST 估算器函数。
例如、有传感器项目中的速度计算如下: _IQmpy (STPOSCONV_getVelocityFileded (stObj->posConvHandle)、_IQ (fSpeedKRPMPerPU))
无传感器速度的获得方式如下: _IQmpy (EST_getSpeed_krpm (obj->estHandle)、_IQ (fSpeedKRPMPerPU))
在这两种情况 下、fSpeedKRPMPerPU =((0.001 * 60.0 * gUserParams.iqFullScaleFreq_Hz)/ gUserParams.motor_numPolePairs)
由于控制不成功、我检查了传感工程中的估算器变量、并以正确的速度对其进行了比较。 我发现估算器测量 值不正确(EST_getSpeed_krpm 和 EST_getFm_PU)、但除此之外:
- EST_getSpeed_krpm 应该是每个单元的、但不是每个单元的。
- EST_getSpeed_krpm 和 EST_getFm_PU 都给出了一个值不正确、系数为1.4。 我是说、如果正确的值为1.5krpm、它们大约提供1.07kprm。
实际上、我应用了1.4因数校正、估算器值和传感值的结果几乎相同(并且正确)。 这些 是用于检查问题的变量。
gspeedKrpmPU = _IQmpy(EST_getSpeed_krpm(obj->estHandle), _IQ(1.4)); //Corrected gspeedFmPU = EST_getFm_pu(obj->estHandle); _iq pu_to_khz_sf = _IQ(gUserParams.iqFullScaleFreq_Hz/1000.0); _iq khz_to_krpm_sf = _IQ(60.0/gUserParams.motor_numPolePairs); _iq Mechanical_Freq_kHz = _IQmpy(gspeedFmPU,pu_to_khz_sf); gspeedKrpmFm = _IQmpy(_IQmpy(Mechanical_Freq_kHz,khz_to_krpm_sf), _IQ(1.4)); //Corrected
那么、我的第一个问题是、 如果文档中显示 EST_getSpeed_kRPM 不是标么值(实际上、它是实际速度)? 我认为这可能是一个代码错误、但这些值是直接从 ROM 中的估算器获取的、我们无法访问它。
我的第二个问题是、为什么在这两种情况下误差都是实际值的0.71倍? 同样、数据是从 ROM 中的函数获取的、因此我不知道会出现什么错误。
所有控制参数都是从有传感器项目中获取的、因此它们经过测试并正确。
是否有任何关于如何进行此操作的想法? 我们只需将估算器速度乘以1.4、但这不是真正的解决方案、其余的估算器值也可能是错误的。
提前感谢您、
此致
