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.

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