From 7ef2abcd4a3a65117ca4a1228f7f04a2110d133c Mon Sep 17 00:00:00 2001 From: pgdalmeida Date: Mon, 21 Sep 2026 23:07:44 +0200 Subject: [PATCH] Have the setup kit work out the centre a geared-up rig needs --- docs/tower-installation.md | 17 +++++++++++++++++ hardware/lattepanda-iota/install.sh | 19 +++++++++++++++++++ 2 files changed, 36 insertions(+) diff --git a/docs/tower-installation.md b/docs/tower-installation.md index 0ada254..bbc5400 100644 --- a/docs/tower-installation.md +++ b/docs/tower-installation.md @@ -271,6 +271,23 @@ again; too weak and the motor stalls on ordinary friction mid-sweep, trips the same latch, and records a phantom endstop. The firmware's `steps_per_rev` guard is what catches the second case, so it has to be set from the real travel. +> **The centre lives in `config.ini`, not here.** `install.sh` cannot write it — +> `hardware.ini` is merged *over* `config.ini` and wins, so a shared key would +> silently discard whatever `gimbal heading setup` had saved. What it does instead +> is work the requirement out from `steps_per_rev` and print it as a `NOTE` in the +> block, because the default is wrong for any geared-up rig: +> +> ``` +> ; NOTE: half this travel is 605389 counts, so config.ini needs +> ; [Motor] yaw_center_count = 1000000 (or anything above 605389) +> ; The 500000 default would put the negative end at -105389. +> ``` +> +> The range is centre ± half the travel, so a centre below half-travel puts the +> negative end under zero. On tower 121 the inherited `500000` homed to +> `-104749..1104749`; at `1000000` it homes to `395194..1604807`. A warning names +> it after every home if it is still too small. + **`travel_deg` is a nameplate fact**, and the host divides the measured homing travel by it to derive `[Motor] _counts_per_deg` into `config.ini`. A rough angle gives a proportionally rough degree scale - 1 % out here is 1 % out on every diff --git a/hardware/lattepanda-iota/install.sh b/hardware/lattepanda-iota/install.sh index a82ab41..faecd88 100755 --- a/hardware/lattepanda-iota/install.sh +++ b/hardware/lattepanda-iota/install.sh @@ -299,6 +299,24 @@ do_vimba() { # and a non-numeric value makes the program refuse to start with a message about # a config key. Absent, it starts and reports the axis as undeclared - naming the # missing keys and which axis will not move, which is the useful failure. +# The centre lives in config.ini, not here - it is calibration, and hardware.ini +# is merged OVER config.ini, so a shared key would silently discard whatever +# `gimbal heading setup` had saved. All this file can do is say what the value +# has to be, which it can work out from the travel. +# +# The range is centre +/- half the travel, so a centre below half-travel puts the +# negative end under zero. The long-standing 500000 default suits the Delta's +# ~89k half-travel and does not survive a gear ratio several times higher. +center_note() { + local steps="$1" ax="$2" + [[ -z $steps ]] && return 0 + local half=$(( steps / 2 )) + local want=$(( (half / 1000000 + 1) * 1000000 )) + echo "; NOTE: half this travel is $half counts, so config.ini needs" + echo "; [Motor] ${ax}_center_count = $want (or anything above $half)" + echo "; The 500000 default would put the negative end at $(( 500000 - half ))." +} + kv_or_todo() { local key="$1" value="$2" why="$3" if [[ -n $value ]]; then @@ -400,6 +418,7 @@ EOF "mechanical angle between the hard stops. Rough is fine to start; every bearing inherits its error proportionally until 'gimbal heading setup' supersedes it" kv_or_todo "steps_per_rev" "$STEPS_PER_REV" \ "measured full travel IN COUNTS - read it off a homing run. The only guard against a PHANTOM endstop" + center_note "$STEPS_PER_REV" "$ax" kv_or_todo "sw_mode" "$SW_MODE" \ "TMC SW_MODE. 0 = no physical switches (StallGuard homing); set the bits if this axis has REFL/REFR wired" else