第一次修复
This commit is contained in:
@@ -31,6 +31,7 @@ typedef struct
|
||||
int64_t pv_pulse; // 当前的脉冲值
|
||||
int64_t sv_pulse; // 电脑端的设定脉冲值
|
||||
int64_t prev_pv_pulse;// 上一次脉冲值,用于检测过零点
|
||||
int32_t zero_counter; // 过零点步数计数器,每走一步+1或-1,到STEP_PER_LAP翻转PA6
|
||||
} MOTO_T;
|
||||
|
||||
extern MOTO_T g_tMoto;
|
||||
|
||||
@@ -55,6 +55,7 @@ void bsp_InitStepMoto(void)
|
||||
g_tMoto.pv_pulse = 0;
|
||||
g_tMoto.sv_pulse = 0;
|
||||
g_tMoto.prev_pv_pulse = 0;
|
||||
g_tMoto.zero_counter = 0;
|
||||
}
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
@@ -116,6 +117,7 @@ void MOTO_ZorePos(void)
|
||||
g_tMoto.sv_pulse = 0;
|
||||
g_tMoto.pv_pulse = 0;
|
||||
g_tMoto.prev_pv_pulse = 0;
|
||||
g_tMoto.zero_counter = 0;
|
||||
GPIO_PORT_ZERO_SIG->BRR = GPIO_PIN_ZERO_SIG; // 归零时 PA6 输出低
|
||||
BEEP_Start(1500, 5, 5, 3);
|
||||
}
|
||||
@@ -199,14 +201,21 @@ void MOTO_ISR(void)
|
||||
if (g_tMoto.pv_pulse < g_tMoto.sv_pulse)
|
||||
{
|
||||
g_tMoto.pv_pulse++;
|
||||
g_tMoto.zero_counter++;
|
||||
}
|
||||
else if (g_tMoto.pv_pulse > g_tMoto.sv_pulse)
|
||||
{
|
||||
g_tMoto.pv_pulse--;
|
||||
g_tMoto.zero_counter--;
|
||||
}
|
||||
// 检测过零点:pv_pulse 每跨越一个 STEP_PER_LAP(即每转一圈)翻转PA6
|
||||
if ((g_tMoto.prev_pv_pulse / STEP_PER_LAP) != (g_tMoto.pv_pulse / STEP_PER_LAP))
|
||||
if (g_tMoto.zero_counter >= STEP_PER_LAP)
|
||||
{
|
||||
g_tMoto.zero_counter -= STEP_PER_LAP;
|
||||
ZERO_SIG_TOGGLE();
|
||||
}
|
||||
else if (g_tMoto.zero_counter <= -STEP_PER_LAP)
|
||||
{
|
||||
g_tMoto.zero_counter += STEP_PER_LAP;
|
||||
ZERO_SIG_TOGGLE();
|
||||
}
|
||||
break;
|
||||
|
||||
Reference in New Issue
Block a user