From 760d4d4a128b11ff0649bec537ec34774ef86d73 Mon Sep 17 00:00:00 2001 From: Joseph Coffland Date: Wed, 28 Feb 2018 15:27:41 -0800 Subject: [PATCH] Dont enable any tool by default. --- CHANGELOG.md | 3 + package.json | 2 +- src/avr/src/huanyang.c | 93 +++++++++++++++++++----------- src/avr/src/huanyang.h | 1 + src/avr/src/pwm_spindle.c | 11 ++++ src/avr/src/pwm_spindle.h | 1 + src/avr/src/spindle.c | 26 ++++++--- src/avr/src/vars.def | 2 +- src/resources/config-template.json | 4 +- 9 files changed, 99 insertions(+), 44 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 5daaefa..642ed80 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,9 @@ Buildbotics CNC Controller Firmware Change Log ============================================== +## v0.3.18 + - Don't enable any tool by default. + ## v0.3.17 - Fixed pausing fail near end of run bug. - Show "Upgrading firmware" when upgrading. diff --git a/package.json b/package.json index c018713..4bee517 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "bbctrl", - "version": "0.3.17", + "version": "0.3.18", "homepage": "http://buildbotics.com/", "repository": "https://github.com/buildbotics/bbctrl-firmware", "license": "GPL-3.0+", diff --git a/src/avr/src/huanyang.c b/src/avr/src/huanyang.c index 207f736..547332a 100644 --- a/src/avr/src/huanyang.c +++ b/src/avr/src/huanyang.c @@ -123,6 +123,7 @@ typedef struct { uint32_t last; uint8_t retry; + uint8_t shutdown; bool connected; bool changed; float speed; @@ -238,8 +239,10 @@ static bool _update(int index) { switch (index) { case 0: { // Update direction uint8_t state = HUANYANG_STOP; - if (0 < ha.speed) state = HUANYANG_RUN; - else if (ha.speed < 0) state = HUANYANG_RUN | HUANYANG_REV_FWD; + if (!ha.shutdown) { + if (0 < ha.speed) state = HUANYANG_RUN; + else if (ha.speed < 0) state = HUANYANG_RUN | HUANYANG_REV_FWD; + } _set_command1(HUANYANG_CTRL_WRITE, state); @@ -257,11 +260,14 @@ static bool _update(int index) { // Clamp frequency if (ha.max_freq < freq) freq = ha.max_freq; if (freq < ha.min_freq) freq = ha.min_freq; + if (ha.shutdown) freq = 0; // Frequency write command uint16_t f = freq * 100; _set_command2(HUANYANG_FREQ_WRITE, f >> 8, f); + if (1 < ha.shutdown) ha.shutdown--; + return true; } @@ -308,7 +314,7 @@ static void _next_command(); static void _next_state() { - if (ha.changed) { + if (ha.changed || ha.shutdown) { ha.next_command_cb = _update; ha.changed = false; @@ -342,7 +348,51 @@ static bool _check_response() { } +static void _reset(bool halt) { + _set_dre_interrupt(false); + _set_txc_interrupt(false); + _set_rxc_interrupt(false); + _set_write(true); // RS485 write mode + + // Flush USART + uint8_t x = HUANYANG_PORT.DATA; + x = HUANYANG_PORT.STATUS; + x = x; + + // Save settings + uint8_t id = ha.id; + float speed = ha.speed; + bool debug = ha.debug; + + // Clear state + memset(&ha, 0, sizeof(ha)); + + // Restore settings + ha.id = id; + ha.speed = speed; + ha.debug = debug; + ha.changed = true; + + if (!halt) _next_state(); +} + + static void _next_command() { + if (ha.shutdown == 1) { + _reset(true); + + // Disable USART + HUANYANG_PORT.CTRLA = 0; + HUANYANG_PORT.CTRLC = 0; + HUANYANG_PORT.CTRLB = 0; + + // Float write pins + DIRCLR_PIN(RS485_DI_PIN); + DIRCLR_PIN(RS485_RW_PIN); + + return; + } + if (ha.next_command_cb && ha.next_command_cb(ha.command_index++)) { ha.response_length = _response_length(ha.command[1]); @@ -400,7 +450,7 @@ ISR(HUANYANG_TXC_vect) { // Data received interrupt ISR(HUANYANG_RXC_vect) { - ha.response[ha.current_offset++] = USARTD1.DATA; + ha.response[ha.current_offset++] = HUANYANG_PORT.DATA; if (ha.current_offset == ha.response_length) { _set_rxc_interrupt(false); @@ -430,17 +480,20 @@ void hy_init() { _set_baud(3325, 0b1101); // 9600 @ 32MHz with 2x USART // No parity, 8 data bits, 1 stop bit - USARTD1.CTRLC = USART_CMODE_ASYNCHRONOUS_gc | USART_PMODE_DISABLED_gc | + HUANYANG_PORT.CTRLC = USART_CMODE_ASYNCHRONOUS_gc | USART_PMODE_DISABLED_gc | USART_CHSIZE_8BIT_gc; // Configure receiver and transmitter - USARTD1.CTRLB = USART_RXEN_bm | USART_TXEN_bm | USART_CLK2X_bm; + HUANYANG_PORT.CTRLB = USART_RXEN_bm | USART_TXEN_bm | USART_CLK2X_bm; ha.id = HUANYANG_ID; hy_reset(); } +void hy_deinit() {ha.shutdown = 5;} + + void hy_set(float speed) { if (ha.speed != speed) { if (ha.debug) STATUS_DEBUG("huanyang: speed=%0.2f", speed); @@ -450,33 +503,7 @@ void hy_set(float speed) { } -void hy_reset() { - _set_dre_interrupt(false); - _set_txc_interrupt(false); - _set_rxc_interrupt(false); - _set_write(true); // RS485 write mode - - // Flush USART - uint8_t x = USARTD1.DATA; - x = USARTD1.STATUS; - x = x; - - // Save settings - uint8_t id = ha.id; - float speed = ha.speed; - bool debug = ha.debug; - - // Clear state - memset(&ha, 0, sizeof(ha)); - - // Restore settings - ha.id = id; - ha.speed = speed; - ha.debug = debug; - ha.changed = true; - - _next_state(); -} +void hy_reset() {_reset(false);} void hy_rtc_callback() { diff --git a/src/avr/src/huanyang.h b/src/avr/src/huanyang.h index fdc44ff..ae0cfa7 100644 --- a/src/avr/src/huanyang.h +++ b/src/avr/src/huanyang.h @@ -31,6 +31,7 @@ void hy_init(); +void hy_deinit(); void hy_set(float speed); void hy_reset(); void hy_rtc_callback(); diff --git a/src/avr/src/pwm_spindle.c b/src/avr/src/pwm_spindle.c index 942f40b..f93a9cf 100644 --- a/src/avr/src/pwm_spindle.c +++ b/src/avr/src/pwm_spindle.c @@ -126,6 +126,17 @@ void pwm_spindle_init() { } +void pwm_spindle_deinit() { + _set_enable(false); + + // Float PWM output pin + DIRCLR_PIN(SPIN_PWM_PIN); + + // Disable clock + TIMER_PWM.CTRLA = 0; +} + + void pwm_spindle_set(float speed) { if (speed) _set_dir(0 < speed); spindle.speed = fabs(speed); diff --git a/src/avr/src/pwm_spindle.h b/src/avr/src/pwm_spindle.h index 1358062..301694e 100644 --- a/src/avr/src/pwm_spindle.h +++ b/src/avr/src/pwm_spindle.h @@ -31,5 +31,6 @@ void pwm_spindle_init(); +void pwm_spindle_deinit(); void pwm_spindle_set(float speed); void pwm_spindle_stop(); diff --git a/src/avr/src/spindle.c b/src/avr/src/spindle.c index ee3730e..d9d53f8 100644 --- a/src/avr/src/spindle.c +++ b/src/avr/src/spindle.c @@ -34,8 +34,9 @@ typedef enum { - SPINDLE_TYPE_HUANYANG, + SPINDLE_TYPE_DISABLED, SPINDLE_TYPE_PWM, + SPINDLE_TYPE_HUANYANG, } spindle_type_t; @@ -46,13 +47,10 @@ typedef struct { } spindle_t; -static spindle_t spindle = {0}; +static spindle_t spindle = {SPINDLE_TYPE_DISABLED,}; -void spindle_init() { - pwm_spindle_init(); - hy_init(); -} +void spindle_init() {} void spindle_set_speed(float speed) { @@ -61,6 +59,7 @@ void spindle_set_speed(float speed) { if (spindle.reversed) speed = -speed; switch (spindle.type) { + case SPINDLE_TYPE_DISABLED: break; case SPINDLE_TYPE_PWM: pwm_spindle_set(speed); break; case SPINDLE_TYPE_HUANYANG: hy_set(speed); break; } @@ -72,6 +71,7 @@ float spindle_get_speed() {return spindle.speed;} void spindle_stop() { switch (spindle.type) { + case SPINDLE_TYPE_DISABLED: break; case SPINDLE_TYPE_PWM: pwm_spindle_stop(); break; case SPINDLE_TYPE_HUANYANG: hy_stop(); break; } @@ -85,8 +85,20 @@ void set_spindle_type(uint8_t value) { if (value != spindle.type) { float speed = spindle.speed; - spindle_set_speed(0); + switch (spindle.type) { + case SPINDLE_TYPE_DISABLED: break; + case SPINDLE_TYPE_PWM: pwm_spindle_deinit(); break; + case SPINDLE_TYPE_HUANYANG: hy_deinit(); break; + } + spindle.type = value; + + switch (spindle.type) { + case SPINDLE_TYPE_DISABLED: break; + case SPINDLE_TYPE_PWM: pwm_spindle_init(); break; + case SPINDLE_TYPE_HUANYANG: hy_init(); break; + } + spindle_set_speed(speed); } } diff --git a/src/avr/src/vars.def b/src/avr/src/vars.def index 7fb8edb..b681d0c 100644 --- a/src/avr/src/vars.def +++ b/src/avr/src/vars.def @@ -82,7 +82,7 @@ VAR(output_mode, om, u8, OUTS, 1, 1, "Output pin mode") VAR(analog_input, ai, f32, ANALOG, 0, 0, "Analog input pins") // Spindle -VAR(spindle_type, st, u8, 0, 1, 1, "PWM=0 or HUANYANG=1") +VAR(spindle_type, st, u8, 0, 1, 1, "DISABLED=0, PWM=1 or HUANYANG=2") VAR(spin_reversed, sr, bool, 0, 1, 1, "Reverse spin") VAR(max_spin, sx, f32, 0, 1, 1, "Maximum spindle speed") VAR(min_spin, sm, f32, 0, 1, 1, "Minimum spindle speed") diff --git a/src/resources/config-template.json b/src/resources/config-template.json index b05111b..15623b4 100644 --- a/src/resources/config-template.json +++ b/src/resources/config-template.json @@ -153,8 +153,8 @@ "tool": { "spindle-type": { "type": "enum", - "values": ["HUANYANG", "PWM"], - "default": "HUANYANG", + "values": ["DISABLED", "PWM", "HUANYANG"], + "default": "DISABLED", "code": "st" }, "spin-reversed": { -- 2.27.0