-
Notifications
You must be signed in to change notification settings - Fork 10
MTO_FPD
This document is an extension of the [JSON-Reference]
that details the JSON commands for systo:1
, which is a rotational delta
machine having default dimensions for FirePick Delta.
The MTO_FPD machine topology uses the Cartesian coordinate system for positioning. Because FPD has rotational symmetry about its central vertical axis, it is natural and convenoient to use that central vertical axis as the origin for X and Y coordinates. In other words, at X0Y0, FPD will be centered, with all three arms at the same angle.
FPD movement is mechanically constrained by its arms and those movement constraints are quite complex. But essentially, XY movement is most free in the middle of the Z range. At both the top and bottom of the Z-range, FPD cannot move in the XY direction. For this reason, it is convenient to have the Z-origin be somewhere in the middle of the movement range, where XY movement is relatively free. Specificalliy, when FPD arms are horizontal, Z is zero. Z increases as the arms go up and goes negative as the effector descends to the bed.
FireStep MTO_FPD provides several different ways of navigating Cartesian space:
- absolute Cartesian xyz positioning with respect to X0Y0Z0 is the most general and frequently used navigation.
- relative Cartesian xyz positioning with respect to current position supports the creation of command sequences that can be executed at any position in Cartesian space.
- XY polar coordinates with respect to X0Y0 supports rotational commands that exploit FPD rotational symmetry (e.g., hex calibration probe). Polar coordinates are in millimeters from X0Y0 at a counter-clockwise angle measured in degrees from the x-axis.
- z-bed relative coordinates simplify positioning with respect to a bed that isn't perfectly level (they never are). FPD auto-calibration can detect sub-millimeter deviations at 100mm from the origin, so z-bed positioning can simplify applications requiring accurate movement to workpieces on the bed.
The rotational delta kinematic model uses the dim
command to
get/set machine dimensions. The default is for FirePick Delta:
{"dim":""}
Attribute | ✏️ | Default | Description |
---|---|---|---|
bx | ✏️ | 0 | bed Z-plane x scale (i.e., z = bxx + byy + bz) |
by | ✏️ | 0 | bed Z-plane y scale (i.e., z = bxx + byy + bz) |
bz | ✏️ | 0 | bed Z-plane z offset (i.e., z = bxx + byy + bz) |
e | ✏️ | 131.636 | effector equilateral triangle side (mm) |
f | ✏️ | 190.526 | base equilateral triangle side (mm) |
gr | ✏️ | 150/16 | gear ratio of delta pulley to drive pulley |
ha | ✏️ | -67.2 | homing angle to limit switch (clockwise degrees from horizontal) |
hp | ✏️ | 3 | fast home pulse group size (higher is faster) |
hz | ✏️ | 0 | post-homing Z coordinate relative to "arms-level". See also hzl. |
hzl | ✏️ | (varies) | post-homing Z coordinate relative to limit switch (<= 0). See also hz. |
mi | ✏️ | 16 | number of microsteps in one stepper step |
re | ✏️ | 270 | length of effector arms (mm) |
rf | ✏️ | 90 | length of base pulley arms (mm) |
spa | ✏️ | -51.581 | SPE MC:Arm critical angle |
spr | ✏️ | 0 1️⃣ | SPE Ratio |
st | ✏️ | 200 | number of stepper full steps in one revolution |
There are potentially two default values for the SPE Ratio:
-
0
disables SPE kinematics and incorrectly assumes a circular, unsliced pulley -
-0.196
enables SPE kinematics for the standard FPD SPE Ratio
The SPE kinematic model was introduced after initial versions of FireStep,
and legacy support considerations dictate an SPE Ratio of 0 (i.e., no SPE kinematics).
However, if you run the ZBE home calibration sequence, it
will automatically enable SPE kinematics by setting the SPE Ratio to -0.196
.
The MPO_FPD machine topology extends the mpo
motor position command
with attributes for Cartesian coordinates:
{"mpo":""}
Attribute | ✏️ | Default | Description |
---|
1 | :pencil2: | current | motor 1 axis position (pulses)
2 | :pencil2: | current | motor 2 axis position (pulses)
3 | :pencil2: | current | motor 3 axis position (pulses)
4 | :pencil2: | current | motor 4 axis position (pulses)
x | -- | current | Cartesian x-coordinate (mm)
y | -- | current | Cartesian y-coordinate (mm)
z | -- | current | Cartesian z-coordinate (mm)
As with the standard mpo
command, setting a value does not
actually move
To execute a program, enter its name as the value of the pgmx
attribute:
{"pgmx":"help"}
PROGRAM | DESCRIPTION |
---|---|
cal-fpd-home-coarse | Use hex probe to [calibrate FPD home angle](Z Bowl Error) and Z-bed plane (adaptive coarse) |
cal-fpd-home-medium | Use hex probe to [calibrate FPD home angle](Z Bowl Error) and Z-bed plane (adaptive medium) |
cal-fpd-home-fine | Use hex probe to [calibrate FPD home angle](Z Bowl Error) and Z-bed plane (adaptive fine) |
cal-fpd-bed-coarse | Use hex probe to calibrate FPD Z-bed plane (adaptive coarse) |
cal-fpd-bed-medium | Use hex probe to calibrate FPD Z-bed plane (adaptive medium) |
cal-fpd-bed-fine | Use hex probe to calibrate FPD Z-bed plane (adaptive fine) |
dim-fpd | Set default dimensions for FirePick Delta with 200-step stepper motorss |
dim-fpd-400 | Set default dimensions for FirePick Delta with 400-step stepper motorss |
dim-lc-200 | Set default dimensions for LooseCanon FirePick Delta with 200-step stepper motorss |
dim-lc-400 | Set default dimensions for LooseCanon FirePick Delta with 400-step stepper motorss |
dim-tw-200 | Set default dimensions for Tin Whiskers FirePick Delta with 200-step stepper motorss |
dim-tw-400 | Set default dimensions for Tin Whiskers FirePick Delta with 400-step stepper motorss |
fpd-hex-probe | Perform hex probe and return probe Z-data |
fpd-axis-probe | Perform axis probe and return probe Z-data |
help | Return link to this documentation |
test | print test message |
To see the instructions for a pre-defined program such as "help",
use pgmd
:
{"pgmd":"help"}
The output will be the JSON for that program.
This is a calibration command summary. For more detailed information, see Delta Calibration
Attribute | ✏️ | Default | Description |
---|
bx | :pencil2: | :arrow_right: | Use Z-probe to calibrate bed Z-plane and return x scale
by | :pencil2: | :arrow_right: | Use Z-probe to calibrate bed Z-plane and return y scale
bz | :pencil2: | :arrow_right: | Use Z-probe to calibrate bed Z-plane and return z offset
gr | :pencil2: | REQUIRED | See [[Gear Ratio]]
ho | :pencil2: | REQUIRED | See [[Delta Home]]
gr1 | :pencil2: | 90 | Calibrate arm 1 gear ratio from given angle in degrees
gr2 | :pencil2: | 90 | Calibrate arm 2 gear ratio from given angle in degrees
gr3 | :pencil2: | 90 | Calibrate arm 3 gear ratio from given angle in degrees
- ➡️ output value only
FireStep supports simple direct motion via the mov
request, which can be used for positioning to a specified
coordinate. The mov
request is not designed for
continuous complex path traversal. However, it can
be used to specify single moves easily.
Attribute | ✏️ | Default | Description |
---|
1 | :pencil2: | current | RESERVED
2 | :pencil2: | current | RESERVED
3 | :pencil2: | current | RESERVED
4 | :pencil2: | current | motor 4 position (pulses)
x | :pencil2: | current | X-axis absolute Cartesian position
y | :pencil2: | current | Y-axis absolute Cartesian position
z | :pencil2: | current | Z-axis absolute Cartesian position
a | :pencil2: | current | A-axis position (must be mapped to a motor)
b | :pencil2: | current | B-axis position (must be mapped to a motor)
c | :pencil2: | current | C-axis position (must be mapped to a motor)
lp | -- | :arrow_right: | number of loop() calls (for calculating pulses/loop)
mv | :pencil2: | sysmv | maximum velocity (pulses/second)
pp | -- | :arrow_right: | peak rate (pulses/second)
aa | :pencil2: | -- | Move all delta axes to given angle from base plane
a1 | :pencil2: | -- | Move delta axis 1 to given angle from base plane
a2 | :pencil2: | -- | Move delta axis 2 to given angle from base plane
a3 | :pencil2: | -- | Move delta axis 3 to given angle from base plane
zb | :pencil2: | -- | Move to z-axis relative to bed plane
xm | :pencil2: | -- | X-axis move to given marking register
ym | :pencil2: | -- | Y-axis move to given marking register
zm | :pencil2: | -- | Z-axis move to given marking register
xr | :pencil2: | -- | X-axis relative Cartesian position
yr | :pencil2: | -- | Y-axis relative Cartesian position
zr | :pencil2: | -- | Z-axis relative Cartesian position
sg | :pencil2: | 0 | number of segments in path (0:auto)
ts | -- | :arrow_right: | actual stroke traversal time (seconds)
tp | -- | :arrow_right: | planned stroke traversal time (seconds)
tv | :pencil2: | systv | seconds to reach maximum velocity
- ➡️ output value only
The short form of mov
executes an immediate move on the specified axis
and omits statistics (e.g., ts
). The following command therefore moves
to Z-10 (i.e., 10mm below origin) at the current XY.
{"movz":-10}
FireStep has 9 marking registers (m1-m9) for storing coordinate data.
The mrk
command lets you read/edit marking registers.
For example, you can save the current Cartesian position in
marking registers m1, m2, m3:
{"mrkwp":1}
Later, you can return to the saved waypoint:
{"movwp":1}
You can also refer to a single marked coordinate. Here we move to the marked z-coordinate of waypoint #1:
{"mov":{"x":100, "y":200, "zm":3}
Attribute | ✏️ | Default | Description |
---|
m1 | :pencil2: | 0 | get/set marking register 1
m2 | :pencil2: | 0 | get/set marking register 2
m3 | :pencil2: | 0 | get/set marking register 3
m4 | :pencil2: | 0 | get/set marking register 4
m5 | :pencil2: | 0 | get/set marking register 5
m6 | :pencil2: | 0 | get/set marking register 6
m7 | :pencil2: | 0 | get/set marking register 7
m9 | :pencil2: | 0 | get/set marking register 8
m9 | :pencil2: | 0 | get/set marking register 9
a1 | :pencil2: | -- | save axis 1 stepper coordinate in specified marking register
a2 | :pencil2: | -- | save axis 2 stepper coordinate in specified marking register
a3 | :pencil2: | -- | save axis 3 stepper coordinate in specified marking register
ax | :pencil2: | -- | save Cartesian axis x in specified marking register
ay | :pencil2: | -- | save Cartesian axis y in specified marking register
az | :pencil2: | -- | save Cartesian axis z in specified marking register
wp | :pencil2: | -- | save Cartesian xyz starting with specified marking register
FireStep can probe from the current position to a designated position, stopping when the limit switch on the specified probe pin triggers. The result returned specifies the stepper coordinates at which the limit switch triggered. If the probe never contacts a surface, the command result status s will be STATUS_PROBE_FAILED.
Probes are directional and you can use any motor/axis combination to specify the exact probing movement. For best results, choose a probe destination that is orthogonal to the probed surface.
Attribute | ✏️ | Default | Description |
---|
1 | :pencil2: | no probe | motor 1 probe destination (pulses)
2 | :pencil2: | no probe | motor 2 probe destination (pulses)
3 | :pencil2: | no probe | motor 3 probe destination (pulses)
4 | :pencil2: | no probe | motor 4 probe destination (pulses)
x | :pencil2: | no probe | Cartesian X-axis probe destination (must be mapped to a motor)
y | :pencil2: | no probe | Cartesian Y-axis probe destination (must be mapped to a motor)
z | :pencil2: | no probe | Cartesian Z-axis probe destination (must be mapped to a motor)
a | :pencil2: | no probe | A-axis probe destination (must be mapped to a motor)
b | :pencil2: | no probe | B-axis probe destination (must be mapped to a motor)
c | :pencil2: | no probe | C-axis probe destination (must be mapped to a motor)
ip | :pencil2: | false | invert probe limit logic
pn | :pencil2: | required | probe limit switch pin
sd | :pencil2: | syssd | probe search pulse period (microseconds)
Typical probes will first move quickly to the probe starting position, then immediately follow with the actual probe, which is slow and careful. Here is an example of a Z probe at the XY origin for FirePick Delta for a RAMPS1.4 FireStep using pin 2 as the limit switch:
{"mov":{"x":0,"y":0,"z":0}}
{"prb":{"z":"", "pn":2}}
Sometimes you want to probe the same place multiple times to get an average. Here we move to X55Y22 and probe three times using the short form of the command:
{"mov":{"x":55,"y":22,"z":-55}}
{"prb":""}
{"movz":-55}
{"prb":""}
{"movz":-55}
{"prb":""}
It's often useful to refer to prior probe data. For example, if we
z-probe a 9-point rectangular grid, we typically want random access to
the probe data. The prbd
command returns a JSON array of archived
z-probes, listed from most recent to oldest. Z-probe data archival
is automatic. In fact, FireStep calibration commands rely
on the archived probe data, so you can decouple probe data acquisition
from probe data analysis.