|
|
@ -108,6 +108,9 @@ int32_t StepMotorCtrlModule::module_set_reg(int32_t regindex, int32_t val) { |
|
|
|
MODULE_REG_CASE__SET_REG_TO(kreg_step_motor_one_circle_pulse, (m_cfg.motor_one_circle_pulse)); |
|
|
|
MODULE_REG_CASE__SET_REG_TO(kreg_step_motor_one_circle_pulse_denominator, (m_cfg.motor_one_circle_pulse_denominator)); |
|
|
|
MODULE_REG_CASE__SET_REG_TO(kreg_step_motor_default_velocity, (m_cfg.motor_default_velocity)); |
|
|
|
MODULE_REG_CASE__SET_REG_TO(kreg_step_motor_low_velocity, (m_cfg.motor_low_velocity)); |
|
|
|
MODULE_REG_CASE__SET_REG_TO(kreg_step_motor_mid_velocity, (m_cfg.motor_mid_velocity)); |
|
|
|
MODULE_REG_CASE__SET_REG_TO(kreg_step_motor_high_velocity, (m_cfg.motor_high_velocity)); |
|
|
|
MODULE_REG_CASE__SET_REG_TO(kreg_step_motor_run_to_zero_speed, (m_cfg.motor_run_to_zero_speed)); |
|
|
|
MODULE_REG_CASE__SET_REG_TO(kreg_step_motor_look_zero_edge_speed, (m_cfg.motor_look_zero_edge_speed)); |
|
|
|
MODULE_REG_CASE__SET_REG_TO(kreg_step_motor_ihold, (m_cfg.stepmotor_ihold)); |
|
|
@ -183,6 +186,9 @@ int32_t StepMotorCtrlModule::module_get_reg(int32_t regindex, int32_t* val) { |
|
|
|
MODULE_CFG_CASE__GET_REG_FROM(kreg_step_motor_one_circle_pulse, m_cfg.motor_one_circle_pulse); |
|
|
|
MODULE_CFG_CASE__GET_REG_FROM(kreg_step_motor_one_circle_pulse_denominator, m_cfg.motor_one_circle_pulse_denominator); |
|
|
|
MODULE_CFG_CASE__GET_REG_FROM(kreg_step_motor_default_velocity, m_cfg.motor_default_velocity); |
|
|
|
MODULE_CFG_CASE__GET_REG_FROM(kreg_step_motor_low_velocity, (m_cfg.motor_low_velocity)); |
|
|
|
MODULE_CFG_CASE__GET_REG_FROM(kreg_step_motor_mid_velocity, (m_cfg.motor_mid_velocity)); |
|
|
|
MODULE_CFG_CASE__GET_REG_FROM(kreg_step_motor_high_velocity, (m_cfg.motor_high_velocity)); |
|
|
|
MODULE_CFG_CASE__GET_REG_FROM(kreg_step_motor_run_to_zero_speed, m_cfg.motor_run_to_zero_speed); |
|
|
|
MODULE_CFG_CASE__GET_REG_FROM(kreg_step_motor_look_zero_edge_speed, m_cfg.motor_look_zero_edge_speed); |
|
|
|
MODULE_CFG_CASE__GET_REG_FROM(kreg_step_motor_ihold, m_cfg.stepmotor_ihold); |
|
|
@ -573,21 +579,26 @@ int32_t StepMotorCtrlModule::check_befor_run() { |
|
|
|
return 0; |
|
|
|
} |
|
|
|
|
|
|
|
int32_t StepMotorCtrlModule::step_motor_easy_rotate(int32_t direction) { |
|
|
|
int32_t StepMotorCtrlModule::step_motor_easy_rotate(int32_t direction) { return step_motor_rotate(direction, 0); } |
|
|
|
int32_t StepMotorCtrlModule::step_motor_rotate(int32_t direction, int32_t speedlevel) { |
|
|
|
ZLOGI(TAG, "m%d motor_rotate %d", module_id, direction); |
|
|
|
|
|
|
|
int32_t ecode = check_befor_run(); |
|
|
|
if (ecode != 0) return ecode; |
|
|
|
|
|
|
|
return do_step_motor_easy_rotate(direction); |
|
|
|
return do_step_motor_easy_rotate(direction, speedlevel); |
|
|
|
} |
|
|
|
int32_t StepMotorCtrlModule::step_motor_easy_move_by(int32_t distance) { |
|
|
|
|
|
|
|
int32_t StepMotorCtrlModule::step_motor_easy_move_by(int32_t distance) { return step_motor_move_by(distance, 0); } |
|
|
|
int32_t StepMotorCtrlModule::step_motor_move_by(int32_t distance, int32_t speedlevel) { |
|
|
|
ZLOGI(TAG, "m%d motor_move_by %d", module_id, distance); |
|
|
|
int32_t ecode = check_befor_run(); |
|
|
|
if (ecode != 0) return ecode; |
|
|
|
return do_step_motor_easy_move_by(distance); |
|
|
|
return do_step_motor_easy_move_by(distance, speedlevel); |
|
|
|
} |
|
|
|
int32_t StepMotorCtrlModule::step_motor_easy_move_to(int32_t tox) { |
|
|
|
|
|
|
|
int32_t StepMotorCtrlModule::step_motor_easy_move_to(int32_t tox) { return step_motor_move_to(tox, 0); } |
|
|
|
int32_t StepMotorCtrlModule::step_motor_move_to(int32_t tox, int32_t speedlevel) { |
|
|
|
ZLOGI(TAG, "m%d motor_move_to %d", module_id, tox); |
|
|
|
int32_t ecode = check_befor_run(); |
|
|
|
if (ecode != 0) return ecode; |
|
|
@ -597,8 +608,9 @@ int32_t StepMotorCtrlModule::step_motor_easy_move_to(int32_t tox) { |
|
|
|
} |
|
|
|
if (m_cfg.min_d != 0 && tox < m_cfg.min_d) tox = m_cfg.min_d; |
|
|
|
if (m_cfg.max_d != 0 && tox > m_cfg.max_d) tox = m_cfg.max_d; |
|
|
|
return do_step_motor_easy_move_to(tox); |
|
|
|
return do_step_motor_easy_move_to(tox, speedlevel); |
|
|
|
} |
|
|
|
|
|
|
|
int32_t StepMotorCtrlModule::step_motor_easy_move_to_zero() { |
|
|
|
ZLOGI(TAG, "m%d motor_move_to_zero", module_id); |
|
|
|
int32_t ecode = check_befor_run(); |
|
|
@ -696,15 +708,15 @@ int32_t StepMotorCtrlModule::step_motor_easy_reciprocating_motion(int32_t startp |
|
|
|
return 0; |
|
|
|
} |
|
|
|
|
|
|
|
int32_t StepMotorCtrlModule::do_step_motor_easy_rotate(int32_t direction) { |
|
|
|
int32_t StepMotorCtrlModule::do_step_motor_easy_rotate(int32_t direction, int32_t speedlevel) { |
|
|
|
m_thread.stop(); |
|
|
|
module_status = 1; |
|
|
|
m_thread.start( |
|
|
|
[this, direction]() { |
|
|
|
[this, direction, speedlevel]() { |
|
|
|
befor_motor_move(); |
|
|
|
{ |
|
|
|
// rotate(direction, m_cfg.motor_default_velocity);
|
|
|
|
rotateInVelocityMode(direction >= 0 ? m_cfg.motor_default_velocity : -m_cfg.motor_default_velocity); |
|
|
|
int32_t speed = getspeed(speedlevel); |
|
|
|
rotateInVelocityMode(direction >= 0 ? speed : -speed); |
|
|
|
|
|
|
|
while (true) { |
|
|
|
if (m_thread.getExitFlag()) break; |
|
|
@ -718,7 +730,7 @@ int32_t StepMotorCtrlModule::do_step_motor_easy_rotate(int32_t direction) { |
|
|
|
[this]() { m_stepM1->stop(); }); |
|
|
|
return 0; |
|
|
|
} |
|
|
|
int32_t StepMotorCtrlModule::do_step_motor_easy_move_by(int32_t distance) { |
|
|
|
int32_t StepMotorCtrlModule::do_step_motor_easy_move_by(int32_t distance, int32_t speedlevel) { |
|
|
|
int32_t motor_pos = 0; |
|
|
|
step_motor_read_pos(&motor_pos); |
|
|
|
motor_pos += distance; |
|
|
@ -726,18 +738,18 @@ int32_t StepMotorCtrlModule::do_step_motor_easy_move_by(int32_t distance) { |
|
|
|
int32_t ecode = check_befor_run(); |
|
|
|
if (ecode != 0) return ecode; |
|
|
|
|
|
|
|
return do_step_motor_easy_move_to(motor_pos); |
|
|
|
return do_step_motor_easy_move_to(motor_pos, speedlevel); |
|
|
|
} |
|
|
|
int32_t StepMotorCtrlModule::do_step_motor_easy_move_to(int32_t tox) { |
|
|
|
int32_t StepMotorCtrlModule::do_step_motor_easy_move_to(int32_t tox, int32_t speedlevel) { |
|
|
|
m_thread.stop(); |
|
|
|
module_status = 1; |
|
|
|
m_thread.start( |
|
|
|
[this, tox]() { |
|
|
|
[this, tox, speedlevel]() { |
|
|
|
befor_motor_move(); |
|
|
|
|
|
|
|
do { |
|
|
|
int32_t expectation_dpos = tox - getnowpos(); |
|
|
|
moveTo(tox, m_cfg.motor_default_velocity); |
|
|
|
moveTo(tox, getspeed(speedlevel)); |
|
|
|
if (!waitforstop(nullptr)) break; |
|
|
|
|
|
|
|
checkdpos(expectation_dpos); |
|
|
@ -807,8 +819,8 @@ void StepMotorCtrlModule::checkdpos(int32_t expect_dpos) { |
|
|
|
ZLOGI(TAG, "dpos%d,expect_dpos:%d", dpos, expect_dpos); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
int32_t StepMotorCtrlModule::step_motor_easy_move_to_zero_point_quick() { |
|
|
|
int32_t StepMotorCtrlModule::step_motor_easy_move_to_zero_point_quick() { return step_motor_move_to_zero_point_quick(0); } |
|
|
|
int32_t StepMotorCtrlModule::step_motor_move_to_zero_point_quick(int32_t speedlevel) { |
|
|
|
//
|
|
|
|
ZLOGI(TAG, "m%d motor_move_to_zero_point_quick", module_id); |
|
|
|
int32_t ecode = check_befor_run(); |
|
|
@ -821,20 +833,21 @@ int32_t StepMotorCtrlModule::step_motor_easy_move_to_zero_point_quick() { |
|
|
|
m_thread.stop(); |
|
|
|
module_status = 1; |
|
|
|
m_thread.start( |
|
|
|
[this]() { |
|
|
|
[this, speedlevel]() { |
|
|
|
befor_motor_move(); |
|
|
|
bool moveToZero = false; |
|
|
|
bool moveToZero = false; |
|
|
|
int32_t speed = getspeed(speedlevel); |
|
|
|
do { |
|
|
|
// 期望偏差
|
|
|
|
int32_t expectation_dpos = -m_cfg.io_trigger_append_distance + 0 + m_cfg.motor_dzero - getnowpos(); |
|
|
|
if (!m_iotable[0].getState()) { |
|
|
|
// 快速移动到零点
|
|
|
|
moveTo(0 + m_cfg.motor_dzero, m_cfg.motor_default_velocity); |
|
|
|
moveTo(0 + m_cfg.motor_dzero, speed); |
|
|
|
// 等待移动到目标点
|
|
|
|
if (!waitforstop([this]() { return m_iotable[0].getState(); })) break; |
|
|
|
} else { |
|
|
|
// 快速移动到零点
|
|
|
|
moveTo(0 + m_cfg.motor_dzero, m_cfg.motor_default_velocity); |
|
|
|
moveTo(0 + m_cfg.motor_dzero, speed); |
|
|
|
// 等待移动到目标点
|
|
|
|
if (!waitforstop([this]() { return !m_iotable[0].getState(); })) break; |
|
|
|
} |
|
|
@ -853,6 +866,7 @@ int32_t StepMotorCtrlModule::step_motor_easy_move_to_zero_point_quick() { |
|
|
|
return 0; |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
//
|
|
|
|
int32_t StepMotorCtrlModule::getnowpos(int32_t& x) { |
|
|
|
if (m_cfg.motor_enable_enc == 0) { |
|
|
@ -933,3 +947,19 @@ bool StepMotorCtrlModule::waitforstop(function<bool()> checkstop, int checkperio |
|
|
|
|
|
|
|
return suc; |
|
|
|
} |
|
|
|
|
|
|
|
int32_t StepMotorCtrlModule::getspeed(int32_t speedlevel) { |
|
|
|
int32_t speed = m_cfg.motor_default_velocity; |
|
|
|
if (speedlevel == 0) { |
|
|
|
speed = m_cfg.motor_default_velocity; |
|
|
|
} else if (speedlevel == 1) { |
|
|
|
speed = m_cfg.motor_low_velocity; |
|
|
|
} else if (speedlevel == 2) { |
|
|
|
speed = m_cfg.motor_mid_velocity; |
|
|
|
} else if (speedlevel == 3) { |
|
|
|
speed = m_cfg.motor_high_velocity; |
|
|
|
} else { |
|
|
|
speed = m_cfg.motor_default_velocity; |
|
|
|
} |
|
|
|
return speed; |
|
|
|
} |