You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

157 lines
5.8 KiB

2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
  1. #include <stddef.h>
  2. #include <stdio.h>
  3. #include "sdk/components/step_motor_ctrl_module/step_motor_ctrl_module.hpp"
  4. #include "sdk/os/zos.hpp"
  5. #include "sdk\components\flash\zsimple_flash.hpp"
  6. #include "sdk\components\mini_servo_motor\feite_servo_motor.hpp"
  7. #include "sdk\components\tmc\ic\ztmc4361A.hpp"
  8. #include "sdk\components\xy_robot_ctrl_module\xy_robot_ctrl_module.hpp"
  9. #include "sdk\components\zcancmder\zcan_board_module.hpp"
  10. #include "sdk\components\zcancmder\zcanreceiver.hpp"
  11. #include "sdk\components\zcancmder_module\zcan_basic_order_module.hpp"
  12. #include "sdk\components\zprotocols\zcancmder_v2\protocol_parser.hpp"
  13. //
  14. #include "board.h"
  15. #include "sdk\components\flash\znvs.hpp"
  16. #include "sdk\components\subcanmodule\zcancmder_subboard_initer.hpp"
  17. //
  18. #define TAG "main"
  19. using namespace iflytop;
  20. using namespace std;
  21. static ZCancmderSubboardIniter initer;
  22. extern void umain();
  23. extern "C" {
  24. void StartDefaultTask(void const* argument) { umain(); }
  25. }
  26. #define FLASH_MASK_XYRobotCtrlModule1 "XYRobotCtrlModule_1"
  27. void initmodule() {}
  28. static int32_t getDeviceId() { return BOARD_ID; }
  29. void nvs_init_cb() {
  30. /**
  31. * @brief ʼãϵͳҪöҪгʼ
  32. */
  33. static I_XYRobotCtrlModule::flash_config_t cfg;
  34. XYRobotCtrlModule::create_default_cfg(cfg);
  35. ZNVS::ins().alloc_config(FLASH_MASK_XYRobotCtrlModule1, (uint8_t*)&cfg, sizeof(cfg));
  36. }
  37. static void initsubmodule() {
  38. static XYRobotCtrlModule xyRobotCtrlModule;
  39. static TMC4361A motora; // 1
  40. static TMC4361A motorb; // 2
  41. {
  42. TMC4361A::cfg_t cfg = {
  43. .spi = &TMC_MOTOR_SPI, //
  44. .csgpio = TMC_MOTOR1_SPI_SELECT1_IO, //
  45. .resetPin = TMC_MOTOR1_nRESET_IO, //
  46. .fREEZEPin = TMC_MOTOR1_nFREEZE_IO, //
  47. .ennPin = PinNull, //
  48. .driverIC_ennPin = TMC_MOTOR1_SUB_IC_ENN_IO, //
  49. .driverIC_resetPin = PinNull, //
  50. };
  51. motora.initialize(&cfg);
  52. motora.setMotorShaft(false);
  53. motora.setGLOBAL_SCALER(32);
  54. ZLOGI(TAG, "motora initialize TMC4361A:%x DriverIC:%x", motora.readICVersion(), motora.readSubICVersion());
  55. }
  56. {
  57. TMC4361A::cfg_t cfg = {
  58. .spi = &TMC_MOTOR_SPI, //
  59. .csgpio = TMC_MOTOR2_SPI_SELECT1_IO, //
  60. .resetPin = TMC_MOTOR2_nRESET_IO, //
  61. .fREEZEPin = TMC_MOTOR2_nFREEZE_IO, //
  62. .ennPin = PinNull, //
  63. .driverIC_ennPin = TMC_MOTOR2_SUB_IC_ENN_IO, //
  64. .driverIC_resetPin = PinNull, //
  65. };
  66. motorb.initialize(&cfg);
  67. motorb.setMotorShaft(false);
  68. motorb.setGLOBAL_SCALER(32);
  69. ZLOGI(TAG, "motorb initialize TMC4361A:%x DriverIC:%x", motorb.readICVersion(), motorb.readSubICVersion());
  70. }
  71. motora.setAcceleration(300);
  72. motora.setDeceleration(300);
  73. motora.setIHOLD_IRUN(0, 4, 10);
  74. motorb.setAcceleration(300);
  75. motorb.setDeceleration(300);
  76. motorb.setIHOLD_IRUN(0, 4, 10);
  77. motora.rotate(0);
  78. motorb.rotate(0);
  79. /*******************************************************************************
  80. * zcanXYRobotCtrlModule *
  81. *******************************************************************************/
  82. static ZGPIO input[4];
  83. input[0].initAsInput(ARM_X_ZERO, ZGPIO::kMode_nopull, ZGPIO::kIRQ_noIrq, true);
  84. input[1].initAsInput(ARM_Y_ZERO, ZGPIO::kMode_nopull, ZGPIO::kIRQ_noIrq, true);
  85. input[2].initAsInput(ARM_X_LIMIT, ZGPIO::kMode_nopull, ZGPIO::kIRQ_noIrq, true);
  86. input[3].initAsInput(ARM_Y_LIMIT, ZGPIO::kMode_nopull, ZGPIO::kIRQ_noIrq, true);
  87. static XYRobotCtrlModule::flash_config_t xy_defaultcfg;
  88. XYRobotCtrlModule::create_default_cfg(xy_defaultcfg);
  89. xy_defaultcfg.configInited = true;
  90. xy_defaultcfg.basecfg.robot_type = 1;
  91. xy_defaultcfg.basecfg.robot_type = I_XYRobotCtrlModule::hbot;
  92. xy_defaultcfg.basecfg.x_shaft = 0;
  93. xy_defaultcfg.basecfg.y_shaft = 1;
  94. xy_defaultcfg.basecfg.ihold = 1;
  95. xy_defaultcfg.basecfg.irun = 16;
  96. xy_defaultcfg.basecfg.iholddelay = 100;
  97. xy_defaultcfg.basecfg.distance_scale = 7344;
  98. xy_defaultcfg.basecfg.shift_x = 0;
  99. xy_defaultcfg.basecfg.shift_y = 0;
  100. // limit
  101. xy_defaultcfg.basecfg.acc = 800;
  102. xy_defaultcfg.basecfg.dec = 800;
  103. xy_defaultcfg.basecfg.breakdec = 1600;
  104. xy_defaultcfg.basecfg.maxspeed = 600;
  105. xy_defaultcfg.basecfg.min_x = 0;
  106. xy_defaultcfg.basecfg.max_x = 0;
  107. xy_defaultcfg.basecfg.min_y = 0;
  108. xy_defaultcfg.basecfg.max_y = 0;
  109. xy_defaultcfg.basecfg.run_to_zero_max_d = 10000 * 100;
  110. xy_defaultcfg.basecfg.run_to_zero_speed = 80;
  111. xy_defaultcfg.basecfg.run_to_zero_dec = 1600;
  112. xy_defaultcfg.basecfg.look_zero_edge_max_d = 10000 * 3;
  113. xy_defaultcfg.basecfg.look_zero_edge_speed = 10;
  114. xy_defaultcfg.basecfg.look_zero_edge_dec = 1600;
  115. xyRobotCtrlModule.initialize(initer.get_module_id(1), &motora, &motorb, &input[0], 4, xy_defaultcfg, nullptr);
  116. xyRobotCtrlModule.dumpcfg();
  117. initer.register_module(&xyRobotCtrlModule);
  118. }
  119. void umain() {
  120. ZCancmderSubboardIniter::cfg_t cfg = //
  121. {
  122. .deviceId = getDeviceId(),
  123. .input_gpio =
  124. {
  125. {ARM_SENSOR5_GPIO, ZGPIO::kMode_nopull, ZGPIO::kIRQ_noIrq, true},
  126. {ARM_SENSOR6_GPIO, ZGPIO::kMode_nopull, ZGPIO::kIRQ_noIrq, true},
  127. {ARM_SENSOR7_GPIO, ZGPIO::kMode_nopull, ZGPIO::kIRQ_noIrq, true},
  128. {ARM_SENSOR8_GPIO, ZGPIO::kMode_nopull, ZGPIO::kIRQ_noIrq, true},
  129. },
  130. .output_gpio =
  131. {
  132. // {PD0, ZGPIO::kMode_nopull, false, false},
  133. },
  134. };
  135. initer.init(&cfg);
  136. initsubmodule();
  137. initer.loop();
  138. }