开源改变世界!!

spindle_control.cpp 错误,spindle_set_speed() #252

推推 grbl 2年前 (2023-01-29) 146次浏览
关闭
owenduffy 打开了这个问题 2019 年 10 月 16 日 · 5 条评论
关闭

spindle_control.cpp 错误,spindle_set_speed()#252

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

注释

spindle_control.cpp 错误,spindle_set_speed() #252
欧文达菲 评论了 2019 年 10 月 16 日  

请回答以下问题。

您使用的是什么版本的固件?
b7ee426

问题是否可重复?
是的

什么情况下会出现bug?
使用 INVERT_SPINDLE_PWM,测量占空比与请求占空比的特性存在截距误差。 截距应为零。
spindle_control.cpp 错误,spindle_set_speed() #252

以下更改解决了该问题,结果截获了 2e-5,这很好。

@@ -108,11 +108,12 @@ void spindle_set_speed(uint32_t pwm_value)
 		#else
 			if (pwm_value == 0) {
 				grbl_analogWrite(SPINDLE_PWM_CHANNEL, (1<<SPINDLE_PWM_BIT_PRECISION));
 			}
 			else {
-				grbl_analogWrite(SPINDLE_PWM_CHANNEL, (1<<SPINDLE_PWM_BIT_PRECISION) - pwm_value - 1);
+//od				grbl_analogWrite(SPINDLE_PWM_CHANNEL, (1<<SPINDLE_PWM_BIT_PRECISION) - pwm_value - 1);
+				grbl_analogWrite(SPINDLE_PWM_CHANNEL, (1<<SPINDLE_PWM_BIT_PRECISION) - pwm_value);
 			}			
 		#endif
 		
 	#endif

事实上,if 语句的另一个分支是多余的,可以简化代码。

spindle_control.cpp 错误,spindle_set_speed() #252 owenduffy 添加了 漏洞 有些东西不工作标签 2019 年 10 月 16 日
spindle_control.cpp 错误,spindle_set_speed() #252
所有者

这样对吗?我无法阅读您的代码格式。

void spindle_set_speed(uint32_t pwm_value)
{	
	#ifndef SPINDLE_PWM_PIN
		return;
	#else
		#ifndef SPINDLE_ENABLE_OFF_WITH_ZERO_SPEED
			spindle_set_enable(true);
		#else
			spindle_set_enable(pwm_value != 0);
		#endif
		
		#ifndef INVERT_SPINDLE_PWM
			grbl_analogWrite(SPINDLE_PWM_CHANNEL, pwm_value);			
		#else
			if (pwm_value == 0) {
				grbl_analogWrite(SPINDLE_PWM_CHANNEL, (1<<SPINDLE_PWM_BIT_PRECISION));
			}
			else {
				grbl_analogWrite(SPINDLE_PWM_CHANNEL, (1<<SPINDLE_PWM_BIT_PRECISION) - pwm_value);
			}			
		#endif
		
	#endif
	
}
spindle_control.cpp 错误,spindle_set_speed() #252
作者
欧文达菲 评论了 2019 年 10 月 16 日  

是的,但它简化为:

void spindle_set_speed(uint32_t pwm_value)
{	
	#ifndef SPINDLE_PWM_PIN
		return;
	#else
		#ifndef SPINDLE_ENABLE_OFF_WITH_ZERO_SPEED
			spindle_set_enable(true);
		#else
			spindle_set_enable(pwm_value != 0);
		#endif
		
		#ifndef INVERT_SPINDLE_PWM
			grbl_analogWrite(SPINDLE_PWM_CHANNEL, pwm_value);			
		#else
			grbl_analogWrite(SPINDLE_PWM_CHANNEL, (1<<SPINDLE_PWM_BIT_PRECISION) - pwm_value);
		#endif
		
	#endif
	
}

好的?

spindle_control.cpp 错误,spindle_set_speed() #252
所有者

好的

bdring 添加了引用此问题的提交 2019 年 10 月 16 日

spindle_control.cpp 错误,spindle_set_speed() #252 bdring 提到了这个问题 2019 年 10 月 16 日
合并
spindle_control.cpp 错误,spindle_set_speed() #252

很抱歉在测试中没有发现……我将这个小错误归因于分段近似。解决这个问题可以改善低端的校准。

再次感谢。

spindle_control.cpp 错误,spindle_set_speed() #252
所有者

合并到 master