Other Parts Discussed in Thread: TMS320F28379D
部件号: TMS320F28379D
Hello Forms、
测试用例:使用 512 PPR 的绝对编码器 (AS5147 - A、B、I 和 PWM)、 以不同的转速旋转电机时、如下所示。1.
问题:集是速度、计算速度正好是设定速度的一半。
信息:
与编码器读取外设和速度计算相关、如下所示。
==================================
编码器的初始化
==================================
void eQEP-1_init (){
//
//设置 eQEP 模块输入信号的极性。
//
eQEP-setInputPolarity (eQEP_1_BASE、false、false、false、false、false);
//
//配置 eQEP 模块的正交解码器单元。
//
eQEP-setDecoderConfig (eQEP_1_BASE、(eQEP_CONFIG_正 交| eQEP_CONFIG_2X_resolution | eQEP_CONFIG_NO_SWAP | eQEP_CONFIG_IGATE_DISABLE));
//
//设置 eQEP 模块的仿真模式。
//
eQEP-setEmulationMode (eQEP-1_BASE、eQEP-EMULATIONMODE_RUFREE);
//
//配置 eQEP 模块位置计数器单元。
//
eQEP-setPositionCounterConfig (eQEP_1_BASE、eQEP_POSITION_RESET_MAX_POS、2047U);
//
//设置当前编码器位置。
//
eQEP-setPosition (eQEP-1_BASE、0U);
//
//禁用 eQEP 模块单元计时器。
//
eQEP-disableUnitTimer (eQEP-1_BASE);
//
//禁用 eQEP 模块看门狗计时器。
//
eQEP-disableWatchdog (eQEP-1_base);
//
//配置可以锁存位置计数的正交模式。
//
eQEP_setLatchMode (eQEP_1_BASE、(eQEP_LATCH_UNIT_TIME_OUT|eQEP_LATCH_RISING_SELECTION|eQEP_LATCH_RISING_INDEX);
//
//配置位置计数器初始化模式。
//
eQEP-setPositionInitMode (eQEP_1_BASE、(eQEP_INIT_RISING_SELECTION));
//
//设置编码器位置计数器的软件初始化。
//
eQEP-setSWPositionInit (eQEP-1_base、false);
//
//设置编码器位置计数器的初始值。
//
eQEP-setInitialPosition (eQEP-1_BASE、0U);
//
//启用 eQEP 模块。
//
eQEP-enableModule (eQEP_1_BASE);
//
//配置 eQEP 模块边沿捕获单元。
//
eQEP-setCaptureConfig (eQEP_1_BASE、eQEP_CAPTURE_CLK_DIV_8、eQEP_UNIT_POS_Evnt_DIV_128);
//
//启用 eQEP 模块边沿捕获单元。
//
eQEP_enableCapture (eQEP_1_BASE);
//
//配置 eQEP 模块位置比较单元。
//
eQEP-setCompareConfig (eQEP_1_BASE、(eQEP_COMPARE_NO_SYNC_OUT | eQEP_COMPARE_NO_SHADOW)、0U、0U);
//
//启用 eQEP 模块位置比较单元。
//
eQEP_enableCompare (eQEP_1_BASE);
}
==================================
使用以下函数计算速度
==================================
Void SpeedFinder (void)
{
uint16_t Overs Flow_Flag =(eQEP_getStatus (eQEP_1_BASE));
if (((覆盖 Flow_Flag & EQEP_STS_CAP_OVRFLW_ERROR)!=0)
{
TotalTicks +=65535;
eQEP-clearStatus (eQEP-1_BASE、eQEP-STS_CAP_OVRFLW_ERROR);
}
if (((覆盖 Flow_Flag & EQEP_STS_UNIT_POS_Evnt)!=0)
{
eQEP-clearStatus (eQEP-1_BASE、eQEP-STS_UNIT_POS_Evnt);
uint16_t QCPRD = eQEP_getCapturePeriod (eQEP_1_BASE);
FullCountTicks = TotalTicks + QCRRD;
IF(FullCountTicks >0L)
{
RPS =(float) 781250/FullCountTicks;(781250 =((UPPs[128]*(SYSCLK[100.000,000]/CP[8]))/(CPR[2048]))
MECH_rpm =(浮动)RPS*60;
TotalTicks = 0;
FullCountTicks = 0;
}
暴露
{
RPS = 0;
}
}
}
提前感谢、
Soumitri Kumar
