开源改变世界

如何设置反转PWM信号并使用+5v关闭主轴电机? #22

推推 grbl 2年前 (2023-01-21) 274次浏览

打开
viewsat 打开了这个问题 2016 年 10 月 26 日 · 7条评论
打开

如何设置反转PWM信号并使用+5v关闭主轴电机?#22

viewsat 打开了这个问题 2016 年 10 月 26 日 · 7条评论

注释

如何设置反转PWM信号并使用+5v关闭主轴电机? #22

嗨,
如何设置反转 PWM 信号并使用 +5v 关闭主轴电机?

如何设置反转PWM信号并使用+5v关闭主轴电机? #22
贡献者

目前没有办法做到这一点。您对此有特殊需求吗?

如何设置反转PWM信号并使用+5v关闭主轴电机? #22
作者
观景台 评论了 2016 年 10 月 26 日  

因为我买的是tb6560驱动,它的电路设计需要这个,所以我修改了GRBL 0.9j,但是Grbl 1.1不能用,这是casiobearing修改完成的程序。
grbl/grbl#918

如何设置反转PWM信号并使用+5v关闭主轴电机? #22
贡献者

@viewsat: 我会将其添加到我的待办事项列表中,但可能需要一段时间。它不是高优先级项目。如果您成功地自行更新代码并说服他人提供帮助,请分享代码。这将有助于加快将其集成到此处的主回购的过程。

如何设置反转PWM信号并使用+5v关闭主轴电机? #22

继电器呢?是只有一个用于 EN 主轴,另一个用于 5V 吗?

在 2016 年 10 月 26 日凌晨 12:17,“viewsat” notifications@github.com写道:

GRBL 0.9j反相PWM信号,用+5v关闭主轴电机
修改spindle control.h和spindle control.c这两个文件

/*
主轴控制.h –
*/

#ifndef spindle_control_h
#define spindle_control_h
#define COMB_BIT0 COM2A0

// 初始化主轴引脚和硬件 PWM(如果启用)。
void spindle_init();

// 如果启用,通过 PWM 设置主轴方向和主轴转速。
void spindle_run(uint8_t 方向,浮动 rpm);

void spindle_set_state(uint8_t state, float rpm);

// 杀死主轴。
void spindle_stop();

#万一

/*
spindle_control.c –
*/
#include “grbl.h”

void spindle_init()
{

// 如果需要,配置可变主轴 PWM 并启用引脚。在 Uno 上,除非另有配置,否则
PWM 和启用是
// 组合的。
#ifdef VARIABLE_SPINDLE
SPINDLE_PWM_DDR |= (1<<SPINDLE_PWM_BIT); // 配置为 PWM 输出引脚。
#if defined(CPU_MAP_ATMEGA2560) || 已定义(USE_SPINDLE_DIR_AS_ENABLE_PIN)
SPINDLE_ENABLE_DDR |=(1<<SPINDLE_ENABLE_BIT);// 配置为输出引脚。
#万一

// 配置无可变主轴,仅启用引脚。
#别的

SPINDLE_ENABLE_DDR |= (1<<SPINDLE_ENABLE_BIT); //配置为输出引脚。
#万一

#ifndef USE_SPINDLE_DIR_AS_ENABLE_PIN
SPINDLE_DIRECTION_DDR |= (1<<SPINDLE_DIRECTION_BIT); // 配置为
输出引脚。
#endif
主轴停止();
}

void spindle_stop()
{
// 在 Uno 上,主轴使能和 PWM 是共享的。其他 CPU 有单独的
启用引脚。
#ifdef VARIABLE_SPINDLE
SPINDLE_PWM_DDR &= ~(1 << SPINDLE_PWM_BIT); // 配置为普通输出
引脚。

#ifdef INVERT_SPINDLE_ENABLE_PIN
SPINDLE_PWM_PORT &= ~(1 << SPINDLE_ENABLE_BIT);
#else
SPINDLE_PWM_PORT |= (1 << SPINDLE_ENABLE_BIT);
#万一

#if defined(CPU_MAP_ATMEGA2560) || 已定义(USE_SPINDLE_DIR_AS_ENABLE_PIN)
#ifdef INVERT_SPINDLE_ENABLE_PIN
SPINDLE_ENABLE_PORT |=(1<<SPINDLE_ENABLE_BIT);// 将引脚设置为高
#else
SPINDLE_ENABLE_PORT &= ~(1<<SPINDLE_ENABLE_BIT); // 将引脚设置为低电平
#endif
#endif

#else
#ifdef INVERT_SPINDLE_ENABLE_PIN
SPINDLE_ENABLE_PORT |= (1<<SPINDLE_ENABLE_BIT); // 将引脚设置为高
#else
SPINDLE_ENABLE_PORT &= ~(1<<SPINDLE_ENABLE_BIT); // 将引脚设置为低电平
#endif
#endif

}

void spindle_set_state(uint8_t state, float rpm)
{
// 暂停或设置主轴方向和转速。
如果(状态== SPINDLE_DISABLE){

主轴停止();

} else {
SPINDLE_PWM_DDR |= (1 << SPINDLE_PWM_BIT); // 配置为 PWM 输出引脚。

#ifndef USE_SPINDLE_DIR_AS_ENABLE_PIN
if (state == SPINDLE_ENABLE_CW) {
SPINDLE_DIRECTION_PORT &= ~(1<<SPINDLE_DIRECTION_BIT);
} else {
SPINDLE_DIRECTION_PORT |= (1<<SPINDLE_DIRECTION_BIT);
}
#endif

#ifdef VARIABLE_SPINDLE
// TODO:为伺服系统安装基于频率的输出的可选功能。
#ifdef CPU_MAP_ATMEGA2560
TCCRA_REGISTER = (1<<COMB_BIT) | (1<<WAVE1_REGISTER) | (1<<WAVE0_REGISTER);
TCCRB_REGISTER = (TCCRB_REGISTER & 0b11111000) | 0x02 | (1<<WAVE2_REGISTER) | (1<<WAVE3_REGISTER); // 设置为 1/8 预分频器
OCR4A = 0xFFFF; // 设置前 16 位值
uint16_t current_pwm;
#else
TCCRA_REGISTER = (1<<COMB_BIT) | (1<<COMB_BIT0) | (1<<WAVE1_REGISTER) | (1<<WAVE0_REGISTER);
TCCRB_REGISTER = (TCCRB_REGISTER & 0b11111000) | 0x05; // 设置为 1/8 预分频器 (原始 0x02->7.8k, 修改 0x05->487Hz,[2016-0827])
uint8_t current_pwm;
#万一

#define SPINDLE_RPM_RANGE (SPINDLE_MAX_RPM-SPINDLE_MIN_RPM)
if (rpm < SPINDLE_MIN_RPM) { rpm = 0; }
else {
rpm -= SPINDLE_MIN_RPM;
如果 (rpm > SPINDLE_RPM_RANGE) { rpm = SPINDLE_RPM_RANGE; } // 防止整数溢出
}
current_pwm = floor( rpm*(PWM_MAX_VALUE/SPINDLE_RPM_RANGE) + 0.5);
#ifdef MINIMUM_SPINDLE_PWM
if (current_pwm < MINIMUM_SPINDLE_PWM) { current_pwm = MINIMUM_SPINDLE_PWM; }
#endif
OCR_REGISTER = current_pwm; //设置PWM引脚输出

// 在 Uno 上,主轴使能和 PWM 是共享的,除非另有说明。
#if defined(CPU_MAP_ATMEGA2560) || 定义(USE_SPINDLE_DIR_AS_ENABLE_PIN)
#ifdef INVERT_SPINDLE_ENABLE_PIN
SPINDLE_ENABLE_PORT &= ~(1<<SPINDLE_ENABLE_BIT);
#else
SPINDLE_ENABLE_PORT |= (1<<SPINDLE_ENABLE_BIT);
#endif
#endif

#else
#ifdef INVERT_SPINDLE_ENABLE_PIN
SPINDLE_ENABLE_PORT &= ~(1<<SPINDLE_ENABLE_BIT);
#else
SPINDLE_ENABLE_PORT |= (1<<SPINDLE_ENABLE_BIT);
#endif
#endif

}
}

void spindle_run(uint8_t state, float rpm)
{
if (sys.state == STATE_CHECK_MODE) { 返回;}
protocol_buffer_synchronize(); //清空规划器缓冲区以确保
在编程时设置主轴。

主轴设置状态(状态,rpm);
}


您收到此消息是因为您订阅了此线程。
直接回复此电子邮件,在 GitHub
#22(评论)
上查看,或 将线程静音
https://github.com/notifications/unsubscribe-auth/AQlzDE0jZKClfyp2pvnQU1SyPDj24UiJks5q3sZIgaJpZM4KgrXD

如何设置反转PWM信号并使用+5v关闭主轴电机? #22 chamnit 添加了 增强 标签 2016 年 12 月 13 日
如何设置反转PWM信号并使用+5v关闭主轴电机? #22

@viewsat请参阅 Pull Request #246 https://github.com/gnea/grbl/pull/246
这个简单的更改对我有用。

如何设置反转PWM信号并使用+5v关闭主轴电机? #22
阿奇比2000 评论了 2017 年 11 月 5 日  

如何设置反转PWM信号并使用+5v关闭主轴电机? #22

以 0.10 英镑的成本非常容易地在硬件中反转 PWM 信号。

使两个电阻器的值为 1K 欧姆,使用 NPN 晶体管,例如 2N3904,最后确保 +V 连接到 Arduino 的 5V,Vs = 连接到 Arduino,接地连接回 Arduino。VO = 反转信号。

别客气。

仅供参考,这会将输出电压分别切换为 0V 或 5V (VS),这就是为什么它适用于反转所有 Arduino 信号而不会弄乱代码等。

(它不会提供模拟反转,例如 1v 输入的 4v 输出等 – 这不在 GRBL 的范围内)

如何设置反转PWM信号并使用+5v关闭主轴电机? #22
Apidde8 评论了 2017 年 12 月 1 日  

Tks aqibi2000 …对于新手来说更容易…同样的我..工作完美。

喜欢 (0)