您好!
对于我们的系统、在我们实际需要获取第一个索引之前、电机最初可能会"跳转"(并可能触发"第一个索引"事件)。 也就是说、我们需要在"消隐周期"之后添加第一个索引。
我们使用此代码尝试重新启用触发:
eQEP_clearStatus (MOTOR_QEP_BASE、eQEP_STS_1ST_IDX_FLAG);
但它似乎只是清除状态位、而不是真正重新布设系统以锁定下一个实际的索引脉冲。
是否有办法使其完全清除第一个索引状态、以便重新设置下一个索引脉冲上的位?
下面是其余的初始化代码(从.syscfg 创建):
void eQEP_init(){
//MOTOR_QEP 初始化
eQEP_SourceSelect SOURCE_MOTOR_QEP =
{
eQEP_SOURCE _DEVICE_PIN、 // eQEPA 源
eQEP_SOURCE _DEVICE_PIN、 // eQEPB 源
eQEP_SOURC_DEVICE_PIN、 // eQEP 索引源
};
//选择 eQEPA/B/I 信号源
eQEP_selectSource (MOTOR_QEP_BASE、SOURGE_MOTOR_QEP);
//设置 eQEP 模块的选通输入源。
eQEP_setStrobeSource (MOTOR_QEP_BASE、eQEP_STROBE_From_GPIO);
//设置 eQEP 模块输入信号的极性。
eQEP_setInputPolarity (MOTOR_QEP_BASE、false、false、true、false);
//配置 eQEP 模块的正交解码器单元。
eQEP_setDecoderConfig (MOTOR_QEP_BASE、(eQEP_CONFIG_QUICUCATE | eQEP_CONFIG_2X_RESULATION | eQEP_CONFIG_NO_SWAP | eQEP_CONFIG_IGATE_DISABLE));
//设置 eQEP 模块的仿真模式。
eQEP_setEmulationMode (MOTOR_QEP_BASE、eQEP_EMULATIONMODE_RUNFREE);
//配置 eQEP 模块位置计数器单元。
eQEP_setPositionCounterConfig (MOTOR_QEP_BASE、eQEP_POSITION_RESET_1ST_IDX、65535U);
//设置当前编码器位置。
eQEP_setPosition (MOTOR_QEP_BASE、0U);
//禁用 eQEP 模块单元计时器。
eQEP_disableUnitTimer (MOTOR_QEP_BASE);
//禁用 eQEP 模块看门狗计时器。
eQEP_disableWatchdog (MOTOR_QEP_BASE);
//配置可锁存位置计数的正交模式。
eQEP_setLatchMode (MOTOR_QEP_BASE、(eQEP_LATCH_CNT_READ_BY_CPU|eQEP_LATCH_RISE_STROBE | eQEP_LATCH_SW_ING_MARGER);
//设置正交模式适配器(QMA)模块模式。
eQEP_setQMAModuleMode (MOTOR_QEP_BASE、eQEP_QMA_MODE_BYPASS);
//在索引期间禁用方向更改
eQEP_disableDirectionChangeDuringIndex (MOTOR_QEP_BASE);
//配置位置计数器的初始化模式。
eQEP_setPositionInitMode (MOTOR_QEP_BASE、(eQEP_INIT_FALLING_INDEX));
//设置编码器位置计数器的软件初始化。
eQEP_setSWPositionInit (MOTOR_QEP_BASE、TRUE);
//设置编码器位置计数器的初始值。
eQEP_setInitialPosition (MOTOR_QEP_BASE、0U);
//启用 eQEP 模块。
eQEP_enableModule (MOTOR_QEP_BASE);
}
谢谢、
-Mike