From 161ca1b8f9099c247940e06fbee7c8f0088e4899 Mon Sep 17 00:00:00 2001 From: Rob Giseburt Date: Tue, 29 Nov 2016 12:45:15 -0600 Subject: [PATCH 1/3] Fixed v9k spindle not functioning. --- g2core/board/G2v9/G2v9k-pinout.h | 4 +- g2core/board/G2v9/motate_pin_assignments.h | 12 +++--- g2core/pwm.cpp | 44 +++++++--------------- 3 files changed, 21 insertions(+), 39 deletions(-) diff --git a/g2core/board/G2v9/G2v9k-pinout.h b/g2core/board/G2v9/G2v9k-pinout.h index 2e37c76b..71256d3f 100755 --- a/g2core/board/G2v9/G2v9k-pinout.h +++ b/g2core/board/G2v9/G2v9k-pinout.h @@ -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 diff --git a/g2core/board/G2v9/motate_pin_assignments.h b/g2core/board/G2v9/motate_pin_assignments.h index 4239e8e0..aca93eaf 100755 --- a/g2core/board/G2v9/motate_pin_assignments.h +++ b/g2core/board/G2v9/motate_pin_assignments.h @@ -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 diff --git a/g2core/pwm.cpp b/g2core/pwm.cpp index 82248fdf..61589443 100755 --- a/g2core/pwm.cpp +++ b/g2core/pwm.cpp @@ -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 spindle_pwm_pin; -static Motate::PWMOutputPin 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 spindle_pwm_pin {Motate::kNormal, P1_PWM_FREQUENCY}; +Motate::PWMOutputPin secondary_pwm_pin {Motate::kNormal, P1_PWM_FREQUENCY}; // assume the same frequency, to start with at least /***** PWM code *****/ /* @@ -99,6 +72,9 @@ stat_t pwm_set_freq(uint8_t chan, float freq) //if (freq > PWM_MAX_FREQ) { return (STAT_INPUT_EXCEEDS_MAX_VALUE);} if (chan == PWM_1) { + if (spindle_pwm_pin.canPWM()) { + cm_alarm(STAT_ALARM, "BOOM"); + } spindle_pwm_pin.setFrequency(freq); } else if (chan == PWM_2) { secondary_pwm_pin.setFrequency(freq); @@ -126,8 +102,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; } From d5c978a4dc37c13dd9e6c14a8de626df124ad6f3 Mon Sep 17 00:00:00 2001 From: Rob Giseburt Date: Wed, 30 Nov 2016 09:00:36 -0600 Subject: [PATCH 2/3] Adjusted P1_* default settings to not be floats. --- g2core/settings/settings_default.h | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/g2core/settings/settings_default.h b/g2core/settings/settings_default.h index 233346c3..341948ff 100755 --- a/g2core/settings/settings_default.h +++ b/g2core/settings/settings_default.h @@ -853,13 +853,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] From da981dea7e253a8359f4bed0ac2ac3c7f0340de0 Mon Sep 17 00:00:00 2001 From: Rob Giseburt Date: Thu, 15 Dec 2016 09:59:41 -0600 Subject: [PATCH 3/3] Removed debugging code that made it to commit on accident. --- g2core/pwm.cpp | 3 --- 1 file changed, 3 deletions(-) diff --git a/g2core/pwm.cpp b/g2core/pwm.cpp index 61589443..ce740ff5 100755 --- a/g2core/pwm.cpp +++ b/g2core/pwm.cpp @@ -72,9 +72,6 @@ stat_t pwm_set_freq(uint8_t chan, float freq) //if (freq > PWM_MAX_FREQ) { return (STAT_INPUT_EXCEEDS_MAX_VALUE);} if (chan == PWM_1) { - if (spindle_pwm_pin.canPWM()) { - cm_alarm(STAT_ALARM, "BOOM"); - } spindle_pwm_pin.setFrequency(freq); } else if (chan == PWM_2) { secondary_pwm_pin.setFrequency(freq);