| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511 |
- /**
- * @file MOTOR_STEP_ATY.c
- *
- * @param Project DEVICE_GENERAL_ATY_LIB
- *
- * @author ATY
- *
- * @copyright
- * - Copyright 2017 - 2026 MZ-ATY
- * - This code follows:
- * - MZ-ATY Various Contents Joint Statement -
- * <a href="https://mengze.top/MZ-ATY_VCJS">
- * https://mengze.top/MZ-ATY_VCJS</a>
- * - CC 4.0 BY-NC-SA -
- * <a href="https://creativecommons.org/licenses/by-nc-sa/4.0/">
- * https://creativecommons.org/licenses/by-nc-sa/4.0/</a>
- * - Your use will be deemed to have accepted the terms of this statement.
- *
- * @brief 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 *********************************/
|