From b8ed9abc7f734d7a8f369226629614a574dc1d2b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gu=C3=B0ni=20M=C3=A1r=20Gilbert?= Date: Wed, 25 Dec 2024 14:28:12 +0000 Subject: [PATCH] registers: fix unit of acceleration values When reading or setting the value, the driver is expecting steps_t which is a axis scaled value. This increases the memory footprint quite a bit. But now if you set 800mm/s2, you should get a similar value back. Flash: +132 bytes SRAM: 0 bytes --- src/registers.cpp | 21 +++++++++++++++------ 1 file changed, 15 insertions(+), 6 deletions(-) diff --git a/src/registers.cpp b/src/registers.cpp index 592d18c..9caeaad 100644 --- a/src/registers.cpp +++ b/src/registers.cpp @@ -327,18 +327,27 @@ static const RegisterRec registers[] PROGMEM = { // 0xe Pulley acceleration [mm/s2] RW RegisterRec( - []() -> uint16_t { return mm::motion.Acceleration(config::Pulley); }, - [](uint16_t d) { mm::motion.SetAcceleration(config::Pulley, d); }, + []() -> uint16_t { + mm::steps_t val = mm::motion.Acceleration(config::Pulley); + return mm::axisUnitToTruncatedUnit( mm::P_accel_t({ val })); + }, + [](uint16_t d) { mm::motion.SetAcceleration(config::Pulley, mm::unitToSteps(config::U_mm_s2({ (long double)d }))); }, 2), // 0xf Selector acceleration [mm/s2] RW RegisterRec( - []() -> uint16_t { return mm::motion.Acceleration(config::Selector); }, - [](uint16_t d) { mm::motion.SetAcceleration(config::Selector, d); }, + []() -> uint16_t { + mm::steps_t val = mm::motion.Acceleration(config::Selector); + return mm::axisUnitToTruncatedUnit( mm::S_accel_t({ val })); + }, + [](uint16_t d) { (mm::motion.SetAcceleration(config::Selector, mm::unitToSteps(config::U_mm_s2({ (long double)d })))); }, 2), // 0x10 Idler acceleration [deg/s2] RW RegisterRec( - []() -> uint16_t { return mm::motion.Acceleration(config::Idler); }, - [](uint16_t d) { mm::motion.SetAcceleration(config::Idler, d); }, + []() -> uint16_t { + mm::steps_t val = mm::motion.Acceleration(config::Idler); + return mm::axisUnitToTruncatedUnit( mm::I_accel_t({ val })); + }, + [](uint16_t d) { mm::motion.SetAcceleration(config::Idler, mm::unitToSteps(config::U_deg_s2({ (long double)d }))); }, 2), // 0x11 Pulley load feedrate [mm/s] RW