From 474d11275b9609aa1039b1d720be0a3b3215b6e3 Mon Sep 17 00:00:00 2001 From: zhaohe Date: Wed, 5 Jun 2024 13:33:03 +0800 Subject: [PATCH] add subboard70 --- sdk | 2 +- usrc/main.cpp | 9 ++ usrc/public_service/common_hardware_init.c | 9 ++ .../subboard70_incubation_turntable/pri_board.h | 51 +++++++++ .../subboard70_incubation_turntable.cpp | 115 +++++++++++++++++++++ .../subboard70_incubation_turntable.hpp | 44 ++++++++ .../subboard70_incubation_turntable_board.c | 39 +++++++ .../subboard70_incubation_turntable_board.h | 12 +++ 8 files changed, 280 insertions(+), 1 deletion(-) create mode 100644 usrc/subboards/subboard70_incubation_turntable/pri_board.h create mode 100644 usrc/subboards/subboard70_incubation_turntable/subboard70_incubation_turntable.cpp create mode 100644 usrc/subboards/subboard70_incubation_turntable/subboard70_incubation_turntable.hpp create mode 100644 usrc/subboards/subboard70_incubation_turntable/subboard70_incubation_turntable_board.c create mode 100644 usrc/subboards/subboard70_incubation_turntable/subboard70_incubation_turntable_board.h diff --git a/sdk b/sdk index e2dffc3..9aee8f2 160000 --- a/sdk +++ b/sdk @@ -1 +1 @@ -Subproject commit e2dffc30e3184174c4dce5d2eb8748c6ed7bd7b8 +Subproject commit 9aee8f2a2c26251c921e81bca81abc3a3a2f6927 diff --git a/usrc/main.cpp b/usrc/main.cpp index 518d9fb..2db733b 100644 --- a/usrc/main.cpp +++ b/usrc/main.cpp @@ -11,6 +11,8 @@ #include "subboards/subboard30_shake_module/subboard30_shake_module_board.h" #include "subboards/subboard60_inlet_and_outlet_module/subboard60_inlet_and_outlet_module.hpp" #include "subboards/subboard60_inlet_and_outlet_module/subboard60_inlet_and_outlet_module_board.h" +#include "subboards/subboard70_incubation_turntable/subboard70_incubation_turntable.hpp" +#include "subboards/subboard70_incubation_turntable/subboard70_incubation_turntable_board.h" // @@ -34,6 +36,10 @@ static void board_init() { case 60: // 进出料模组 subboard60_inlet_and_outlet_module_board_init(); break; + + case 70: // 孵化转盘 + subboard70_incubation_turntable_board_init(); + break; default: common_hardware_init(); break; @@ -49,6 +55,9 @@ static void board_post_init() { case 60: // 进出料模组 Subboard60InjectAndOutletModule::ins()->initialize(); break; + case 70: // 孵化转盘 + Subboard70IncubationTurntable::ins()->initialize(); + break; default: break; } diff --git a/usrc/public_service/common_hardware_init.c b/usrc/public_service/common_hardware_init.c index 178d2fe..b2ccd37 100644 --- a/usrc/public_service/common_hardware_init.c +++ b/usrc/public_service/common_hardware_init.c @@ -2,6 +2,15 @@ #include "gins.h" #include "main.h" +/** + * @brief 资料列表 + * + * CAN1 PA11 PA12 + * UART1 PA9 PA10 + * TIM6 + * TIM7 + * + */ /* TIM6 init function */ static void MX_TIM6_Init(void) { diff --git a/usrc/subboards/subboard70_incubation_turntable/pri_board.h b/usrc/subboards/subboard70_incubation_turntable/pri_board.h new file mode 100644 index 0000000..da3e726 --- /dev/null +++ b/usrc/subboards/subboard70_incubation_turntable/pri_board.h @@ -0,0 +1,51 @@ +#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_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 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 PinNull +#define MOTOR1_REFR PinNull +#define MOTOR1_REFL_MIRROR false +#define MOTOR1_REFR_MIRROR false + +#define MOTOR1_MOTOR_SHAFT false // +#define MOTOR1_MOTOR_ONE_CIRCLE_PULSE 387096 // 3600 = 93圈, 3600/93 = 38.70967741935484 +#define MOTOR1_MOTOR_ONE_CIRCLE_PULSE_DENOMINATOR 1000 // +#define MOTOR1_STEPMOTOR_IHOLD 1 +#define MOTOR1_STEPMOTOR_IRUN 5 +#define MOTOR1_STEPMOTOR_IHOLDDELAY 100 +#define MOTOR1_STEPMOTOR_IGLOBALSCALER 1 +#define MOTOR1_MOTOR_DEFAULT_ACC 900 +#define MOTOR1_MOTOR_DEFAULT_DEC 900 +#define MOTOR1_MOTOR_DEFAULT_VELOCITY 300 +#define MOTOR1_MIN_D 0 +#define MOTOR1_MAX_D 0 +#define MOTOR1_MOTOR_RUN_TO_ZERO_SPEED 200 +#define MOTOR1_MOTOR_RUN_TO_ZERO_DEC 900 +#define MOTOR1_MOTOR_LOOK_ZERO_EDGE_SPEED 200 +#define MOTOR1_MOTOR_LOOK_ZERO_EDGE_DEC 900 diff --git a/usrc/subboards/subboard70_incubation_turntable/subboard70_incubation_turntable.cpp b/usrc/subboards/subboard70_incubation_turntable/subboard70_incubation_turntable.cpp new file mode 100644 index 0000000..649d23e --- /dev/null +++ b/usrc/subboards/subboard70_incubation_turntable/subboard70_incubation_turntable.cpp @@ -0,0 +1,115 @@ +#include "subboard70_incubation_turntable.hpp" +extern "C" { +#include "subboard70_incubation_turntable_board.h" +} +#include "pri_board.h" +#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" + +#define TAG "ShakeModule" + +using namespace iflytop; + +static ZGPIO IO[5]; + +Subboard70IncubationTurntable::Subboard70IncubationTurntable(/* args */) {} +Subboard70IncubationTurntable::~Subboard70IncubationTurntable() {} +int32_t Subboard70IncubationTurntable::getmoduleId(int off) { return zdevice_id_mgr_get_device_id() + off; } +Subboard70IncubationTurntable *Subboard70IncubationTurntable::ins() { + static Subboard70IncubationTurntable instance; + return &instance; +} +/*********************************************************************************************************************** + * PRI * + ***********************************************************************************************************************/ +int32_t Subboard70IncubationTurntable::getid(int32_t *id) { + *id = getmoduleId(0); + return 0; +} +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; + } + *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); + GService::inst()->getZCanProtocolParser()->registerModule(this); + +#if 1 + + /*********************************************************************************************************************** + * ID1 * + ***********************************************************************************************************************/ + { + static TMC4361A motor; + static StepMotorCtrlModule module; + int subid = 1; + + TMC4361A::cfg_t motorcfg = { + .spi = &TMC_MOTOR_SPI, // + .csgpio = MOTOR1_CSN, // + .resetPin = MOTOR1_nRESET_IO, // + .fREEZEPin = MOTOR1_nFREEZE_IO, // + .ennPin = MOTOR1_ENN, // + .driverIC_ennPin = MOTOR1_SUB_IC_ENN_IO, // + .driverIC_resetPin = PinNull, // + }; + + motor.initialize(&motorcfg); + + static ZGPIO input[2]; + input[0].initAsInput(MOTOR1_REFL /*REFL*/, ZGPIO::kMode_nopull, ZGPIO::kIRQ_noIrq, MOTOR1_REFL_MIRROR); + input[1].initAsInput(MOTOR1_REFR /*REFR*/, ZGPIO::kMode_nopull, ZGPIO::kIRQ_noIrq, MOTOR1_REFR_MIRROR); + + StepMotorCtrlModule::config_t module_cfg = {0}; + StepMotorCtrlModule::create_default_cfg(module_cfg); + + module_cfg.motor_shaft = MOTOR1_MOTOR_SHAFT; + module_cfg.motor_one_circle_pulse = MOTOR1_MOTOR_ONE_CIRCLE_PULSE; + module_cfg.motor_one_circle_pulse_denominator = MOTOR1_MOTOR_ONE_CIRCLE_PULSE_DENOMINATOR; + module_cfg.stepmotor_ihold = MOTOR1_STEPMOTOR_IHOLD; + module_cfg.stepmotor_irun = MOTOR1_STEPMOTOR_IRUN; + module_cfg.stepmotor_iholddelay = MOTOR1_STEPMOTOR_IHOLDDELAY; + module_cfg.stepmotor_iglobalscaler = MOTOR1_STEPMOTOR_IGLOBALSCALER; + module_cfg.motor_default_acc = MOTOR1_MOTOR_DEFAULT_ACC; + module_cfg.motor_default_dec = MOTOR1_MOTOR_DEFAULT_DEC; + module_cfg.motor_default_velocity = MOTOR1_MOTOR_DEFAULT_VELOCITY; + module_cfg.min_d = MOTOR1_MIN_D; + module_cfg.max_d = MOTOR1_MAX_D; + module_cfg.motor_run_to_zero_speed = MOTOR1_MOTOR_RUN_TO_ZERO_SPEED; + module_cfg.motor_run_to_zero_dec = MOTOR1_MOTOR_RUN_TO_ZERO_DEC; + module_cfg.motor_look_zero_edge_speed = MOTOR1_MOTOR_LOOK_ZERO_EDGE_SPEED; + module_cfg.motor_look_zero_edge_dec = MOTOR1_MOTOR_LOOK_ZERO_EDGE_DEC; + + module.initialize(getmoduleId(subid), &motor, input, ZARRAY_SIZE(input), &module_cfg); + GService::inst()->getZCanProtocolParser()->registerModule(&module); + + ZLOGI(TAG, "motor%d readic version %x", subid, motor.readICVersion()); + } + +#endif +} diff --git a/usrc/subboards/subboard70_incubation_turntable/subboard70_incubation_turntable.hpp b/usrc/subboards/subboard70_incubation_turntable/subboard70_incubation_turntable.hpp new file mode 100644 index 0000000..39abdd0 --- /dev/null +++ b/usrc/subboards/subboard70_incubation_turntable/subboard70_incubation_turntable.hpp @@ -0,0 +1,44 @@ +#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 Subboard70IncubationTurntable : public ZIBoard, public ZIModule { + ENABLE_MODULE(Subboard70IncubationTurntable, kboard, 1); + + private: + /* data */ + + public: + Subboard70IncubationTurntable(/* args */); + ~Subboard70IncubationTurntable(); + + static Subboard70IncubationTurntable *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/subboard70_incubation_turntable/subboard70_incubation_turntable_board.c b/usrc/subboards/subboard70_incubation_turntable/subboard70_incubation_turntable_board.c new file mode 100644 index 0000000..d81668a --- /dev/null +++ b/usrc/subboards/subboard70_incubation_turntable/subboard70_incubation_turntable_board.c @@ -0,0 +1,39 @@ +#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; +} + +void subboard70_incubation_turntable_board_init() { + common_hardware_init(); + MX_SPI1_Init(); + // UART3_Init(); +} diff --git a/usrc/subboards/subboard70_incubation_turntable/subboard70_incubation_turntable_board.h b/usrc/subboards/subboard70_incubation_turntable/subboard70_incubation_turntable_board.h new file mode 100644 index 0000000..096421f --- /dev/null +++ b/usrc/subboards/subboard70_incubation_turntable/subboard70_incubation_turntable_board.h @@ -0,0 +1,12 @@ +#pragma once +#include "main.h" + +#ifdef __cplusplus +extern "C" { +#endif + +void subboard70_incubation_turntable_board_init(); + +#ifdef __cplusplus +} +#endif