/** * @file TMC2209_ATY.h * * @param Project DEVICE_GENERAL_ATY_LIB * * @author ATY * * @copyright * - Copyright 2017 - 2023 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 "TMC2209_ATY" * - 1_01_240111 > ATY * -# add multy addr and channel * -# add lock ******************************************************************************** */ #ifndef __TMC2209_ATY_H #define __TMC2209_ATY_H #include "INCLUDE_ATY.h" /******************************* For user *************************************/ /* set step pin vol level when motor is not enable */ // #define STATIC_STEP_LEVEL 0 /******************************************************************************/ struct TMC2209_ATY_Dev { uint8_t id; uint8_t motorEn; uint8_t motorDir; uint8_t motorDiag; uint32_t motorSoftSpeed; uint32_t motorSpeed; uint32_t motorSpeedCounter; uint32_t motorSoftSteps; uint32_t motorSteps; uint32_t motorStepCounter; uint32_t motorStopCounter; // delay for stall detection or driver error(TMC2209) uint8_t motorSetState; // 0: stop, 1: start hold, 2: start soft, 3: run speed, 4: change dir, 5: stop state, soft set 0 after use, 10: scram motor float speedIncreaseStep; float lineProParam; uint8_t lineProType; void (*enSet)(uint8_t level); void (*dirSet)(uint8_t level); uint8_t (*diagGet)(); void (*freqSet)(uint16_t freq); uint8_t lock; uint8_t debugEnable; void (*LOG)(const char*, ...); }; #define TMC2209_PARAM_SET(dir, softSpeed, speed, softSteps, steps, setState, dev) \ do \ { \ dev->motorDir = (uint8_t)dir; \ dev->motorSoftSpeed = (uint32_t)softSpeed; \ dev->motorSpeed = (uint32_t)speed; \ dev->motorSoftSteps = (uint32_t)softSteps; \ dev->motorSteps = (uint32_t)steps; \ dev->motorSetState = (uint8_t)setState; \ } while(0) #define TMC2209_PARAM_GET(dir, softSpeed, speed, softSteps, steps, setState, dev) \ do \ { \ dir = dev.motorDir; \ softSpeed = dev.motorSoftSpeed; \ speed = dev.motorSpeed; \ softSteps = dev.motorSoftSteps; \ steps = dev.motorSteps; \ setState = dev.motorSetState; \ } while(0) uint8_t TMC2209_SetAble(uint8_t enable, struct TMC2209_ATY_Dev *dev); uint8_t TMC2209_SetDirection(uint8_t dir, struct TMC2209_ATY_Dev *dev); uint8_t TMC2209_GetDiagLevel(struct TMC2209_ATY_Dev *dev); void TMC2209_Start(uint8_t dir, uint32_t speed, struct TMC2209_ATY_Dev *dev); void TMC2209_Stop(struct TMC2209_ATY_Dev *dev); void TMC2209_StateMachine_PWM(struct TMC2209_ATY_Dev *dev); #define TMC2209_SET_REVERSE 4 #define TMC2209_SET_START_DIRECTLY 3 #define TMC2209_SET_START_SOFT 2 #define TMC2209_SET_STOP 0 #define TMC2209_SET_SCRAM 10 #define TMC2209_SET_FINISHED 5 #define TMC2209_SET_RUNNING 1 /* for motor soft start */ #define TMC2209_S_PARAM_C 0.5f // 0-1 #endif /* __TMC2209_ATY_H */ /******************************** End Of File *********************************/