Add 'stepper_home' function, disable testing mode

- Add function stepper_home
- disable STEPPER_TESTING and STEPPER_SIMULATE_ENCODER for normal
  for testing in operation
This commit is contained in:
jonny_ji7 2023-04-26 21:54:14 +02:00
parent 9cae5cf75d
commit 17d8db2193
4 changed files with 40 additions and 21 deletions

@ -85,7 +85,7 @@ extern "C" {
//----- stepper config -----
//--------------------------
//enable stepper test mode (dont start control and encoder task)
#define STEPPER_TEST
//#define STEPPER_TEST
//pins
#define STEPPER_STEP_PIN GPIO_NUM_18 //mos1
#define STEPPER_DIR_PIN GPIO_NUM_16 //ST3

@ -23,7 +23,7 @@ extern "C"
#define STEPPER_TEST_TRAVEL 65 //mm
#define MIN_MM 0
#define MAX_MM 40
#define MAX_MM 50
#define POS_MAX_STEPS MAX_MM * STEPPER_STEPS_PER_MM
#define POS_MIN_STEPS MIN_MM * STEPPER_STEPS_PER_MM
@ -37,7 +37,7 @@ extern "C"
//simulate encoder with reset button to test stepper ctl task
//note STEPPER_TEST has to be defined as well
#define STEPPER_SIMULATE_ENCODER
//#define STEPPER_SIMULATE_ENCODER
//----------------------
//----- variables ------
@ -68,6 +68,7 @@ void travelSteps(int stepsTarget){
remaining = POS_MAX_STEPS - posNow; //calc remaining distance fom current position to limit
if (stepsToGo > remaining){ //new distance will exceed limit
stepper_setTargetPosSteps(POS_MAX_STEPS); //move to limit
//TODO wait for limit actually reached here?
posNow = POS_MAX_STEPS;
stepp_direction = false; //change current direction for next iteration
stepsToGo = stepsToGo - remaining; //decrease target length by already traveled distance
@ -86,6 +87,7 @@ void travelSteps(int stepsTarget){
remaining = posNow - POS_MIN_STEPS;
if (stepsToGo > remaining){
stepper_setTargetPosSteps(POS_MIN_STEPS);
//TODO wait for limit actually reached here?
posNow = POS_MIN_STEPS;
stepp_direction = true;
stepsToGo = stepsToGo - remaining;
@ -110,21 +112,6 @@ void travelMm(int length){
}
//define zero/start position
//currently crashes into hardware limitation for certain time
//TODO: limit switch
void home() {
//TODO add function for this to stepper driver
ESP_LOGW(TAG, "auto-home...");
//....step.setSpeedMm(100, 500, 10);
//....step.runInf(1);
vTaskDelay(1500 / portTICK_PERIOD_MS);
//....step.stop();
//....step.resetAbsolute();
ESP_LOGW(TAG, "auto-home finished");
}
//initialize/configure stepper instance
void init_stepper() {
//TODO unnecessary wrapper?
@ -233,7 +220,7 @@ void task_stepper_ctl(void *pvParameter)
float potiModifier;
init_stepper();
home();
stepper_home(MAX_MM);
while(1){
#ifdef STEPPER_SIMULATE_ENCODER
@ -271,8 +258,8 @@ void task_stepper_ctl(void *pvParameter)
}
else {
//TODO use encoder queue to only run this check at encoder event?
vTaskDelay(2);
vTaskDelay(5);
}
vTaskDelay(10 / portTICK_PERIOD_MS);
vTaskDelay(5 / portTICK_PERIOD_MS);
}
}

@ -131,6 +131,29 @@ void stepper_setTargetPosMm(uint32_t posMm){
//======================
//======== home ========
//======================
//define zero/start position
//run to limit and define zero/start position.
//Currently simply runs stepper for travelMm and bumps into hardware limit
void stepper_home(uint32_t travelMm){
//TODO add timeout, limitswitch...
ESP_LOGW(TAG, "initiate auto-home...");
posNow = travelMm * STEPPER_STEPS_PER_MM;
while (posNow != 0){
//reactivate just in case stopped by other call to prevent deadlock
if (!timerIsRunning) {
stepper_setTargetPosSteps(0);
}
vTaskDelay(100 / portTICK_PERIOD_MS);
}
ESP_LOGW(TAG, "finished auto-home");
return;
}
//========================
//===== init stepper =====
//========================

@ -2,12 +2,21 @@
//init stepper pins and timer
void stepper_init();
//run to limit and define zero/start position. (busy until finished)
//Currently simply runs stepper for travelMm and bumps into hardware limit
void stepper_home(uint32_t travelMm = 60);
//set absolute target position in steps
void stepper_setTargetPosSteps(uint64_t steps);
//set absolute target position in millimeters
void stepper_setTargetPosMm(uint32_t posMm);
//set target speed in millimeters per second
void stepper_setSpeed(uint32_t speedMmPerS);
//task that periodically logs variables for debugging stepper driver
void task_stepper_debug(void *pvParameter);