开源改变世界

伺服 – 如何设置 #353

推推 grbl 2年前 (2023-01-30) 116次浏览
关闭
dronecz 打开了这个问题 2020 年 3 月 22 日 · 6条评论
关闭

伺服 – 如何设置#353

dronecz 打开了这个问题 2020 年 3 月 22 日 · 6条评论

注释

伺服 - 如何设置 #353

你好,

我在玩伺服系统(正常和连续),我测试的所有东西都有点问题。在我禁用警报后,它们全部开始移动,这样我就可以移动轴了。我关注了维基伺服部分的信息,但没有足够的信息来解决我的问题。有人知道如何解决这个问题吗?

谢谢你的帮助。

伺服 - 如何设置 #353
所有者

不支持连续伺服。请准确描述您希望伺服系统做什么,我们可以帮助您。

哪些轴使用伺服?
你想将伺服映射到什么范围?
当机器归位时,您希望它做什么?
它在警报期间应该如何表现?
当步进器被禁用时它应该如何表现?

伺服 - 如何设置 #353
作者

是的,我是这么想的,但我希望它能像普通伺服一样工作,但没有最小和最大位置。也许我错了,但如果不能检测到准确的位置,它可以在一个方向上无休止地旋转。一个限制可以定义地图值,但如果我将这个值变大,我可以在大“区域”工作并且它可以工作。我希望我能测试一下,但我的正常伺服表现与连续一样。

哪些轴使用伺服?

我想将它们用于 A、B 和 C asix

你想将伺服映射到什么范围?

我现在不知道。我想测试一些值,看看有什么可能。

当机器归位时,您希望它做什么?

它应该什么都不做。它应该在其他轴工作时工作。

它在警报期间应该如何表现?

它应该停止。

当步进器被禁用时它应该如何表现?

它也应该被禁用。

伺服 - 如何设置 #353
所有者

您使用什么控制器以及什么爱好伺服类型?

伺服 - 如何设置 #353
作者
无人机 评论了 2020 年 3 月 22 日  

如果你指的是我使用的是什么板,那么我设计了自己的板(图片来自 Slack 的展示频道)。你使用 5g (HXT500) 和 9g (HXT900) 舵机。这是我的董事会定义:

#define CPU_MAP_NAME "CPU_MAP_SHAPE_LIKE_MEGA"

// Be sure to change to N_AXIS 6 in nuts_bolts.h
#ifdef N_AXIS
#undef N_AXIS
#endif
#define N_AXIS 5

// stepper motors
#define USE_RMT_STEPS

#define X_STEP_PIN        GPIO_NUM_12
#define X_DIRECTION_PIN   GPIO_NUM_26

#define Y_STEP_PIN        GPIO_NUM_2
#define Y_DIRECTION_PIN   GPIO_NUM_4

#define A_STEP_PIN        GPIO_NUM_27
#define A_DIRECTION_PIN   GPIO_NUM_33

#define Z_STEP_PIN          GPIO_NUM_14
#define Z_DIRECTION_PIN     GPIO_NUM_25

//#define B_STEP_PIN        GPIO_NUM_15
//#define B_DIRECTION_PIN   GPIO_NUM_32

// C is a servo

// servos
    #define USE_SERVO_AXES
//    #define SERVO_Z_PIN       GPIO_NUM_22
//    #define SERVO_Z_CHANNEL_NUM   6
//    #define SERVO_Z_RANGE_MIN   0.0
//    #define SERVO_Z_RANGE_MAX   10.0
//    #define SERVO_Z_HOMING_TYPE SERVO_HOMING_TARGET // during homing it will instantly move to a target value
//    #define SERVO_Z_HOME_POS    SERVO_Z_RANGE_MAX // move to max during homing
//    #define SERVO_Z_MPOS        false   // will not use mpos, uses work coordinates

#define SERVO_B_PIN       GPIO_NUM_15
#define SERVO_B_CHANNEL_NUM   4
#define SERVO_B_RANGE_MIN   0.0
#define SERVO_B_RANGE_MAX   10.0
//#define SERVO_B_HOMING_TYPE SERVO_HOMING_TARGET // during homing it will instantly move to a target value
//#define SERVO_B_HOME_POS    SERVO_B_RANGE_MAX // move to max during homing
//#define SERVO_B_MPOS        false   // will not use mpos, uses work coordinates   

// limit switches
#define X_LIMIT_PIN       GPIO_NUM_34
#define Y_LIMIT_PIN       GPIO_NUM_35
#define Z_LIMIT_PIN       GPIO_NUM_36
#define A_LIMIT_PIN       GPIO_NUM_39
//#define B_LIMIT_PIN       GPIO_NUM_   
#define LIMIT_MASK        B1111

// OK to comment out to use pin for other features
#define STEPPERS_DISABLE_PIN GPIO_NUM_13

#ifdef HOMING_CYCLE_0 // undefine from config.h
#undef HOMING_CYCLE_0
#endif
//#define HOMING_CYCLE_0 (1<<X_AXIS)
#define HOMING_CYCLE_0 ((1<<X_AXIS)|(1<<Y_AXIS))
//#define HOMING_CYCLE_0 ((1<<X_AXIS)|(1<<Y_AXIS) |(1<<A_AXIS)|(1<<B_AXIS))

#ifdef HOMING_CYCLE_1 // undefine from config.h
#undef HOMING_CYCLE_1
#endif
//#define HOMING_CYCLE_1 (1<<A_AXIS)
#define HOMING_CYCLE_1 ((1<<A_AXIS)|(1<<B_AXIS))

#ifdef HOMING_CYCLE_2 // undefine from config.h
#undef HOMING_CYCLE_2
#endif

  #define HOMING_CYCLE_2 (1<<Y_AXIS)

  #ifdef HOMING_CYCLE_3 // undefine from config.h
  #undef HOMING_CYCLE_3
  #endif
  #define HOMING_CYCLE_3 (1<<B_AXIS)


#define DEFAULT_STEP_PULSE_MICROSECONDS 3
#define DEFAULT_STEPPER_IDLE_LOCK_TIME 200 // 200ms

#define DEFAULT_STEPPING_INVERT_MASK 0 // uint8_t
#define DEFAULT_DIRECTION_INVERT_MASK 2 // uint8_t
#define DEFAULT_INVERT_ST_ENABLE 0 // boolean
#define DEFAULT_INVERT_LIMIT_PINS 1 // boolean
#define DEFAULT_INVERT_PROBE_PIN 0 // boolean 

#define DEFAULT_STATUS_REPORT_MASK 1

#define DEFAULT_JUNCTION_DEVIATION 0.01 // mm
#define DEFAULT_ARC_TOLERANCE 0.002 // mm
#define DEFAULT_REPORT_INCHES 0 // false

#define DEFAULT_SOFT_LIMIT_ENABLE 0 // false
#define DEFAULT_HARD_LIMIT_ENABLE 0  // false

#define DEFAULT_HOMING_ENABLE 1
#define DEFAULT_HOMING_DIR_MASK 17
#define DEFAULT_HOMING_FEED_RATE 200.0 // mm/min
#define DEFAULT_HOMING_SEEK_RATE 2000.0 // mm/min
#define DEFAULT_HOMING_DEBOUNCE_DELAY 250 // msec (0-65k)
#define DEFAULT_HOMING_PULLOFF 3.0 // mm

#define DEFAULT_SPINDLE_RPM_MAX 1000.0 // rpm
#define DEFAULT_SPINDLE_RPM_MIN 0.0 // rpm

#define DEFAULT_LASER_MODE 0 // false

#define DEFAULT_X_STEPS_PER_MM 400.0
#define DEFAULT_Y_STEPS_PER_MM 400.0
#define DEFAULT_Z_STEPS_PER_MM 100.0 // This is percent in servo mode
#define DEFAULT_A_STEPS_PER_MM 400.0
#define DEFAULT_B_STEPS_PER_MM 400.0
#define DEFAULT_C_STEPS_PER_MM 100.0 // This is percent in servo mode


#define DEFAULT_X_MAX_RATE 30000.0 // mm/min
#define DEFAULT_Y_MAX_RATE 30000.0 // mm/min
#define DEFAULT_Z_MAX_RATE 8000.0 // mm/min
#define DEFAULT_A_MAX_RATE 30000.0 // mm/min
#define DEFAULT_B_MAX_RATE 30000.0 // mm/min
#define DEFAULT_C_MAX_RATE 8000.0 // mm/min

#define DEFAULT_X_ACCELERATION (1500.0*60*60) // 10*60*60 mm/min^2 = 10 mm/sec^2
#define DEFAULT_Y_ACCELERATION (1500.0*60*60) // 10*60*60 mm/min^2 = 10 mm/sec^2
#define DEFAULT_Z_ACCELERATION (100.0*60*60)
#define DEFAULT_A_ACCELERATION (1500.0*60*60) // 10*60*60 mm/min^2 = 10 mm/sec^2
#define DEFAULT_B_ACCELERATION (1500.0*60*60) // 10*60*60 mm/min^2 = 10 mm/sec^2
#define DEFAULT_C_ACCELERATION (100.0*60*60)

#define DEFAULT_X_MAX_TRAVEL 250.0 // mm NOTE: Must be a positive value.
#define DEFAULT_Y_MAX_TRAVEL 250.0 // mm NOTE: Must be a positive value.
#define DEFAULT_Z_MAX_TRAVEL 100.0 // This is percent in servo mode 
#define DEFAULT_A_MAX_TRAVEL 250.0 // mm NOTE: Must be a positive value.
#define DEFAULT_B_MAX_TRAVEL 250.0 // mm NOTE: Must be a positive value.
#define DEFAULT_C_MAX_TRAVEL 100.0 // This is percent in servo mode       

#endif

我复制并编辑了 6 轴机器 (CPU_MAP_FOO_6X) 的引出线。X 轴到 Z 轴工作正常。我需要提一下,我设置了具有双重功能的电路板。这意味着我有一些 I/O 引脚,例如 A-DIR,如果不使用该轴,我认为我可以将此引脚用于伺服。这个可以吗?我的意思是,如果我没有在 cpu_map.h 中定义它,那么将 I/O 引脚用于其他用途应该没问题,对吧?如果我为步进电机设置引脚,A 轴和 B 轴工作正常。

伺服 - 如何设置 #353
所有者

您应该能够在 I/O 引脚上切换步进电机和伺服功能。将该轴用作伺服时,最好注释掉步长和方向。

您可能想使用#ifdef 来定义双模式的每个模式,以防止切换时出错。

我们今天做了一些重大改变。我们不再使用 cpu_maps 而是使用机器定义。这样做是为了清理代码并减少用户的编辑。您应该创建自己的 mega_shaped.h 文件并在 machine.h 中引用该文件,然后重新编译和上传。

我将从这样的伺服定义开始

#define SERVO_B_PIN       GPIO_NUM_15
#define SERVO_B_CHANNEL_NUM   4
#define SERVO_B_RANGE_MIN   0.0
#define SERVO_B_RANGE_MAX   10.0
#define SERVO_B_HOMING_TYPE SERVO_HOMING_TARGET
#define SERVO_B_HOME_POS    SERVO_B_RANGE_MAX // move to max during homing
#define SERVO_B_MPOS        false   // will not use mpos, uses work coordinates

#define DEFAULT_B_STEPS_PER_MM 100.0 // this is used as a calibration for servos
#define DEFAULT_B_MAX_TRAVEL 100.0 // this is used as a calibration for servos


用于检测….

使用$22=0关闭归位使用$1=255
禁用步进器空闲 发送$rst=#以删除任何工作偏移 使用[ESP444]RESTART重新启动 grbl_esp32

伺服应该移动到行程的一端。
应抵抗手动转动
发送 **G0B10 ** 应移动到行程的另一端
发送G0B5应移动到行程的中间。

伺服 - 如何设置 #353
所有者

我对固件和 wiki 进行了一些更新以帮助解决这个问题。

关闭问题