Skip to content
firepick1 (localhost) edited this page Oct 10, 2015 · 31 revisions

Machine Topology: FirePick Delta (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.

Cartesian coordinates

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.

Navigation

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.

General: dim Delta Dimensions

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
1️⃣ dimspr default value

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.

General:mpo Motor Position

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

General:pgmx Execute pre-defined program

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.

Motion:cal Calibrate Delta Dimension

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

Motion:mov Move To Position

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}

Motion:mrk Mark Position

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

Motion:prb Probe To Position

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":""}
Motion: prbd Probe Data Archive

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.

See Also