|
|
@ -34,16 +34,16 @@ void PipetteModule::initialize(int32_t id, config_t *config, StepMotorCtrlModule |
|
|
|
m_smtp2.initialize(hardwaredcfg->uart, 0, hardwaredcfg->hdma_rx, hardwaredcfg->hdma_tx); |
|
|
|
m_thread.init("pipette_ctrl", 1024); |
|
|
|
|
|
|
|
m_config.limit_ul = 3; |
|
|
|
m_config.limit_ul = 10; |
|
|
|
m_config.pump_acc = 14; |
|
|
|
m_config.pump_dec = 14; |
|
|
|
m_config.pump_vstart = 0; |
|
|
|
m_config.pump_vstop = 900; |
|
|
|
m_config.aspirate_distribut_pump_vel = 100; //
|
|
|
|
m_config.pump_vmax = 1400; |
|
|
|
m_config.pump_lld_vel = 100; // lld推荐使用速度为50->200,这里
|
|
|
|
m_config.pump_aspirate_distribut_vel = 100; //
|
|
|
|
m_config.lld_motor_velocity = 50; |
|
|
|
m_config.lld_detect_period = 100; // 100ms
|
|
|
|
m_config.lld_pump_vel = 100; // lld推荐使用速度为50->200,这里
|
|
|
|
m_config.lld_motor_vel_rpm = 50; |
|
|
|
m_config.lld_detect_period_ms = 100; // 100ms
|
|
|
|
|
|
|
|
ZASSERT(zmotor); |
|
|
|
m_zmotor = zmotor; |
|
|
@ -57,21 +57,25 @@ int32_t PipetteModule::getid(int32_t *id) { |
|
|
|
* Module * |
|
|
|
*******************************************************************************/ |
|
|
|
|
|
|
|
#define PROCESS_REG_CFG(cfgkey, cfg) PROCESS_REG(cfgkey, /* */ REG_GET(m_config.cfg), REG_SET(m_config.cfg))
|
|
|
|
|
|
|
|
int32_t PipetteModule::module_xxx_reg(int32_t param_id, bool read, int32_t &val) { |
|
|
|
switch (param_id) { |
|
|
|
MODULE_COMMON_PROCESS_REG_CB(); |
|
|
|
PROCESS_REG(kreg_pipette_pos_ul, /* */ read_pos_ul(&val), ACTION_NONE); |
|
|
|
PROCESS_REG(kreg_pipette_capactitance_val, /* */ read_capactitance(&val), ACTION_NONE); |
|
|
|
PROCESS_REG(kreg_pipette_tip_state, /* */ read_tip_state(&val), ACTION_NONE); |
|
|
|
PROCESS_REG(kreg_pipette_limit_ul, /* */ REG_GET(m_config.limit_ul), REG_SET(m_config.limit_ul)); |
|
|
|
|
|
|
|
PROCESS_REG(kreg_pipette_pump_acc, /* */ REG_GET(m_config.pump_acc), REG_SET(m_config.pump_acc)); |
|
|
|
PROCESS_REG(kreg_pipette_pump_dec, /* */ REG_GET(m_config.pump_dec), REG_SET(m_config.pump_dec)); |
|
|
|
PROCESS_REG(kreg_pipette_pump_vstart, /* */ REG_GET(m_config.pump_vstart), REG_SET(m_config.pump_vstart)); |
|
|
|
PROCESS_REG(kreg_pipette_pump_vstop, /* */ REG_GET(m_config.pump_vstop), REG_SET(m_config.pump_vstop)); |
|
|
|
PROCESS_REG(kreg_pipette_pump_vmax, /* */ REG_GET(m_config.pump_vmax), REG_SET(m_config.pump_vmax)); |
|
|
|
// PROCESS_REG(kreg_pipette_lld_velocity, /* */ REG_GET(m_config.lld_velocity), REG_SET(m_config.lld_velocity));
|
|
|
|
PROCESS_REG(kreg_pipette_data_sample_period, /* */ REG_GET(m_config.lld_detect_period), REG_SET(m_config.lld_detect_period)); |
|
|
|
PROCESS_REG_CFG(kreg_pipette_limit_ul, limit_ul); |
|
|
|
PROCESS_REG_CFG(kreg_pipette_pump_acc, pump_acc); |
|
|
|
PROCESS_REG_CFG(kreg_pipette_pump_dec, pump_dec); |
|
|
|
PROCESS_REG_CFG(kreg_pipette_pump_vstart, pump_vstart); |
|
|
|
PROCESS_REG_CFG(kreg_pipette_pump_vstop, pump_vstop); |
|
|
|
PROCESS_REG_CFG(kreg_pipette_pump_vmax, pump_vmax); |
|
|
|
PROCESS_REG_CFG(kreg_pipette_aspirate_distribut_pump_vel, aspirate_distribut_pump_vel); |
|
|
|
PROCESS_REG_CFG(kreg_pipette_lld_pump_vel, lld_pump_vel); |
|
|
|
PROCESS_REG_CFG(kreg_pipette_lld_motor_vel_rpm, lld_motor_vel_rpm); |
|
|
|
PROCESS_REG_CFG(kreg_pipette_lld_detect_period_ms, lld_detect_period_ms); |
|
|
|
|
|
|
|
default: |
|
|
|
return err::kmodule_not_find_reg; |
|
|
@ -346,12 +350,12 @@ int32_t PipetteModule::do_pipette_lld(lld_mode_t mode, int32_t zdpos, int32_t c_ |
|
|
|
if (mode == kclld) { |
|
|
|
DO_IN_THREAD(m_smtp2.pump_clld(c_threshold)); |
|
|
|
} else if (mode == kplld) { |
|
|
|
DO_IN_THREAD(m_smtp2.pump_distribut_plld(m_config.pump_lld_vel, p_threshold)); |
|
|
|
DO_IN_THREAD(m_smtp2.pump_distribut_plld(m_config.lld_pump_vel, p_threshold)); |
|
|
|
} else if (mode == kmixlld) { |
|
|
|
DO_IN_THREAD(m_smtp2.pump_distribut_mlld(m_config.pump_lld_vel, c_threshold, p_threshold)); |
|
|
|
DO_IN_THREAD(m_smtp2.pump_distribut_mlld(m_config.lld_pump_vel, c_threshold, p_threshold)); |
|
|
|
} |
|
|
|
osDelay(50); |
|
|
|
submotor->moveBy(zdpos, m_config.lld_motor_velocity); |
|
|
|
submotor->moveBy(zdpos, m_config.lld_motor_vel_rpm); |
|
|
|
|
|
|
|
while (true) { |
|
|
|
if (!check_when_run()) break; |
|
|
@ -403,7 +407,7 @@ int32_t PipetteModule::do_pipette_lld(lld_mode_t mode, int32_t zdpos, int32_t c_ |
|
|
|
break; |
|
|
|
} |
|
|
|
|
|
|
|
m_thread.sleep(m_config.lld_detect_period); |
|
|
|
m_thread.sleep(m_config.lld_detect_period_ms); |
|
|
|
} |
|
|
|
}, |
|
|
|
[this]() { // exit fn
|
|
|
@ -535,7 +539,7 @@ int32_t PipetteModule::do_pipette_clld_test(int32_t zdpos) { |
|
|
|
} |
|
|
|
|
|
|
|
push_snesor_sample_data(motorpos, capacitance, 0); |
|
|
|
m_thread.sleep(m_config.lld_detect_period); |
|
|
|
m_thread.sleep(m_config.lld_detect_period_ms); |
|
|
|
} |
|
|
|
}, |
|
|
|
[this]() { // exit fn
|
|
|
|