Contact me: hankecnc@gmail.com

脉宽调制问题 #1186

推推 grbl 3年前 (2023-01-23) 126次浏览

打开
ErrorSnaKe 打开了这个 issue 2017 年 2 月 23 日 · 0 条评论
打开

脉宽调制问题#1186

ErrorSnaKe 打开了这个 issue 2017 年 2 月 23 日 · 0 条评论

注释

脉宽调制问题 #1186

你好,

我有一个具有下一个规格的激光二极管驱动器
调制 5V TTL/PWM
调制带宽 4kHz
调制上升/下降时间 40/60 ms

Grbl 使用 Fast PWM 它的预分频器意味着我收到 7812.5 或 976.5625 Hz

但在相位校正 PWM 模式下,我看到正确的频率 – 3921.16 Hz

在 grbl 0,9j 中,我尝试更改 cpu_map_atmega328p.h 中的设置

`// PWM 和步进器启用主轴的启动
#ifdef VARIABLE_SPINDLE
// 下面的高级配置您不需要触摸这些变量
#define PWM_MAX_VALUE 255.0
#define TCCRA_REGISTER TCCR2A
#define TCCRB_REGISTER TCCR2B
#define OCR_REGISTER OCR2A

#define COMB_BIT COM2A1
#define WAVE0_REGISTER WGM20
#define WAVE1_REGISTER WGM21
#define WAVE2_REGISTER WGM22
#define WAVE3_REGISTER WGM23

// 注意:在 328p 上,这些必须与 SPINDLE_ENABLE 设置相同。
#define SPINDLE_PWM_DDR DDRB
#define SPINDLE_PWM_PORT PORTB
#define SPINDLE_PWM_BIT 3 // Uno 数字引脚 11
#endif // VARIABLE_SPINDLE 结束`

和 spindle_control.c
#ifdef VARIABLE_SPINDLE // TODO: Install the optional capability for frequency-based output for servos. #ifdef CPU_MAP_ATMEGA2560 TCCRA_REGISTER = (1<<COMB_BIT) | (1<<WAVE1_REGISTER) | (1<<WAVE0_REGISTER); TCCRB_REGISTER = (TCCRB_REGISTER & 0b11111000) | 0x03 | (1<<WAVE2_REGISTER) | (1<<WAVE3_REGISTER); // set to 1/8 Prescaler OCR4A = 0xFFFF; // set the top 16bit value uint16_t current_pwm; #else TCCRA_REGISTER = (1<<COMB_BIT) | (1<<WAVE1_REGISTER) | (1<<WAVE0_REGISTER); TCCRB_REGISTER = (TCCRB_REGISTER & 0b11111000) | 0x03; // set to 1/8 Prescaler uint8_t current_pwm; #endif

在 grbl 1.1 在 cpu_map.h
` #define SPINDLE_PWM_OFF_VALUE 0
#define SPINDLE_PWM_RANGE (SPINDLE_PWM_MAX_VALUE-SPINDLE_PWM_MIN_VALUE)
#define SPINDLE_TCCRA_REGISTER TCCR2A
#define SPINDLE_TCCRB_REGISTER TCCR2B
#define SPINDLE_TCCRB_REGISTER TCCR2B #define SPINDLE_TCCRB_REGISTER TCCR2B #define SPINDLE_OCRB OCR_COM1 #define SPINDLE_OCRB
OCR_REGISTER1

// 预分频,8 位快速 PWM 模式。
#define SPINDLE_TCCRA_INIT_MASK ((1<<WGM20) | (1<<WGM21)) // 配置快速 PWM 模式。
// #define SPINDLE_TCCRB_INIT_MASK (1<<CS20) // 禁用预分频器 -> 62.5kHz
// #define SPINDLE_TCCRB_INIT_MASK (1<<CS21) // 1/8 预分频器 -> 7.8kHz(在 v0.9 中使用)
// #定义 SPINDLE_TCCRB_INIT_MASK ((1<<CS21) | (1<<CS20)) // 1/32 预分频器 -> 1.96kHz
#define SPINDLE_TCCRB_INIT_MASK (1<<CS22) // 1/64 预分频器 -> 0.98kHz (J-tech激光)

// 注意:在 328p 上,这些必须与 SPINDLE_ENABLE 设置相同。
#define SPINDLE_PWM_DDR DDRB
#define SPINDLE_PWM_PORT PORTB
#define SPINDLE_PWM_BIT 3 // Uno 数字引脚 11

#endif`

但不成功

问题如何将 TTL/PWM 调制更改为 4kHz?

喜欢 (0)