开源改变世界!!

添加对 RC ESC 驱动主轴的支持? #148

推推 grbl 2年前 (2022-10-19) 109次浏览 0个评论

关闭
xnaron 打开了这个问题 on 17 May 2019 · 10 条评论
关闭

添加对 RC ESC 驱动主轴的支持?#148

xnaron 打开了这个问题 2019 年 5 月 17 日 · 10 条评论

注释

添加对 RC ESC 驱动主轴的支持? #148

是否可以添加支持以启用对 RC ESC 驱动主轴的控制?

添加对 RC ESC 驱动主轴的支持? #148 xnaron 更改了标题 添加对 RC ESC 驱动主轴的支持 添加对 RC ESC 驱动主轴的支持? on 17 May 2019
添加对 RC ESC 驱动主轴的支持? #148
所有者

婚戒 评论 on 17 May 2019

RC ESC(电子速度控制)就像一个爱好伺服器一样运行。它是一个 50Hz 的 PWM,脉冲长度从 1ms 到 2ms。

由于主轴已经在 PWM 通道上,我们只需调整 cpu_map.h 中的一些设置即可使其工作。

这是一个有效的示例 cpu_map。只有一个问题。(见帖子末尾)

#ifdef CPU_MAP_ESP32_ESC_SPINDLE
	// This is the CPU Map for the ESP32 CNC Controller R2	
	
	  // It is OK to comment out any step and direction pins. This
    // won't affect operation except that there will be no output
		// form the pins. Grbl will virtually move the axis. This could 
		// be handy if you are using a servo, etc. for another axis.
		#define CPU_MAP_NAME "CPU_MAP_ESP32"	
		
		#define X_STEP_PIN      	GPIO_NUM_12
		#define X_DIRECTION_PIN  	GPIO_NUM_26
		#define X_RMT_CHANNEL		0
		
		#define Y_STEP_PIN      	GPIO_NUM_14
		#define Y_DIRECTION_PIN   	GPIO_NUM_25
		#define Y_RMT_CHANNEL		1
		
		#define Z_STEP_PIN      	GPIO_NUM_27		
		#define Z_DIRECTION_PIN   	GPIO_NUM_33 		 
		#define Z_RMT_CHANNEL		2		
		
		// OK to comment out to use pin for other features
		#define STEPPERS_DISABLE_PIN GPIO_NUM_13		
		
		// *** the flood coolant feature code is activated by defining this pins
		// *** Comment it out to use the pin for other features
		#define COOLANT_FLOOD_PIN 	GPIO_NUM_16			
		//#define COOLANT_MIST_PIN   	GPIO_NUM_21
		
		// If SPINDLE_PWM_PIN is commented out, this frees up the pin, but Grbl will still
		// use a virtual spindle. Do not comment out the other parameters for the spindle.
		#define SPINDLE_PWM_PIN    GPIO_NUM_17 
		#define SPINDLE_PWM_CHANNEL 0
		
		// RC ESC Based Spindle 
		// An ESC works like a hobby servo with 50Hz PWM 1ms to 2 ms pulse range		
		#define SPINDLE_PWM_BASE_FREQ 50 // Hz for ESC
		#define SPINDLE_PWM_BIT_PRECISION 16   // 16 bit required for ESC
		#define SPINDLE_PULSE_RES_COUNT 65535
		
		#define ESC_MIN_PULSE_SEC 0.001 // min pulse in seconds (OK to tune this one)
		#define ESC_MAX_PULSE_SEC 0.002 // max pulse in seconds (OK to tune this one)		
		#define ESC_TIME_PER_BIT  ((1.0 / (float)SPINDLE_PWM_BASE_FREQ) / ((float)SPINDLE_PULSE_RES_COUNT) ) // seconds

		#define SPINDLE_PWM_OFF_VALUE    (uint16_t)(SERVO_MIN_PULSE_SEC / SERVO_TIME_PER_BIT) // in timer counts
		#define SPINDLE_PWM_MAX_VALUE    (uint16_t)(SERVO_MAX_PULSE_SEC / SERVO_TIME_PER_BIT) // in timer counts
		
		#ifndef SPINDLE_PWM_MIN_VALUE
				#define SPINDLE_PWM_MIN_VALUE   SPINDLE_PWM_OFF_VALUE   // Must be greater than zero.
		#endif
		
		#define SPINDLE_PWM_RANGE         (SPINDLE_PWM_MAX_VALUE-SPINDLE_PWM_MIN_VALUE)
		
		#define SPINDLE_ENABLE_PIN	GPIO_NUM_22			
		
		// if these spindle function pins are defined, they will be activated in the code
		// comment them out to use the pins for other functions
		//#define SPINDLE_ENABLE_PIN	GPIO_NUM_16
		//#define SPINDLE_DIR_PIN			GPIO_NUM_16		
		
		#define X_LIMIT_PIN      	GPIO_NUM_2  
		#define Y_LIMIT_PIN      	GPIO_NUM_4  
		#define Z_LIMIT_PIN     	GPIO_NUM_15 	
		#define LIMIT_MASK      	B111
		
		#define PROBE_PIN       	GPIO_NUM_32  
		
		#define CONTROL_SAFETY_DOOR_PIN   GPIO_NUM_35  // needs external pullup
		#define CONTROL_RESET_PIN         GPIO_NUM_34  // needs external pullup
		#define CONTROL_FEED_HOLD_PIN     GPIO_NUM_36  // needs external pullup 
		#define CONTROL_CYCLE_START_PIN   GPIO_NUM_39  // needs external pullup    		
		
#endif

唯一的问题是当我认为您需要 1ms 脉冲时,spindle_stop() 的硬编码为 0。我不得不将其更改为 SPINDLE_PWM_OFF_VALUE。(见下文)。

void spindle_stop()
{		
  spindle_set_enable(false);
	#ifdef SPINDLE_PWM_PIN
		grbl_analogWrite(SPINDLE_PWM_CHANNEL, SPINDLE_PWM_OFF_VALUE);
	#endif
}
'''

If you can test this, I can create a pull request.
添加对 RC ESC 驱动主轴的支持? #148
作者

沙龙 评论 2019 年 5 月 17 日

它可以工作,但主轴在应该关闭时以低速运行(M3 S0)。我认为这个ESC的范围比普通的更广。我尝试将 ESC_MIN_PULSE_SEC 降低到 0.0007,然后再降低到 0.0002,但都没有奏效。M3 S1000 在主轴上大约是全速。我尝试将spindle_set_enable 设置回零库存,但这也不起作用,因为esc 无法启动。还有其他降低脉冲长度的建议吗?

添加对 RC ESC 驱动主轴的支持? #148

在 RC 伺服系统上,PWM 不是 50Hz。它是 25 Hz,因为信号是 40 ms 周期内的 1 到 2 ms 脉冲。40 毫秒是 25 赫兹。不知道这是否与问题有关,但我知道更快的 PWM 速率会导致伺服器嗡嗡作响。不知道ESC是否相同。

添加对 RC ESC 驱动主轴的支持? #148
所有者

婚戒 评论 2019 年 5 月 18 日

一般来说,模拟舵机的规格是 20ms 或 50Hz。你是对的,它可以变化很大。一些数字伺服器喜欢它的速度要快得多。

你有你正在使用的 ESC 的链接吗?在慢速下,在那些较低的脉冲长度下速度是否相同?

添加对 RC ESC 驱动主轴的支持? #148
所有者

婚戒 评论 2019 年 5 月 18 日

我发现了一个错误。我在代码中使用了来自其他伺服功能的定义值,但忘记重命名它们。这意味着如果您更改了默认脉冲长度,代码实际上并没有改变。

将“SERVO”更改为“ESC”,使这些行在 cpu_map 中看起来像这样。

#define SPINDLE_PWM_OFF_VALUE    (uint16_t)(ESC_MIN_PULSE_SEC / ESC_TIME_PER_BIT) // in timer counts
#define SPINDLE_PWM_MAX_VALUE    (uint16_t)(ESC_MIN_PULSE_SEC / ESC_TIME_PER_BIT) // in timer counts

这里有一些逻辑图来显示它现在有效。

离开

添加对 RC ESC 驱动主轴的支持? #148

500转 (50%)

添加对 RC ESC 驱动主轴的支持? #148

1000 转 (100%)

添加对 RC ESC 驱动主轴的支持? #148

此处以 0.0005 秒的最小脉冲关闭

添加对 RC ESC 驱动主轴的支持? #148

添加对 RC ESC 驱动主轴的支持? #148
作者

沙龙 评论 2019 年 5 月 18 日

它没有像我预期的那样工作。我将不得不把逻辑分析仪放在上面,看看我得到了什么。我注意到当我在 x 轴上工作时信号似乎发生了变化。ESC 进入蜂鸣模式,就像信号丢失一样。我想知道您是否可以在移动轴后通过再次测量来重现。

添加对 RC ESC 驱动主轴的支持? #148
作者

沙龙 评论 2019 年 5 月 18 日  

`
#define SPINDLE_PWM_BASE_FREQ 50 // ESC 的 Hz
#define SPINDLE_PWM_BIT_PRECISION 16 // ESC 需要 16 位
#define SPINDLE_PULSE_RES_COUNT 65535

#define ESC_MIN_PULSE_SEC 0.0007 // min pulse in seconds (OK to tune this one)
#define ESC_MAX_PULSE_SEC 0.0018 // max pulse in seconds (OK to tune this one)   
#define ESC_TIME_PER_BIT  ((1.0 / (float)SPINDLE_PWM_BASE_FREQ) / ((float)SPINDLE_PULSE_RES_COUNT) ) // seconds

#define SPINDLE_PWM_OFF_VALUE    (uint16_t)(ESC_MIN_PULSE_SEC / ESC_TIME_PER_BIT) // in timer counts
#define SPINDLE_PWM_MAX_VALUE    (uint16_t)(ESC_MIN_PULSE_SEC / ESC_TIME_PER_BIT) // in timer counts

`

添加对 RC ESC 驱动主轴的支持? #148

这就是我所拥有的,现在我无法改变它总是看起来像上面的屏幕截图的速度。(尝试 M3 S100、M3 S500、M3 S1000 等……信号保持如上

如果我移动一个轴,我会丢失 pwm 信号,它看起来像下面(例如:jog x 轴超过 1mm)

添加对 RC ESC 驱动主轴的支持? #148

$0=3 $1=255 $2=0 $3=0 $4=0 $5=0 $6=0 $10=3 $11=0.010 $12=0.002 $13=0 $20=0 $21=1 $22=1 $23=0 $24=25.000 $25=1000.000 $26=250 $27=1.000 $30=10000.000 $31=0.000 $32=0 $100=160.700 $101=160.700 $102=100.000 $110=8000.000 $111=8000.000 $112=500.000 $120=500.000 $121=500.000 $122=200.000 $130=170.000 $131=260.000 $132=20.000

添加对 RC ESC 驱动主轴的支持? #148
所有者

婚戒 评论 2019 年 5 月 18 日

我发现了两个问题。

  1. 将 cpu_map.h 中的这些行更改为以下代码。
#define SPINDLE_PWM_OFF_VALUE    (uint16_t)(ESC_MIN_PULSE_SEC / ESC_TIME_PER_BIT) // in timer counts
#define SPINDLE_PWM_MAX_VALUE    (uint16_t)(ESC_MAX_PULSE_SEC / ESC_TIME_PER_BIT) // in timer counts
  1. Grbl 有一种激光模式,其中激光功率(使用主轴 PWM)对速度进行补偿。我认为当它不处于激光模式时,它会在移动过程中做出一些改变。确保 $32=0。

围绕主轴速度调整检查激光模式(stepper.cpp 中的第 258 行)

if (st_prep_block->is_pwm_rate_adjusted) {
    spindle_set_speed(st.exec_segment->spindle_pwm);
}

这可能与 0 速度不在 0 值班有关。

感谢您对这个问题的耐心等待。你能告诉我你正在使用的ESC和电机吗?我想找一个帮我测试。(也许建造一台PCB机器)

添加对 RC ESC 驱动主轴的支持? #148
作者

沙龙 评论 2019 年 5 月 18 日

通过上面的更改,它现在可以完美运行。ESC 是我手头上的一个,大约 8 年前我从 Hobbyking 买的(见图)。我已经用四轴飞行器的定制固件刷新了它。它需要一个介于 700us 和 ~1800us 之间的脉冲长度。您上面的代码运行良好,现在激光模式检查已经到位,没有问题。电机是我手头上的另一种用于四轴飞行器的电机。它也很旧。当我平衡它们时,我把它们的标签都去掉了。PCBEater 电机的规格为 KV 等级,介于 900 至 1200KV 之间,直径为 28 毫米或更小,高约 28 毫米。电机应该有一个约 3 毫米的轴,从最靠近电线的一侧突出(见图)。我正在寻找电机的来源,一旦找到就会发布。

再次感谢您如此迅速地做出更改。

添加对 RC ESC 驱动主轴的支持? #148

添加对 RC ESC 驱动主轴的支持? #148

添加对 RC ESC 驱动主轴的支持? #148
所有者

婚戒 评论 2019 年 5 月 19 日

真棒。

添加对 RC ESC 驱动主轴的支持? #148
 
添加标题文本添加粗体文本,<Ctrl+b>添加斜体文本,<Ctrl+i>
添加引号,<Ctrl+Shift+.>添加代码,<Ctrl+e>添加链接,<Ctrl+k>
添加项目符号列表,<Ctrl+Shift+8>添加编号列表,<Ctrl+Shift+7>添加任务列表,<Ctrl+Shift+l>
直接提及用户或团队引用问题、拉取请求或讨论

添加已保存的回复

请记住,对此存储库的贡献应遵循我们的 GitHub 社区指南
通过赞助他们 来表达 您对 bdring的支持。

 赞助

标签
还没有
项目

还没有

发展

没有分支或拉取请求

3名参与者
添加对 RC ESC 驱动主轴的支持? #148添加对 RC ESC 驱动主轴的支持? #148添加对 RC ESC 驱动主轴的支持? #148

fra589/grbl-Mega-5X 2019 年 5 月 19 日
功能要求,支持 ESC RC 伺服主轴

 #52

看这里它是在 grbl 的 esp32 端口上完成的,它可以在这个分支上实现吗?[H…

按 Escape 关闭此悬停卡
喜欢 (0)

您必须 登录 才能发表评论!