From d1bb0049bf932d61ba571570ba310eac49b4af58 Mon Sep 17 00:00:00 2001 From: Paul Guenette Date: Tue, 26 Oct 2021 20:26:01 -0400 Subject: [PATCH] Update endstops before checking for errors --- CHANGELOG.md | 2 +- Firmware/MotorControl/main.cpp | 12 +++++++----- 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 654b449e..abea75fa 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,7 +2,7 @@ Please add a note of your changes below this heading if you make a Pull Request. * CANSimple messages which previously required the rtr bit to be set will now also respond if DLC = 0 - +* Ensure endstops update before being checked for errors, to prevent [#625](https://github.com/odriverobotics/ODrive/issues/625) # Releases ## [0.5.4] - 2021-10-12 diff --git a/Firmware/MotorControl/main.cpp b/Firmware/MotorControl/main.cpp index e89ed14f..e859c812 100644 --- a/Firmware/MotorControl/main.cpp +++ b/Firmware/MotorControl/main.cpp @@ -400,6 +400,13 @@ void ODrive::control_loop_cb(uint32_t timestamp) { odrv.oscilloscope_.update(); } + for (auto& axis : axes) { + MEASURE_TIME(axis.task_times_.endstop_update) { + axis.min_endstop_.update(); + axis.max_endstop_.update(); + } + } + MEASURE_TIME(task_times_.control_loop_checks) { for (auto& axis: axes) { // look for errors at axis level and also all subcomponents @@ -432,11 +439,6 @@ void ODrive::control_loop_cb(uint32_t timestamp) { MEASURE_TIME(axis.task_times_.sensorless_estimator_update) axis.sensorless_estimator_.update(); - MEASURE_TIME(axis.task_times_.endstop_update) { - axis.min_endstop_.update(); - axis.max_endstop_.update(); - } - MEASURE_TIME(axis.task_times_.controller_update) axis.controller_.update(); // uses position and velocity from encoder