aboutsummaryrefslogtreecommitdiff
path: root/AT91SAM7S256/Source/d_output.c
diff options
context:
space:
mode:
Diffstat (limited to 'AT91SAM7S256/Source/d_output.c')
-rw-r--r--AT91SAM7S256/Source/d_output.c17
1 files changed, 12 insertions, 5 deletions
diff --git a/AT91SAM7S256/Source/d_output.c b/AT91SAM7S256/Source/d_output.c
index c3fdeed..e6de984 100644
--- a/AT91SAM7S256/Source/d_output.c
+++ b/AT91SAM7S256/Source/d_output.c
@@ -673,6 +673,13 @@ void dOutputRampDownFunction(UBYTE MotorNr)
}
}
+UBYTE dOutputRegModeAtLimit(UBYTE RunStateAtLimit)
+{
+ if (RunStateAtLimit==MOTOR_RUN_STATE_HOLD)
+ return REGSTATE_REGULATED;
+ return REGSTATE_IDLE;
+}
+
/* Function used to tell whether the wanted position is obtained */
void dOutputTachoLimitControl(UBYTE MotorNr)
{
@@ -692,7 +699,7 @@ void dOutputTachoLimitControl(UBYTE MotorNr)
if ((pMD->CurrentCaptureCount >= pMD->MotorTachoCountToRun))
{
pMD->MotorRunState = pMD->RunStateAtLimit;
- pMD->RegulationMode = REGSTATE_IDLE;
+ pMD->RegulationMode = dOutputRegModeAtLimit(pMD->RunStateAtLimit);
}
}
else
@@ -702,7 +709,7 @@ void dOutputTachoLimitControl(UBYTE MotorNr)
if (pMD->CurrentCaptureCount <= pMD->MotorTachoCountToRun)
{
pMD->MotorRunState = pMD->RunStateAtLimit;
- pMD->RegulationMode = REGSTATE_IDLE;
+ pMD->RegulationMode = dOutputRegModeAtLimit(pMD->RunStateAtLimit);
}
}
}
@@ -1118,14 +1125,14 @@ void dOutputMotorReachedTachoLimit(UBYTE MotorNr)
pOne->MotorTargetSpeed = 0;
pOne->MotorActualSpeed = 0;
pOne->MotorRunState = pOne->RunStateAtLimit;
- pOne->RegulationMode = REGSTATE_IDLE;
+ pOne->RegulationMode = dOutputRegModeAtLimit(pOne->RunStateAtLimit);
if (MotorTwo != 0xFF) {
MOTORDATA * pTwo = &(MotorData[MotorTwo]);
pTwo->MotorSetSpeed = 0;
pTwo->MotorTargetSpeed = 0;
pTwo->MotorActualSpeed = 0;
pTwo->MotorRunState = pTwo->RunStateAtLimit;
- pTwo->RegulationMode = REGSTATE_IDLE;
+ pTwo->RegulationMode = dOutputRegModeAtLimit(pTwo->RunStateAtLimit);
}
}
else
@@ -1136,7 +1143,7 @@ void dOutputMotorReachedTachoLimit(UBYTE MotorNr)
pOne->MotorActualSpeed = 0;
}
pOne->MotorRunState = pOne->RunStateAtLimit;
- pOne->RegulationMode = REGSTATE_IDLE;
+ pOne->RegulationMode = dOutputRegModeAtLimit(pOne->RunStateAtLimit);
}
}