From 0676d5dc1f55d24827f2a1940007a7e9558efae8 Mon Sep 17 00:00:00 2001 From: leo Date: Sat, 23 Sep 2023 16:45:56 +0200 Subject: [PATCH] pL step volume resolution --- Core/Inc/PSE_unit.h | 2 +- Core/Src/PSE_unit.c | 11 ++++++----- Core/Src/PSE_unit_edit_screen.c | 6 ++++-- 3 files changed, 11 insertions(+), 8 deletions(-) diff --git a/Core/Inc/PSE_unit.h b/Core/Inc/PSE_unit.h index 1454db3..82cd8ab 100644 --- a/Core/Inc/PSE_unit.h +++ b/Core/Inc/PSE_unit.h @@ -63,7 +63,7 @@ typedef struct{ pse_home_display* home_display; // Widgets for updating the home screen pse_stepper_status* stepper_status; // stepper position/speed status int32_t start_pos; // movement start position for volume calculation - uint32_t nL_per_step; // pL delivered per step + uint32_t pL_per_step; // pL delivered per step } pse_unit; diff --git a/Core/Src/PSE_unit.c b/Core/Src/PSE_unit.c index cf7ac4a..8147fe5 100644 --- a/Core/Src/PSE_unit.c +++ b/Core/Src/PSE_unit.c @@ -93,10 +93,11 @@ void load_units(pse_unit* units, pse_syringe* syringes, pse_stepper_conf* steppe // set limit if volume defined if(c_pse_unit->set_volume != 0){ - if(c_pse_unit->nL_per_step == 0) break; // TODO: alert popup / better resolution + if(c_pse_unit->pL_per_step == 0) break; // TODO: alert popup / better resolution if(c_pse_unit->flow == 0) break; c_pse_unit->stepper_status->stop_at_limit = 1; - c_pse_unit->stepper_status->stop_steps = (uint64_t)1000 * c_pse_unit->set_volume / c_pse_unit->nL_per_step; } + c_pse_unit->stepper_status->stop_steps = (uint64_t)1000000 * c_pse_unit->set_volume / c_pse_unit->pL_per_step; + } else c_pse_unit->stepper_status->stop_at_limit = 0; } @@ -146,11 +147,11 @@ void save_units(pse_unit* units, uint8_t unit_num, uint16_t ws_ind){ } void pse_unit_compute_volume_delivered(pse_unit* unit){ - unit->volume = (int64_t)1 * (unit->stepper_status->steps_counter - unit->start_pos) * unit->nL_per_step / 1000; + unit->volume = (int64_t)1 * (unit->stepper_status->steps_counter - unit->start_pos) * unit->pL_per_step / 1000000; } void pse_unit_compute_volume_per_step(pse_unit* unit){ - uint64_t numerator = (uint64_t)1 * (unit->syringe->diameter * unit->syringe->diameter) * PSE_STEPPER_SCREW_PITCH; + uint64_t numerator = (uint64_t)1000 * (unit->syringe->diameter * unit->syringe->diameter) * PSE_STEPPER_SCREW_PITCH; uint64_t denominator = (uint64_t)1273238 * PSE_STEPPER_STEPS_PER_ROTATION; - unit->nL_per_step = numerator / denominator; + unit->pL_per_step = numerator / denominator; } diff --git a/Core/Src/PSE_unit_edit_screen.c b/Core/Src/PSE_unit_edit_screen.c index fa1809e..29aa8cb 100644 --- a/Core/Src/PSE_unit_edit_screen.c +++ b/Core/Src/PSE_unit_edit_screen.c @@ -37,12 +37,14 @@ static void back_button_handler(lv_event_t * e){ // set limit if volume defined if(c_pse_unit->set_volume != 0){ - if(c_pse_unit->nL_per_step == 0) return; // TODO: alert popup / better resolution + if(c_pse_unit->pL_per_step == 0) return; // TODO: alert popup if(c_pse_unit->flow == 0) return; c_pse_unit->stepper_status->stop_at_limit = 1; - c_pse_unit->stepper_status->stop_steps = (uint64_t)1000 * c_pse_unit->set_volume / c_pse_unit->nL_per_step; } + c_pse_unit->stepper_status->stop_steps = (uint64_t)1000000 * c_pse_unit->set_volume / c_pse_unit->pL_per_step; + } else c_pse_unit->stepper_status->stop_at_limit = 0; + printf("dksfghjsdgf %d %d %d\n", c_pse_unit->stepper_status->stop_steps, c_pse_unit->stepper_status->steps_counter, c_pse_unit->start_pos); // go back to the main menu Home_Screen_Gen(c_pse_units, c_pse_units_num, true);