From 9240d75d3482509ee8904caca09110d2eb6099ad Mon Sep 17 00:00:00 2001 From: zhaohe Date: Wed, 5 Jun 2024 15:42:41 +0800 Subject: [PATCH] update --- usrc/public_service/instance_init.hpp | 12 +++ .../subboard20_plate_clamp_case/pri_board.h | 25 ++++-- .../subboard20_plate_clamp_case.cpp | 53 +----------- usrc/subboards/subboard30_shake_module/pri_board.h | 24 ++++++ .../subboard30_shake_module.cpp | 20 ++--- .../subboard60_inlet_and_outlet_module/pri_board.h | 28 +++++++ .../subboard60_inlet_and_outlet_module.cpp | 24 ++---- .../subboard70_incubation_turntable/pri_board.h | 23 ++++++ .../subboard70_incubation_turntable.cpp | 18 +--- usrc/subboards/subboard80_cliptip/pri_board.h | 16 +++- .../subboard80_cliptip/subboard80_cliptip.cpp | 17 +--- .../subboard90_optical_module/pri_board.h | 95 ++++++++++++++++++++++ .../subboard90_optical_module.cpp | 64 +++++++++++++++ .../subboard90_optical_module.hpp | 45 ++++++++++ .../subboard90_optical_module_board.c | 73 +++++++++++++++++ .../subboard90_optical_module_board.h | 12 +++ 16 files changed, 434 insertions(+), 115 deletions(-) create mode 100644 usrc/subboards/subboard90_optical_module/pri_board.h create mode 100644 usrc/subboards/subboard90_optical_module/subboard90_optical_module.cpp create mode 100644 usrc/subboards/subboard90_optical_module/subboard90_optical_module.hpp create mode 100644 usrc/subboards/subboard90_optical_module/subboard90_optical_module_board.c create mode 100644 usrc/subboards/subboard90_optical_module/subboard90_optical_module_board.h diff --git a/usrc/public_service/instance_init.hpp b/usrc/public_service/instance_init.hpp index d7178b1..69a1ec9 100644 --- a/usrc/public_service/instance_init.hpp +++ b/usrc/public_service/instance_init.hpp @@ -89,3 +89,15 @@ \ ZLOGI(TAG, "motor%d readic version %x", subid, motor.readICVersion()); \ } + +#define EXT_READ_IO_NUM 10 +#define IO_INIT() \ + IO[0].initAsInput(EXT_INPUT_IO0, ZGPIO::kMode_nopull, ZGPIO::kIRQ_noIrq, EXT_INPUT_IO0_MIRROR); \ + IO[1].initAsInput(EXT_INPUT_IO1, ZGPIO::kMode_nopull, ZGPIO::kIRQ_noIrq, EXT_INPUT_IO1_MIRROR); \ + IO[2].initAsInput(EXT_INPUT_IO2, ZGPIO::kMode_nopull, ZGPIO::kIRQ_noIrq, EXT_INPUT_IO2_MIRROR); \ + IO[3].initAsInput(EXT_INPUT_IO3, ZGPIO::kMode_nopull, ZGPIO::kIRQ_noIrq, EXT_INPUT_IO3_MIRROR); \ + IO[5].initAsInput(EXT_INPUT_IO5, ZGPIO::kMode_nopull, ZGPIO::kIRQ_noIrq, EXT_INPUT_IO5_MIRROR); \ + IO[6].initAsInput(EXT_INPUT_IO6, ZGPIO::kMode_nopull, ZGPIO::kIRQ_noIrq, EXT_INPUT_IO6_MIRROR); \ + IO[7].initAsInput(EXT_INPUT_IO7, ZGPIO::kMode_nopull, ZGPIO::kIRQ_noIrq, EXT_INPUT_IO7_MIRROR); \ + IO[8].initAsInput(EXT_INPUT_IO8, ZGPIO::kMode_nopull, ZGPIO::kIRQ_noIrq, EXT_INPUT_IO8_MIRROR); \ + IO[9].initAsInput(EXT_INPUT_IO9, ZGPIO::kMode_nopull, ZGPIO::kIRQ_noIrq, EXT_INPUT_IO9_MIRROR); diff --git a/usrc/subboards/subboard20_plate_clamp_case/pri_board.h b/usrc/subboards/subboard20_plate_clamp_case/pri_board.h index b54dc6b..28c960c 100644 --- a/usrc/subboards/subboard20_plate_clamp_case/pri_board.h +++ b/usrc/subboards/subboard20_plate_clamp_case/pri_board.h @@ -9,12 +9,23 @@ #define EXT_INPUT_IO2 PinNull #define EXT_INPUT_IO3 PinNull #define EXT_INPUT_IO4 PinNull +#define EXT_INPUT_IO5 PinNull +#define EXT_INPUT_IO6 PinNull +#define EXT_INPUT_IO7 PinNull +#define EXT_INPUT_IO8 PinNull +#define EXT_INPUT_IO9 PinNull #define EXT_INPUT_IO0_MIRROR true #define EXT_INPUT_IO1_MIRROR true #define EXT_INPUT_IO2_MIRROR true #define EXT_INPUT_IO3_MIRROR true #define EXT_INPUT_IO4_MIRROR true +#define EXT_INPUT_IO5_MIRROR true +#define EXT_INPUT_IO6_MIRROR true +#define EXT_INPUT_IO7_MIRROR true +#define EXT_INPUT_IO8_MIRROR true +#define EXT_INPUT_IO9_MIRROR true + #define TMC_MOTOR_SPI hspi1 @@ -34,11 +45,11 @@ #define MOTOR1_REFL_MIRROR true #define MOTOR1_REFR_MIRROR true -#define MOTOR1_MOTOR_SHAFT false // -#define MOTOR1_MOTOR_ONE_CIRCLE_PULSE 80 // 3600 = 93圈, 3600/93 = 38.70967741935484 +#define MOTOR1_MOTOR_SHAFT true // +#define MOTOR1_MOTOR_ONE_CIRCLE_PULSE 60 // 3600 = 93圈, 3600/93 = 38.70967741935484 #define MOTOR1_MOTOR_ONE_CIRCLE_PULSE_DENOMINATOR 1 // -#define MOTOR1_STEPMOTOR_IHOLD 1 -#define MOTOR1_STEPMOTOR_IRUN 8 +#define MOTOR1_STEPMOTOR_IHOLD 3 +#define MOTOR1_STEPMOTOR_IRUN 16 #define MOTOR1_STEPMOTOR_IHOLDDELAY 100 #define MOTOR1_STEPMOTOR_IGLOBALSCALER 1 #define MOTOR1_MOTOR_DEFAULT_ACC 300 @@ -47,7 +58,7 @@ #define MOTOR1_MIN_D 0 #define MOTOR1_MAX_D 0 #define MOTOR1_MOTOR_RUN_TO_ZERO_SPEED 100 -#define MOTOR1_MOTOR_RUN_TO_ZERO_DEC 300 +#define MOTOR1_MOTOR_RUN_TO_ZERO_DEC 400 #define MOTOR1_MOTOR_LOOK_ZERO_EDGE_SPEED 50 #define MOTOR1_MOTOR_LOOK_ZERO_EDGE_DEC 600 @@ -67,7 +78,7 @@ #define MOTOR2_REFL_MIRROR true #define MOTOR2_REFR_MIRROR true -#define MOTOR2_MOTOR_SHAFT false // +#define MOTOR2_MOTOR_SHAFT true // #define MOTOR2_MOTOR_ONE_CIRCLE_PULSE 80 // 3600 = 93圈, 3600/93 = 38.70967741935484 #define MOTOR2_MOTOR_ONE_CIRCLE_PULSE_DENOMINATOR 1 // #define MOTOR2_STEPMOTOR_IHOLD 1 @@ -80,6 +91,6 @@ #define MOTOR2_MIN_D 0 #define MOTOR2_MAX_D 0 #define MOTOR2_MOTOR_RUN_TO_ZERO_SPEED 100 -#define MOTOR2_MOTOR_RUN_TO_ZERO_DEC 300 +#define MOTOR2_MOTOR_RUN_TO_ZERO_DEC 400 #define MOTOR2_MOTOR_LOOK_ZERO_EDGE_SPEED 50 #define MOTOR2_MOTOR_LOOK_ZERO_EDGE_DEC 600 diff --git a/usrc/subboards/subboard20_plate_clamp_case/subboard20_plate_clamp_case.cpp b/usrc/subboards/subboard20_plate_clamp_case/subboard20_plate_clamp_case.cpp index 001cf01..2a7e9d1 100644 --- a/usrc/subboards/subboard20_plate_clamp_case/subboard20_plate_clamp_case.cpp +++ b/usrc/subboards/subboard20_plate_clamp_case/subboard20_plate_clamp_case.cpp @@ -16,11 +16,10 @@ extern "C" { using namespace iflytop; -static ZGPIO IO[5]; - +static ZGPIO IO[EXT_READ_IO_NUM]; Subboard20PlateClampCase::Subboard20PlateClampCase(/* args */) {} Subboard20PlateClampCase::~Subboard20PlateClampCase() {} -int32_t Subboard20PlateClampCase::getmoduleId(int off) { return zdevice_id_mgr_get_device_id() + off; } +int32_t Subboard20PlateClampCase::getmoduleId(int off) { return zdevice_id_mgr_get_device_id() + off; } Subboard20PlateClampCase *Subboard20PlateClampCase::ins() { static Subboard20PlateClampCase instance; return &instance; @@ -34,33 +33,23 @@ int32_t Subboard20PlateClampCase::getid(int32_t *id) { } int32_t Subboard20PlateClampCase::module_xxx_reg(int32_t param_id, bool read, int32_t &val) { return err::kmodule_not_find_reg; } int32_t Subboard20PlateClampCase::board_read_ext_io(int32_t ioindex, int32_t *val) { - if (ioindex < 0 || ioindex >= ZARRAY_SIZE(IO)) { - return err::kparam_out_of_range; - } + if (ioindex < 0 || ioindex >= ZARRAY_SIZE(IO)) return err::kparam_out_of_range; *val = IO[ioindex].getState(); - return 0; } int32_t Subboard20PlateClampCase::board_write_ext_io(int32_t ioindex, int32_t val) { return 0; } - int32_t Subboard20PlateClampCase::board_read_muti_io(int32_t *val) { for (int i = 0; i < ZARRAY_SIZE(IO); i++) { *val |= IO[i].getState() << i; } return 0; } - /*********************************************************************************************************************** * IMPL * ***********************************************************************************************************************/ void Subboard20PlateClampCase::initialize() { - IO[0].initAsInput(EXT_INPUT_IO0, ZGPIO::kMode_nopull, ZGPIO::kIRQ_noIrq, EXT_INPUT_IO0_MIRROR); - IO[1].initAsInput(EXT_INPUT_IO1, ZGPIO::kMode_nopull, ZGPIO::kIRQ_noIrq, EXT_INPUT_IO1_MIRROR); - IO[2].initAsInput(EXT_INPUT_IO2, ZGPIO::kMode_nopull, ZGPIO::kIRQ_noIrq, EXT_INPUT_IO2_MIRROR); - IO[3].initAsInput(EXT_INPUT_IO3, ZGPIO::kMode_nopull, ZGPIO::kIRQ_noIrq, EXT_INPUT_IO3_MIRROR); - IO[4].initAsInput(EXT_INPUT_IO4, ZGPIO::kMode_nopull, ZGPIO::kIRQ_noIrq, EXT_INPUT_IO4_MIRROR); + IO_INIT(); GService::inst()->getZCanProtocolParser()->registerModule(this); - #if 1 /*********************************************************************************************************************** @@ -68,39 +57,5 @@ void Subboard20PlateClampCase::initialize() { ***********************************************************************************************************************/ { TMC5130_MOTOR_INITER(1, 1); } { TMC5130_MOTOR_INITER(2, 2); } - - { - static PipetteModule module; - int subid = 2; - PipetteModule::config_t cfg = { - .limit_ul = 30, - }; - - PipetteModule::hardward_config_t hardwarecfg = { - .uart = &huart2, - .hdma_rx = hdma_usart2_rx, - .hdma_tx = hdma_usart2_tx, - }; - module.initialize(getmoduleId(subid), &cfg, &hardwarecfg); - GService::inst()->getZCanProtocolParser()->registerModule(&module); - } - - { - static M3078CodeScanner codescanner; - int subid = 3; - - static M3078CodeScanner::hardware_config_t cfg = { - .uart = &huart4, - .hdma_rx = nullptr, - .hdma_tx = nullptr, - - .codeReadOkPin = PinNull, - .rstPin = PinNull, - .triggerPin = PD15, - }; - codescanner.initialize(getmoduleId(subid), &cfg); - GService::inst()->getZCanProtocolParser()->registerModule(&codescanner); - } - #endif } diff --git a/usrc/subboards/subboard30_shake_module/pri_board.h b/usrc/subboards/subboard30_shake_module/pri_board.h index bb35cf1..56f548f 100644 --- a/usrc/subboards/subboard30_shake_module/pri_board.h +++ b/usrc/subboards/subboard30_shake_module/pri_board.h @@ -1,5 +1,29 @@ #pragma once +#define EXT_INPUT_IO0 PinNull +#define EXT_INPUT_IO1 PinNull +#define EXT_INPUT_IO2 PinNull +#define EXT_INPUT_IO3 PinNull +#define EXT_INPUT_IO4 PinNull +#define EXT_INPUT_IO5 PinNull +#define EXT_INPUT_IO6 PinNull +#define EXT_INPUT_IO7 PinNull +#define EXT_INPUT_IO8 PinNull +#define EXT_INPUT_IO9 PinNull + +#define EXT_INPUT_IO0_MIRROR true +#define EXT_INPUT_IO1_MIRROR true +#define EXT_INPUT_IO2_MIRROR true +#define EXT_INPUT_IO3_MIRROR true +#define EXT_INPUT_IO4_MIRROR true +#define EXT_INPUT_IO5_MIRROR true +#define EXT_INPUT_IO6_MIRROR true +#define EXT_INPUT_IO7_MIRROR true +#define EXT_INPUT_IO8_MIRROR true +#define EXT_INPUT_IO9_MIRROR true + + + #define TMC_MOTOR_SPI hspi1 /*********************************************************************************************************************** * 试管夹爪电机 * diff --git a/usrc/subboards/subboard30_shake_module/subboard30_shake_module.cpp b/usrc/subboards/subboard30_shake_module/subboard30_shake_module.cpp index 4fd598c..bb74e75 100644 --- a/usrc/subboards/subboard30_shake_module/subboard30_shake_module.cpp +++ b/usrc/subboards/subboard30_shake_module/subboard30_shake_module.cpp @@ -12,29 +12,24 @@ extern "C" { using namespace iflytop; +static ZGPIO IO[EXT_READ_IO_NUM]; Subboard30ShakeModule::Subboard30ShakeModule(/* args */) {} Subboard30ShakeModule::~Subboard30ShakeModule() {} -int32_t Subboard30ShakeModule::getmoduleId(int off) { return zdevice_id_mgr_get_device_id() + off; } +int32_t Subboard30ShakeModule::getmoduleId(int off) { return zdevice_id_mgr_get_device_id() + off; } Subboard30ShakeModule *Subboard30ShakeModule::ins() { static Subboard30ShakeModule instance; return &instance; } - /*********************************************************************************************************************** * PRI * ***********************************************************************************************************************/ - -static ZGPIO IO[4]; - int32_t Subboard30ShakeModule::getid(int32_t *id) { *id = getmoduleId(0); return 0; } int32_t Subboard30ShakeModule::module_xxx_reg(int32_t param_id, bool read, int32_t &val) { return err::kmodule_not_find_reg; } int32_t Subboard30ShakeModule::board_read_ext_io(int32_t ioindex, int32_t *val) { - if (ioindex < 0 || ioindex >= ZARRAY_SIZE(IO)) { - return err::kparam_out_of_range; - } + if (ioindex < 0 || ioindex >= ZARRAY_SIZE(IO)) return err::kparam_out_of_range; *val = IO[ioindex].getState(); return 0; } @@ -45,12 +40,11 @@ int32_t Subboard30ShakeModule::board_read_muti_io(int32_t *val) { } return 0; } - +/*********************************************************************************************************************** + * IMPL * + ***********************************************************************************************************************/ void Subboard30ShakeModule::initialize() { - IO[0].initAsInput(PinNull, ZGPIO::kMode_nopull, ZGPIO::kIRQ_noIrq, true); - IO[1].initAsInput(PinNull, ZGPIO::kMode_nopull, ZGPIO::kIRQ_noIrq, true); - IO[2].initAsInput(PinNull, ZGPIO::kMode_nopull, ZGPIO::kIRQ_noIrq, true); - IO[3].initAsInput(PinNull, ZGPIO::kMode_nopull, ZGPIO::kIRQ_noIrq, true); + IO_INIT(); GService::inst()->getZCanProtocolParser()->registerModule(this); #if 1 diff --git a/usrc/subboards/subboard60_inlet_and_outlet_module/pri_board.h b/usrc/subboards/subboard60_inlet_and_outlet_module/pri_board.h index 849ff32..2680cb2 100644 --- a/usrc/subboards/subboard60_inlet_and_outlet_module/pri_board.h +++ b/usrc/subboards/subboard60_inlet_and_outlet_module/pri_board.h @@ -1,4 +1,32 @@ #pragma once +#define EXT_INPUT_IO0 PD0 +#define EXT_INPUT_IO1 PD1 +#define EXT_INPUT_IO2 PD2 +#define EXT_INPUT_IO3 PD3 +#define EXT_INPUT_IO4 PD4 +#define EXT_INPUT_IO5 PinNull +#define EXT_INPUT_IO6 PinNull +#define EXT_INPUT_IO7 PinNull +#define EXT_INPUT_IO8 PinNull +#define EXT_INPUT_IO9 PinNull + + + + + + + +#define EXT_INPUT_IO0_MIRROR true +#define EXT_INPUT_IO1_MIRROR true +#define EXT_INPUT_IO2_MIRROR true +#define EXT_INPUT_IO3_MIRROR true +#define EXT_INPUT_IO4_MIRROR true +#define EXT_INPUT_IO5_MIRROR true +#define EXT_INPUT_IO6_MIRROR true +#define EXT_INPUT_IO7_MIRROR true +#define EXT_INPUT_IO8_MIRROR true +#define EXT_INPUT_IO9_MIRROR true + #define TMC_MOTOR_SPI hspi1 /*********************************************************************************************************************** diff --git a/usrc/subboards/subboard60_inlet_and_outlet_module/subboard60_inlet_and_outlet_module.cpp b/usrc/subboards/subboard60_inlet_and_outlet_module/subboard60_inlet_and_outlet_module.cpp index 7e2b0fe..3e739ad 100644 --- a/usrc/subboards/subboard60_inlet_and_outlet_module/subboard60_inlet_and_outlet_module.cpp +++ b/usrc/subboards/subboard60_inlet_and_outlet_module/subboard60_inlet_and_outlet_module.cpp @@ -13,50 +13,42 @@ extern "C" { using namespace iflytop; +static ZGPIO IO[EXT_READ_IO_NUM]; Subboard60InjectAndOutletModule::Subboard60InjectAndOutletModule(/* args */) {} Subboard60InjectAndOutletModule::~Subboard60InjectAndOutletModule() {} -int32_t Subboard60InjectAndOutletModule::getmoduleId(int off) { return zdevice_id_mgr_get_device_id() + off; } +int32_t Subboard60InjectAndOutletModule::getmoduleId(int off) { return zdevice_id_mgr_get_device_id() + off; } Subboard60InjectAndOutletModule *Subboard60InjectAndOutletModule::ins() { static Subboard60InjectAndOutletModule instance; return &instance; } - /*********************************************************************************************************************** * PRI * ***********************************************************************************************************************/ - -static ZGPIO IO[5]; - int32_t Subboard60InjectAndOutletModule::getid(int32_t *id) { *id = getmoduleId(0); return 0; } int32_t Subboard60InjectAndOutletModule::module_xxx_reg(int32_t param_id, bool read, int32_t &val) { return err::kmodule_not_find_reg; } int32_t Subboard60InjectAndOutletModule::board_read_ext_io(int32_t ioindex, int32_t *val) { - if (ioindex < 0 || ioindex >= ZARRAY_SIZE(IO)) { - return err::kparam_out_of_range; - } + if (ioindex < 0 || ioindex >= ZARRAY_SIZE(IO)) return err::kparam_out_of_range; *val = IO[ioindex].getState(); - return 0; } int32_t Subboard60InjectAndOutletModule::board_write_ext_io(int32_t ioindex, int32_t val) { return 0; } - int32_t Subboard60InjectAndOutletModule::board_read_muti_io(int32_t *val) { for (int i = 0; i < ZARRAY_SIZE(IO); i++) { *val |= IO[i].getState() << i; } return 0; } - +/*********************************************************************************************************************** + * IMPL * + ***********************************************************************************************************************/ void Subboard60InjectAndOutletModule::initialize() { - IO[0].initAsInput(PD0, ZGPIO::kMode_nopull, ZGPIO::kIRQ_noIrq, true); - IO[1].initAsInput(PD1, ZGPIO::kMode_nopull, ZGPIO::kIRQ_noIrq, true); - IO[2].initAsInput(PD2, ZGPIO::kMode_nopull, ZGPIO::kIRQ_noIrq, true); - IO[3].initAsInput(PD3, ZGPIO::kMode_nopull, ZGPIO::kIRQ_noIrq, true); - IO[4].initAsInput(PD4, ZGPIO::kMode_nopull, ZGPIO::kIRQ_noIrq, true); + IO_INIT(); GService::inst()->getZCanProtocolParser()->registerModule(this); + #if 1 TMC5130_MOTOR_INITER(/*motorid:*/ 1, /*moduleid:*/ 1); TMC5130_MOTOR_INITER(/*motorid:*/ 2, /*moduleid:*/ 2); diff --git a/usrc/subboards/subboard70_incubation_turntable/pri_board.h b/usrc/subboards/subboard70_incubation_turntable/pri_board.h index da3e726..8c92677 100644 --- a/usrc/subboards/subboard70_incubation_turntable/pri_board.h +++ b/usrc/subboards/subboard70_incubation_turntable/pri_board.h @@ -1,5 +1,28 @@ #pragma once +#define EXT_INPUT_IO0 PinNull +#define EXT_INPUT_IO1 PinNull +#define EXT_INPUT_IO2 PinNull +#define EXT_INPUT_IO3 PinNull +#define EXT_INPUT_IO4 PinNull +#define EXT_INPUT_IO5 PinNull +#define EXT_INPUT_IO6 PinNull +#define EXT_INPUT_IO7 PinNull +#define EXT_INPUT_IO8 PinNull +#define EXT_INPUT_IO9 PinNull + +#define EXT_INPUT_IO0_MIRROR true +#define EXT_INPUT_IO1_MIRROR true +#define EXT_INPUT_IO2_MIRROR true +#define EXT_INPUT_IO3_MIRROR true +#define EXT_INPUT_IO4_MIRROR true +#define EXT_INPUT_IO5_MIRROR true +#define EXT_INPUT_IO6_MIRROR true +#define EXT_INPUT_IO7_MIRROR true +#define EXT_INPUT_IO8_MIRROR true +#define EXT_INPUT_IO9_MIRROR true + + /*********************************************************************************************************************** * 板载扩展IO * ***********************************************************************************************************************/ diff --git a/usrc/subboards/subboard70_incubation_turntable/subboard70_incubation_turntable.cpp b/usrc/subboards/subboard70_incubation_turntable/subboard70_incubation_turntable.cpp index 620a86f..7543759 100644 --- a/usrc/subboards/subboard70_incubation_turntable/subboard70_incubation_turntable.cpp +++ b/usrc/subboards/subboard70_incubation_turntable/subboard70_incubation_turntable.cpp @@ -14,11 +14,10 @@ extern "C" { using namespace iflytop; -static ZGPIO IO[5]; - +static ZGPIO IO[EXT_READ_IO_NUM]; Subboard70IncubationTurntable::Subboard70IncubationTurntable(/* args */) {} Subboard70IncubationTurntable::~Subboard70IncubationTurntable() {} -int32_t Subboard70IncubationTurntable::getmoduleId(int off) { return zdevice_id_mgr_get_device_id() + off; } +int32_t Subboard70IncubationTurntable::getmoduleId(int off) { return zdevice_id_mgr_get_device_id() + off; } Subboard70IncubationTurntable *Subboard70IncubationTurntable::ins() { static Subboard70IncubationTurntable instance; return &instance; @@ -32,31 +31,22 @@ int32_t Subboard70IncubationTurntable::getid(int32_t *id) { } int32_t Subboard70IncubationTurntable::module_xxx_reg(int32_t param_id, bool read, int32_t &val) { return err::kmodule_not_find_reg; } int32_t Subboard70IncubationTurntable::board_read_ext_io(int32_t ioindex, int32_t *val) { - if (ioindex < 0 || ioindex >= ZARRAY_SIZE(IO)) { - return err::kparam_out_of_range; - } + if (ioindex < 0 || ioindex >= ZARRAY_SIZE(IO)) return err::kparam_out_of_range; *val = IO[ioindex].getState(); - return 0; } int32_t Subboard70IncubationTurntable::board_write_ext_io(int32_t ioindex, int32_t val) { return 0; } - int32_t Subboard70IncubationTurntable::board_read_muti_io(int32_t *val) { for (int i = 0; i < ZARRAY_SIZE(IO); i++) { *val |= IO[i].getState() << i; } return 0; } - /*********************************************************************************************************************** * IMPL * ***********************************************************************************************************************/ void Subboard70IncubationTurntable::initialize() { - IO[0].initAsInput(EXT_INPUT_IO0, ZGPIO::kMode_nopull, ZGPIO::kIRQ_noIrq, EXT_INPUT_IO0_MIRROR); - IO[1].initAsInput(EXT_INPUT_IO1, ZGPIO::kMode_nopull, ZGPIO::kIRQ_noIrq, EXT_INPUT_IO1_MIRROR); - IO[2].initAsInput(EXT_INPUT_IO2, ZGPIO::kMode_nopull, ZGPIO::kIRQ_noIrq, EXT_INPUT_IO2_MIRROR); - IO[3].initAsInput(EXT_INPUT_IO3, ZGPIO::kMode_nopull, ZGPIO::kIRQ_noIrq, EXT_INPUT_IO3_MIRROR); - IO[4].initAsInput(EXT_INPUT_IO4, ZGPIO::kMode_nopull, ZGPIO::kIRQ_noIrq, EXT_INPUT_IO4_MIRROR); + IO_INIT(); GService::inst()->getZCanProtocolParser()->registerModule(this); #if 1 diff --git a/usrc/subboards/subboard80_cliptip/pri_board.h b/usrc/subboards/subboard80_cliptip/pri_board.h index 47c2aed..fa4b25f 100644 --- a/usrc/subboards/subboard80_cliptip/pri_board.h +++ b/usrc/subboards/subboard80_cliptip/pri_board.h @@ -9,12 +9,22 @@ #define EXT_INPUT_IO2 PinNull #define EXT_INPUT_IO3 PinNull #define EXT_INPUT_IO4 PinNull +#define EXT_INPUT_IO5 PinNull +#define EXT_INPUT_IO6 PinNull +#define EXT_INPUT_IO7 PinNull +#define EXT_INPUT_IO8 PinNull +#define EXT_INPUT_IO9 PinNull #define EXT_INPUT_IO0_MIRROR true #define EXT_INPUT_IO1_MIRROR true #define EXT_INPUT_IO2_MIRROR true #define EXT_INPUT_IO3_MIRROR true #define EXT_INPUT_IO4_MIRROR true +#define EXT_INPUT_IO5_MIRROR true +#define EXT_INPUT_IO6_MIRROR true +#define EXT_INPUT_IO7_MIRROR true +#define EXT_INPUT_IO8_MIRROR true +#define EXT_INPUT_IO9_MIRROR true /*********************************************************************************************************************** * 转盘电机 * @@ -33,9 +43,9 @@ #define MOTOR1_REFL_MIRROR true #define MOTOR1_REFR_MIRROR true -#define MOTOR1_MOTOR_SHAFT false // -#define MOTOR1_MOTOR_ONE_CIRCLE_PULSE 80 // 3600 = 93圈, 3600/93 = 38.70967741935484 -#define MOTOR1_MOTOR_ONE_CIRCLE_PULSE_DENOMINATOR 1 // +#define MOTOR1_MOTOR_SHAFT false // +#define MOTOR1_MOTOR_ONE_CIRCLE_PULSE 80 // 3600 = 93圈, 3600/93 = 38.70967741935484 +#define MOTOR1_MOTOR_ONE_CIRCLE_PULSE_DENOMINATOR 1 // #define MOTOR1_STEPMOTOR_IHOLD 1 #define MOTOR1_STEPMOTOR_IRUN 8 #define MOTOR1_STEPMOTOR_IHOLDDELAY 100 diff --git a/usrc/subboards/subboard80_cliptip/subboard80_cliptip.cpp b/usrc/subboards/subboard80_cliptip/subboard80_cliptip.cpp index 6af8b39..4d5aa54 100644 --- a/usrc/subboards/subboard80_cliptip/subboard80_cliptip.cpp +++ b/usrc/subboards/subboard80_cliptip/subboard80_cliptip.cpp @@ -15,11 +15,11 @@ extern "C" { using namespace iflytop; -static ZGPIO IO[5]; +static ZGPIO IO[EXT_READ_IO_NUM]; Subboard80Cliptip::Subboard80Cliptip(/* args */) {} Subboard80Cliptip::~Subboard80Cliptip() {} -int32_t Subboard80Cliptip::getmoduleId(int off) { return zdevice_id_mgr_get_device_id() + off; } +int32_t Subboard80Cliptip::getmoduleId(int off) { return zdevice_id_mgr_get_device_id() + off; } Subboard80Cliptip *Subboard80Cliptip::ins() { static Subboard80Cliptip instance; return &instance; @@ -33,31 +33,22 @@ int32_t Subboard80Cliptip::getid(int32_t *id) { } int32_t Subboard80Cliptip::module_xxx_reg(int32_t param_id, bool read, int32_t &val) { return err::kmodule_not_find_reg; } int32_t Subboard80Cliptip::board_read_ext_io(int32_t ioindex, int32_t *val) { - if (ioindex < 0 || ioindex >= ZARRAY_SIZE(IO)) { - return err::kparam_out_of_range; - } + if (ioindex < 0 || ioindex >= ZARRAY_SIZE(IO)) return err::kparam_out_of_range; *val = IO[ioindex].getState(); - return 0; } int32_t Subboard80Cliptip::board_write_ext_io(int32_t ioindex, int32_t val) { return 0; } - int32_t Subboard80Cliptip::board_read_muti_io(int32_t *val) { for (int i = 0; i < ZARRAY_SIZE(IO); i++) { *val |= IO[i].getState() << i; } return 0; } - /*********************************************************************************************************************** * IMPL * ***********************************************************************************************************************/ void Subboard80Cliptip::initialize() { - IO[0].initAsInput(EXT_INPUT_IO0, ZGPIO::kMode_nopull, ZGPIO::kIRQ_noIrq, EXT_INPUT_IO0_MIRROR); - IO[1].initAsInput(EXT_INPUT_IO1, ZGPIO::kMode_nopull, ZGPIO::kIRQ_noIrq, EXT_INPUT_IO1_MIRROR); - IO[2].initAsInput(EXT_INPUT_IO2, ZGPIO::kMode_nopull, ZGPIO::kIRQ_noIrq, EXT_INPUT_IO2_MIRROR); - IO[3].initAsInput(EXT_INPUT_IO3, ZGPIO::kMode_nopull, ZGPIO::kIRQ_noIrq, EXT_INPUT_IO3_MIRROR); - IO[4].initAsInput(EXT_INPUT_IO4, ZGPIO::kMode_nopull, ZGPIO::kIRQ_noIrq, EXT_INPUT_IO4_MIRROR); + IO_INIT(); GService::inst()->getZCanProtocolParser()->registerModule(this); #if 1 diff --git a/usrc/subboards/subboard90_optical_module/pri_board.h b/usrc/subboards/subboard90_optical_module/pri_board.h new file mode 100644 index 0000000..f8c9127 --- /dev/null +++ b/usrc/subboards/subboard90_optical_module/pri_board.h @@ -0,0 +1,95 @@ +#pragma once + +/*********************************************************************************************************************** + * 板载扩展IO * + ***********************************************************************************************************************/ + +#define EXT_INPUT_IO0 PinNull +#define EXT_INPUT_IO1 PinNull +#define EXT_INPUT_IO2 PinNull +#define EXT_INPUT_IO3 PinNull +#define EXT_INPUT_IO4 PinNull +#define EXT_INPUT_IO5 PinNull +#define EXT_INPUT_IO6 PinNull +#define EXT_INPUT_IO7 PinNull +#define EXT_INPUT_IO8 PinNull +#define EXT_INPUT_IO9 PinNull + +#define EXT_INPUT_IO0_MIRROR true +#define EXT_INPUT_IO1_MIRROR true +#define EXT_INPUT_IO2_MIRROR true +#define EXT_INPUT_IO3_MIRROR true +#define EXT_INPUT_IO4_MIRROR true +#define EXT_INPUT_IO5_MIRROR true +#define EXT_INPUT_IO6_MIRROR true +#define EXT_INPUT_IO7_MIRROR true +#define EXT_INPUT_IO8_MIRROR true +#define EXT_INPUT_IO9_MIRROR true + +#define TMC_MOTOR_SPI hspi1 + +/*********************************************************************************************************************** + * 推杆电机 * + ***********************************************************************************************************************/ + +#define MOTOR1_CSN PA4 +#define MOTOR1_ENN PE3 +#define MOTOR1_SPI_MODE_SELECT PinNull +#define MOTOR1_nFREEZE_IO PE12 +#define MOTOR1_nRESET_IO PinNull +#define MOTOR1_SUB_IC_ENN_IO PE11 + +#define MOTOR1_REFL PD2 +#define MOTOR1_REFR PD1 +#define MOTOR1_REFL_MIRROR true +#define MOTOR1_REFR_MIRROR true + +#define MOTOR1_MOTOR_SHAFT false // +#define MOTOR1_MOTOR_ONE_CIRCLE_PULSE 80 // 3600 = 93圈, 3600/93 = 38.70967741935484 +#define MOTOR1_MOTOR_ONE_CIRCLE_PULSE_DENOMINATOR 1 // +#define MOTOR1_STEPMOTOR_IHOLD 1 +#define MOTOR1_STEPMOTOR_IRUN 8 +#define MOTOR1_STEPMOTOR_IHOLDDELAY 100 +#define MOTOR1_STEPMOTOR_IGLOBALSCALER 1 +#define MOTOR1_MOTOR_DEFAULT_ACC 300 +#define MOTOR1_MOTOR_DEFAULT_DEC 300 +#define MOTOR1_MOTOR_DEFAULT_VELOCITY 500 +#define MOTOR1_MIN_D 0 +#define MOTOR1_MAX_D 0 +#define MOTOR1_MOTOR_RUN_TO_ZERO_SPEED 100 +#define MOTOR1_MOTOR_RUN_TO_ZERO_DEC 300 +#define MOTOR1_MOTOR_LOOK_ZERO_EDGE_SPEED 50 +#define MOTOR1_MOTOR_LOOK_ZERO_EDGE_DEC 600 + +/*********************************************************************************************************************** + * 平移电机 * + ***********************************************************************************************************************/ + +#define MOTOR2_CSN PA4 +#define MOTOR2_ENN PE3 +#define MOTOR2_SPI_MODE_SELECT PinNull +#define MOTOR2_nFREEZE_IO PE12 +#define MOTOR2_nRESET_IO PinNull +#define MOTOR2_SUB_IC_ENN_IO PE11 + +#define MOTOR2_REFL PD2 +#define MOTOR2_REFR PD1 +#define MOTOR2_REFL_MIRROR true +#define MOTOR2_REFR_MIRROR true + +#define MOTOR2_MOTOR_SHAFT false // +#define MOTOR2_MOTOR_ONE_CIRCLE_PULSE 80 // 3600 = 93圈, 3600/93 = 38.70967741935484 +#define MOTOR2_MOTOR_ONE_CIRCLE_PULSE_DENOMINATOR 1 // +#define MOTOR2_STEPMOTOR_IHOLD 1 +#define MOTOR2_STEPMOTOR_IRUN 8 +#define MOTOR2_STEPMOTOR_IHOLDDELAY 100 +#define MOTOR2_STEPMOTOR_IGLOBALSCALER 1 +#define MOTOR2_MOTOR_DEFAULT_ACC 300 +#define MOTOR2_MOTOR_DEFAULT_DEC 300 +#define MOTOR2_MOTOR_DEFAULT_VELOCITY 500 +#define MOTOR2_MIN_D 0 +#define MOTOR2_MAX_D 0 +#define MOTOR2_MOTOR_RUN_TO_ZERO_SPEED 100 +#define MOTOR2_MOTOR_RUN_TO_ZERO_DEC 300 +#define MOTOR2_MOTOR_LOOK_ZERO_EDGE_SPEED 50 +#define MOTOR2_MOTOR_LOOK_ZERO_EDGE_DEC 600 diff --git a/usrc/subboards/subboard90_optical_module/subboard90_optical_module.cpp b/usrc/subboards/subboard90_optical_module/subboard90_optical_module.cpp new file mode 100644 index 0000000..825def4 --- /dev/null +++ b/usrc/subboards/subboard90_optical_module/subboard90_optical_module.cpp @@ -0,0 +1,64 @@ +#include "subboard90_optical_module.hpp" +extern "C" { +#include "subboard90_optical_module_board.h" +} +#include "pri_board.h" +#include "public_service/instance_init.hpp" +#include "public_service/public_service.hpp" +#include "sdk/components/mini_servo_motor/feite_servo_motor.hpp" +#include "sdk/components/mini_servo_motor/mini_servo_motor_ctrl_module.hpp" +#include "sdk/components/sensors/m3078/m3078_code_scaner.hpp" +#include "sdk/components/step_motor_ctrl_module/step_motor_ctrl_module.hpp" +#include "sdk/components/tmc/ic/ztmc4361A.hpp" +#include "sdk\components\pipette_module\pipette_ctrl_module_v2.hpp" + +#define TAG "ShakeModule" + +using namespace iflytop; + +static ZGPIO IO[EXT_READ_IO_NUM]; +Subboard90OpticalModule::Subboard90OpticalModule(/* args */) {} +Subboard90OpticalModule::~Subboard90OpticalModule() {} +int32_t Subboard90OpticalModule::getmoduleId(int off) { return zdevice_id_mgr_get_device_id() + off; } +Subboard90OpticalModule *Subboard90OpticalModule::ins() { + static Subboard90OpticalModule instance; + return &instance; +} +/*********************************************************************************************************************** + * PRI * + ***********************************************************************************************************************/ +int32_t Subboard90OpticalModule::getid(int32_t *id) { + *id = getmoduleId(0); + return 0; +} +int32_t Subboard90OpticalModule::module_xxx_reg(int32_t param_id, bool read, int32_t &val) { return err::kmodule_not_find_reg; } +int32_t Subboard90OpticalModule::board_read_ext_io(int32_t ioindex, int32_t *val) { + if (ioindex < 0 || ioindex >= ZARRAY_SIZE(IO)) return err::kparam_out_of_range; + *val = IO[ioindex].getState(); + return 0; +} +int32_t Subboard90OpticalModule::board_write_ext_io(int32_t ioindex, int32_t val) { return 0; } +int32_t Subboard90OpticalModule::board_read_muti_io(int32_t *val) { + for (int i = 0; i < ZARRAY_SIZE(IO); i++) { + *val |= IO[i].getState() << i; + } + return 0; +} + +/*********************************************************************************************************************** + * IMPL * + ***********************************************************************************************************************/ +void Subboard90OpticalModule::initialize() { + IO_INIT(); + GService::inst()->getZCanProtocolParser()->registerModule(this); + +#if 1 + + /*********************************************************************************************************************** + * ID1 * + ***********************************************************************************************************************/ + { TMC5130_MOTOR_INITER(1, 1); } + { TMC5130_MOTOR_INITER(2, 2); } + +#endif +} diff --git a/usrc/subboards/subboard90_optical_module/subboard90_optical_module.hpp b/usrc/subboards/subboard90_optical_module/subboard90_optical_module.hpp new file mode 100644 index 0000000..55a1b3e --- /dev/null +++ b/usrc/subboards/subboard90_optical_module/subboard90_optical_module.hpp @@ -0,0 +1,45 @@ +#include +#include + +// +#include "configs/device_id_mgr.hpp" +#include "sdk/chip/chip.hpp" +#include "sdk/os/zos.hpp" +// +#include "sdk\components\step_motor_ctrl_module\step_motor_ctrl_module.hpp" +#include "sdk\components\tmc\ic\ztmc5130.hpp" + +namespace iflytop { +class Subboard90OpticalModule : public ZIBoard, public ZIModule { + ENABLE_MODULE(Subboard90OpticalModule, kboard, 1); + + private: + /* data */ + + public: + Subboard90OpticalModule(/* args */); + ~Subboard90OpticalModule(); + + static Subboard90OpticalModule *ins(); + + void initialize(); + + public: + /*********************************************************************************************************************** + * ZIModule * + ***********************************************************************************************************************/ + virtual int32_t getid(int32_t *id); + virtual int32_t module_xxx_reg(int32_t param_id, bool read, int32_t &val); + /*********************************************************************************************************************** + * ZIBoard * + ***********************************************************************************************************************/ + virtual int32_t board_read_ext_io(int32_t ioindex, int32_t *val); + virtual int32_t board_write_ext_io(int32_t ioindex, int32_t val); + virtual int32_t board_read_muti_io(int32_t *val); + + private: + int32_t getmoduleId(int off); +}; + +} // namespace iflytop + diff --git a/usrc/subboards/subboard90_optical_module/subboard90_optical_module_board.c b/usrc/subboards/subboard90_optical_module/subboard90_optical_module_board.c new file mode 100644 index 0000000..66d8cde --- /dev/null +++ b/usrc/subboards/subboard90_optical_module/subboard90_optical_module_board.c @@ -0,0 +1,73 @@ +#include "main.h" +#include "public_service/public_service.h" + +/* SPI1 init function */ +static void MX_SPI1_Init(void) { + __HAL_RCC_SPI1_CLK_ENABLE(); + __HAL_RCC_GPIOA_CLK_ENABLE(); + + hspi1.Instance = SPI1; + hspi1.Init.Mode = SPI_MODE_MASTER; + hspi1.Init.Direction = SPI_DIRECTION_2LINES; + hspi1.Init.DataSize = SPI_DATASIZE_8BIT; + hspi1.Init.CLKPolarity = SPI_POLARITY_LOW; + hspi1.Init.CLKPhase = SPI_PHASE_1EDGE; + hspi1.Init.NSS = SPI_NSS_SOFT; + hspi1.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_32; + hspi1.Init.FirstBit = SPI_FIRSTBIT_MSB; + hspi1.Init.TIMode = SPI_TIMODE_DISABLE; + hspi1.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE; + hspi1.Init.CRCPolynomial = 10; + if (HAL_SPI_Init(&hspi1) != HAL_OK) { + Error_Handler(); + } + GPIO_InitTypeDef GPIO_InitStruct = {0}; + GPIO_InitStruct.Pin = GPIO_PIN_5 | GPIO_PIN_6 | GPIO_PIN_7; + GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; + GPIO_InitStruct.Pull = GPIO_NOPULL; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; + GPIO_InitStruct.Alternate = GPIO_AF5_SPI1; + HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); + + hspi1_enable = true; +} + +static void MX_SPI2_Init(void) { + __HAL_RCC_SPI2_CLK_ENABLE(); + __HAL_RCC_GPIOB_CLK_ENABLE(); + + hspi2.Instance = SPI2; + hspi2.Init.Mode = SPI_MODE_MASTER; + hspi2.Init.Direction = SPI_DIRECTION_2LINES; + hspi2.Init.DataSize = SPI_DATASIZE_8BIT; + hspi2.Init.CLKPolarity = SPI_POLARITY_LOW; + hspi2.Init.CLKPhase = SPI_PHASE_1EDGE; + hspi2.Init.NSS = SPI_NSS_SOFT; + hspi2.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_64; + hspi2.Init.FirstBit = SPI_FIRSTBIT_MSB; + hspi2.Init.TIMode = SPI_TIMODE_DISABLE; + hspi2.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE; + hspi2.Init.CRCPolynomial = 10; + if (HAL_SPI_Init(&hspi2) != HAL_OK) { + Error_Handler(); + } + GPIO_InitTypeDef GPIO_InitStruct = {0}; + GPIO_InitStruct.Pin = GPIO_PIN_13 | GPIO_PIN_14 | GPIO_PIN_15; + GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; + GPIO_InitStruct.Pull = GPIO_NOPULL; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; + GPIO_InitStruct.Alternate = GPIO_AF5_SPI2; + HAL_GPIO_Init(GPIOB, &GPIO_InitStruct); + + hspi2_enable = true; +} + +/** + * @brief 板夹仓初始化 + */ + +void subboard90_optical_module_board_init() { + common_hardware_init(); + MX_SPI1_Init(); + MX_SPI2_Init(); +} diff --git a/usrc/subboards/subboard90_optical_module/subboard90_optical_module_board.h b/usrc/subboards/subboard90_optical_module/subboard90_optical_module_board.h new file mode 100644 index 0000000..50d3bf0 --- /dev/null +++ b/usrc/subboards/subboard90_optical_module/subboard90_optical_module_board.h @@ -0,0 +1,12 @@ +#pragma once +#include "main.h" + +#ifdef __cplusplus +extern "C" { +#endif + +void subboard90_optical_module_board_init(); + +#ifdef __cplusplus +} +#endif