rusefi-1/firmware/hw_layer/stepper_dual_hbridge.cpp

55 lines
890 B
C++

#include "efifeatures.h"
#if !EFI_UNIT_TEST
#include "stepper.h"
#include "dc_motor.h"
static const int8_t phaseA[] =
{
1,
1,
-1,
-1
};
static const int8_t phaseB[] =
{
-1,
1,
1,
-1
};
void DualHBridgeStepper::initialize(DcMotor* motorPhaseA, DcMotor* motorPhaseB, float reactionTime)
{
setReactionTime(reactionTime);
m_motorPhaseA = motorPhaseA;
m_motorPhaseB = motorPhaseB;
}
bool DualHBridgeStepper::step(bool positive) {
// Check that we've been initialized
if (!m_motorPhaseA || !m_motorPhaseB) {
return false;
}
// step phase, wrapping
if (positive) {
m_phase = (m_phase + 1) & 0x03;
} else {
m_phase = (m_phase - 1) & 0x03;
}
// Set phases according to the table
m_motorPhaseA->set(phaseA[m_phase]);
m_motorPhaseB->set(phaseB[m_phase]);
pause();
return true;
}
#endif