/**
* @file MOTOR_STEP_ATY.c
*
* @param Project DEVICE_GENERAL_ATY_LIB
*
* @author ATY
*
* @copyright
* - Copyright 2017 - 2025 MZ-ATY
* - This code follows:
* - MZ-ATY Various Contents Joint Statement -
*
* https://mengze.top/MZ-ATY_VCJS
* - CC 4.0 BY-NC-SA -
*
* https://creativecommons.org/licenses/by-nc-sa/4.0/
* - Your use will be deemed to have accepted the terms of this statement.
*
* @brief Familiar functions of SteppingMotor control
*
* @version
* - 1_01_221231 > ATY
* -# Preliminary version, first Release
* - 1_02_230408 > ATY
* -# Add State Machine and so
* - 1_03_230426 > ATY
* -# Change name "SteppingMotor_ATY" to "MOTOR_STEP_ATY"
********************************************************************************
*/
#ifndef __MOTOR_STEP_ATY_C
#define __MOTOR_STEP_ATY_C
#include "MOTOR_STEP_ATY.h"
/******************************* For user *************************************/
/******************************************************************************/
motorStep_t motorStep_t_Group[MOTOR_COUNT] =
{
#ifdef S_PARAM_C
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, S_PARAM_C},
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, S_PARAM_C},
#else
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
#endif
};
/**
* @brief set motor enable or disbale
* @param enable 0 for disable, 1 for enable
* @param channel motor channel
*/
void MotorSetAble(uint8_t enable, uint8_t channel)
{
motorStep_t_Group[channel].motorEn = enable;
#if (MOTOR_COUNT >= 1)
if(channel == 0){
if(enable){ GPIO_SET_L(MOTOR_EN_PORT_0, MOTOR_EN_PIN_0); }
else{ GPIO_SET_H(MOTOR_EN_PORT_0, MOTOR_EN_PIN_0); }
}
#endif
#if (MOTOR_COUNT >= 2)
if(channel == 1){
if(enable){ GPIO_SET_L(MOTOR_EN_PORT_1, MOTOR_EN_PIN_1); }
else{ GPIO_SET_H(MOTOR_EN_PORT_1, MOTOR_EN_PIN_1); }
}
#endif
#if (MOTOR_COUNT >= 3)
if(channel == 2){
if(enable){ GPIO_SET_L(MOTOR_EN_PORT_2, MOTOR_EN_PIN_2); }
else{ GPIO_SET_H(MOTOR_EN_PORT_2, MOTOR_EN_PIN_2); }
}
#endif
}
/**
* @brief set motor direction
* @param dir 0 for MOTOR_DIR_IN, 1 for MOTOR_DIR_OUT
* @param channel motor channel
*/
void MotorSetDirection(uint8_t dir, uint8_t channel)
{
motorStep_t_Group[channel].motorDir = dir;
#if (MOTOR_COUNT >= 1)
if(channel == 0){
if(dir){ GPIO_SET_H(MOTOR_DIR_PORT_0, MOTOR_DIR_PIN_0); }
else{ GPIO_SET_L(MOTOR_DIR_PORT_0, MOTOR_DIR_PIN_0); }
}
#endif
#if (MOTOR_COUNT >= 2)
if(channel == 1){
if(dir){ GPIO_SET_H(MOTOR_DIR_PORT_1, MOTOR_DIR_PIN_1); }
else{ GPIO_SET_L(MOTOR_DIR_PORT_1, MOTOR_DIR_PIN_1); }
}
#endif
#if (MOTOR_COUNT >= 3)
if(channel == 2){
if(dir){ GPIO_SET_H(MOTOR_DIR_PORT_2, MOTOR_DIR_PIN_2); }
else{ GPIO_SET_L(MOTOR_DIR_PORT_2, MOTOR_DIR_PIN_2); }
}
#endif
}
/**
* @brief set motor step pin voltage level
* @param level 0 for low, 1 for high
* @param channel motor channel
*/
void MotorSetStepLevel(uint8_t level, uint8_t channel)
{
motorStep_t_Group[channel].motorStepLevel = level;
#if (MOTOR_COUNT >= 1)
if(channel == 0){
if(level){ GPIO_SET_H(MOTOR_STEP_PORT_0, MOTOR_STEP_PIN_0); }
else{ GPIO_SET_L(MOTOR_STEP_PORT_0, MOTOR_STEP_PIN_0); }
}
#endif
#if (MOTOR_COUNT >= 2)
if(channel == 1){
if(level){ GPIO_SET_H(MOTOR_STEP_PORT_1, MOTOR_STEP_PIN_1); }
else{ GPIO_SET_L(MOTOR_STEP_PORT_1, MOTOR_STEP_PIN_1); }
}
#endif
#if (MOTOR_COUNT >= 3)
if(channel == 2){
if(level){ GPIO_SET_H(MOTOR_STEP_PORT_2, MOTOR_STEP_PIN_2); }
else{ GPIO_SET_L(MOTOR_STEP_PORT_2, MOTOR_STEP_PIN_2); }
}
#endif
}
/**
* @brief get TMC2209 diag pin voltage level
* @param channel motor channel
* @return uint8_t 0 for low, 1 fo high
*/
uint8_t MotorGetDiagLevel(uint8_t channel)
{
#if (MOTOR_COUNT >= 1)
if(channel == 0){ motorStep_t_Group[channel].motorDiag = GPIO_GET(MOTOR_DIAG_PORT_0, MOTOR_DIAG_PIN_0); }
#endif
#if (MOTOR_COUNT >= 2)
if(channel == 1){ motorStep_t_Group[channel].motorDiag = GPIO_GET(MOTOR_DIAG_PORT_1, MOTOR_DIAG_PIN_1); }
#endif
#if (MOTOR_COUNT >= 3)
if(channel == 2){ motorStep_t_Group[channel].motorDiag = GPIO_GET(MOTOR_DIAG_PORT_2, MOTOR_DIAG_PIN_2); }
#endif
return motorStep_t_Group[channel].motorDiag;
}
/**
* @brief start motor with direction set
* @param dir direction to move
* @param speed direction to move
* @param channel motor channel
*/
void MotorStart(uint8_t dir, uint32_t speed, uint8_t channel)
{
MotorSetDirection(dir, channel);
MotorSetAble(1, channel);
#if (MOTOR_COUNT >= 1)
if(channel == 0){ PwmFreqSet(speed, MOTOR_PWM_Channel_0); }
#endif
#if (MOTOR_COUNT >= 2)
if(channel == 1){ PwmFreqSet(speed, MOTOR_PWM_Channel_1); }
#endif
#if (MOTOR_COUNT >= 3)
if(channel == 2){ PwmFreqSet(speed, MOTOR_PWM_Channel_2); }
#endif
}
/**
* @brief start motor with only speed
* @param speed direction to move
* @param channel motor channel
*/
void MotorStartSpeed(uint32_t speed, uint8_t channel)
{
MotorSetAble(1, channel);
#if (MOTOR_COUNT >= 1)
if(channel == 0){ PwmFreqSet(speed, MOTOR_PWM_Channel_0); }
#endif
#if (MOTOR_COUNT >= 2)
if(channel == 1){ PwmFreqSet(speed, MOTOR_PWM_Channel_0); }
#endif
#if (MOTOR_COUNT >= 3)
if(channel == 2){ PwmFreqSet(speed, MOTOR_PWM_Channel_0); }
#endif
}
/**
* @brief stop motor
* @param channel motor channel
*/
void MotorStop(uint8_t channel)
{
// MOTOR_PARAM_SET(MOTOR_DIR_OUT, 0, 0, 0, 0, motorSetState);
if(motorStep_t_Group[channel].motorEn == 0)
return;
else{
#if (MOTOR_COUNT >= 1)
if(channel == 0){ PWM_Stop(0, MOTOR_PWM_Channel_0); }
#endif
#if (MOTOR_COUNT >= 2)
if(channel == 1){ PWM_Stop(0, MOTOR_PWM_Channel_0); }
#endif
#if (MOTOR_COUNT >= 3)
if(channel == 2){ PWM_Stop(0, MOTOR_PWM_Channel_0); }
#endif
MotorSetAble(0, channel);;
motorStep_t_Group[channel].motorSpeedCounter = 0;
motorStep_t_Group[channel].motorStopCounter = 0;
}
}
/**
* @brief process motor error
* @param channel motor channel
* @note put at 1ms cycle
*/
void MotorSelfCycle(uint8_t channel)
{
if(MotorGetDiagLevel(channel)){
if(motorStep_t_Group[channel].motorEn == 1)
MotorSetAble(0, channel);
if(motorStep_t_Group[channel].motorStopCounter >= 10000)
MotorSetAble(1, channel);;
}
}
/**
* @brief deal step motor state
* @note put at 1ms cycle;
* set motorSetState = 4 to change motor dir with speed no change
* set motorSetState = 3 to start motor directly, motorSoftSteps need to be 0
* set motorSetState = 2 to strat motor with soft, motorDir/motorSoftSpeed/motorSpeed/motorSoftSteps/motorSteps need to be set
* set motorSetState = 0 to stop motor
* set motorSetState = 10 to scram motor
* when motorSetState = 5 means last cycle finished, set others to start a new cycle
* when motorSetState = 1 means motor running and state not changing
*/
void MotorStateMachine_Step_PWM(void)
{
uint8_t i = 0;
for(i = 0; i < MOTOR_COUNT; i++){
if(motorStep_t_Group[i].motorSoftSpeed < motorStep_t_Group[i].motorSpeed)
motorStep_t_Group[i].motorSoftSpeed = motorStep_t_Group[i].motorSpeed;
if(motorStep_t_Group[i].motorSetState == 4){
motorStep_t_Group[i].motorStopCounter = 0;
motorStep_t_Group[i].motorStepCounter = 0;
motorStep_t_Group[i].motorSetState = 2;
motorStep_t_Group[i].motorDir = !motorStep_t_Group[i].motorDir;
}
else if(motorStep_t_Group[i].motorSetState == 3){
motorStep_t_Group[i].motorStepCounter = motorStep_t_Group[i].motorSoftSteps;
MotorStart(motorStep_t_Group[i].motorDir, motorStep_t_Group[i].motorSpeed, i);
motorStep_t_Group[i].motorSetState = 1;
}
else if(motorStep_t_Group[i].motorSetState == 2){
motorStep_t_Group[i].motorStepCounter = 0;
MotorStart(motorStep_t_Group[i].motorDir, motorStep_t_Group[i].motorSoftSpeed, i);
motorStep_t_Group[i].motorSetState = 1;
}
else if(motorStep_t_Group[i].motorSetState == 1){
if(motorStep_t_Group[i].motorStepCounter < motorStep_t_Group[i].motorSoftSteps){
#if defined (Motor_StartLine_T)
motorStep_t_Group[i].speedIncreaseStep = ((float)(motorStep_t_Group[i].motorSoftSpeed - motorStep_t_Group[i].motorSpeed) / (float)motorStep_t_Group[i].motorSoftSteps); // at 1ms cycle
MotorStart(motorStep_t_Group[i].motorDir,
motorStep_t_Group[i].motorSpeed < (motorStep_t_Group[i].motorSoftSpeed - (motorStep_t_Group[i].speedIncreaseStep * motorStep_t_Group[i].motorStepCounter)) ?
(motorStep_t_Group[i].motorSoftSpeed - (motorStep_t_Group[i].speedIncreaseStep * motorStep_t_Group[i].motorStepCounter)) : motorStep_t_Group[i].motorSpeed, i);
#elif defined (Motor_StartLine_S)
// S line: y = ax^3 + cx, a in 0-1, c >= 0, lower c cause lower increase at start or end, c for users
motorStep_t_Group[i].S_paramA = (((float)(motorStep_t_Group[i].motorSoftSpeed - motorStep_t_Group[i].motorSpeed) / 2)
- (motorStep_t_Group[i].S_paramC * (float)((float)motorStep_t_Group[i].motorSoftSteps / 2) * (float)((float)motorStep_t_Group[i].motorSoftSteps / 2) / 2))
/ ((float)((float)motorStep_t_Group[i].motorSoftSteps / 2) * (float)((float)motorStep_t_Group[i].motorSoftSteps / 2)
* (float)((float)motorStep_t_Group[i].motorSoftSteps / 2) * (float)((float)motorStep_t_Group[i].motorSoftSteps / 2)) * 4;
// mbG[27] = motorStep_t_Group[i].S_paramA * 10000000;
if(motorStep_t_Group[i].motorStepCounter < (motorStep_t_Group[i].motorSoftSteps / 2))
motorStep_t_Group[i].speedIncreaseStep =
((float)(motorStep_t_Group[i].S_paramA * motorStep_t_Group[i].motorStepCounter * motorStep_t_Group[i].motorStepCounter * motorStep_t_Group[i].motorStepCounter * motorStep_t_Group[i].motorStepCounter) / 4)
+ ((float)(motorStep_t_Group[i].S_paramC * motorStep_t_Group[i].motorStepCounter * motorStep_t_Group[i].motorStepCounter) / 2);
// (motorStep_t_Group[i].S_paramA * motorStep_t_Group[i].motorStepCounter * motorStep_t_Group[i].motorStepCounter * motorStep_t_Group[i].motorStepCounter)
// + (motorStep_t_Group[i].S_paramC * motorStep_t_Group[i].motorStepCounter);
else
motorStep_t_Group[i].speedIncreaseStep =
(float)((float)(motorStep_t_Group[i].motorSoftSpeed - motorStep_t_Group[i].motorSpeed) / 2)
+ ((float)(motorStep_t_Group[i].S_paramA * motorStep_t_Group[i].motorSoftSteps * motorStep_t_Group[i].motorSoftSteps * motorStep_t_Group[i].motorSoftSteps * motorStep_t_Group[i].motorSoftSteps) / 64)
+ ((float)(motorStep_t_Group[i].S_paramC * motorStep_t_Group[i].motorSoftSteps * motorStep_t_Group[i].motorSoftSteps) / 8)
- ((float)(motorStep_t_Group[i].S_paramA * (motorStep_t_Group[i].motorSoftSteps - motorStep_t_Group[i].motorStepCounter) * (motorStep_t_Group[i].motorSoftSteps - motorStep_t_Group[i].motorStepCounter)
* (motorStep_t_Group[i].motorSoftSteps - motorStep_t_Group[i].motorStepCounter) * (motorStep_t_Group[i].motorSoftSteps - motorStep_t_Group[i].motorStepCounter)) / 4)
- ((float)(motorStep_t_Group[i].S_paramC * (motorStep_t_Group[i].motorSoftSteps - motorStep_t_Group[i].motorStepCounter) * (motorStep_t_Group[i].motorSoftSteps - motorStep_t_Group[i].motorStepCounter)) / 2);
// 0
// - (motorStep_t_Group[i].S_paramA * (float)((float)motorStep_t_Group[i].motorStepCounter - (float)motorStep_t_Group[i].motorSoftSteps)
// * (float)((float)motorStep_t_Group[i].motorStepCounter - (float)motorStep_t_Group[i].motorSoftSteps)
// * (float)((float)motorStep_t_Group[i].motorStepCounter - (float)motorStep_t_Group[i].motorSoftSteps))
// - (motorStep_t_Group[i].S_paramC * (float)((float)motorStep_t_Group[i].motorStepCounter - (float)motorStep_t_Group[i].motorSoftSteps));
MotorStart(motorStep_t_Group[i].motorDir,
motorStep_t_Group[i].motorSpeed < (motorStep_t_Group[i].motorSoftSpeed - motorStep_t_Group[i].speedIncreaseStep) ?
(motorStep_t_Group[i].motorSoftSpeed - motorStep_t_Group[i].speedIncreaseStep) : motorStep_t_Group[i].motorSpeed, i);
#else
#endif
}
if(motorStep_t_Group[i].motorStepCounter == motorStep_t_Group[i].motorSoftSteps)
motorStep_t_Group[i].motorSetState = 3;
else if(motorStep_t_Group[i].motorStepCounter == (motorStep_t_Group[i].motorSoftSteps + motorStep_t_Group[i].motorSteps))
motorStep_t_Group[i].motorSetState = 5;
}
else if(motorStep_t_Group[i].motorSetState == 10){
MotorStop(i);
motorStep_t_Group[i].motorSetState = 0;
}
else{ MotorStop(i); } // 5 0
if(motorStep_t_Group[i].motorEn == 0){
motorStep_t_Group[i].motorStepCounter = 0;
motorStep_t_Group[i].motorStopCounter++;
}
else{
motorStep_t_Group[i].motorStepCounter++;
motorStep_t_Group[i].motorStopCounter = 0;
}
}
}
uint8_t motorLastState[2] = {0};
/**
* @brief deal step motor state
* @note put at 1us cycle;
* set motorSetState = 4 to change motor dir with speed no change
* set motorSetState = 3 to start motor directly, motorSoftSteps need to be 0
* set motorSetState = 2 to strat motor with soft, motorDir/motorSoftSpeed/motorSpeed/motorSoftSteps/motorSteps need to be set
* set motorSetState = 0 to stop motor
* set motorSetState = 10 to scram motor
* when motorSetState = 5 means last cycle finished, set others to start a new cycle
* when motorSetState = 1 means motor running and state not changing
*/
void MotorStateMachine_Step(void)
{
uint8_t i = 0;
for(i = 0; i < MOTOR_COUNT; i++){
if(motorStep_t_Group[i].motorSoftSpeed < motorStep_t_Group[i].motorSpeed)
motorStep_t_Group[i].motorSoftSpeed = motorStep_t_Group[i].motorSpeed;
if(motorStep_t_Group[i].motorSetState == 4){
motorStep_t_Group[i].motorSpeedCounter = 0;
motorStep_t_Group[i].motorStepCounter = 0;
motorStep_t_Group[i].motorSetState = 2;
motorStep_t_Group[i].motorDir = !motorStep_t_Group[i].motorDir;
}
else if(motorStep_t_Group[i].motorSetState == 3){
motorStep_t_Group[i].motorEn = 1;
motorStep_t_Group[i].motorSpeedCounter = 0;
motorStep_t_Group[i].motorStepCounter = 0;
motorLastState[i] = 3;
motorStep_t_Group[i].motorSetState = 1;
}
else if(motorStep_t_Group[i].motorSetState == 2){
motorStep_t_Group[i].motorEn = 1;
motorStep_t_Group[i].motorSpeedCounter = 0;
motorStep_t_Group[i].motorStepCounter = 0;
motorLastState[i] = 2;
motorStep_t_Group[i].motorSetState = 1;
}
else if(motorStep_t_Group[i].motorSetState == 1){
}
else if(motorStep_t_Group[i].motorSetState == 10){
motorStep_t_Group[i].motorEn = 0;
motorStep_t_Group[i].motorSetState = 0;
}
else{ // 5 0
motorStep_t_Group[i].motorEn = 0;
motorStep_t_Group[i].motorSetState = 0;
}
// if(motorStep_t_Group[i].motorSetState == 4){
// motorStep_t_Group[i].motorSpeedCounter = 0;
// motorStep_t_Group[i].motorStopCounter = 0;
// motorStep_t_Group[i].motorSetState = 2;
// motorStep_t_Group[i].motorDir = !motorStep_t_Group[i].motorDir;
// }
// else if(motorStep_t_Group[i].motorSetState == 3){
// motorStep_t_Group[i].motorSpeedCounter = motorStep_t_Group[i].motorSoftSteps;
// MotorStart(motorStep_t_Group[i].motorDir, motorStep_t_Group[i].motorSpeed, i);
// motorStep_t_Group[i].motorSetState = 1;
// }
// else if(motorStep_t_Group[i].motorSetState == 2){
// motorStep_t_Group[i].motorSpeedCounter = 0;
// MotorStart(motorStep_t_Group[i].motorDir, motorStep_t_Group[i].motorSoftSpeed, i);
// motorStep_t_Group[i].motorSetState = 1;
// }
// else if(motorStep_t_Group[i].motorSetState == 1){
// if(motorStep_t_Group[i].motorSpeedCounter < motorStep_t_Group[i].motorSoftSteps){
// #if defined (Motor_StartLine_T)
// motorStep_t_Group[i].speedIncreaseStep = ((float)(motorStep_t_Group[i].motorSoftSpeed - motorStep_t_Group[i].motorSpeed) / (float)motorStep_t_Group[i].motorSoftSteps); // at 1ms cycle
// MotorStart(motorStep_t_Group[i].motorDir,
// motorStep_t_Group[i].motorSpeed < (motorStep_t_Group[i].motorSoftSpeed - (motorStep_t_Group[i].speedIncreaseStep * motorStep_t_Group[i].motorSpeedCounter)) ?
// (motorStep_t_Group[i].motorSoftSpeed - (motorStep_t_Group[i].speedIncreaseStep * motorStep_t_Group[i].motorSpeedCounter)) : motorStep_t_Group[i].motorSpeed, i);
// #elif defined (Motor_StartLine_S)
// // S line: y = ax^3 + cx, a in 0-1, c >= 0, lower c cause lower increase at start or end, c for users
// motorStep_t_Group[i].S_paramA = (((float)(motorStep_t_Group[i].motorSoftSpeed - motorStep_t_Group[i].motorSpeed) / 2)
// - (motorStep_t_Group[i].S_paramC * (float)((float)motorStep_t_Group[i].motorSoftSteps / 2) * (float)((float)motorStep_t_Group[i].motorSoftSteps / 2) / 2))
// / ((float)((float)motorStep_t_Group[i].motorSoftSteps / 2) * (float)((float)motorStep_t_Group[i].motorSoftSteps / 2)
// * (float)((float)motorStep_t_Group[i].motorSoftSteps / 2) * (float)((float)motorStep_t_Group[i].motorSoftSteps / 2)) * 4;
// // mbG[27] = motorStep_t_Group[i].S_paramA * 10000000;
// if(motorStep_t_Group[i].motorSpeedCounter < (motorStep_t_Group[i].motorSoftSteps / 2))
// motorStep_t_Group[i].speedIncreaseStep =
// ((float)(motorStep_t_Group[i].S_paramA * motorStep_t_Group[i].motorSpeedCounter * motorStep_t_Group[i].motorSpeedCounter * motorStep_t_Group[i].motorSpeedCounter * motorStep_t_Group[i].motorSpeedCounter) / 4)
// + ((float)(motorStep_t_Group[i].S_paramC * motorStep_t_Group[i].motorSpeedCounter * motorStep_t_Group[i].motorSpeedCounter) / 2);
// // (motorStep_t_Group[i].S_paramA * motorStep_t_Group[i].motorSpeedCounter * motorStep_t_Group[i].motorSpeedCounter * motorStep_t_Group[i].motorSpeedCounter)
// // + (motorStep_t_Group[i].S_paramC * motorStep_t_Group[i].motorSpeedCounter);
// else
// motorStep_t_Group[i].speedIncreaseStep =
// (float)((float)(motorStep_t_Group[i].motorSoftSpeed - motorStep_t_Group[i].motorSpeed) / 2)
// + ((float)(motorStep_t_Group[i].S_paramA * motorStep_t_Group[i].motorSoftSteps * motorStep_t_Group[i].motorSoftSteps * motorStep_t_Group[i].motorSoftSteps * motorStep_t_Group[i].motorSoftSteps) / 64)
// + ((float)(motorStep_t_Group[i].S_paramC * motorStep_t_Group[i].motorSoftSteps * motorStep_t_Group[i].motorSoftSteps) / 8)
// - ((float)(motorStep_t_Group[i].S_paramA * (motorStep_t_Group[i].motorSoftSteps - motorStep_t_Group[i].motorSpeedCounter) * (motorStep_t_Group[i].motorSoftSteps - motorStep_t_Group[i].motorSpeedCounter)
// * (motorStep_t_Group[i].motorSoftSteps - motorStep_t_Group[i].motorSpeedCounter) * (motorStep_t_Group[i].motorSoftSteps - motorStep_t_Group[i].motorSpeedCounter)) / 4)
// - ((float)(motorStep_t_Group[i].S_paramC * (motorStep_t_Group[i].motorSoftSteps - motorStep_t_Group[i].motorSpeedCounter) * (motorStep_t_Group[i].motorSoftSteps - motorStep_t_Group[i].motorSpeedCounter)) / 2);
// // 0
// // - (motorStep_t_Group[i].S_paramA * (float)((float)motorStep_t_Group[i].motorSpeedCounter - (float)motorStep_t_Group[i].motorSoftSteps)
// // * (float)((float)motorStep_t_Group[i].motorSpeedCounter - (float)motorStep_t_Group[i].motorSoftSteps)
// // * (float)((float)motorStep_t_Group[i].motorSpeedCounter - (float)motorStep_t_Group[i].motorSoftSteps))
// // - (motorStep_t_Group[i].S_paramC * (float)((float)motorStep_t_Group[i].motorSpeedCounter - (float)motorStep_t_Group[i].motorSoftSteps));
// MotorStart(motorStep_t_Group[i].motorDir,
// motorStep_t_Group[i].motorSpeed < (motorStep_t_Group[i].motorSoftSpeed - motorStep_t_Group[i].speedIncreaseStep) ?
// (motorStep_t_Group[i].motorSoftSpeed - motorStep_t_Group[i].speedIncreaseStep) : motorStep_t_Group[i].motorSpeed, i);
// #else
// #endif
// }
// if(motorStep_t_Group[i].motorSpeedCounter == motorStep_t_Group[i].motorSoftSteps)
// motorStep_t_Group[i].motorSetState = 3;
// else if(motorStep_t_Group[i].motorSpeedCounter == (motorStep_t_Group[i].motorSoftSteps + motorStep_t_Group[i].motorSteps))
// motorStep_t_Group[i].motorSetState = 5;
// }
// else if(motorStep_t_Group[i].motorSetState == 10){
// MotorStop(i);
// motorStep_t_Group[i].motorSetState = 0;
// }
// else{ MotorStop(i); } // 5 0
// if(motorStep_t_Group[i].motorEn == 0){
// motorStep_t_Group[i].motorSpeedCounter = 0;
// motorStep_t_Group[i].motorStopCounter++;
// }
// else{
// motorStep_t_Group[i].motorSpeedCounter--;
// if(motorStep_t_Group[i].motorSpeedCounter == 0){
// motorStep_t_Group[i].motorSpeedCounter = 0;
// motorStep_t_Group[i].motorStepCounter++;
// }
// motorStep_t_Group[i].motorStopCounter = 0;
// }
if(motorStep_t_Group[i].motorEn){
motorStep_t_Group[i].motorStopCounter = 0;
MotorSetDirection(motorStep_t_Group[i].motorDir, i);
MotorSetAble(motorStep_t_Group[i].motorEn, i);
motorStep_t_Group[i].motorSpeedCounter++;
mbP_HSTV = motorStep_t_Group[i].motorSpeedCounter;
if((motorLastState[i] == 3 && motorStep_t_Group[i].motorSpeedCounter >= motorStep_t_Group[i].motorSpeed)
|| (motorLastState[i] == 2 && motorStep_t_Group[i].motorSpeedCounter >= motorStep_t_Group[i].motorSoftSpeed)){
motorStep_t_Group[i].motorSpeedCounter = 0;
motorStep_t_Group[i].motorStepLevel = !motorStep_t_Group[i].motorStepLevel;
MotorSetStepLevel(motorStep_t_Group[i].motorStepLevel, i);
mbP_HSHS = motorStep_t_Group[i].motorStepLevel;
mbP_HSTW = motorStep_t_Group[i].motorStepCounter;
if(motorStep_t_Group[i].motorStepLevel == STATIC_STEP_LEVEL){
motorStep_t_Group[i].motorStepCounter++;
if((motorLastState[i] == 3 && motorStep_t_Group[i].motorStepCounter >= motorStep_t_Group[i].motorSteps)
|| (motorLastState[i] == 2 && motorStep_t_Group[i].motorStepCounter >= motorStep_t_Group[i].motorSoftSteps)){
motorStep_t_Group[i].motorSpeedCounter = 0;
motorStep_t_Group[i].motorStepCounter = 0;
motorStep_t_Group[i].motorStepLevel = STATIC_STEP_LEVEL;
MotorSetStepLevel(motorStep_t_Group[i].motorStepLevel, i);
// motorStep_t_Group[i].motorSpeedCounter = 0;
if(motorLastState[i] == 3)
motorStep_t_Group[i].motorSetState = 5;
else if(motorLastState[i] == 2)
motorStep_t_Group[i].motorSetState = 3;
}
}
}
}
else{
motorStep_t_Group[i].motorSpeedCounter = 0;
motorStep_t_Group[i].motorStepCounter = 0;
motorStep_t_Group[i].motorStopCounter++;
motorStep_t_Group[i].motorStepLevel = STATIC_STEP_LEVEL;
MotorSetStepLevel(motorStep_t_Group[i].motorStepLevel, i);
MotorSetAble(motorStep_t_Group[i].motorEn, i);
}
}
}
#endif /* __MOTOR_STEP_ATY_C */
/******************************** End Of File *********************************/