diff --git a/CHANGELOG.md b/CHANGELOG.md index c397930..393f359 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,14 @@ OneFinity CNC Controller Firmware Changelog Note: This firmware was forked from version 0.4.14 of the Buildbotics firmware Buildbotics Changelog is provided below +## v1.0.6 + - Tweaked stall homing procedure to clear stepper stall condition before homing + - Modified motor homing parameters (8 microsteps, 1.688 m/min search velocity, 2 stall volts, 1 stall current, 1.5mm zero backoff) + - Added pop up message while loading/simulating file on upload + - Decreased max velocity in default settings for X and Y axes + - Restored jerk to 1000 on all axes + - Fixed issue with default units not displaying on Control page (thanks to Robin Goldstone) + ## v1.0.5 - Changed the jog commands so that save/restore modal states are not used to avoid situation where spindle/loads could turn back on if the stop button was used instead of the M5/M9 gcode commands. diff --git a/Makefile b/Makefile index 4f08c6a..ee8c2c6 100644 --- a/Makefile +++ b/Makefile @@ -62,7 +62,9 @@ $(GPLAN_MOD): $(GPLAN_IMG) git -C rpi-share/cbang reset --hard FETCH_HEAD git -C rpi-share/camotics fetch git -C rpi-share/camotics reset --hard FETCH_HEAD + git -C rpi-share/camotics checkout ec876c80d20fc19837133087cef0c447df5a939d cp ./scripts/gplan-build.sh rpi-share/ + chmod +x rpi-share/gplan-build.sh sudo ./scripts/rpi-chroot.sh $(GPLAN_IMG) /mnt/host/gplan-build.sh $(GPLAN_IMG): diff --git a/README.md b/README.md index e69de29..8988acf 100644 --- a/README.md +++ b/README.md @@ -0,0 +1 @@ +#OneFinity CNC Controller Firmware diff --git a/package.json b/package.json index 60ddffd..1e3b07e 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "bbctrl", - "version": "1.0.5", + "version": "1.0.6", "homepage": "https://onefinitycnc.com/", "repository": "https://github.com/OneFinityCNC/onefinity", "license": "GPL-3.0+", diff --git a/scripts/gplan-build.sh b/scripts/gplan-build.sh old mode 100644 new mode 100755 diff --git a/scripts/gplan-init-build.sh b/scripts/gplan-init-build.sh old mode 100644 new mode 100755 index 6459f49..6ac69df --- a/scripts/gplan-init-build.sh +++ b/scripts/gplan-init-build.sh @@ -24,6 +24,7 @@ if [ ! -e $GPLAN_IMG ]; then # Init image mkdir -p rpi-share cp ./scripts/gplan-init-dev-img.sh rpi-share + chmod +x ./rpi-share/gplan-init-dev-img.sh sudo ./scripts/rpi-chroot.sh $GPLAN_IMG.tmp /mnt/host/gplan-init-dev-img.sh # Move image diff --git a/scripts/gplan-init-dev-img.sh b/scripts/gplan-init-dev-img.sh old mode 100644 new mode 100755 diff --git a/scripts/install.sh b/scripts/install.sh old mode 100644 new mode 100755 diff --git a/scripts/rpi-chroot.sh b/scripts/rpi-chroot.sh old mode 100644 new mode 100755 index f7b1f0b..35e15be --- a/scripts/rpi-chroot.sh +++ b/scripts/rpi-chroot.sh @@ -1,7 +1,7 @@ #!/bin/bash -ex ROOT="$PWD/rpi-root" -LOOP=9 +LOOP=12 if [ $# -lt 1 ]; then echo "Usage: $0 " diff --git a/scripts/update-bbctrl b/scripts/update-bbctrl old mode 100644 new mode 100755 diff --git a/scripts/upgrade-bbctrl b/scripts/upgrade-bbctrl old mode 100644 new mode 100755 diff --git a/scripts/xinitrc b/scripts/xinitrc index 048eac4..69360a8 100644 --- a/scripts/xinitrc +++ b/scripts/xinitrc @@ -1,4 +1,5 @@ hostinfo.sh & + ratpoison & xset -dpms diff --git a/src/js/app.js b/src/js/app.js index 0e3d076..e2555ad 100644 --- a/src/js/app.js +++ b/src/js/app.js @@ -118,7 +118,8 @@ module.exports = new Vue({ password: '', ipAddress: '0.0.0.0', wifiSSID: '', - confirmShutdown: false + confirmShutdown: false, + diskSpace: '' } }, @@ -309,6 +310,7 @@ module.exports = new Vue({ this.check_ip_address(); this.check_ssid(); + //.check_disk_space(); }.bind(this)) @@ -341,6 +343,20 @@ module.exports = new Vue({ this.$broadcast('wifiSSID', data); }.bind(this)) }, + +// check_disk_space : function() { +// $.ajax({ +// type: 'GET', +// url: 'diskinfo.txt', +// data: {hid: this.state.hid}, +// cache: false +// +// }).done(function (data) { +// console.debug('>', data); +// this.diskSpace = data; +// this.$broadcast('diskSpace', data); +// }.bind(this)) +// }, get_ip_address : function() { console.debug('get_ip>', this.ipAddress); @@ -352,11 +368,21 @@ module.exports = new Vue({ return this.wifiSSID; }, +// get_disk_space : function() { +// console.debug('get_disk>', this.diskSpace); +// return this.diskSpace; +// }, + shutdown : function() { this.confirmShutdown = false; api.put('shutdown'); }, + + reboot : function() { + this.confirmShutdown = false; + api.put('reboot'); + }, connect: function () { this.sock = new Sock('//' + window.location.host + '/sockjs'); diff --git a/src/js/control-view.js b/src/js/control-view.js index 01295b1..b0ca095 100644 --- a/src/js/control-view.js +++ b/src/js/control-view.js @@ -73,7 +73,8 @@ module.exports = { ask_home: true, ask_home_msg: false, ask_zero_xy_msg: false, - ask_zero_z_msg: false + ask_zero_z_msg: false, + showGcodeMessage: false } }, @@ -92,6 +93,19 @@ module.exports = { }, immediate: true }, + + 'state.bitDiameter': { + handler: function (bitDiameter) { + console.log("New bitDiameter " + bitDiameter); + console.log("Units: " + this.mach_units); + if(this.mach_units == 'IMPERIAL') + this.tool_diameter = bitDiameter / 25.4; + else + this.tool_diameter = bitDiameter; + console.log("Tool diameter: " + this.tool_diameter); + }, + immediate: true + }, mach_units: function (units) { @@ -508,6 +522,7 @@ module.exports = { if (typeof toolpath.progress == 'undefined') { toolpath.filename = file; this.toolpath_progress = 1; + this.showGcodeMessage = false; this.toolpath = toolpath; var state = this.$root.state; @@ -518,6 +533,7 @@ module.exports = { } } else { + this.showGcodeMessage = true; this.toolpath_progress = toolpath.progress; this.load_toolpath(file, file_time); // Try again } @@ -590,7 +606,7 @@ module.exports = { home: function (axis) { this.ask_home = false; - this.ask_home_msg = false; + this.ask_home_msg = false; if (typeof axis == 'undefined') api.put('home'); diff --git a/src/pug/index.pug b/src/pug/index.pug index e42f4ba..8d40cbb 100644 --- a/src/pug/index.pug +++ b/src/pug/index.pug @@ -87,13 +87,15 @@ html(lang="en") li.pure-menu-heading a.pure-menu-link(href="#help") Help - button.pure-button.pure-button-primary(@click="confirmShutdown = true") Shutdown + button.pure-button.pure-button-primary(@click="confirmShutdown = true", style="width: 100%") + .fa.fa-power-off message(:show.sync="confirmShutdown") h3(slot="header") Confirm shutdown? p(slot="body") Please wait for black screen before switching off power. div(slot="footer") button.pure-button(@click="confirmShutdown = false") Cancel button.pure-button.button-success(@click="shutdown") Shutdown + button.pure-button.button-success(@click="reboot") Restart #main diff --git a/src/pug/templates/admin-general-view.pug b/src/pug/templates/admin-general-view.pug index 235240a..79b1df6 100644 --- a/src/pug/templates/admin-general-view.pug +++ b/src/pug/templates/admin-general-view.pug @@ -29,8 +29,8 @@ script#admin-general-view-template(type="text/x-template") #admin-general h2 Firmware button.pure-button.pure-button-primary(@click="check") Check - button.pure-button.pure-button-primary(@click="upgrade") Upgrade - label.pure-button.pure-button-primary(@click="upload_firmware") Upload + button.pure-button.pure-button-primary(@click="upgrade") Upgrade via Web + label.pure-button.pure-button-primary(@click="upload_firmware") Upgrade via File form.upload-firmware.file-upload input(type="file", accept=".bz2", @change="upload") diff --git a/src/pug/templates/control-view.pug b/src/pug/templates/control-view.pug index db851e2..bad4a5f 100644 --- a/src/pug/templates/control-view.pug +++ b/src/pug/templates/control-view.pug @@ -113,6 +113,17 @@ script#control-view-template(type="text/x-template") div(slot="footer") button.pure-button(@click=`toolpath_msg['${axis}'] = false`) | OK + + + message(:show.sync="showGcodeMessage") + h3(slot="header") Processing New File + + div(slot="body") + h3 Please wait.. + p Simulating GCode to check for errors, calculate ETA and generate 3D view. + + div(slot="footer") + label Simulating {{(toolpath_progress || 0) | percent}} message(:show.sync=`ask_home_msg`) h3(slot="header") Home Machine diff --git a/src/pwr/main.c b/src/pwr/main.c index cddef59..6dd915d 100644 --- a/src/pwr/main.c +++ b/src/pwr/main.c @@ -369,7 +369,7 @@ static void validate_input_voltage() { static void charge_caps() { IO_PORT_SET(SHUNT_PIN); // Disable shunt (hi) - delay(5); + delay(1000); IO_PORT_SET(PC2_PIN); //Enable pre-charge circuit delay(CAP_PRECHARGE_PERIOD); //Wait for Vs caps to charge IO_PORT_CLR(PC2_PIN); //Disable pre-charge circuit diff --git a/src/py/bbctrl/Ctrl.py b/src/py/bbctrl/Ctrl.py index 9503ee2..b3b443f 100644 --- a/src/py/bbctrl/Ctrl.py +++ b/src/py/bbctrl/Ctrl.py @@ -101,6 +101,7 @@ class Ctrl(object): def configure(self): # Indirectly configures state via calls to config() and the AVR self.config.reload() + self.state.init() def ready(self): diff --git a/src/py/bbctrl/Mach.py b/src/py/bbctrl/Mach.py index 285faa1..09315f9 100644 --- a/src/py/bbctrl/Mach.py +++ b/src/py/bbctrl/Mach.py @@ -51,6 +51,10 @@ axis_homing_procedure = ''' ''' stall_homing_procedure = ''' + G91 G1 %(axis)s [#<_%(axis)s_zero_backoff> * -1] F[#<_%(axis)s_search_velocity>] + G4 250 + G91 G1 %(axis)s [#<_%(axis)s_zero_backoff>] F[#<_%(axis)s_search_velocity>] + G4 250 G28.2 %(axis)s0 F[#<_%(axis)s_search_velocity>] G38.6 %(axis)s[#<_%(axis)s_home_travel>] G91 G1 G53 %(axis)s[#<_%(axis)s_zero_backoff>] F100 diff --git a/src/py/bbctrl/Planner.py b/src/py/bbctrl/Planner.py index 05e928e..0b2e1b3 100644 --- a/src/py/bbctrl/Planner.py +++ b/src/py/bbctrl/Planner.py @@ -82,6 +82,7 @@ class Planner(): def get_config(self, mdi, with_limits): state = self.ctrl.state config = self.ctrl.config + is_pwm = config.get('tool-type') == 'PWM Spindle' cfg = { # NOTE Must get current units not configured default units @@ -89,7 +90,7 @@ class Planner(): 'max-vel': state.get_axis_vector('vm', 1000), 'max-accel': state.get_axis_vector('am', 1000000), 'max-jerk': state.get_axis_vector('jm', 1000000), - 'rapid-auto-off': config.get('rapid-auto-off'), + 'rapid-auto-off': config.get('rapid-auto-off') and is_pwm, 'max-blend-error': config.get('max-deviation'), 'max-merge-error': config.get('max-deviation'), 'junction-accel': config.get('junction-accel'), diff --git a/src/py/bbctrl/State.py b/src/py/bbctrl/State.py index dfd46b9..80ff92f 100644 --- a/src/py/bbctrl/State.py +++ b/src/py/bbctrl/State.py @@ -73,14 +73,25 @@ class State(object): self.set_callback(str(i) + 'latch_velocity', lambda name, i = i: self.motor_latch_velocity(i)) - self.set_callback('metric', lambda name: 1 if self.is_metric() else 0) - self.set_callback('imperial', lambda name: 0 if self.is_metric() else 1) + #self.set_callback('metric', lambda name: 1 if self.is_metric() else 0) + #self.set_callback('imperial', lambda name: 0 if self.is_metric() else 1) self.reset() self.load_files() - def is_metric(self): return self.get('units', 'METRIC') == 'METRIC' + #def is_metric(self): return self.get('units', 'METRIC') == 'METRIC' + + def init(self): + # Init machine units + metric = self.ctrl.config.get('units', 'METRIC').upper() == 'METRIC' + self.log.info('INIT Metric %d' % metric) + if not 'metric' in self.vars: self.set('metric', metric) + if not 'imperial' in self.vars: self.set('imperial', not metric) + #Bit diameter for probing + diameter = self.ctrl.config.get('probe-diameter',6.35) + self.log.info('INIT Diameter %f' % diameter) + self.set('bitDiameter',diameter) def reset(self): diff --git a/src/py/bbctrl/http b/src/py/bbctrl/http deleted file mode 100644 index de7005b..0000000 --- a/src/py/bbctrl/http +++ /dev/null @@ -1 +0,0 @@ -../../../build/http/ \ No newline at end of file diff --git a/src/py/bbctrl/http b/src/py/bbctrl/http new file mode 120000 index 0000000..de7005b --- /dev/null +++ b/src/py/bbctrl/http @@ -0,0 +1 @@ +../../../build/http/ \ No newline at end of file diff --git a/src/resources/config-template.json b/src/resources/config-template.json index 3d77138..71277ff 100644 --- a/src/resources/config-template.json +++ b/src/resources/config-template.json @@ -462,6 +462,13 @@ }, "probe": { + "probe-diameter": { + "type": "float", + "min": 0, + "max": 10, + "unit": "mm", + "default": 6.35 + }, "probe-xdim": { "type": "float", "unit": "mm", diff --git a/src/resources/onefinity_machinist_defaults.json b/src/resources/onefinity_machinist_defaults.json index 1425070..dd858fb 100644 --- a/src/resources/onefinity_machinist_defaults.json +++ b/src/resources/onefinity_machinist_defaults.json @@ -35,8 +35,8 @@ { "latch-velocity": 0.1, "max-accel": 750, - "max-velocity": 12.75, - "search-velocity": 0.844, + "max-velocity": 10, + "search-velocity": 1.688, "travel-per-rev": 10, "idle-current": 0.5, "drive-current": 2.8, @@ -44,11 +44,11 @@ "enabled": true, "homing-mode": "stall-min", "reverse": false, - "stall-microstep": 16, + "stall-microstep": 8, "min-soft-limit": 0, "max-switch": "disabled", "step-angle": 1.8, - "stall-current": 0.9, + "stall-current": 1.0, "stall-sample-time": 200, "microsteps": 16, "stall-volts": 2, @@ -61,8 +61,8 @@ { "latch-velocity": 0.1, "max-accel": 750, - "max-velocity": 12.75, - "search-velocity": 0.844, + "max-velocity": 10, + "search-velocity": 1.688, "travel-per-rev": 10, "idle-current": 0.5, "drive-current": 2.8, @@ -70,7 +70,7 @@ "enabled": true, "homing-mode": "stall-min", "reverse": false, - "stall-microstep": 16, + "stall-microstep": 8, "min-soft-limit": 0, "max-switch": "disabled", "step-angle": 1.8, diff --git a/src/resources/onefinity_woodworker_defaults.json b/src/resources/onefinity_woodworker_defaults.json index ec9ed80..a00bc36 100644 --- a/src/resources/onefinity_woodworker_defaults.json +++ b/src/resources/onefinity_woodworker_defaults.json @@ -35,8 +35,8 @@ { "latch-velocity": 0.1, "max-accel": 750, - "max-velocity": 12.75, - "search-velocity": 0.844, + "max-velocity": 10, + "search-velocity": 1.688, "travel-per-rev": 10, "idle-current": 0.5, "drive-current": 2.8, @@ -44,7 +44,7 @@ "enabled": true, "homing-mode": "stall-min", "reverse": false, - "stall-microstep": 16, + "stall-microstep": 8, "min-soft-limit": 0, "max-switch": "disabled", "step-angle": 1.8, @@ -61,8 +61,8 @@ { "latch-velocity": 0.1, "max-accel": 750, - "max-velocity": 12.75, - "search-velocity": 0.844, + "max-velocity": 10, + "search-velocity": 1.688, "travel-per-rev": 10, "idle-current": 0.5, "drive-current": 2.8, @@ -70,7 +70,7 @@ "enabled": true, "homing-mode": "stall-min", "reverse": false, - "stall-microstep": 16, + "stall-microstep": 8, "min-soft-limit": 0, "max-switch": "disabled", "step-angle": 1.8,