stop at set volume

This commit is contained in:
leo 2023-09-18 18:30:42 +02:00
parent bf08fc69ff
commit ffaa78798e
Signed by: leo
GPG Key ID: 0DD993BFB2B307DB
4 changed files with 23 additions and 8 deletions

View File

@ -14,37 +14,42 @@
#include "lvgl.h" #include "lvgl.h"
// syringe definition
typedef struct{ typedef struct{
char name[16]; // brand / name char name[16]; // brand / name
uint16_t diameter; // diameter (in µm) uint16_t diameter; // diameter (in µm)
} pse_syringe; } pse_syringe;
// Ports available
typedef enum {PORT_X, PORT_Y, PORT_Z, PORT_E} pse_ports; typedef enum {PORT_X, PORT_Y, PORT_Z, PORT_E} pse_ports;
// stepper controller definitions
typedef struct{ typedef struct{
uint16_t tim_presc; uint16_t tim_presc; // timer prescaler
uint16_t tim_period; uint16_t tim_period; // timer period
uint32_t tick_counter;
int32_t steps_counter; int32_t steps_counter;
uint8_t stopAtHome; uint8_t stop_at_limit; // boolean to stop at stop_steps
int32_t stop_steps; // position to stop at
GPIO_TypeDef* EN_GPIO_Port; GPIO_TypeDef* EN_GPIO_Port; // Pin definitions
uint16_t EN_GPIO_Pin; uint16_t EN_GPIO_Pin;
GPIO_TypeDef* DIR_GPIO_Port; GPIO_TypeDef* DIR_GPIO_Port;
uint16_t DIR_GPIO_Pin; uint16_t DIR_GPIO_Pin;
GPIO_TypeDef* STEP_GPIO_Port; GPIO_TypeDef* STEP_GPIO_Port;
uint16_t STEP_GPIO_Pin; uint16_t STEP_GPIO_Pin;
TIM_HandleTypeDef* tim; TIM_HandleTypeDef* tim; // timer assigned to this unit
} pse_stepper_conf; } pse_stepper_conf;
// readout widgets associated with this unit
typedef struct{ typedef struct{
lv_obj_t* flow; lv_obj_t* flow;
lv_obj_t* volume; lv_obj_t* volume;
lv_obj_t* enabled; lv_obj_t* enabled;
} pse_home_display; } pse_home_display;
// unit definition
typedef struct{ typedef struct{
uint8_t enabled; uint8_t enabled;
pse_ports port; // physical port on which this unit is connected pse_ports port; // physical port on which this unit is connected

View File

@ -36,6 +36,13 @@ static void back_button_handler(lv_event_t * e){
// compute volume delivered per steps // compute volume delivered per steps
pse_unit_compute_volume_per_step(c_pse_unit); pse_unit_compute_volume_per_step(c_pse_unit);
// set limit if volume defined
if(c_pse_unit->set_volume != 0){
c_pse_unit->stepper_conf->stop_at_limit = 1;
c_pse_unit->stepper_conf->stop_steps = (uint64_t)1000 * c_pse_unit->set_volume / c_pse_unit->nL_per_step; }
else
c_pse_unit->stepper_conf->stop_at_limit = 0;
// go back to the main menu // go back to the main menu
Home_Screen_Gen(c_pse_units, c_pse_units_num, true); Home_Screen_Gen(c_pse_units, c_pse_units_num, true);
} }

View File

@ -96,7 +96,8 @@ static void unit_home_handler(lv_event_t * e){
pse_unit* unit = lv_event_get_user_data(e); pse_unit* unit = lv_event_get_user_data(e);
pse_stepper_conf* c = unit->stepper_conf; pse_stepper_conf* c = unit->stepper_conf;
if(c->steps_counter == 0) return; if(c->steps_counter == 0) return;
c->stopAtHome = 1; c->stop_at_limit = 1;
c->stop_steps = 0;
pse_sp_jog_speed(c, 1); pse_sp_jog_speed(c, 1);
pse_sp_set_dir(c, c->steps_counter < 0); pse_sp_set_dir(c, c->steps_counter < 0);
pse_sp_start_axis(c); pse_sp_start_axis(c);

View File

@ -18,13 +18,15 @@ void pse_stepper_planer_tick(pse_unit* unit){
HAL_GPIO_TogglePin(c->STEP_GPIO_Port, c->STEP_GPIO_Pin); HAL_GPIO_TogglePin(c->STEP_GPIO_Port, c->STEP_GPIO_Pin);
c->steps_counter += (pse_sp_get_dir(c)?1:-1) * HAL_GPIO_ReadPin(c->STEP_GPIO_Port, c->STEP_GPIO_Pin); c->steps_counter += (pse_sp_get_dir(c)?1:-1) * HAL_GPIO_ReadPin(c->STEP_GPIO_Port, c->STEP_GPIO_Pin);
if(c->stopAtHome && c->steps_counter == 0){ if(c->stop_at_limit && c->steps_counter == c->stop_steps){
pse_sp_jog_speed(c, 0); pse_sp_jog_speed(c, 0);
pse_sp_stop_axis(c); pse_sp_stop_axis(c);
} }
} }
void pse_sp_start_axis(pse_stepper_conf* conf){ void pse_sp_start_axis(pse_stepper_conf* conf){
if(conf->stop_at_limit && conf->steps_counter == conf->stop_steps) return;
HAL_GPIO_WritePin(conf->EN_GPIO_Port, conf->EN_GPIO_Pin, GPIO_PIN_RESET); HAL_GPIO_WritePin(conf->EN_GPIO_Port, conf->EN_GPIO_Pin, GPIO_PIN_RESET);
HAL_TIM_Base_Start_IT(conf->tim); HAL_TIM_Base_Start_IT(conf->tim);
} }