mirror of
https://github.com/synthetos/g2.git
synced 2026-09-22 11:18:28 +08:00
Merge pull request #191 from synthetos/dev-184-no-spindle-pwm
Fix for Issue #184 - spindle PWM broken
This commit is contained in:
@@ -119,10 +119,10 @@ _MAKE_MOTATE_PIN(kCoolant_EnablePinNumber, 'A', 1); // Coolant_EnableP
|
||||
_MAKE_MOTATE_PIN(kSocket4_VrefPinNumber, 'A', 2); // Socket4_VrefPinNumber
|
||||
_MAKE_MOTATE_PIN(kSocket5_VrefPinNumber, 'A', 3); // Socket5_VrefPinNumber
|
||||
_MAKE_MOTATE_PIN(kSocket2_Microstep_2PinNumber, 'A', 4); // Socket2_Microstep_2PinNumber
|
||||
_MAKE_MOTATE_PIN(kOutput3_PinNumber, 'A', 5); // Spindle_EnablePinNumber -- now used for Fan 1
|
||||
_MAKE_MOTATE_PIN(kSpindle_EnablePinNumber, 'A', 5); // Spindle_EnablePinNumber
|
||||
_MAKE_MOTATE_PIN(kSocket1_DirPinNumber, 'A', 6); // Socket1_DirPinNumber
|
||||
_MAKE_MOTATE_PIN(kSpindle_DirPinNumber, 'A', 7); // Spindle_DirPinNumber
|
||||
_MAKE_MOTATE_PIN(kOutput1_PinNumber, 'A', 8); // Spindle_PwmPinNumber -- now used for Extruder 1
|
||||
_MAKE_MOTATE_PIN(kSpindle_PwmPinNumber, 'A', 8); // Spindle_PwmPinNumber
|
||||
_MAKE_MOTATE_PIN(kInput2_PinNumber, 'A', 9); // XAxis_MaxPinNumber
|
||||
_MAKE_MOTATE_PIN(kInput3_PinNumber, 'A', 10); // YAxis_MinPinNumber
|
||||
_MAKE_MOTATE_PIN(kInput4_PinNumber, 'A', 11); // YAxis_MaxPinNumber
|
||||
|
||||
@@ -139,15 +139,15 @@ pin_number kInput10_PinNumber = 109;
|
||||
pin_number kInput11_PinNumber = 110;
|
||||
pin_number kInput12_PinNumber = 111;
|
||||
|
||||
pin_number kSpindle_EnablePinNumber = 112;
|
||||
pin_number kSpindle_DirPinNumber = 113;
|
||||
pin_number kSpindle_PwmPinNumber = 114;
|
||||
pin_number kSpindle_Pwm2PinNumber = 115;
|
||||
pin_number kCoolant_EnablePinNumber = 116;
|
||||
|
||||
// START DEBUG PINS - Convenient pins to hijack for hardware debugging
|
||||
// To reuse a pin for debug change the original pin number to -1
|
||||
// and uncomment the corresponding debug pin
|
||||
pin_number kSpindle_EnablePinNumber = 112; // Spindle ON implemented in g2ref
|
||||
pin_number kSpindle_DirPinNumber = 113; // Spindle ON implemented in g2ref
|
||||
pin_number kSpindle_PwmPinNumber = -1; // 114; // Not implemented (superseded by Extruder1_PWM)
|
||||
pin_number kSpindle_Pwm2PinNumber = -1; // 115; // Not implemented (superseded by Fan1B_PWM)
|
||||
pin_number kCoolant_EnablePinNumber = 116; // Spindle ON implemented in g2ref
|
||||
|
||||
pin_number kDebug1_PinNumber = -1; // 112;
|
||||
pin_number kDebug2_PinNumber = -1; // 113;
|
||||
pin_number kDebug3_PinNumber = -1; // 116; // Note the out-of-order numbering & 115 missing
|
||||
|
||||
+10
-31
@@ -31,6 +31,8 @@
|
||||
#include "spindle.h"
|
||||
#include "text_parser.h"
|
||||
#include "pwm.h"
|
||||
#include "canonical_machine.h"
|
||||
#include "settings.h"
|
||||
|
||||
/***** PWM defines, structures and memory allocation *****/
|
||||
|
||||
@@ -38,37 +40,8 @@ pwmSingleton_t pwm;
|
||||
|
||||
|
||||
// Setup motate PWM pins
|
||||
static Motate::PWMOutputPin<Motate::kSpindle_PwmPinNumber> spindle_pwm_pin;
|
||||
static Motate::PWMOutputPin<Motate::kSpindle_Pwm2PinNumber> secondary_pwm_pin;
|
||||
|
||||
// defines common to all PWM channels
|
||||
//#define PWM_TIMER_TYPE TC1_struct // PWM uses TC1's
|
||||
#define PWM_TIMER_t TC1_t // PWM uses TC1's
|
||||
#define PWM_TIMER_DISABLE 0 // turn timer off (clock = 0 Hz)
|
||||
//#define PWM_MAX_FREQ (F_CPU/256) // max frequency with 8-bits duty cycle precision
|
||||
//#define PWM_MIN_FREQ (F_CPU/64/65536) // min frequency with supported prescaling
|
||||
|
||||
// channel specific defines
|
||||
/* CLKSEL is used to configure default PWM clock operating ranges
|
||||
* These can be changed by pwm_freq() depending on the PWM frequency selected
|
||||
*
|
||||
* The useful ranges (assuming a 32 Mhz system clock) are:
|
||||
* TC_CLKSEL_DIV1_gc - good for about 500 Hz to 125 Khz practical upper limit
|
||||
* TC_CLKSEL_DIV2_gc - good for about 250 Hz to 62 KHz
|
||||
* TC_CLKSEL_DIV4_gc - good for about 125 Hz to 31 KHz
|
||||
* TC_CLKSEL_DIV8_gc - good for about 62 Hz to 16 KHz
|
||||
* TC_CLKSEL_DIV64_gc - good for about 8 Hz to 2 Khz
|
||||
*/
|
||||
#define PWM1_CTRLA_CLKSEL TC_CLKSEL_DIV1_gc // starting clock select value
|
||||
#define PWM1_CTRLB (3 | TC0_CCBEN_bm) // single slope PWM enabled on channel B
|
||||
#define PWM1_ISR_vect TCD1_CCB_vect // must match timer assignments in system.h
|
||||
#define PWM1_INTCTRLB 0 // timer interrupt level (0=off, 1=lo, 2=med, 3=hi)
|
||||
|
||||
#define PWM2_CTRLA_CLKSEL TC_CLKSEL_DIV1_gc
|
||||
#define PWM2_CTRLB 3 // single slope PWM enabled, no output channel
|
||||
//#define PWM2_CTRLB (3 | TC0_CCBEN_bm) // single slope PWM enabled on channel B
|
||||
#define PWM2_ISR_vect TCE1_CCB_vect // must match timer assignments in system.h
|
||||
#define PWM2_INTCTRLB 0 // timer interrupt level (0=off, 1=lo, 2=med, 3=hi)
|
||||
Motate::PWMOutputPin<Motate::kSpindle_PwmPinNumber> spindle_pwm_pin {Motate::kNormal, P1_PWM_FREQUENCY};
|
||||
Motate::PWMOutputPin<Motate::kSpindle_Pwm2PinNumber> secondary_pwm_pin {Motate::kNormal, P1_PWM_FREQUENCY}; // assume the same frequency, to start with at least
|
||||
|
||||
/***** PWM code *****/
|
||||
/*
|
||||
@@ -126,8 +99,14 @@ stat_t pwm_set_duty(uint8_t chan, float duty)
|
||||
if (duty > 1.0) { return (STAT_INPUT_EXCEEDS_MAX_VALUE);}
|
||||
|
||||
if (chan == PWM_1) {
|
||||
if (spindle_pwm_pin.isNull()) {
|
||||
cm_alarm(STAT_ALARM, "attempt to turn on a non-existant spindle");
|
||||
}
|
||||
spindle_pwm_pin = duty;
|
||||
} else if (chan == PWM_2) {
|
||||
if (secondary_pwm_pin.isNull()) {
|
||||
cm_alarm(STAT_ALARM, "attempt to turn on a non-existant spindle");
|
||||
}
|
||||
secondary_pwm_pin = duty;
|
||||
}
|
||||
|
||||
|
||||
@@ -862,13 +862,13 @@
|
||||
// *** PWM Settings *** //
|
||||
|
||||
#ifndef P1_PWM_FREQUENCY
|
||||
#define P1_PWM_FREQUENCY 100.0 // in Hz
|
||||
#define P1_PWM_FREQUENCY 100 // in Hz
|
||||
#endif
|
||||
#ifndef P1_CW_SPEED_LO
|
||||
#define P1_CW_SPEED_LO 7900.0 // in RPM (arbitrary units)
|
||||
#define P1_CW_SPEED_LO 7900 // in RPM (arbitrary units)
|
||||
#endif
|
||||
#ifndef P1_CW_SPEED_HI
|
||||
#define P1_CW_SPEED_HI 12800.0
|
||||
#define P1_CW_SPEED_HI 12800
|
||||
#endif
|
||||
#ifndef P1_CW_PHASE_LO
|
||||
#define P1_CW_PHASE_LO 0.13 // phase [0..1]
|
||||
|
||||
Reference in New Issue
Block a user