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:
parent
9cae5cf75d
commit
17d8db2193
@ -85,7 +85,7 @@ extern "C" {
|
|||||||
//----- stepper config -----
|
//----- stepper config -----
|
||||||
//--------------------------
|
//--------------------------
|
||||||
//enable stepper test mode (dont start control and encoder task)
|
//enable stepper test mode (dont start control and encoder task)
|
||||||
#define STEPPER_TEST
|
//#define STEPPER_TEST
|
||||||
//pins
|
//pins
|
||||||
#define STEPPER_STEP_PIN GPIO_NUM_18 //mos1
|
#define STEPPER_STEP_PIN GPIO_NUM_18 //mos1
|
||||||
#define STEPPER_DIR_PIN GPIO_NUM_16 //ST3
|
#define STEPPER_DIR_PIN GPIO_NUM_16 //ST3
|
||||||
|
@ -23,7 +23,7 @@ extern "C"
|
|||||||
#define STEPPER_TEST_TRAVEL 65 //mm
|
#define STEPPER_TEST_TRAVEL 65 //mm
|
||||||
|
|
||||||
#define MIN_MM 0
|
#define MIN_MM 0
|
||||||
#define MAX_MM 40
|
#define MAX_MM 50
|
||||||
#define POS_MAX_STEPS MAX_MM * STEPPER_STEPS_PER_MM
|
#define POS_MAX_STEPS MAX_MM * STEPPER_STEPS_PER_MM
|
||||||
#define POS_MIN_STEPS MIN_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
|
//simulate encoder with reset button to test stepper ctl task
|
||||||
//note STEPPER_TEST has to be defined as well
|
//note STEPPER_TEST has to be defined as well
|
||||||
#define STEPPER_SIMULATE_ENCODER
|
//#define STEPPER_SIMULATE_ENCODER
|
||||||
|
|
||||||
//----------------------
|
//----------------------
|
||||||
//----- variables ------
|
//----- variables ------
|
||||||
@ -68,6 +68,7 @@ void travelSteps(int stepsTarget){
|
|||||||
remaining = POS_MAX_STEPS - posNow; //calc remaining distance fom current position to limit
|
remaining = POS_MAX_STEPS - posNow; //calc remaining distance fom current position to limit
|
||||||
if (stepsToGo > remaining){ //new distance will exceed limit
|
if (stepsToGo > remaining){ //new distance will exceed limit
|
||||||
stepper_setTargetPosSteps(POS_MAX_STEPS); //move to limit
|
stepper_setTargetPosSteps(POS_MAX_STEPS); //move to limit
|
||||||
|
//TODO wait for limit actually reached here?
|
||||||
posNow = POS_MAX_STEPS;
|
posNow = POS_MAX_STEPS;
|
||||||
stepp_direction = false; //change current direction for next iteration
|
stepp_direction = false; //change current direction for next iteration
|
||||||
stepsToGo = stepsToGo - remaining; //decrease target length by already traveled distance
|
stepsToGo = stepsToGo - remaining; //decrease target length by already traveled distance
|
||||||
@ -86,6 +87,7 @@ void travelSteps(int stepsTarget){
|
|||||||
remaining = posNow - POS_MIN_STEPS;
|
remaining = posNow - POS_MIN_STEPS;
|
||||||
if (stepsToGo > remaining){
|
if (stepsToGo > remaining){
|
||||||
stepper_setTargetPosSteps(POS_MIN_STEPS);
|
stepper_setTargetPosSteps(POS_MIN_STEPS);
|
||||||
|
//TODO wait for limit actually reached here?
|
||||||
posNow = POS_MIN_STEPS;
|
posNow = POS_MIN_STEPS;
|
||||||
stepp_direction = true;
|
stepp_direction = true;
|
||||||
stepsToGo = stepsToGo - remaining;
|
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
|
//initialize/configure stepper instance
|
||||||
void init_stepper() {
|
void init_stepper() {
|
||||||
//TODO unnecessary wrapper?
|
//TODO unnecessary wrapper?
|
||||||
@ -233,7 +220,7 @@ void task_stepper_ctl(void *pvParameter)
|
|||||||
float potiModifier;
|
float potiModifier;
|
||||||
|
|
||||||
init_stepper();
|
init_stepper();
|
||||||
home();
|
stepper_home(MAX_MM);
|
||||||
|
|
||||||
while(1){
|
while(1){
|
||||||
#ifdef STEPPER_SIMULATE_ENCODER
|
#ifdef STEPPER_SIMULATE_ENCODER
|
||||||
@ -271,8 +258,8 @@ void task_stepper_ctl(void *pvParameter)
|
|||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
//TODO use encoder queue to only run this check at encoder event?
|
//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 =====
|
//===== init stepper =====
|
||||||
//========================
|
//========================
|
||||||
|
@ -2,12 +2,21 @@
|
|||||||
|
|
||||||
//init stepper pins and timer
|
//init stepper pins and timer
|
||||||
void stepper_init();
|
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
|
//set absolute target position in steps
|
||||||
void stepper_setTargetPosSteps(uint64_t steps);
|
void stepper_setTargetPosSteps(uint64_t steps);
|
||||||
|
|
||||||
//set absolute target position in millimeters
|
//set absolute target position in millimeters
|
||||||
void stepper_setTargetPosMm(uint32_t posMm);
|
void stepper_setTargetPosMm(uint32_t posMm);
|
||||||
|
|
||||||
//set target speed in millimeters per second
|
//set target speed in millimeters per second
|
||||||
void stepper_setSpeed(uint32_t speedMmPerS);
|
void stepper_setSpeed(uint32_t speedMmPerS);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
//task that periodically logs variables for debugging stepper driver
|
//task that periodically logs variables for debugging stepper driver
|
||||||
void task_stepper_debug(void *pvParameter);
|
void task_stepper_debug(void *pvParameter);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user