Browse Source

丰富moveToEnd相关接口

transmit_disinfection
zhaohe 11 months ago
parent
commit
16ccc17d6d
  1. 8
      tmcdriver/tmc51x0/tmc51x0.cpp
  2. 10
      tmcdriver/tmc51x0/tmc51x0.hpp

8
tmcdriver/tmc51x0/tmc51x0.cpp

@ -213,7 +213,7 @@ void TMC51X0::stop() {
} else {
rotate(0);
}
m_isMoveToEnd = false;
// rotate(0);
}
void TMC51X0::rotate(int32_t velocity) {
@ -222,6 +222,7 @@ void TMC51X0::rotate(int32_t velocity) {
velocity = to_motor_vel(velocity);
writeInt(TMC5130_VMAX, abs(velocity));
writeInt(TMC5130_RAMPMODE, (velocity >= 0) ? TMC5130_MODE_VELPOS : TMC5130_MODE_VELNEG);
m_isMoveToEnd = false;
}
void TMC51X0::moveTo(int32_t position, uint32_t velocityMax) {
zlock_guard lkg(m_mutex);
@ -231,6 +232,7 @@ void TMC51X0::moveTo(int32_t position, uint32_t velocityMax) {
writeInt(TMC5130_RAMPMODE, TMC5130_MODE_POSITION);
writeInt(TMC5130_VMAX, velocityMax);
writeInt(TMC5130_XTARGET, position);
m_isMoveToEnd = false;
}
void TMC51X0::moveToEnd(int32_t direction, uint32_t velocityMax) {
zlock_guard lkg(m_mutex);
@ -248,8 +250,12 @@ void TMC51X0::moveToEnd(int32_t direction, uint32_t velocityMax) {
writeInt(TMC5130_VMAX, to_motor_vel(velocityMax));
writeInt(TMC5130_XTARGET, INT32_MIN / 1.5 + 1000);
}
m_isMoveToEnd = true;
}
void TMC51X0::refreshMoveToEnd() { setXACTUAL(0); }
bool TMC51X0::isMoveToEnd() { return m_isMoveToEnd; }
void TMC51X0::moveBy(int32_t relativePosition, uint32_t velocityMax) { // determine actual position and add numbers of ticks to move
zlock_guard lkg(m_mutex);

10
tmcdriver/tmc51x0/tmc51x0.hpp

@ -6,8 +6,8 @@
#include <string.h>
//
#include "../tmc/tmc_type.h"
#include "../tmc/tmc_reg_cache.hpp"
#include "../tmc/tmc_type.h"
#include "reg/TMC5130_Type.h"
#include "stm32basic/stm32basic.hpp"
namespace iflytop {
@ -25,7 +25,6 @@ class TMC51X0Cfg {
TMC51X0Cfg() {}
};
class TMC51X0 {
protected:
TMC51X0Cfg m_cfg;
@ -42,8 +41,9 @@ class TMC51X0 {
double m_onecirclepulse = 51200;
int32_t m_enc_resolution = 0; //
zmutex m_mutex = {"TMC51X0"};
bool m_driErr = false;
zmutex m_mutex = {"TMC51X0"};
bool m_driErr = false;
bool m_isMoveToEnd = false;
public:
void initialize(int mid, TMC51X0Cfg cfg);
@ -69,6 +69,8 @@ class TMC51X0 {
void rotate(int32_t velocity);
void moveTo(int32_t position, uint32_t velocityMax);
void moveToEnd(int32_t direction, uint32_t velocityMax);
void refreshMoveToEnd();
bool isMoveToEnd();
void moveBy(int32_t relativePosition, uint32_t velocityMax);
void stop();
/***********************************************************************************************************************

Loading…
Cancel
Save