主题中讨论的其他器件:MOTORWARE、 TMS320F28051、
背景:我正在尝试使用 TI 提供的不同无传感器控制方案、方法是将它们整合到有传感器 PMSM FOC 项目中。 尤其是滑动模式观察器(SMO)和 instaSPIN。 我们有自己的控制环路并使用各种 motorware 宏。 因此、对于 instaSPIN、lab11a 中使用的最小实施方案最适合我们。 即仅使用 FAST 观测器。
我正在尝试让 FAST 观测器提供角度测量。 我是否在初始化或利用率方面缺少某些内容? 我遇到的具体问题如下:
- EST_getState (estHandle)正在返回0x039C (924)、以下函数不影响其返回值
- EST_updateState (estHandle、0);
- EST_setupEstIdleState (estHandle);
- EST_run (estHandle) 和随附 的 EST_getAngle_pu (estHandle) 不会返回有效信号。 我得到的值介于 IQ(-1.0)和 IQ(1.0)之间,但值应该是 IQ(0.0)到 IQ(1.0)。 考虑到以上问题,我并不感到意外。 下图显示了编码器和观测器在600rpm 电机转速下以800MHz 采样时的电气 θ 对比情况。 无论速度如何、FAST 观测器信号都是相似的。
作为参考、这里是我以相同的比例传递到 EST_run ()的 pu 电压和电流 alpha/betas。 当然、我还有一些噪音问题有待解决、但我怀疑这是问题所在。
我们的旧设计使用 TMS320F28051 MCU。 TMS320F28054M MCU 来自不同的电路板、并通过手工焊接到我们的电机驱动板上。 安全 ROM 部分是否可能损坏? 有没有办法让我检查?
我以 instaSPIN 实验11a 为例。 但是、由于 F2805xF/M 不存在11a 示例、我选择了使用相同 instaSPIN 版本:1.7的 F2802xF 示例。 当然、我使用的是5倍地址和链接器信息。 与 实验10e 中生成的.map 文件相比,我已经验证了我的映射文件的 EST_*符号和地址是否匹配。 (我选择10e 是因为它使用了一些相同的函数并使用5x MCU)
下面是一些相关的代码片段:
#define USER_IQ_FULL_SCALE_VOLTAGE_V (1500) //~ @3x ADC 电压满量程#define USER_ADC_FULL_SCALE_VOLTAGE_V (422.623)// 3.3V *((1.33kOams + 169kOams)/1.33kOams)#define USER_IQ_FULL_SCALE_CURRENT_A (68.1818)// 10.0示例 for drv8312_HVd + 18kOams (rv18)/v/#define USER_RAME_RACK_REV18kHz )/#define UFF_RACK_REV18kHz /#define CURRENT_RACK_MODE_RATION/#v18 (v18)/v18 (r18n_RAT_RAV18kHz //电压 Clarke 宏(偏移已被取出) clarkeFastV.as =_IQmpy (_IQ12toIQ (ADCRESULTREG[UV_SNS_AD])、_IQ (USER_VOLTAGE_SF); clarkeFastV.B =_IQmpy (_IQSN12toIQ (ADCRESULTREG[V_VOLT_SF_AD_V])、_CLKESFAV_VR_AD_US_V_AD_AD_V[V] (_FAV_V_V_FAV])、_FAV_ADCREF_AD_V_AD_V_V_V_V_AD_V_AD _iq (USER_VOLTAGE_SF); CLARKE2_MACRO (clarkeFastV) //当前 Clarke 宏 clarkeFastI.as =_IQult (_IQ12toIQ (AdcResult.IQAD_RAW)-offsetA、_IQ (USER_CURRENT_SF)); clarkeFastI.Iq =_IQ12mpy (_Iq (_Adcron_Iq );_Resmpy_Iq (_Iq (_Iq1) _iq (USER_CURRENT_SF)); CLARKE2_MACRO (clarkeFastI) //将 alpha/Betas 放入快速调用 MATH_vec2 voltVec、curVec 的格式; voltVec.value[0]= clarkeFastV.Alpha; clarkeVec.value[1]= volkeV.Beta;voltFastv.Beta = 0[volkeVec.alec;volv.step.alec = clarkeVec.alec;volv.alec = clarkeVec.step curVec.value[1]= clarkeFastI.Beta; EST_run (estHandle、&curVec、&voltVec、DCBus_pu、 speed_pu); //... } #define USER_EST_Handle_address 0x8000// EST 结构的 RAM 地址(特定于处理器) void SMO_init (void) { estHandle = EST_init (((void*) USER_EST_Handle_address、0x200); USER_setParams (&userParams); EST_setEstParams (estHandle、&userParams); EST_setupEstIdleState (estHandle); EST_setFlag_enableRsRecalc (estHandle、false);//禁用定子电阻计算 EST_setFlag_enableRsOnLine (estHandle、false); EST_setFlag_updateRs (estHandle、false); 0.0_setAngle_pu (estHandle、Iq);//将角度初始化为0 EST_updateState (estHandle、0); USER_checkForErrors (&userParams); }