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 -----
|
||||
//--------------------------
|
||||
//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);
|
||||
|
Loading…
x
Reference in New Issue
Block a user