diff --git a/sdk b/sdk index 85d2a97..f312693 160000 --- a/sdk +++ b/sdk @@ -1 +1 @@ -Subproject commit 85d2a97eb11c755dc0ad6098e6d50e96a0b658c3 +Subproject commit f312693388143678d5e4949f42310a9141acf6fd diff --git a/usrc/public_service/gservice.hpp b/usrc/public_service/gservice.hpp index 42b09e5..585bf5d 100644 --- a/usrc/public_service/gservice.hpp +++ b/usrc/public_service/gservice.hpp @@ -1,8 +1,8 @@ #include #include -#include "sdk/components/zcancmder/zcan_protocol_parser.hpp" #include "sdk/chip/chip.hpp" +#include "sdk/components/zcancmder/zcan_protocol_parser.hpp" #include "sdk/components/zcancmder/zcanreceiver.hpp" #include "sdk/os/zos.hpp" @@ -19,6 +19,8 @@ class GService { ZCanReceiver* getZCanReceiver() { return &zcanreceiver; } ZCanProtocolParser* getZCanProtocolParser() { return &zcan_protocol_parser; } + + void registerModule(ZIModule* module) { zcan_protocol_parser.registerModule(module); } }; } // namespace iflytop diff --git a/usrc/subboards/subboard10_hbot/pri_board.h b/usrc/subboards/subboard10_hbot/pri_board.h new file mode 100644 index 0000000..a64d665 --- /dev/null +++ b/usrc/subboards/subboard10_hbot/pri_board.h @@ -0,0 +1,58 @@ +#pragma once + +/*********************************************************************************************************************** + * 板载扩展IO * + ***********************************************************************************************************************/ +#define EXT_INPUT_IO0 PD4, ZGPIO::kMode_nopull, ZGPIO::kIRQ_noIrq, true +#define EXT_INPUT_IO1 PD5, ZGPIO::kMode_nopull, ZGPIO::kIRQ_noIrq, true +#define EXT_INPUT_IO2 PD6, ZGPIO::kMode_nopull, ZGPIO::kIRQ_noIrq, true +#define EXT_INPUT_IO3 PD7, ZGPIO::kMode_nopull, ZGPIO::kIRQ_noIrq, true +#define EXT_INPUT_IO4 PinNull, ZGPIO::kMode_nopull, ZGPIO::kIRQ_noIrq, true +#define EXT_INPUT_IO5 PinNull, ZGPIO::kMode_nopull, ZGPIO::kIRQ_noIrq, true +#define EXT_INPUT_IO6 PinNull, ZGPIO::kMode_nopull, ZGPIO::kIRQ_noIrq, true +#define EXT_INPUT_IO7 PinNull, ZGPIO::kMode_nopull, ZGPIO::kIRQ_noIrq, true +#define EXT_INPUT_IO8 PinNull, ZGPIO::kMode_nopull, ZGPIO::kIRQ_noIrq, true +#define EXT_INPUT_IO9 PinNull, ZGPIO::kMode_nopull, ZGPIO::kIRQ_noIrq, true + +#define EXT_OUTPUT_IO0 PinNull, ZGPIO::kMode_nopull, false /*mirror*/, true /*init val*/ +#define EXT_OUTPUT_IO1 PinNull, ZGPIO::kMode_nopull, false /*mirror*/, true /*init val*/ +#define EXT_OUTPUT_IO2 PinNull, ZGPIO::kMode_nopull, false /*mirror*/, true /*init val*/ +#define EXT_OUTPUT_IO3 PinNull, ZGPIO::kMode_nopull, false /*mirror*/, true /*init val*/ +#define EXT_OUTPUT_IO4 PinNull, ZGPIO::kMode_nopull, false /*mirror*/, true /*init val*/ +#define EXT_OUTPUT_IO5 PinNull, ZGPIO::kMode_nopull, false /*mirror*/, true /*init val*/ +#define EXT_OUTPUT_IO6 PinNull, ZGPIO::kMode_nopull, false /*mirror*/, true /*init val*/ +#define EXT_OUTPUT_IO7 PinNull, ZGPIO::kMode_nopull, false /*mirror*/, true /*init val*/ +#define EXT_OUTPUT_IO8 PinNull, ZGPIO::kMode_nopull, false /*mirror*/, true /*init val*/ +#define EXT_OUTPUT_IO9 PinNull, ZGPIO::kMode_nopull, false /*mirror*/, true /*init val*/ + +#define TMC_MOTOR_SPI hspi1 + +/*********************************************************************************************************************** + * 左右移动 * + ***********************************************************************************************************************/ + +// MOTOR1 +#define TMC_MOTOR1_CHANNEL 1 +#define TMC_MOTOR1_SPI_SELECT1_IO PA4 +#define TMC_MOTOR1_nFREEZE_IO PC2 +#define TMC_MOTOR1_nRESET_IO PB3 +#define TMC_MOTOR1_SUB_IC_ENN_IO PC3 +#define TMC_MOTOR1_ENN_IO // unused + +// MOTOR2 +#define TMC_MOTOR2_CHANNEL 2 +#define TMC_MOTOR2_SPI_SELECT1_IO PA8 +#define TMC_MOTOR2_nFREEZE_IO PC6 +#define TMC_MOTOR2_nRESET_IO PB2 +#define TMC_MOTOR2_SUB_IC_ENN_IO PC7 +#define TMC_MOTOR2_ENN_IO // unused + +#define ARM_X_ZERO PD0 +#define ARM_X_LIMIT PD1 +#define ARM_Y_ZERO PD2 +#define ARM_Y_LIMIT PD3 + +#define ARM_SENSOR5_GPIO PD4 +#define ARM_SENSOR6_GPIO PD5 +#define ARM_SENSOR7_GPIO PD6 +#define ARM_SENSOR8_GPIO PD7 \ No newline at end of file diff --git a/usrc/subboards/subboard10_hbot/subboard10_hbot.cpp b/usrc/subboards/subboard10_hbot/subboard10_hbot.cpp new file mode 100644 index 0000000..b2187e5 --- /dev/null +++ b/usrc/subboards/subboard10_hbot/subboard10_hbot.cpp @@ -0,0 +1,123 @@ +#include "subboard10_hbot.hpp" +extern "C" { +#include "subboard10_hbot_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" +#include "sdk\components\xy_robot_ctrl_module\xy_robot_ctrl_module.hpp" + +#define TAG "Subboard10Hbot" + +using namespace iflytop; + +/*********************************************************************************************************************** + * IMPL * + ***********************************************************************************************************************/ +void Subboard10Hbot::initialize() { + IO_INIT(); + GService::inst()->getZCanProtocolParser()->registerModule(this); +#if 1 + /*********************************************************************************************************************** + * ID1 * + ***********************************************************************************************************************/ + static XYRobotCtrlModule xyRobotCtrlModule; + static TMC4361A motora; // 1 + static TMC4361A motorb; // 2 + { + TMC4361A::cfg_t cfg = { + .spi = &TMC_MOTOR_SPI, // + .csgpio = TMC_MOTOR1_SPI_SELECT1_IO, // + .resetPin = TMC_MOTOR1_nRESET_IO, // + .fREEZEPin = TMC_MOTOR1_nFREEZE_IO, // + .ennPin = PinNull, // + .driverIC_ennPin = TMC_MOTOR1_SUB_IC_ENN_IO, // + .driverIC_resetPin = PinNull, // + }; + motora.initialize(&cfg); + motora.setMotorShaft(false); + motora.setGlobalScale(32); + ZLOGI(TAG, "motora initialize TMC4361A:%x DriverIC:%x", motora.readICVersion(), motora.driverIC_readICVersion()); + } + + { + TMC4361A::cfg_t cfg = { + .spi = &TMC_MOTOR_SPI, // + .csgpio = TMC_MOTOR2_SPI_SELECT1_IO, // + .resetPin = TMC_MOTOR2_nRESET_IO, // + .fREEZEPin = TMC_MOTOR2_nFREEZE_IO, // + .ennPin = PinNull, // + .driverIC_ennPin = TMC_MOTOR2_SUB_IC_ENN_IO, // + .driverIC_resetPin = PinNull, // + }; + motorb.initialize(&cfg); + motorb.setMotorShaft(false); + motorb.setGlobalScale(32); + ZLOGI(TAG, "motorb initialize TMC4361A:%x DriverIC:%x", motorb.readICVersion(), motorb.driverIC_readICVersion()); + } + + motora.setAcceleration(300); + motora.setDeceleration(300); + motora.setIHOLD_IRUN(0, 4, 10); + + motorb.setAcceleration(300); + motorb.setDeceleration(300); + motorb.setIHOLD_IRUN(0, 4, 10); + + motora.rotate(0); + motorb.rotate(0); + + /******************************************************************************* + * zcanXYRobotCtrlModule * + *******************************************************************************/ + static ZGPIO input[4]; + input[0].initAsInput(ARM_X_ZERO, ZGPIO::kMode_nopull, ZGPIO::kIRQ_noIrq, true); + input[1].initAsInput(ARM_Y_ZERO, ZGPIO::kMode_nopull, ZGPIO::kIRQ_noIrq, true); + input[2].initAsInput(ARM_X_LIMIT, ZGPIO::kMode_nopull, ZGPIO::kIRQ_noIrq, true); + input[3].initAsInput(ARM_Y_LIMIT, ZGPIO::kMode_nopull, ZGPIO::kIRQ_noIrq, true); + + static XYRobotCtrlModule::flash_config_t xy_defaultcfg; + XYRobotCtrlModule::create_default_cfg(xy_defaultcfg); + xy_defaultcfg.configInited = true; + xy_defaultcfg.robot_type = 1; + + xy_defaultcfg.robot_type = XYRobotCtrlModule::khbot; + xy_defaultcfg.x_shaft = 0; + xy_defaultcfg.y_shaft = 1; + xy_defaultcfg.ihold = 1; + xy_defaultcfg.irun = 16; + xy_defaultcfg.iholddelay = 100; + xy_defaultcfg.distance_scale = 7344; + xy_defaultcfg.shift_x = 0; + xy_defaultcfg.shift_y = 0; + + // limit + xy_defaultcfg.acc = 800; + xy_defaultcfg.dec = 800; + xy_defaultcfg.breakdec = 1600; + xy_defaultcfg.maxspeed = 600; + xy_defaultcfg.min_x = 0; + xy_defaultcfg.max_x = 0; + xy_defaultcfg.min_y = 0; + xy_defaultcfg.max_y = 0; + + xy_defaultcfg.run_to_zero_max_d = 10000 * 100; + xy_defaultcfg.run_to_zero_speed = 80; + xy_defaultcfg.run_to_zero_dec = 1600; + xy_defaultcfg.look_zero_edge_max_d = 10000 * 3; + xy_defaultcfg.look_zero_edge_speed = 10; + xy_defaultcfg.look_zero_edge_dec = 1600; + + xyRobotCtrlModule.initialize(getmoduleId(1), &motora, &motorb, &input[0], 4, xy_defaultcfg, nullptr); + xyRobotCtrlModule.dumpcfg(); + + GService::inst()->registerModule(&xyRobotCtrlModule); + +#endif +} diff --git a/usrc/subboards/subboard10_hbot/subboard10_hbot.hpp b/usrc/subboards/subboard10_hbot/subboard10_hbot.hpp new file mode 100644 index 0000000..8dcb1a4 --- /dev/null +++ b/usrc/subboards/subboard10_hbot/subboard10_hbot.hpp @@ -0,0 +1,25 @@ +#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" +#include "public_service/public_service.hpp" + +namespace iflytop { +class Subboard10Hbot : public ExtBoardImpl { + public: + static Subboard10Hbot *ins() { + static Subboard10Hbot instance; + return &instance; + } + + void initialize(); +}; + +} // namespace iflytop + diff --git a/usrc/subboards/subboard10_hbot/subboard10_hbot_board.c b/usrc/subboards/subboard10_hbot/subboard10_hbot_board.c new file mode 100644 index 0000000..0c278eb --- /dev/null +++ b/usrc/subboards/subboard10_hbot/subboard10_hbot_board.c @@ -0,0 +1,41 @@ +#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; +} +/** + * @brief 板夹仓初始化 + */ + +void subboard10_hbot_board_init() { + common_hardware_init(); + MX_SPI1_Init(); +} diff --git a/usrc/subboards/subboard10_hbot/subboard10_hbot_board.h b/usrc/subboards/subboard10_hbot/subboard10_hbot_board.h new file mode 100644 index 0000000..ef021a6 --- /dev/null +++ b/usrc/subboards/subboard10_hbot/subboard10_hbot_board.h @@ -0,0 +1,12 @@ +#pragma once +#include "main.h" + +#ifdef __cplusplus +extern "C" { +#endif + +void subboard10_hbot_board_init(); + +#ifdef __cplusplus +} +#endif diff --git a/usrc/subboards/subboard40_and_50_temperature_ctrl/pri_board.h b/usrc/subboards/subboard40_and_50_temperature_ctrl/pri_board.h index 154506c..3093896 100644 --- a/usrc/subboards/subboard40_and_50_temperature_ctrl/pri_board.h +++ b/usrc/subboards/subboard40_and_50_temperature_ctrl/pri_board.h @@ -21,7 +21,7 @@ #define EXT_INPUT_IO8 PinNull, ZGPIO::kMode_nopull, ZGPIO::kIRQ_noIrq, true #define EXT_INPUT_IO9 PinNull, ZGPIO::kMode_nopull, ZGPIO::kIRQ_noIrq, true -#define EXT_OUTPUT_IO0 PD0, ZGPIO::kMode_nopull, false /*mirror*/, false /*init val*/ +#define EXT_OUTPUT_IO0 PD0, ZGPIO::kMode_nopull, false /*mirror*/, true /*init val*/ #define EXT_OUTPUT_IO1 PinNull, ZGPIO::kMode_nopull, false /*mirror*/, true /*init val*/ #define EXT_OUTPUT_IO2 PinNull, ZGPIO::kMode_nopull, false /*mirror*/, true /*init val*/ #define EXT_OUTPUT_IO3 PinNull, ZGPIO::kMode_nopull, false /*mirror*/, true /*init val*/