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.

285 lines
9.3 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
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 "main.hpp"
  2. #include <stddef.h>
  3. #include <stdio.h>
  4. //
  5. #include "feite_servo_motor.hpp"
  6. #include "sdk/os/zos.hpp"
  7. //
  8. #include "sdk\components\cmdscheduler\cmd_scheduler.hpp"
  9. #include "sdk\components\eq_20_asb_motor\eq20_servomotor.hpp"
  10. #include "sdk\components\iflytop_can_slave_module_master_end\stepmotor.hpp"
  11. #include "sdk\components\iflytop_can_slave_v1\iflytop_can_master.hpp"
  12. #include "sdk\components\step_motor_45\step_motor_45.hpp"
  13. #include "sdk\components\step_motor_45\step_motor_45_scheduler.hpp"
  14. #include "sdk\components\zcancmder\zcanreceiver_master.hpp"
  15. //
  16. #include "sdk\components/step_motor_ctrl_module/step_motor_ctrl_script_cmder_module.hpp"
  17. #include "sdk\components/step_motor_ctrl_module/zcan_master_step_motor_ctrl_module.hpp"
  18. #include "sdk\components/xy_robot_ctrl_module/xy_robot_script_cmder_module.hpp"
  19. #include "sdk\components/xy_robot_ctrl_module/zcan_xy_robot_master_module.hpp"
  20. // #include "sdk\components\scriptcmder_module\xy_robot_script_cmder_module.hpp"
  21. // #include "sdk\components\zcancmder_master_module/zcan_master_step_motor_ctrl_module.hpp"
  22. // #include "sdk\components\zcancmder_master_module\zcan_xy_robot_master_module.hpp"
  23. #define TAG "main"
  24. namespace iflytop {
  25. Main gmain;
  26. };
  27. using namespace iflytop;
  28. using namespace std;
  29. #define CHECK_ARGC(n) \
  30. if (argc != (n + 1)) { \
  31. ZLOGE(TAG, "argc != %d", n); \
  32. context->breakflag = true; \
  33. return; \
  34. }
  35. extern "C" {
  36. void StartDefaultTask(void const* argument) { iflytop::gmain.run(); }
  37. }
  38. /*******************************************************************************
  39. * *
  40. *******************************************************************************/
  41. static chip_cfg_t chipcfg = {
  42. .us_dleay_tim = &DELAY_US_TIMER,
  43. .tim_irq_scheduler_tim = &TIM_IRQ_SCHEDULER_TIMER,
  44. .huart = &DEBUG_UART,
  45. .debuglight = DEBUG_LIGHT_GPIO,
  46. };
  47. static StepMotor45::cfg_t cfg1 = {
  48. .max_pos = -1,
  49. .enable_zero_limit = false,
  50. .enable_max_pos_limit = false,
  51. .mirror = true,
  52. .zeroPin = PinNull,
  53. .zeroPinMirror = false,
  54. .driverPin = {PB15, PD11, PD12, PD13},
  55. .driverPinMirror = true,
  56. };
  57. static StepMotor45::cfg_t cfg2 = {
  58. .max_pos = -1,
  59. .enable_zero_limit = false,
  60. .enable_max_pos_limit = false,
  61. .mirror = true,
  62. .zeroPin = PinNull,
  63. .zeroPinMirror = false,
  64. .driverPin = {PG2, PG3, PG4, PG5},
  65. .driverPinMirror = true,
  66. };
  67. static StepMotor45::cfg_t cfg3 = {
  68. .max_pos = -1,
  69. .enable_zero_limit = false,
  70. .enable_max_pos_limit = false,
  71. .mirror = true,
  72. .zeroPin = PinNull,
  73. .zeroPinMirror = false,
  74. .driverPin = {PG6, PG7, PG8, PC6},
  75. .driverPinMirror = true,
  76. };
  77. static StepMotor45::cfg_t cfg4 = {
  78. .max_pos = -1,
  79. .enable_zero_limit = false,
  80. .enable_max_pos_limit = false,
  81. .mirror = true,
  82. .zeroPin = PinNull,
  83. .zeroPinMirror = false,
  84. .driverPin = {PE0, PE2, PE4, PE6},
  85. .driverPinMirror = true,
  86. };
  87. static StepMotor45::cfg_t cfg5 = {
  88. .max_pos = -1,
  89. .enable_zero_limit = false,
  90. .enable_max_pos_limit = false,
  91. .mirror = true,
  92. .zeroPin = PinNull,
  93. .zeroPinMirror = false,
  94. .driverPin = {PC13, PE5, PE3, PE1},
  95. .driverPinMirror = true,
  96. };
  97. static StepMotor45::cfg_t cfg6 = {
  98. .max_pos = -1,
  99. .enable_zero_limit = false,
  100. .enable_max_pos_limit = false,
  101. .mirror = true,
  102. .zeroPin = PinNull,
  103. .zeroPinMirror = false,
  104. .driverPin = {PC12, PD3, PD5, PD7},
  105. .driverPinMirror = true,
  106. };
  107. /*******************************************************************************
  108. * *
  109. *******************************************************************************/
  110. namespace iflytop {
  111. StepMotor45 g_step_motor45[7];
  112. StepMotor g_step_motor[10];
  113. ZCanCommnaderMaster m_zcanCommnaderMaster;
  114. CmdScheduler cmdScheduler;
  115. XYRobotScriptCmderModule xyRobotScriptCmderModule;
  116. StepMotorCtrlScriptCmderModule stepMotorCtrlScriptCmderModule;
  117. I_XYRobotCtrlModule* g_xyrobotctrlmodule = nullptr;
  118. I_StepMotorCtrlModule* g_stepmotorctrlmodule = nullptr;
  119. ModbusBlockHost g_modbusblockhost;
  120. Eq20ServoMotor g_eq20servomotor;
  121. FeiTeServoMotor g_feiteservomotor;
  122. } // namespace iflytop
  123. void regfn() {
  124. // setzero
  125. // set4095
  126. // moveto
  127. cmdScheduler.registerCmd("mini_servo_set_zero", [](int argc, char** argv, CmdScheduler::CmdProcessContext* context) {
  128. CHECK_ARGC(1);
  129. int id = atoi(argv[1]);
  130. ZLOGI(TAG, "mini_servo_set_zero %d", id);
  131. g_feiteservomotor.reCalibration(id, 0);
  132. ZLOGI(TAG, "mini_servo_set_zero %d done", id);
  133. });
  134. cmdScheduler.registerCmd("mini_servo_set_4095", [](int argc, char** argv, CmdScheduler::CmdProcessContext* context) {
  135. CHECK_ARGC(1);
  136. int id = atoi(argv[1]);
  137. ZLOGI(TAG, "mini_servo_set_4095 %d", id);
  138. g_feiteservomotor.reCalibration(id, 4095);
  139. ZLOGI(TAG, "mini_servo_set_4095 %d done", id);
  140. });
  141. cmdScheduler.registerCmd("mini_servo_move_to", [](int argc, char** argv, CmdScheduler::CmdProcessContext* context) {
  142. CHECK_ARGC(3);
  143. int id = atoi(argv[1]);
  144. int pos = atoi(argv[2]);
  145. int torque = atoi(argv[3]);
  146. ZLOGI(TAG, "mini_servo_move_to %d %d %d %d", id, pos, 2700, torque);
  147. g_feiteservomotor.moveTo(id, pos, 2700, torque);
  148. });
  149. cmdScheduler.registerCmd("mini_servo_rotate", [](int argc, char** argv, CmdScheduler::CmdProcessContext* context) {
  150. CHECK_ARGC(2);
  151. int id = atoi(argv[1]);
  152. int speed = atoi(argv[2]);
  153. // int v = atoi(3000);
  154. ZLOGI(TAG, "mini_servo_rotate %d %d %d", id, speed, 10, 2700);
  155. g_feiteservomotor.rotate(id, speed, 10);
  156. });
  157. cmdScheduler.registerCmd("mini_servo_move_with_torque", [](int argc, char** argv, CmdScheduler::CmdProcessContext* context) {
  158. CHECK_ARGC(2);
  159. int id = atoi(argv[1]);
  160. int torque = atoi(argv[2]);
  161. // int v = atoi(3000);
  162. if (torque == 0) {
  163. g_feiteservomotor.moveWithTorque(id, 1);
  164. } else {
  165. g_feiteservomotor.moveWithTorque(id, torque);
  166. }
  167. });
  168. cmdScheduler.registerCmd("sleep_ms", [](int argc, char** argv, CmdScheduler::CmdProcessContext* context) {
  169. CHECK_ARGC(1);
  170. osDelay(atoi(argv[1]));
  171. });
  172. cmdScheduler.registerCmd("hbot_enable", [](int argc, char** argv, CmdScheduler::CmdProcessContext* context) {
  173. CHECK_ARGC(0);
  174. g_xyrobotctrlmodule->enable(false);
  175. });
  176. }
  177. extern "C" {
  178. extern DMA_HandleTypeDef hdma_usart3_rx;
  179. extern DMA_HandleTypeDef hdma_usart3_tx;
  180. }
  181. extern "C" {}
  182. extern void step_motor_cmd_reg();
  183. void Main::run() {
  184. /*******************************************************************************
  185. * ϵͳʼ *
  186. *******************************************************************************/
  187. chip_init(&chipcfg);
  188. zos_cfg_t zoscfg;
  189. zos_init(&zoscfg);
  190. auto* cfg = m_zcanCommnaderMaster.createCFG();
  191. m_zcanCommnaderMaster.init(cfg);
  192. g_xyrobotctrlmodule = zcancmder_master::create_xyrobot_ctrl_module(&m_zcanCommnaderMaster, 1);
  193. // g_xyrobotctrlmodule->enable(false);
  194. g_stepmotorctrlmodule = zcancmder_master::create_zcan_master_step_motor_ctrl_module(&m_zcanCommnaderMaster, 1);
  195. // g_stepmotorctrlmodule->rotate(300000, 0, [this](int32_t end) {});
  196. cmdScheduler.initialize(&DEBUG_UART, 1000);
  197. xyRobotScriptCmderModule.initialize(&cmdScheduler);
  198. xyRobotScriptCmderModule.regXYRobot(1, g_xyrobotctrlmodule);
  199. stepMotorCtrlScriptCmderModule.initialize(&cmdScheduler);
  200. stepMotorCtrlScriptCmderModule.regmodule(1, g_stepmotorctrlmodule);
  201. regfn();
  202. #if 0
  203. int i = 1;
  204. g_step_motor[i++].initialize(11, 10000, &m_IflytopCanMaster);
  205. g_step_motor[i++].initialize(12, 10000, &m_IflytopCanMaster);
  206. g_step_motor[i++].initialize(13, 10000, &m_IflytopCanMaster);
  207. g_step_motor[i++].initialize(14, 10000, &m_IflytopCanMaster);
  208. g_step_motor[i++].initialize(15, 10000, &m_IflytopCanMaster);
  209. g_step_motor[i++].initialize(16, 10000, &m_IflytopCanMaster);
  210. g_step_motor45[0].initialize(cfg1);
  211. g_step_motor45[1].initialize(cfg1);
  212. g_step_motor45[2].initialize(cfg2);
  213. g_step_motor45[3].initialize(cfg3);
  214. g_step_motor45[4].initialize(cfg4);
  215. g_step_motor45[5].initialize(cfg5);
  216. g_step_motor45[6].initialize(cfg6);
  217. StepMotor45Scheduler step_motor45_scheduler;
  218. step_motor45_scheduler.initialize(&htim10, 1000);
  219. step_motor45_scheduler.addMotor(&g_step_motor45[1]);
  220. step_motor45_scheduler.addMotor(&g_step_motor45[2]);
  221. step_motor45_scheduler.addMotor(&g_step_motor45[3]);
  222. step_motor45_scheduler.addMotor(&g_step_motor45[4]);
  223. step_motor45_scheduler.addMotor(&g_step_motor45[5]);
  224. step_motor45_scheduler.addMotor(&g_step_motor45[6]);
  225. // g_step_motor45_1.rotate(true, 1000);
  226. step_motor45_scheduler.start();
  227. g_modbusblockhost.initialize(&huart2);
  228. g_eq20servomotor.init(&g_modbusblockhost);
  229. g_feiteservomotor.initialize(&huart3, &hdma_usart3_rx, &hdma_usart3_tx);
  230. #endif
  231. #if 0
  232. step_motor_cmd_reg();
  233. #endif
  234. while (true) {
  235. OSDefaultSchduler::getInstance()->loop();
  236. cmdScheduler.schedule();
  237. osDelay(1);
  238. }
  239. }