Improve the behaviour of the HOMING sequence

This commit is contained in:
Paul Guenette
2019-07-18 17:29:21 +02:00
parent 0ab104346f
commit fbd7ab2738
3 changed files with 28 additions and 10 deletions
+13 -7
View File
@@ -315,19 +315,25 @@ bool Axis::run_closed_loop_control_loop() {
return false; // set_error should update axis.error_
// Handle the homing case
if (homing_state_ == HOMING_STATE_HOMING) {
if (homing_.homing_state == HOMING_STATE_HOMING) {
if (min_endstop_.getEndstopState()) {
encoder_.set_linear_count(min_endstop_.config_.offset);
controller_.config_.control_mode = Controller::CTRL_MODE_POSITION_CONTROL;
controller_.config_.input_mode = Controller::INPUT_MODE_TRAP_TRAJ;
controller_.input_pos_ = 0.0f;
controller_.input_pos_updated();
controller_.input_vel_ = 0.0f;
controller_.input_current_ = 0.0f;
controller_.config_.control_mode = Controller::CTRL_MODE_POSITION_CONTROL;
controller_.input_pos_updated();
homing_state_ = HOMING_STATE_MOVE_TO_ZERO;
homing_.homing_state = HOMING_STATE_MOVE_TO_ZERO;
}
} else if (homing_state_ == HOMING_STATE_MOVE_TO_ZERO) {
if(!min_endstop_.getEndstopState()){
homing_state_ = HOMING_STATE_IDLE;
} else if (homing_.homing_state == HOMING_STATE_MOVE_TO_ZERO) {
if(!min_endstop_.getEndstopState() && controller_.trajectory_done_){
controller_.config_.control_mode = homing_.storedControlMode;
controller_.config_.input_mode = homing_.storedInputMode;
homing_.homing_state = HOMING_STATE_IDLE;
}
} else {
// Check for endstop presses
+8 -2
View File
@@ -90,6 +90,12 @@ public:
uint32_t can_heartbeat_rate_ms = 100;
};
struct Homing_t {
HomingState_t homing_state = HOMING_STATE_IDLE;
Controller::ControlMode_t storedControlMode = Controller::CTRL_MODE_POSITION_CONTROL;
Controller::InputMode_t storedInputMode = Controller::INPUT_MODE_PASSTHROUGH;
};
enum thread_signals {
M_SIGNAL_PH_CURRENT_MEAS = 1u << 0
};
@@ -250,7 +256,7 @@ public:
State_t& current_state_ = task_chain_[0];
uint32_t loop_counter_ = 0;
LockinState_t lockin_state_ = LOCKIN_STATE_INACTIVE;
HomingState_t homing_state_ = HOMING_STATE_IDLE;
Homing_t homing_;
uint32_t last_heartbeat_ = 0;
// watchdog
@@ -265,7 +271,7 @@ public:
make_protocol_property("requested_state", &requested_state_),
make_protocol_ro_property("loop_counter", &loop_counter_),
make_protocol_ro_property("lockin_state", &lockin_state_),
make_protocol_ro_property("homing_state", &homing_state_),
make_protocol_ro_property("homing_state", &homing_.homing_state),
make_protocol_object("config",
make_protocol_property("startup_motor_calibration", &config_.startup_motor_calibration),
make_protocol_property("startup_encoder_index_search", &config_.startup_encoder_index_search),
+7 -1
View File
@@ -61,12 +61,18 @@ void Controller::start_anticogging_calibration() {
//TODO: This needs to be upgraded to use its own run_control_loop!
bool Controller::home_axis() {
if (axis_->min_endstop_.config_.enabled) {
axis_->homing_.storedControlMode = config_.control_mode;
axis_->homing_.storedInputMode = config_.input_mode;
config_.control_mode = CTRL_MODE_VELOCITY_CONTROL;
config_.input_mode = INPUT_MODE_VEL_RAMP;
input_pos_ = 0.0f;
input_pos_updated();
input_vel_ = -config_.homing_speed;
input_current_ = 0.0f;
axis_->homing_state_ = HOMING_STATE_HOMING;
axis_->homing_.homing_state = HOMING_STATE_HOMING;
} else {
return false;
}