Merge branch 'master' of https://github.com/TimEvWw/farmbot-arduino-controller
commit
c1bf9d659c
|
@ -0,0 +1,46 @@
|
|||
version: 2.1
|
||||
|
||||
jobs:
|
||||
build:
|
||||
machine: true
|
||||
parameters:
|
||||
arduino_version:
|
||||
description: "Arduino version"
|
||||
default: "1.8.11"
|
||||
type: string
|
||||
steps:
|
||||
- checkout
|
||||
- restore_cache:
|
||||
keys:
|
||||
- arduino-<< parameters.arduino_version >>
|
||||
- run:
|
||||
name: Install Arduino
|
||||
command: |
|
||||
if [ ! -d "$HOME/arduino-<< parameters.arduino_version >>" ]
|
||||
then
|
||||
wget https://downloads.arduino.cc/arduino-<< parameters.arduino_version >>-linux64.tar.xz
|
||||
tar xf arduino-<< parameters.arduino_version >>-linux64.tar.xz -C $HOME
|
||||
fi
|
||||
- save_cache:
|
||||
key: arduino-<< parameters.arduino_version >>
|
||||
paths:
|
||||
- ~/arduino-<< parameters.arduino_version >>
|
||||
- run:
|
||||
name: Compile
|
||||
command: make
|
||||
- run:
|
||||
name: Check strings
|
||||
command: make strings_test
|
||||
- run:
|
||||
name: Check software version
|
||||
command: |
|
||||
export SOFTWARE_VERSION=$(cat src/Config.h | grep -w SOFTWARE_VERSION | cut -d'"' -f 2 | cut -d'\' -f 1)
|
||||
strings bin/arduino_firmware.hex.bin | grep $SOFTWARE_VERSION
|
||||
export SHORT_COMMIT_SHA=$(echo $CIRCLE_SHA1 | cut -c1-8)
|
||||
export COMMIT_SUFFIX=$(strings bin/arduino_firmware.hex.bin | grep $SHORT_COMMIT_SHA)
|
||||
export NEW_FW_DIR=bin/$SOFTWARE_VERSION$COMMIT_SUFFIX
|
||||
mkdir $NEW_FW_DIR
|
||||
rm bin/*.bin
|
||||
mv bin/*.hex $NEW_FW_DIR
|
||||
- store_artifacts:
|
||||
path: bin
|
|
@ -43,3 +43,4 @@ bin
|
|||
src.ino.cpp
|
||||
src.ino.mega.hex
|
||||
src.ino.with_bootloader.mega.hex
|
||||
src/CommitSHA.h
|
||||
|
|
28
Makefile
28
Makefile
|
@ -8,11 +8,16 @@ FBARDUINO_FIRMWARE_LIB_BUILD_DIR ?= $(BUILD_DIR)/libraries
|
|||
|
||||
ARDUINO_INSTALL_DIR ?= $(HOME)/arduino-1.8.11
|
||||
|
||||
# Get current commit SHA
|
||||
COMMIT_SHA := $(shell git -C $(FBARDUINO_FIRMWARE_SRC_DIR)/.. rev-parse --short=8 HEAD)
|
||||
MODIFIER := $(shell echo $$(if [ -z "$$(git -C $(FBARDUINO_FIRMWARE_SRC_DIR)/.. status -s -uall)" ];then echo "";else echo "+";fi))
|
||||
CREATE_COMMIT_SHA_H := $(shell echo "\#ifndef COMMIT_SHA_H_\n\#define COMMIT_SHA_H_\n\#define SOFTWARE_COMMIT \"-$(COMMIT_SHA)$(MODIFIER)\"\n\#endif" > $(FBARDUINO_FIRMWARE_SRC_DIR)/CommitSHA.h)
|
||||
|
||||
# Files to be tracked for make to know to rebuild.
|
||||
COPY_INO := $(shell cp $(FBARDUINO_FIRMWARE_SRC_DIR)/src.ino $(FBARDUINO_FIRMWARE_SRC_DIR)/src.ino.cpp)
|
||||
CXX_SRC := $(wildcard $(FBARDUINO_FIRMWARE_SRC_DIR)/*.cpp)
|
||||
SRC := $(CXX_SRC)
|
||||
SRC_DEPS := $(SRC) $(wildcard $(FBARDUINO_FIRMWARE_SRC_DIR)/*.h)
|
||||
HEADERS := $(wildcard $(FBARDUINO_FIRMWARE_SRC_DIR)/*.h)
|
||||
|
||||
# Object files and Dependency files That will eventually be built.
|
||||
CXX_OBJ := $(CXX_SRC:.cpp=.o)
|
||||
|
@ -42,7 +47,7 @@ include lib/targets/farmduino_k14.Makefile
|
|||
include lib/targets/farmduino_k15.Makefile
|
||||
include lib/targets/express_k10.Makefile
|
||||
|
||||
.PHONY: all clean force_clean remove_ino_copy \
|
||||
.PHONY: all clean strings_test force_clean remove_temp \
|
||||
dep_core dep_core_clean \
|
||||
dep_Servo dep_Servo_clean \
|
||||
dep_SPI dep_SPI_clean \
|
||||
|
@ -57,9 +62,9 @@ DEPS := $(DEP_CORE) $(DEP_SPI) $(DEP_Servo) $(DEP_EEPROM)
|
|||
DEPS_OBJ := $(DEP_SPI_OBJ) $(DEP_Servo_OBJ) $(DEP_EEPROM_OBJ)
|
||||
DEPS_CFLAGS := $(DEP_CORE_CFLAGS) $(DEP_SPI_CFLAGS) $(DEP_Servo_CFLAGS) $(DEP_EEPROM_CFLAGS)
|
||||
|
||||
all: $(BIN_DIR) $(DEPS) target_ramps_v14 target_farmduino_v10 target_farmduino_k14 target_farmduino_k15 target_express_k10 remove_ino_copy
|
||||
all: $(BIN_DIR) $(DEPS) target_ramps_v14 target_farmduino_v10 target_farmduino_k14 target_farmduino_k15 target_express_k10 remove_temp
|
||||
|
||||
clean: remove_ino_copy target_ramps_v14_clean target_farmduino_v10_clean target_farmduino_k14_clean target_farmduino_k15_clean target_express_k10_clean
|
||||
clean: remove_temp target_ramps_v14_clean target_farmduino_v10_clean target_farmduino_k14_clean target_farmduino_k15_clean target_express_k10_clean
|
||||
|
||||
strings_test: all
|
||||
$(OBJ_COPY) -I ihex $(TARGET_ramps_v14_HEX) -O binary $(TARGET_ramps_v14_HEX).bin
|
||||
|
@ -67,17 +72,18 @@ strings_test: all
|
|||
$(OBJ_COPY) -I ihex $(TARGET_farmduino_k14_HEX) -O binary $(TARGET_farmduino_k14_HEX).bin
|
||||
$(OBJ_COPY) -I ihex $(TARGET_farmduino_k15_HEX) -O binary $(TARGET_farmduino_k15_HEX).bin
|
||||
$(OBJ_COPY) -I ihex $(TARGET_express_k10_HEX) -O binary $(TARGET_express_k10_HEX).bin
|
||||
@strings $(TARGET_ramps_v14_HEX).bin | grep -q "6.5.0.R"
|
||||
@strings $(TARGET_farmduino_v10_HEX).bin | grep -q "6.5.0.F"
|
||||
@strings $(TARGET_farmduino_k14_HEX).bin | grep -q "6.5.0.G"
|
||||
@strings $(TARGET_farmduino_k15_HEX).bin | grep -q "6.5.0.H"
|
||||
@strings $(TARGET_express_k10_HEX).bin | grep -q "6.5.0.E"
|
||||
@strings $(TARGET_ramps_v14_HEX).bin | grep -q ".R.genesisK12"
|
||||
@strings $(TARGET_farmduino_v10_HEX).bin | grep -q ".F.genesisK13"
|
||||
@strings $(TARGET_farmduino_k14_HEX).bin | grep -q ".G.genesisK14"
|
||||
@strings $(TARGET_farmduino_k15_HEX).bin | grep -q ".H.genesisK15"
|
||||
@strings $(TARGET_express_k10_HEX).bin | grep -q ".E.expressK10"
|
||||
|
||||
force_clean: remove_ino_copy
|
||||
force_clean: remove_temp
|
||||
$(RM) -r $(BUILD_DIR) $(BIN_DIR)
|
||||
|
||||
$(BIN_DIR):
|
||||
$(MKDIR_P) $(BIN_DIR)
|
||||
|
||||
remove_ino_copy:
|
||||
remove_temp:
|
||||
$(RM) $(FBARDUINO_FIRMWARE_SRC_DIR)/src.ino.cpp
|
||||
$(RM) $(FBARDUINO_FIRMWARE_SRC_DIR)/CommitSHA.h
|
||||
|
|
306
README.md
306
README.md
|
@ -57,7 +57,7 @@ Software overview
|
|||
|
||||
All files are in `/src`
|
||||
|
||||
Farmbot_arduino_controller contains the setup() and main(). This is the main sequence:
|
||||
`src.ino` contains the setup() and main loop(). This is the main sequence:
|
||||
|
||||
```
|
||||
+--------------------------+
|
||||
|
@ -84,52 +84,26 @@ Farmbot_arduino_controller contains the setup() and main(). This is the main seq
|
|||
|
||||
```
|
||||
|
||||
Board Feature Overview
|
||||
======================
|
||||
| board | kit | pin encoders | SPI encoders | SPI motors | SPI stall detection |
|
||||
|:----------------- |:------------ |:------------:|:------------:|:----------:|:-------------------:|
|
||||
| RAMPS_V14 | Genesis v1.2 | x | | | |
|
||||
| FARMDUINO_V10 | Genesis v1.3 | x | | | |
|
||||
| FARMDUINO_V14 | Genesis v1.4 | | x | | |
|
||||
| FARMDUINO_V30 | Genesis v1.5 | | x | x | |
|
||||
| FARMDUINO_EXP_V20 | Express v1.0 | | | x | x |
|
||||
|
||||
Codes used for communication
|
||||
============================
|
||||
|
||||
Pin Numbering
|
||||
-------------
|
||||
IMPORTANT
|
||||
---------
|
||||
|
||||
### RAMPS 1.4 (for other boards, see [/src/pins.h](/src/pins.h))
|
||||
|
||||
Tag |Pin Nr|Comment
|
||||
-----------------|------|-------
|
||||
X_STEP_PIN | 54 | X axis step signal
|
||||
X_DIR_PIN | 55 | X axis direction choice
|
||||
X_ENABLE_PIN | 38 | X axis enable
|
||||
X_MIN_PIN | 3 | X axis end stop at home position
|
||||
X_MAX_PIN | 2 | X axis end stop at far position
|
||||
X_ENCDR_A | 16 | X axis encoder A channel
|
||||
X_ENCDR_B | 17 | X axis encoder B channel
|
||||
X_ENCDR_A_Q | 31 | X axis encoder A channel for quarature (not implemented)
|
||||
X_ENCDR_B_Q | 33 | X axis encoder B channel for quarature (not implemented)
|
||||
Y_STEP_PIN | 60 | Y axis step signal
|
||||
Y_DIR_PIN | 61 | Y axis direction choice
|
||||
Y_ENABLE_PIN | 56 | Y axis enable
|
||||
Y_MIN_PIN | 14 | Y axis end stop at home position
|
||||
Y_MAX_PIN | 15 | Y axis end stop at far position
|
||||
Y_ENCDR_A | 23 | Y axis encoder A channel
|
||||
Y_ENCDR_B | 25 | Y axis encoder B channel
|
||||
Y_ENCDR_A_Q | 35 | Y axis encoder A channel for quarature (not implemented)
|
||||
Y_ENCDR_B_Q | 37 | Y axis encoder B channel for quarature (not implemented)
|
||||
Z_STEP_PIN | 46 | Z axis step signal
|
||||
Z_DIR_PIN | 48 | Z axis direction choice
|
||||
Z_ENABLE_PIN | 62 | Z axis enable
|
||||
Z_MIN_PIN | 18 | Z axis end stop at home position
|
||||
Z_MAX_PIN | 19 | Z axis end stop at far position
|
||||
Z_ENCDR_A | 27 | Z axis encoder A channel
|
||||
Z_ENCDR_B | 29 | Z axis encoder B channel
|
||||
Z_ENCDR_A_Q | 39 | Z axis encoder A channel for quarature (not implemented)
|
||||
Z_ENCDR_B_Q | 41 | Z axis encoder B channel for quarature (not implemented)
|
||||
LED_PIN | 13 | on board LED
|
||||
FAN_PIN | 9 | RAMPS board fan pin
|
||||
HEATER_0_PIN | 10 | RAMPS board heating pin 0
|
||||
HEATER_1_PIN | 8 | RAMPS board heating pin 1
|
||||
SERVO_0_PIN | 4 | Servo motor 0 signal pin
|
||||
SERVO_1_PIN | 5 | Servo motor 1 signal pin
|
||||
SERVO_2_PIN | 6 | Servo motor 2 signal pin
|
||||
SERVO_3_PIN | 11 | Servo motor 3 signal pin
|
||||
Farmbot will NOT move until the configuration has been approved.
|
||||
To approve manually, send 'F22 P2 V1 Q0'
|
||||
|
||||
To move, use the command 'G00 X0 Y0 Z0 Q0' where you type in the coordinates just after X, Y and Z.
|
||||
|
||||
G-Codes
|
||||
-------
|
||||
|
@ -221,6 +195,7 @@ Value |Description
|
|||
1 |Emergency stop
|
||||
2 |Timeout
|
||||
3 |Stall detected
|
||||
4 |Calibration error
|
||||
14 |Invalid command
|
||||
15 |No config
|
||||
|
||||
|
@ -280,112 +255,147 @@ ZB |End stop 2 on z axis |0/1
|
|||
Arduino parameter numbers
|
||||
------------------------
|
||||
|
||||
ID | Name
|
||||
-----|----------------------------
|
||||
2 | PARAM_CONFIG_OK
|
||||
3 | PARAM_USE_EEPROM
|
||||
4 | PARAM_E_STOP_ON_MOV_ERR
|
||||
5 | PARAM_MOV_NR_RETRY
|
||||
11 | MOVEMENT_TIMEOUT_X
|
||||
12 | MOVEMENT_TIMEOUT_Y
|
||||
13 | MOVEMENT_TIMEOUT_Z
|
||||
15 | MOVEMENT_KEEP_ACTIVE_X
|
||||
16 | MOVEMENT_KEEP_ACTIVE_Y
|
||||
17 | MOVEMENT_KEEP_ACTIVE_Z
|
||||
18 | MOVEMENT_HOME_AT_BOOT_X
|
||||
19 | MOVEMENT_HOME_AT_BOOT_Y
|
||||
20 | MOVEMENT_HOME_AT_BOOT_Z
|
||||
21 | MOVEMENT_INVERT_ENDPOINTS_X
|
||||
22 | MOVEMENT_INVERT_ENDPOINTS_Y
|
||||
23 | MOVEMENT_INVERT_ENDPOINTS_Z
|
||||
25 | MOVEMENT_ENABLE_ENDPOINTS_X
|
||||
26 | MOVEMENT_ENABLE_ENDPOINTS_Y
|
||||
27 | MOVEMENT_ENABLE_ENDPOINTS_Z
|
||||
31 | MOVEMENT_INVERT_MOTOR_X
|
||||
32 | MOVEMENT_INVERT_MOTOR_Y
|
||||
33 | MOVEMENT_INVERT_MOTOR_Z
|
||||
36 | MOVEMENT_SECONDARY_MOTOR_X
|
||||
37 | MOVEMENT_SECONDARY_MOTOR_INVERT_X
|
||||
41 | MOVEMENT_STEPS_ACC_DEC_X
|
||||
42 | MOVEMENT_STEPS_ACC_DEC_Y
|
||||
43 | MOVEMENT_STEPS_ACC_DEC_Z
|
||||
45 | MOVEMENT_STOP_AT_HOME_X
|
||||
46 | MOVEMENT_STOP_AT_HOME_Y
|
||||
47 | MOVEMENT_STOP_AT_HOME_Z
|
||||
51 | MOVEMENT_HOME_UP_X
|
||||
52 | MOVEMENT_HOME_UP_Y
|
||||
53 | MOVEMENT_HOME_UP_Z
|
||||
55 | MOVEMENT_STEP_PER_MM_X
|
||||
56 | MOVEMENT_STEP_PER_MM_Y
|
||||
57 | MOVEMENT_STEP_PER_MM_Z
|
||||
61 | MOVEMENT_MIN_SPD_X
|
||||
62 | MOVEMENT_MIN_SPD_Y
|
||||
63 | MOVEMENT_MIN_SPD_Z
|
||||
65 | MOVEMENT_HOME_SPD_X
|
||||
66 | MOVEMENT_HOME_SPD_Y
|
||||
67 | MOVEMENT_HOME_SPD_Z
|
||||
71 | MOVEMENT_MAX_SPD_X
|
||||
72 | MOVEMENT_MAX_SPD_Y
|
||||
73 | MOVEMENT_MAX_SPD_Z
|
||||
75 | MOVEMENT_INVERT_2_ENDPOINTS_X
|
||||
76 | MOVEMENT_INVERT_2_ENDPOINTS_Y
|
||||
77 | MOVEMENT_INVERT_2_ENDPOINTS_Z
|
||||
81 | MOVEMENT_MOTOR_CURRENT_X
|
||||
82 | MOVEMENT_MOTOR_CURRENT_Y
|
||||
83 | MOVEMENT_MOTOR_CURRENT_Z
|
||||
85 | MOVEMENT_STALL_SENSITIVITY_X
|
||||
86 | MOVEMENT_STALL_SENSITIVITY_Y
|
||||
87 | MOVEMENT_STALL_SENSITIVITY_Z
|
||||
91 | MOVEMENT_MICROSTEPS_X
|
||||
92 | MOVEMENT_MICROSTEPS_Y
|
||||
93 | MOVEMENT_MICROSTEPS_Z
|
||||
101 | ENCODER_ENABLED_X
|
||||
102 | ENCODER_ENABLED_Y
|
||||
103 | ENCODER_ENABLED_Z
|
||||
105 | ENCODER_TYPE_X
|
||||
106 | ENCODER_TYPE_Y
|
||||
107 | ENCODER_TYPE_Z
|
||||
111 | ENCODER_MISSED_STEPS_MAX_X
|
||||
112 | ENCODER_MISSED_STEPS_MAX_Y
|
||||
113 | ENCODER_MISSED_STEPS_MAX_Z
|
||||
115 | ENCODER_SCALING_X
|
||||
116 | ENCODER_SCALING_Y
|
||||
117 | ENCODER_SCALING_Z
|
||||
121 | ENCODER_MISSED_STEPS_DECAY_X
|
||||
122 | ENCODER_MISSED_STEPS_DECAY_Y
|
||||
123 | ENCODER_MISSED_STEPS_DECAY_Z
|
||||
125 | ENCODER_USE_FOR_POS_X
|
||||
126 | ENCODER_USE_FOR_POS_Y
|
||||
127 | ENCODER_USE_FOR_POS_Z
|
||||
131 | ENCODER_INVERT_X
|
||||
132 | ENCODER_INVERT_Y
|
||||
133 | ENCODER_INVERT_Z
|
||||
141 | MOVEMENT_AXIS_NR_STEPS_X
|
||||
142 | MOVEMENT_AXIS_NR_STEPS_Y
|
||||
143 | MOVEMENT_AXIS_NR_STEPS_Z
|
||||
145 | MOVEMENT_STOP_AT_MAX_X
|
||||
146 | MOVEMENT_STOP_AT_MAX_Y
|
||||
147 | MOVEMENT_STOP_AT_MAX_Z
|
||||
201 | PIN_GUARD_1_PIN_NR
|
||||
202 | PIN_GUARD_1_TIME_OUT
|
||||
203 | PIN_GUARD_1_ACTIVE_STATE
|
||||
205 | PIN_GUARD_2_PIN_NR
|
||||
206 | PIN_GUARD_2_TIME_OUT
|
||||
207 | PIN_GUARD_2_ACTIVE_STATE
|
||||
211 | PIN_GUARD_3_PIN_NR
|
||||
212 | PIN_GUARD_3_TIME_OUT
|
||||
213 | PIN_GUARD_3_ACTIVE_STATE
|
||||
215 | PIN_GUARD_4_PIN_NR
|
||||
216 | PIN_GUARD_4_TIME_OUT
|
||||
217 | PIN_GUARD_4_ACTIVE_STATE
|
||||
221 | PIN_GUARD_5_PIN_NR
|
||||
222 | PIN_GUARD_5_TIME_OUT
|
||||
223 | PIN_GUARD_5_ACTIVE_STATE
|
||||
ID | Name | Unit | Notes
|
||||
----| ----------------------------------| ----------| ---------------------------------------
|
||||
2 | PARAM_CONFIG_OK | 0 / 1 |
|
||||
3 | PARAM_USE_EEPROM | 0 / 1 |
|
||||
4 | PARAM_E_STOP_ON_MOV_ERR | 0 / 1 |
|
||||
5 | PARAM_MOV_NR_RETRY | integer |
|
||||
11 | MOVEMENT_TIMEOUT_X | seconds |
|
||||
12 | MOVEMENT_TIMEOUT_Y | seconds |
|
||||
13 | MOVEMENT_TIMEOUT_Z | seconds |
|
||||
15 | MOVEMENT_KEEP_ACTIVE_X | 0 / 1 |
|
||||
16 | MOVEMENT_KEEP_ACTIVE_Y | 0 / 1 |
|
||||
17 | MOVEMENT_KEEP_ACTIVE_Z | 0 / 1 |
|
||||
18 | MOVEMENT_HOME_AT_BOOT_X | 0 / 1 |
|
||||
19 | MOVEMENT_HOME_AT_BOOT_Y | 0 / 1 |
|
||||
20 | MOVEMENT_HOME_AT_BOOT_Z | 0 / 1 |
|
||||
21 | MOVEMENT_INVERT_ENDPOINTS_X | 0 / 1 | switch ends
|
||||
22 | MOVEMENT_INVERT_ENDPOINTS_Y | 0 / 1 | switch ends
|
||||
23 | MOVEMENT_INVERT_ENDPOINTS_Z | 0 / 1 | switch ends
|
||||
25 | MOVEMENT_ENABLE_ENDPOINTS_X | 0 / 1 |
|
||||
26 | MOVEMENT_ENABLE_ENDPOINTS_Y | 0 / 1 |
|
||||
27 | MOVEMENT_ENABLE_ENDPOINTS_Z | 0 / 1 |
|
||||
31 | MOVEMENT_INVERT_MOTOR_X | 0 / 1 |
|
||||
32 | MOVEMENT_INVERT_MOTOR_Y | 0 / 1 |
|
||||
33 | MOVEMENT_INVERT_MOTOR_Z | 0 / 1 |
|
||||
36 | MOVEMENT_SECONDARY_MOTOR_X | 0 / 1 |
|
||||
37 | MOVEMENT_SECONDARY_MOTOR_INVERT_X | 0 / 1 |
|
||||
41 | MOVEMENT_STEPS_ACC_DEC_X | steps |
|
||||
42 | MOVEMENT_STEPS_ACC_DEC_Y | steps |
|
||||
43 | MOVEMENT_STEPS_ACC_DEC_Z | steps |
|
||||
45 | MOVEMENT_STOP_AT_HOME_X | 0 / 1 |
|
||||
46 | MOVEMENT_STOP_AT_HOME_Y | 0 / 1 |
|
||||
47 | MOVEMENT_STOP_AT_HOME_Z | 0 / 1 |
|
||||
51 | MOVEMENT_HOME_UP_X | 0 / 1 |
|
||||
52 | MOVEMENT_HOME_UP_Y | 0 / 1 |
|
||||
53 | MOVEMENT_HOME_UP_Z | 0 / 1 |
|
||||
55 | MOVEMENT_STEP_PER_MM_X | steps |
|
||||
56 | MOVEMENT_STEP_PER_MM_Y | steps |
|
||||
57 | MOVEMENT_STEP_PER_MM_Z | steps |
|
||||
61 | MOVEMENT_MIN_SPD_X | steps/s |
|
||||
62 | MOVEMENT_MIN_SPD_Y | steps/s |
|
||||
63 | MOVEMENT_MIN_SPD_Z | steps/s |
|
||||
65 | MOVEMENT_HOME_SPD_X | steps/s |
|
||||
66 | MOVEMENT_HOME_SPD_Y | steps/s |
|
||||
67 | MOVEMENT_HOME_SPD_Z | steps/s |
|
||||
71 | MOVEMENT_MAX_SPD_X | steps/s |
|
||||
72 | MOVEMENT_MAX_SPD_Y | steps/s |
|
||||
73 | MOVEMENT_MAX_SPD_Z | steps/s |
|
||||
75 | MOVEMENT_INVERT_2_ENDPOINTS_X | 0 / 1 | switch NO and NC
|
||||
76 | MOVEMENT_INVERT_2_ENDPOINTS_Y | 0 / 1 | switch NO and NC
|
||||
77 | MOVEMENT_INVERT_2_ENDPOINTS_Z | 0 / 1 | switch NO and NC
|
||||
81 | MOVEMENT_MOTOR_CURRENT_X | milliamps | TMC2130 only
|
||||
82 | MOVEMENT_MOTOR_CURRENT_Y | milliamps | TMC2130 only
|
||||
83 | MOVEMENT_MOTOR_CURRENT_Z | milliamps | TMC2130 only
|
||||
85 | MOVEMENT_STALL_SENSITIVITY_X | integer | Express only
|
||||
86 | MOVEMENT_STALL_SENSITIVITY_Y | integer | Express only
|
||||
87 | MOVEMENT_STALL_SENSITIVITY_Z | integer | Express only
|
||||
91 | MOVEMENT_MICROSTEPS_X | integer | TMC2130 only
|
||||
92 | MOVEMENT_MICROSTEPS_Y | integer | TMC2130 only
|
||||
93 | MOVEMENT_MICROSTEPS_Z | integer | TMC2130 only
|
||||
101 | ENCODER_ENABLED_X | 0 / 1 | enables stall detection on Express
|
||||
102 | ENCODER_ENABLED_Y | 0 / 1 | enables stall detection on Express
|
||||
103 | ENCODER_ENABLED_Z | 0 / 1 | enables stall detection on Express
|
||||
105 | ENCODER_TYPE_X | 0 | differential channels disabled
|
||||
106 | ENCODER_TYPE_Y | 0 | differential channels disabled
|
||||
107 | ENCODER_TYPE_Z | 0 | differential channels disabled
|
||||
111 | ENCODER_MISSED_STEPS_MAX_X | steps |
|
||||
112 | ENCODER_MISSED_STEPS_MAX_Y | steps |
|
||||
113 | ENCODER_MISSED_STEPS_MAX_Z | steps |
|
||||
115 | ENCODER_SCALING_X | integer | `10000*motor/encoder` (except Express)
|
||||
116 | ENCODER_SCALING_Y | integer | `10000*motor/encoder` (except Express)
|
||||
117 | ENCODER_SCALING_Z | integer | `10000*motor/encoder` (except Express)
|
||||
121 | ENCODER_MISSED_STEPS_DECAY_X | steps | 1-99
|
||||
122 | ENCODER_MISSED_STEPS_DECAY_Y | steps | 1-99
|
||||
123 | ENCODER_MISSED_STEPS_DECAY_Z | steps | 1-99
|
||||
125 | ENCODER_USE_FOR_POS_X | 0 / 1 | except Express
|
||||
126 | ENCODER_USE_FOR_POS_Y | 0 / 1 | except Express
|
||||
127 | ENCODER_USE_FOR_POS_Z | 0 / 1 | except Express
|
||||
131 | ENCODER_INVERT_X | 0 / 1 | except Express
|
||||
132 | ENCODER_INVERT_Y | 0 / 1 | except Express
|
||||
133 | ENCODER_INVERT_Z | 0 / 1 | except Express
|
||||
141 | MOVEMENT_AXIS_NR_STEPS_X | steps | 0 = limit disabled
|
||||
142 | MOVEMENT_AXIS_NR_STEPS_Y | steps | 0 = limit disabled
|
||||
143 | MOVEMENT_AXIS_NR_STEPS_Z | steps | 0 = limit disabled
|
||||
145 | MOVEMENT_STOP_AT_MAX_X | 0 / 1 |
|
||||
146 | MOVEMENT_STOP_AT_MAX_Y | 0 / 1 |
|
||||
147 | MOVEMENT_STOP_AT_MAX_Z | 0 / 1 |
|
||||
201 | PIN_GUARD_1_PIN_NR | integer |
|
||||
202 | PIN_GUARD_1_TIME_OUT | seconds |
|
||||
203 | PIN_GUARD_1_ACTIVE_STATE | 0 / 1 |
|
||||
205 | PIN_GUARD_2_PIN_NR | integer |
|
||||
206 | PIN_GUARD_2_TIME_OUT | seconds |
|
||||
207 | PIN_GUARD_2_ACTIVE_STATE | 0 / 1 |
|
||||
211 | PIN_GUARD_3_PIN_NR | integer |
|
||||
212 | PIN_GUARD_3_TIME_OUT | seconds |
|
||||
213 | PIN_GUARD_3_ACTIVE_STATE | 0 / 1 |
|
||||
215 | PIN_GUARD_4_PIN_NR | integer |
|
||||
216 | PIN_GUARD_4_TIME_OUT | seconds |
|
||||
217 | PIN_GUARD_4_ACTIVE_STATE | 0 / 1 |
|
||||
221 | PIN_GUARD_5_PIN_NR | integer |
|
||||
222 | PIN_GUARD_5_TIME_OUT | seconds |
|
||||
223 | PIN_GUARD_5_ACTIVE_STATE | 0 / 1 |
|
||||
|
||||
IMPORTANT
|
||||
=========
|
||||
Pin Numbering
|
||||
-------------
|
||||
|
||||
Farmbot will NOT move until the configuration has been approved.
|
||||
To approve manually, send 'F22 P2 V1 Q0'
|
||||
### RAMPS 1.4 (for other boards, see [/src/pins.h](/src/pins.h))
|
||||
|
||||
To move, use the command 'G00 X0 Y0 Z0 Q0' where you type in the coordinates just after X, Y and Z.
|
||||
Tag |Pin Nr|Comment
|
||||
-----------------|------|-------
|
||||
X_STEP_PIN | 54 | X axis step signal
|
||||
X_DIR_PIN | 55 | X axis direction choice
|
||||
X_ENABLE_PIN | 38 | X axis enable
|
||||
X_MIN_PIN | 3 | X axis end stop at home position
|
||||
X_MAX_PIN | 2 | X axis end stop at far position
|
||||
X_ENCDR_A | 16 | X axis encoder A channel
|
||||
X_ENCDR_B | 17 | X axis encoder B channel
|
||||
X_ENCDR_A_Q | 31 | X axis encoder A channel for quarature (not implemented)
|
||||
X_ENCDR_B_Q | 33 | X axis encoder B channel for quarature (not implemented)
|
||||
Y_STEP_PIN | 60 | Y axis step signal
|
||||
Y_DIR_PIN | 61 | Y axis direction choice
|
||||
Y_ENABLE_PIN | 56 | Y axis enable
|
||||
Y_MIN_PIN | 14 | Y axis end stop at home position
|
||||
Y_MAX_PIN | 15 | Y axis end stop at far position
|
||||
Y_ENCDR_A | 23 | Y axis encoder A channel
|
||||
Y_ENCDR_B | 25 | Y axis encoder B channel
|
||||
Y_ENCDR_A_Q | 35 | Y axis encoder A channel for quarature (not implemented)
|
||||
Y_ENCDR_B_Q | 37 | Y axis encoder B channel for quarature (not implemented)
|
||||
Z_STEP_PIN | 46 | Z axis step signal
|
||||
Z_DIR_PIN | 48 | Z axis direction choice
|
||||
Z_ENABLE_PIN | 62 | Z axis enable
|
||||
Z_MIN_PIN | 18 | Z axis end stop at home position
|
||||
Z_MAX_PIN | 19 | Z axis end stop at far position
|
||||
Z_ENCDR_A | 27 | Z axis encoder A channel
|
||||
Z_ENCDR_B | 29 | Z axis encoder B channel
|
||||
Z_ENCDR_A_Q | 39 | Z axis encoder A channel for quarature (not implemented)
|
||||
Z_ENCDR_B_Q | 41 | Z axis encoder B channel for quarature (not implemented)
|
||||
LED_PIN | 13 | on board LED
|
||||
FAN_PIN | 9 | RAMPS board fan pin
|
||||
HEATER_0_PIN | 10 | RAMPS board heating pin 0
|
||||
HEATER_1_PIN | 8 | RAMPS board heating pin 1
|
||||
SERVO_0_PIN | 4 | Servo motor 0 signal pin
|
||||
SERVO_1_PIN | 5 | Servo motor 1 signal pin
|
||||
SERVO_2_PIN | 6 | Servo motor 2 signal pin
|
||||
SERVO_3_PIN | 11 | Servo motor 3 signal pin
|
||||
|
|
|
@ -12,7 +12,7 @@ $(TARGET_express_k10_BUILD_DIR)/express_k10.eep: $(TARGET_express_k10_BUILD_DIR)
|
|||
$(TARGET_express_k10_BUILD_DIR)/express_k10.elf: $(TARGET_express_k10_OBJ)
|
||||
$(CC) -w -Os -g -flto -fuse-linker-plugin -Wl,--gc-sections,--relax -mmcu=atmega2560 -o $@ $(TARGET_express_k10_OBJ) $(DEPS_OBJ) $(DEP_CORE_LDFLAGS)
|
||||
|
||||
$(TARGET_express_k10_BUILD_DIR)/%.o: $(FBARDUINO_FIRMWARE_SRC_DIR)/%.cpp
|
||||
$(TARGET_express_k10_BUILD_DIR)/%.o: $(FBARDUINO_FIRMWARE_SRC_DIR)/%.cpp $(HEADERS)
|
||||
$(CXX) $(CXX_FLAGS) -DFARMBOT_BOARD_ID=3 $(DEPS_CFLAGS) $< -o $@
|
||||
|
||||
$(TARGET_express_k10_BUILD_DIR):
|
||||
|
|
|
@ -12,7 +12,7 @@ $(TARGET_farmduino_k14_BUILD_DIR)/farmduino_k14.eep: $(TARGET_farmduino_k14_BUIL
|
|||
$(TARGET_farmduino_k14_BUILD_DIR)/farmduino_k14.elf: $(TARGET_farmduino_k14_OBJ)
|
||||
$(CC) -w -Os -g -flto -fuse-linker-plugin -Wl,--gc-sections,--relax -mmcu=atmega2560 -o $@ $(TARGET_farmduino_k14_OBJ) $(DEPS_OBJ) $(DEP_CORE_LDFLAGS)
|
||||
|
||||
$(TARGET_farmduino_k14_BUILD_DIR)/%.o: $(FBARDUINO_FIRMWARE_SRC_DIR)/%.cpp
|
||||
$(TARGET_farmduino_k14_BUILD_DIR)/%.o: $(FBARDUINO_FIRMWARE_SRC_DIR)/%.cpp $(HEADERS)
|
||||
$(CXX) $(CXX_FLAGS) -DFARMBOT_BOARD_ID=2 $(DEPS_CFLAGS) $< -o $@
|
||||
|
||||
$(TARGET_farmduino_k14_BUILD_DIR):
|
||||
|
|
|
@ -12,7 +12,7 @@ $(TARGET_farmduino_k15_BUILD_DIR)/farmduino_k15.eep: $(TARGET_farmduino_k15_BUIL
|
|||
$(TARGET_farmduino_k15_BUILD_DIR)/farmduino_k15.elf: $(TARGET_farmduino_k15_OBJ)
|
||||
$(CC) -w -Os -g -flto -fuse-linker-plugin -Wl,--gc-sections,--relax -mmcu=atmega2560 -o $@ $(TARGET_farmduino_k15_OBJ) $(DEPS_OBJ) $(DEP_CORE_LDFLAGS)
|
||||
|
||||
$(TARGET_farmduino_k15_BUILD_DIR)/%.o: $(FBARDUINO_FIRMWARE_SRC_DIR)/%.cpp
|
||||
$(TARGET_farmduino_k15_BUILD_DIR)/%.o: $(FBARDUINO_FIRMWARE_SRC_DIR)/%.cpp $(HEADERS)
|
||||
$(CXX) $(CXX_FLAGS) -DFARMBOT_BOARD_ID=4 $(DEPS_CFLAGS) $< -o $@
|
||||
|
||||
$(TARGET_farmduino_k15_BUILD_DIR):
|
||||
|
|
|
@ -12,7 +12,7 @@ $(TARGET_farmduino_v10_BUILD_DIR)/farmduino_v10.eep: $(TARGET_farmduino_v10_BUIL
|
|||
$(TARGET_farmduino_v10_BUILD_DIR)/farmduino_v10.elf: $(TARGET_farmduino_v10_OBJ)
|
||||
$(CC) -w -Os -g -flto -fuse-linker-plugin -Wl,--gc-sections,--relax -mmcu=atmega2560 -o $@ $(TARGET_farmduino_v10_OBJ) $(DEPS_OBJ) $(DEP_CORE_LDFLAGS)
|
||||
|
||||
$(TARGET_farmduino_v10_BUILD_DIR)/%.o: $(FBARDUINO_FIRMWARE_SRC_DIR)/%.cpp
|
||||
$(TARGET_farmduino_v10_BUILD_DIR)/%.o: $(FBARDUINO_FIRMWARE_SRC_DIR)/%.cpp $(HEADERS)
|
||||
$(CXX) $(CXX_FLAGS) -DFARMBOT_BOARD_ID=1 $(DEPS_CFLAGS) $< -o $@
|
||||
|
||||
$(TARGET_farmduino_v10_BUILD_DIR):
|
||||
|
|
|
@ -12,7 +12,7 @@ $(TARGET_ramps_v14_BUILD_DIR)/arduino_firmware.eep: $(TARGET_ramps_v14_BUILD_DIR
|
|||
$(TARGET_ramps_v14_BUILD_DIR)/arduino_firmware.elf: $(TARGET_ramps_v14_OBJ)
|
||||
$(CC) -w -Os -g -flto -fuse-linker-plugin -Wl,--gc-sections,--relax -mmcu=atmega2560 -o $@ $(TARGET_ramps_v14_OBJ) $(DEPS_OBJ) $(DEP_CORE_LDFLAGS)
|
||||
|
||||
$(TARGET_ramps_v14_BUILD_DIR)/%.o: $(FBARDUINO_FIRMWARE_SRC_DIR)/%.cpp
|
||||
$(TARGET_ramps_v14_BUILD_DIR)/%.o: $(FBARDUINO_FIRMWARE_SRC_DIR)/%.cpp $(HEADERS)
|
||||
$(CXX) $(CXX_FLAGS) -DFARMBOT_BOARD_ID=0 $(DEPS_CFLAGS) $< -o $@
|
||||
|
||||
$(TARGET_ramps_v14_BUILD_DIR):
|
||||
|
|
|
@ -29,7 +29,6 @@
|
|||
#elif FARMBOT_BOARD_ID == 3
|
||||
#define FARMDUINO_EXP_V20
|
||||
#elif FARMBOT_BOARD_ID == 4
|
||||
#define FARMDUINO_EXP_V20
|
||||
#define FARMDUINO_V30
|
||||
#endif
|
||||
|
||||
|
|
30
src/Config.h
30
src/Config.h
|
@ -9,6 +9,8 @@
|
|||
#ifndef CONFIG_H_
|
||||
#define CONFIG_H_
|
||||
|
||||
const char SOFTWARE_VERSION[] = "6.5.8\0";
|
||||
|
||||
const int LOGGING = 0;
|
||||
|
||||
const int INCOMING_CMD_BUF_SIZE = 100;
|
||||
|
@ -224,8 +226,6 @@
|
|||
|
||||
const long STATUS_GENERAL_DEFAULT = 0;
|
||||
|
||||
//const char SOFTWARE_VERSION[] = "4.0.2\0";
|
||||
|
||||
#define NSS_PIN 22
|
||||
#define READ_ENA_PIN 49
|
||||
#define NULL 0
|
||||
|
@ -240,22 +240,28 @@ enum MdlSpiEncoders
|
|||
};
|
||||
#endif /* CONFIG_H_ */
|
||||
|
||||
#if defined(RAMPS_V14) && !defined(SOFTWARE_VERSION)
|
||||
#define SOFTWARE_VERSION "6.5.0.R\0"
|
||||
#if defined(RAMPS_V14) && !defined(SOFTWARE_VERSION_SUFFIX)
|
||||
#define SOFTWARE_VERSION_SUFFIX ".R.genesisK12\0"
|
||||
#endif
|
||||
|
||||
#if defined(FARMDUINO_V10) && !defined(SOFTWARE_VERSION)
|
||||
#define SOFTWARE_VERSION "6.5.0.F\0"
|
||||
#if defined(FARMDUINO_V10) && !defined(SOFTWARE_VERSION_SUFFIX)
|
||||
#define SOFTWARE_VERSION_SUFFIX ".F.genesisK13\0"
|
||||
#endif
|
||||
|
||||
#if defined(FARMDUINO_V14) && !defined(SOFTWARE_VERSION)
|
||||
#define SOFTWARE_VERSION "6.5.0.G\0"
|
||||
#if defined(FARMDUINO_V14) && !defined(SOFTWARE_VERSION_SUFFIX)
|
||||
#define SOFTWARE_VERSION_SUFFIX ".G.genesisK14\0"
|
||||
#endif
|
||||
|
||||
#if defined(FARMDUINO_V30) && !defined(SOFTWARE_VERSION)
|
||||
#define SOFTWARE_VERSION "6.5.0.H\0"
|
||||
#if defined(FARMDUINO_V30) && !defined(SOFTWARE_VERSION_SUFFIX)
|
||||
#define SOFTWARE_VERSION_SUFFIX ".H.genesisK15\0"
|
||||
#endif
|
||||
|
||||
#if defined(FARMDUINO_EXP_V20) && !defined(SOFTWARE_VERSION)
|
||||
#define SOFTWARE_VERSION "6.5.0.E\0"
|
||||
#if defined(FARMDUINO_EXP_V20) && !defined(SOFTWARE_VERSION_SUFFIX)
|
||||
#define SOFTWARE_VERSION_SUFFIX ".E.expressK10\0"
|
||||
#endif
|
||||
|
||||
#ifndef FARMBOT_BOARD_ID
|
||||
#define SOFTWARE_COMMIT ""
|
||||
#else
|
||||
#include "CommitSHA.h"
|
||||
#endif
|
||||
|
|
|
@ -16,6 +16,7 @@ enum ErrorListEnum
|
|||
ERR_EMERGENCY_STOP = 1,
|
||||
ERR_TIMEOUT = 2,
|
||||
ERR_STALL_DETECTED = 3,
|
||||
ERR_CALIBRATION_ERROR = 4,
|
||||
|
||||
ERR_INVALID_COMMAND = 14,
|
||||
ERR_PARAMS_NOT_OK = 15,
|
||||
|
|
|
@ -34,6 +34,8 @@ int F83Handler::execute(Command *command)
|
|||
|
||||
Serial.print("R83 ");
|
||||
Serial.print(SOFTWARE_VERSION);
|
||||
Serial.print(SOFTWARE_VERSION_SUFFIX);
|
||||
Serial.print(SOFTWARE_COMMIT);
|
||||
//Serial.print("\r\n");
|
||||
CurrentState::getInstance()->printQAndNewLine();
|
||||
|
||||
|
|
|
@ -522,7 +522,7 @@ int Movement::moveToCoords(double xDestScaled, double yDestScaled, double zDestS
|
|||
// Let the interrupt handle all the movements
|
||||
while ((axisActive[0] || axisActive[1] || axisActive[2]) && !emergencyStop)
|
||||
{
|
||||
#if defined(FARMDUINO_V14)
|
||||
#if defined(FARMDUINO_V14) || defined(FARMDUINO_V30)
|
||||
checkEncoders();
|
||||
#endif
|
||||
|
||||
|
@ -741,7 +741,7 @@ int Movement::moveToCoords(double xDestScaled, double yDestScaled, double zDestS
|
|||
case 1:
|
||||
serialBuffer += CurrentState::getInstance()->getPosition();
|
||||
serialBuffer += CurrentState::getInstance()->getQAndNewLine();
|
||||
#if defined(FARMDUINO_V14)
|
||||
#if defined(FARMDUINO_V14) || defined(FARMDUINO_V30)
|
||||
getEncoderReport();
|
||||
#endif
|
||||
break;
|
||||
|
@ -765,14 +765,14 @@ int Movement::moveToCoords(double xDestScaled, double yDestScaled, double zDestS
|
|||
|
||||
serialMessageNr++;
|
||||
|
||||
#if !defined(FARMDUINO_EXP_V20) && !defined(FARMDUINO_V30)
|
||||
#if !defined(FARMDUINO_EXP_V20)
|
||||
if (serialMessageNr > 1)
|
||||
{
|
||||
serialMessageNr = 0;
|
||||
}
|
||||
#endif
|
||||
|
||||
#if defined(FARMDUINO_EXP_V20) || defined(FARMDUINO_V30)
|
||||
#if defined(FARMDUINO_EXP_V20)
|
||||
|
||||
if (serialMessageNr > 2)
|
||||
{
|
||||
|
@ -928,7 +928,7 @@ int Movement::calibrateAxis(int axis)
|
|||
loadMotorSettings();
|
||||
loadEncoderSettings();
|
||||
|
||||
//unsigned long timeStart = millis();
|
||||
unsigned long timeStart = millis();
|
||||
|
||||
bool movementDone = false;
|
||||
|
||||
|
@ -1004,7 +1004,7 @@ int Movement::calibrateAxis(int axis)
|
|||
break;
|
||||
default:
|
||||
Serial.print("R99 Calibration error: invalid axis selected\r\n");
|
||||
error = 1;
|
||||
error = ERR_CALIBRATION_ERROR;
|
||||
CurrentState::getInstance()->setLastError(error);
|
||||
return error;
|
||||
}
|
||||
|
@ -1014,7 +1014,7 @@ int Movement::calibrateAxis(int axis)
|
|||
if (calibAxis->endStopMin() || calibAxis->endStopMax())
|
||||
{
|
||||
Serial.print("R99 Calibration error: end stop active before start\r\n");
|
||||
error = 1;
|
||||
error = ERR_CALIBRATION_ERROR;
|
||||
CurrentState::getInstance()->setLastError(error);
|
||||
return error;
|
||||
}
|
||||
|
@ -1053,12 +1053,47 @@ int Movement::calibrateAxis(int axis)
|
|||
while (!movementDone && error == 0)
|
||||
{
|
||||
|
||||
#if defined(FARMDUINO_V14)
|
||||
#if defined(FARMDUINO_V14) || defined(FARMDUINO_V30)
|
||||
checkEncoders();
|
||||
#endif
|
||||
|
||||
checkAxisVsEncoder(calibAxis, calibEncoder, &motorConsMissedSteps[axis], &motorLastPosition[axis], &motorConsEncoderLastPosition[axis], &motorConsEncoderUseForPos[axis], &motorConsMissedStepsDecay[axis], &motorConsEncoderEnabled[axis]);
|
||||
|
||||
// Check timeouts
|
||||
if (!movementDone && ((millis() >= timeStart && millis() - timeStart > timeOut[axis] * 1000) || (millis() < timeStart && millis() > timeOut[axis] * 1000)))
|
||||
{
|
||||
calibAxis->disableMotor();
|
||||
switch (axis)
|
||||
{
|
||||
case 0:
|
||||
Serial.print(COMM_REPORT_TIMEOUT_X);
|
||||
CurrentState::getInstance()->printQAndNewLine();
|
||||
Serial.print("R99 timeout X axis\r\n");
|
||||
error = ERR_TIMEOUT;
|
||||
CurrentState::getInstance()->setLastError(error);
|
||||
return error;
|
||||
case 1:
|
||||
Serial.print(COMM_REPORT_TIMEOUT_Y);
|
||||
CurrentState::getInstance()->printQAndNewLine();
|
||||
Serial.print("R99 timeout Y axis\r\n");
|
||||
error = ERR_TIMEOUT;
|
||||
CurrentState::getInstance()->setLastError(error);
|
||||
return error;
|
||||
case 2:
|
||||
Serial.print(COMM_REPORT_TIMEOUT_Z);
|
||||
CurrentState::getInstance()->printQAndNewLine();
|
||||
Serial.print("R99 timeout Z axis\r\n");
|
||||
error = ERR_TIMEOUT;
|
||||
CurrentState::getInstance()->setLastError(error);
|
||||
return error;
|
||||
default:
|
||||
Serial.print("R99 Calibration error: invalid axis selected\r\n");
|
||||
error = ERR_CALIBRATION_ERROR;
|
||||
CurrentState::getInstance()->setLastError(error);
|
||||
return error;
|
||||
}
|
||||
}
|
||||
|
||||
// Check if there is an emergency stop command
|
||||
if (Serial.available() > 0)
|
||||
{
|
||||
|
@ -1070,7 +1105,7 @@ int Movement::calibrateAxis(int axis)
|
|||
CurrentState::getInstance()->setEmergencyStop();
|
||||
Serial.print(COMM_REPORT_EMERGENCY_STOP);
|
||||
CurrentState::getInstance()->printQAndNewLine();
|
||||
error = 1;
|
||||
error = ERR_EMERGENCY_STOP;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1175,6 +1210,8 @@ int Movement::calibrateAxis(int axis)
|
|||
Serial.print(" calibrating length");
|
||||
Serial.print("\r\n");
|
||||
|
||||
timeStart = millis();
|
||||
|
||||
stepsCount = 0;
|
||||
movementDone = false;
|
||||
*missedSteps = 0;
|
||||
|
@ -1195,12 +1232,47 @@ int Movement::calibrateAxis(int axis)
|
|||
while (!movementDone && error == 0)
|
||||
{
|
||||
|
||||
#if defined(FARMDUINO_V14)
|
||||
#if defined(FARMDUINO_V14) || defined(FARMDUINO_V30)
|
||||
checkEncoders();
|
||||
#endif
|
||||
|
||||
checkAxisVsEncoder(calibAxis, calibEncoder, &motorConsMissedSteps[axis], &motorLastPosition[axis], &motorConsEncoderLastPosition[axis], &motorConsEncoderUseForPos[axis], &motorConsMissedStepsDecay[axis], &motorConsEncoderEnabled[axis]);
|
||||
|
||||
// Check timeouts
|
||||
if (!movementDone && ((millis() >= timeStart && millis() - timeStart > timeOut[axis] * 1000) || (millis() < timeStart && millis() > timeOut[axis] * 1000)))
|
||||
{
|
||||
calibAxis->disableMotor();
|
||||
switch (axis)
|
||||
{
|
||||
case 0:
|
||||
Serial.print(COMM_REPORT_TIMEOUT_X);
|
||||
CurrentState::getInstance()->printQAndNewLine();
|
||||
Serial.print("R99 timeout X axis\r\n");
|
||||
error = ERR_TIMEOUT;
|
||||
CurrentState::getInstance()->setLastError(error);
|
||||
return error;
|
||||
case 1:
|
||||
Serial.print(COMM_REPORT_TIMEOUT_Y);
|
||||
CurrentState::getInstance()->printQAndNewLine();
|
||||
Serial.print("R99 timeout Y axis\r\n");
|
||||
error = ERR_TIMEOUT;
|
||||
CurrentState::getInstance()->setLastError(error);
|
||||
return error;
|
||||
case 2:
|
||||
Serial.print(COMM_REPORT_TIMEOUT_Z);
|
||||
CurrentState::getInstance()->printQAndNewLine();
|
||||
Serial.print("R99 timeout Z axis\r\n");
|
||||
error = ERR_TIMEOUT;
|
||||
CurrentState::getInstance()->setLastError(error);
|
||||
return error;
|
||||
default:
|
||||
Serial.print("R99 Calibration error: invalid axis selected\r\n");
|
||||
error = ERR_CALIBRATION_ERROR;
|
||||
CurrentState::getInstance()->setLastError(error);
|
||||
return error;
|
||||
}
|
||||
}
|
||||
|
||||
// Check if there is an emergency stop command
|
||||
if (Serial.available() > 0)
|
||||
{
|
||||
|
@ -1212,7 +1284,7 @@ int Movement::calibrateAxis(int axis)
|
|||
CurrentState::getInstance()->setEmergencyStop();
|
||||
Serial.print(COMM_REPORT_EMERGENCY_STOP);
|
||||
CurrentState::getInstance()->printQAndNewLine();
|
||||
error = 1;
|
||||
error = ERR_EMERGENCY_STOP;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1686,7 +1758,7 @@ bool Movement::endStopsReached()
|
|||
void Movement::storePosition()
|
||||
{
|
||||
|
||||
#if !defined(FARMDUINO_EXP_V20) && !defined(FARMDUINO_V30)
|
||||
#if !defined(FARMDUINO_EXP_V20)
|
||||
if (motorConsEncoderEnabled[0])
|
||||
{
|
||||
CurrentState::getInstance()->setX(encoderX.currentPosition());
|
||||
|
@ -1715,7 +1787,7 @@ void Movement::storePosition()
|
|||
}
|
||||
#endif
|
||||
|
||||
#if defined(FARMDUINO_EXP_V20) || defined(FARMDUINO_V30)
|
||||
#if defined(FARMDUINO_EXP_V20)
|
||||
CurrentState::getInstance()->setX(axisX.currentPosition());
|
||||
CurrentState::getInstance()->setY(axisY.currentPosition());
|
||||
CurrentState::getInstance()->setZ(axisZ.currentPosition());
|
||||
|
|
|
@ -76,20 +76,24 @@ void MovementEncoder::loadMdlEncoderId(MdlSpiEncoders encoder)
|
|||
|
||||
void MovementEncoder::setPosition(long newPosition)
|
||||
{
|
||||
#if defined(RAMPS_V14) || defined(FARMDUINO_V10) || defined(FARMDUINO_EXP_V20) || defined(FARMDUINO_V30)
|
||||
#if defined(RAMPS_V14) || defined(FARMDUINO_V10) || defined(FARMDUINO_EXP_V20)
|
||||
position = newPosition;
|
||||
#endif
|
||||
|
||||
#if defined(FARMDUINO_V14)
|
||||
#if defined(FARMDUINO_V14) || defined(FARMDUINO_V30)
|
||||
if (newPosition == 0)
|
||||
{
|
||||
position = newPosition;
|
||||
|
||||
const byte reset_cmd = 0x00;
|
||||
|
||||
SPI.beginTransaction(SPISettings(SPI_CLOCK_DIV4, MSBFIRST, SPI_MODE0));
|
||||
digitalWrite(NSS_PIN, LOW);
|
||||
delayMicroseconds(2);
|
||||
SPI.transfer(reset_cmd | (mdlEncoder << mdl_spi_encoder_offset));
|
||||
delayMicroseconds(5);
|
||||
digitalWrite(NSS_PIN, HIGH);
|
||||
SPI.endTransaction();
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
@ -105,7 +109,7 @@ long MovementEncoder::currentPosition()
|
|||
}
|
||||
else
|
||||
{
|
||||
#if defined(FARMDUINO_V14)
|
||||
#if defined(FARMDUINO_V14) || defined(FARMDUINO_V30)
|
||||
floatScalingFactor = scalingFactor / 40000.0;
|
||||
return position * floatScalingFactor * encoderInvert;
|
||||
#endif
|
||||
|
@ -127,7 +131,7 @@ void MovementEncoder::checkEncoder(bool channelA, bool channelB, bool channelAQ,
|
|||
processEncoder();
|
||||
#endif
|
||||
|
||||
#if defined(FARMDUINO_V14)
|
||||
#if defined(FARMDUINO_V14) || defined(FARMDUINO_V30)
|
||||
processEncoder();
|
||||
#endif
|
||||
|
||||
|
@ -169,14 +173,16 @@ void MovementEncoder::processEncoder()
|
|||
#endif
|
||||
|
||||
// If using farmduino, revision 1.4, use the SPI interface to read from the Motor Dynamics Lab chip
|
||||
#if defined(FARMDUINO_V14)
|
||||
#if defined(FARMDUINO_V14) || defined(FARMDUINO_V30)
|
||||
const byte read_cmd = 0x0F;
|
||||
int readSize = 4;
|
||||
long encoderVal = 0;
|
||||
|
||||
SPI.beginTransaction(SPISettings(SPI_CLOCK_DIV4, MSBFIRST, SPI_MODE0));
|
||||
digitalWrite(NSS_PIN, LOW);
|
||||
delayMicroseconds(2);
|
||||
SPI.transfer(read_cmd | (mdlEncoder << mdl_spi_encoder_offset));
|
||||
delayMicroseconds(10);
|
||||
delayMicroseconds(5);
|
||||
|
||||
for (int i = 0; i < readSize; ++i)
|
||||
{
|
||||
|
@ -185,6 +191,7 @@ void MovementEncoder::processEncoder()
|
|||
}
|
||||
|
||||
digitalWrite(NSS_PIN, HIGH);
|
||||
SPI.endTransaction();
|
||||
position = encoderVal;
|
||||
#endif
|
||||
|
||||
|
@ -277,7 +284,7 @@ float MovementEncoder::getMissedSteps()
|
|||
|
||||
void MovementEncoder::checkMissedSteps()
|
||||
{
|
||||
#if !defined(FARMDUINO_EXP_V20) && !defined(FARMDUINO_V30)
|
||||
#if !defined(FARMDUINO_EXP_V20)
|
||||
if (encoderEnabled)
|
||||
{
|
||||
bool stepMissed = false;
|
||||
|
@ -327,4 +334,4 @@ void MovementEncoder::checkMissedSteps()
|
|||
}
|
||||
#endif
|
||||
*/
|
||||
}
|
||||
}
|
||||
|
|
|
@ -296,7 +296,7 @@ void checkParamsChanged()
|
|||
void checkEncoders()
|
||||
{
|
||||
|
||||
#if defined(FARMDUINO_V14)
|
||||
#if defined(FARMDUINO_V14) || defined(FARMDUINO_V30)
|
||||
// Check encoders out of interrupt for farmduino 1.4
|
||||
Movement::getInstance()->checkEncoders();
|
||||
#endif
|
||||
|
@ -594,6 +594,20 @@ void setPinInputOutput()
|
|||
digitalWrite(SERVO_1_PIN, LOW);
|
||||
digitalWrite(SERVO_2_PIN, LOW);
|
||||
digitalWrite(SERVO_3_PIN, LOW);
|
||||
|
||||
#if defined(FARMDUINO_V30)
|
||||
|
||||
reportingPeriod = 500;
|
||||
|
||||
pinMode(READ_ENA_PIN, INPUT_PULLUP);
|
||||
pinMode(NSS_PIN, OUTPUT);
|
||||
digitalWrite(NSS_PIN, HIGH);
|
||||
|
||||
SPI.setBitOrder(MSBFIRST);
|
||||
SPI.setDataMode(SPI_MODE0);
|
||||
SPI.setClockDivider(SPI_CLOCK_DIV4);
|
||||
SPI.begin();
|
||||
#endif
|
||||
}
|
||||
#endif
|
||||
|
||||
|
@ -631,7 +645,7 @@ void startInterrupt()
|
|||
// Serial.println("set timer");
|
||||
// TIMSK2 = (TIMSK2 & B11111110) | 0x01; // Enable timer overflow
|
||||
// TCCR2B = (TCCR2B & B11111000) | 0x01; // Set divider to 1
|
||||
// OCR2A = 4; // Set overflow to 4 for total of 64 µs
|
||||
// OCR2A = 4; // Set overflow to 4 for total of 64 µs
|
||||
//#endif
|
||||
}
|
||||
|
||||
|
|
|
@ -334,7 +334,7 @@
|
|||
#define SERVO_0_PIN 4
|
||||
#define SERVO_1_PIN 5
|
||||
#define SERVO_2_PIN 6
|
||||
#define SERVO_3_PIN -1
|
||||
#define SERVO_3_PIN 11
|
||||
|
||||
// Encoder X channel A: pin 16, port H1
|
||||
#define ENC_X_A_PORT PINH
|
||||
|
|
|
@ -32,7 +32,7 @@ void setup()
|
|||
loadMovementSetting();
|
||||
startMotor();
|
||||
startPinGuard();
|
||||
startServo();
|
||||
//startServo();
|
||||
startInterrupt();
|
||||
initLastAction();
|
||||
homeOnBoot();
|
||||
|
@ -57,4 +57,4 @@ void loop()
|
|||
checkParamsChanged();
|
||||
periodicChecksAndReport();
|
||||
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue