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.

249 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
  1. #include "main.hpp"
  2. #include <stddef.h>
  3. #include <stdio.h>
  4. #include "main.h"
  5. #include "project.hpp"
  6. //
  7. #include "one_dimensional_code_laser_scanner.hpp"
  8. // #include "sdk/components/single_axis_motor_control_v2/single_axis_motor_control_v2.hpp"
  9. #include "sdk/components/single_axis_motor_control/single_axis_motor_control.hpp"
  10. #include "sdk/hal/zhal.hpp"
  11. #include "sdk\components\iflytop_can_slave_modules\io_control_service.hpp"
  12. #include "sdk\components\iflytop_can_slave_v1\iflytop_can_slave.hpp"
  13. #include "sdk\components\tmc\ic\ztmc4361A.hpp"
  14. #include "sdk\components\tmc\ic\ztmc5130.hpp"
  15. #define TAG "main"
  16. namespace iflytop {
  17. Main gmain;
  18. };
  19. using namespace iflytop;
  20. IflytopCanProtocolStackProcesser m_protocolStack;
  21. TMC5130 m_tj_motor;
  22. TMC5130 m_py_motor;
  23. ZGPIO debuglight;
  24. ZGPIO io_fybh_read1;
  25. ZGPIO io_fybh_read2;
  26. ZGPIO io_fybh_read3;
  27. ZGPIO io_fybh_read4;
  28. ZGPIO io_fybh_read5;
  29. ZGPIO io_fybh_read6;
  30. ZGPIO io_fybjl_sensor8;
  31. ZGPIO io_fybjl_sensor7;
  32. ZGPIO io_fybjl_sensor6;
  33. ZGPIO io_fybjl_sensor5;
  34. ZGPIO io_fybjl_sensor4;
  35. ZGPIO io_fybjl_sensor3;
  36. ZGPIO io_fybjl_sensor2;
  37. ZGPIO io_fybjl_sensor1;
  38. ZGPIO io_fybjl_sensor0;
  39. DeviceBaseControlService m_deviceBaseControlService;
  40. IOControlService m_ioControlService;
  41. SingleAxisMotorControler m_pyMotorControlService; // 平移电机
  42. SingleAxisMotorControler m_tjMotorControlService; // 推进电机
  43. OneDimensionalCodeLaserScanner m_oneDimensionalCodeLaserScanner;
  44. void input_sensors_init() {
  45. io_fybh_read1.initAsInput(FYBH_READ1, ZGPIO::kMode_nopull, ZGPIO::kIRQ_noIrq, false /*mirror*/);
  46. io_fybh_read2.initAsInput(FYBH_READ2, ZGPIO::kMode_nopull, ZGPIO::kIRQ_noIrq, false /*mirror*/);
  47. io_fybh_read3.initAsInput(FYBH_READ3, ZGPIO::kMode_nopull, ZGPIO::kIRQ_noIrq, false /*mirror*/);
  48. io_fybh_read4.initAsInput(FYBH_READ4, ZGPIO::kMode_nopull, ZGPIO::kIRQ_noIrq, false /*mirror*/);
  49. io_fybh_read5.initAsInput(FYBH_READ5, ZGPIO::kMode_nopull, ZGPIO::kIRQ_noIrq, false /*mirror*/);
  50. io_fybh_read6.initAsInput(FYBH_READ6, ZGPIO::kMode_nopull, ZGPIO::kIRQ_noIrq, false /*mirror*/);
  51. io_fybjl_sensor8.initAsInput(FYBJL_SENSOR8, ZGPIO::kMode_nopull, ZGPIO::kIRQ_noIrq, true /*mirror*/);
  52. io_fybjl_sensor7.initAsInput(FYBJL_SENSOR7, ZGPIO::kMode_nopull, ZGPIO::kIRQ_noIrq, true /*mirror*/);
  53. io_fybjl_sensor6.initAsInput(FYBJL_SENSOR6, ZGPIO::kMode_nopull, ZGPIO::kIRQ_noIrq, true /*mirror*/);
  54. io_fybjl_sensor5.initAsInput(FYBJL_SENSOR5, ZGPIO::kMode_nopull, ZGPIO::kIRQ_risingAndFallingIrq, true /*mirror*/);
  55. io_fybjl_sensor4.initAsInput(FYBJL_SENSOR4, ZGPIO::kMode_nopull, ZGPIO::kIRQ_risingAndFallingIrq, true /*mirror*/);
  56. io_fybjl_sensor3.initAsInput(FYBJL_SENSOR3, ZGPIO::kMode_nopull, ZGPIO::kIRQ_noIrq, true /*mirror*/);
  57. io_fybjl_sensor2.initAsInput(FYBJL_SENSOR2, ZGPIO::kMode_nopull, ZGPIO::kIRQ_risingAndFallingIrq, true /*mirror*/);
  58. io_fybjl_sensor1.initAsInput(FYBJL_SENSOR1, ZGPIO::kMode_nopull, ZGPIO::kIRQ_risingAndFallingIrq, true /*mirror*/);
  59. io_fybjl_sensor0.initAsInput(FYBJL_SENSOR0, ZGPIO::kMode_nopull, ZGPIO::kIRQ_risingAndFallingIrq, true /*mirror*/);
  60. }
  61. icps::error_t Main::onHostRegisterWriteEvent(IflytopCanProtocolStackProcesser *processer, icps::WriteEvent *event) { return icps::kSuccess; }
  62. icps::error_t Main::onHostRegisterReadEvent(IflytopCanProtocolStackProcesser *processer, icps::ReadEvent *event) { return icps::kSuccess; }
  63. void Main::onHostRegisterReportEvent(IflytopCanProtocolStackProcesser *processer, icps::ReportEvent *event) {}
  64. void Main::run() {
  65. ZHALCORE::cfg_t oscfg = {
  66. .delayhtim = &DELAY_US_TIMER,
  67. .debuguart = &DEBUG_UART,
  68. };
  69. ZHALCORE::getInstance()->initialize(oscfg);
  70. ZLOGI(TAG, "zapp:%s", VERSION);
  71. printf("int32_t %d int %d longint %d\n", sizeof(int32_t), sizeof(int), sizeof(long int));
  72. debuglight.initAsOutput(DEBUG_LIGHT_GPIO, ZGPIO::kMode_nopull, false, false);
  73. ZHAL_CORE_REG(200, { debuglight.toggleState(); });
  74. /*******************************************************************************
  75. * GPIO输入初始化 *
  76. *******************************************************************************/
  77. input_sensors_init();
  78. /*******************************************************************************
  79. * *
  80. *******************************************************************************/
  81. {
  82. TMC5130::cfg_t cfg = {.hspi = &MOTOR_SPI, .enn_pin = MOTOR0_ENN, .csn_pin = MOTOR0_CSN};
  83. m_py_motor.initialize(&cfg);
  84. int32_t chipv = m_py_motor.readChipVERSION();
  85. ZLOGI(TAG, "m_py_motor:%lx", chipv);
  86. m_py_motor.setIHOLD_IRUN(1, 31, 0);
  87. // m_py_motor.rotate(500000);
  88. }
  89. {
  90. TMC5130::cfg_t cfg = {.hspi = &MOTOR_SPI, .enn_pin = MOTOR1_ENN, .csn_pin = MOTOR1_CSN};
  91. m_tj_motor.initialize(&cfg);
  92. int32_t chipv = m_tj_motor.readChipVERSION();
  93. ZLOGI(TAG, "m_tj_motor:%lx", chipv);
  94. m_tj_motor.setIHOLD_IRUN(1, 31, 0);
  95. // m_tj_motor.rotate(500000);
  96. }
  97. /*******************************************************************************
  98. * *
  99. *******************************************************************************/
  100. {
  101. // static ZUART uart;
  102. // PB6.initAsOutput(STM32_GPIO::kOutput_nopull, true, false);
  103. // ZUART::cfg_t cfg = {
  104. // .name = "CODE_SCANER_UART",
  105. // .huart = &CODE_SCANER_UART,
  106. // .rxbuffersize = 300,
  107. // .rxovertime_ms = 10,
  108. // };
  109. // uart.initialize(&cfg,[](){})
  110. // uart.initialize_basic("CODE_SCANER_UART", &m_hardware, &CODE_SCANER_UART);
  111. // uart.initialize_setRxBuffer(300);
  112. // uart.initialize_setRxOvertime(33);
  113. // uart.initialize_finished();
  114. }
  115. /*******************************************************************************
  116. * *
  117. *******************************************************************************/
  118. { //
  119. auto *cfg = IflytopCanProtocolStackProcesser::createDefaultConfig(DEVICE_ID, 128);
  120. m_protocolStack.initialize(cfg);
  121. m_protocolStack.setDumpPacketFlag(false);
  122. // m_protocolStack.registerListener(this);
  123. // m_protocolStack.activeReg(REG_GPIO_INPUT0, icps::kwr, 0);
  124. }
  125. { //
  126. m_deviceBaseControlService.initialize(&m_protocolStack, DEVICE_ID);
  127. m_deviceBaseControlService.setListener([](int32_t engineer_mode) {
  128. // m_pyMotorControlService.setEngineerMode(engineer_mode);
  129. // m_tjMotorControlService.setEngineerMode(engineer_mode);
  130. });
  131. }
  132. m_ioControlService.initialize(&m_protocolStack, GPIO_INPUT_ADD_BASE, nullptr, [this](int io_off) {
  133. if (io_off == 0) return io_fybjl_sensor0.getState();
  134. if (io_off == 1) return io_fybjl_sensor1.getState();
  135. if (io_off == 2) return io_fybjl_sensor2.getState();
  136. if (io_off == 3) return io_fybjl_sensor3.getState();
  137. if (io_off == 4) return io_fybjl_sensor4.getState();
  138. if (io_off == 5) return io_fybjl_sensor5.getState();
  139. if (io_off == 6) return io_fybjl_sensor6.getState();
  140. if (io_off == 7) return io_fybjl_sensor7.getState();
  141. if (io_off == 8) return io_fybjl_sensor8.getState();
  142. if (io_off == 9) return io_fybh_read1.getState();
  143. if (io_off == 10) return io_fybh_read2.getState();
  144. if (io_off == 11) return io_fybh_read3.getState();
  145. if (io_off == 12) return io_fybh_read4.getState();
  146. if (io_off == 13) return io_fybh_read5.getState();
  147. if (io_off == 14) return io_fybh_read6.getState();
  148. return false;
  149. });
  150. /*******************************************************************************
  151. * *
  152. *******************************************************************************/
  153. m_py_motor.setIHOLD_IRUN(2, 12, 0);
  154. m_py_motor.setMotorShaft(false);
  155. m_pyMotorControlService.initialize( //
  156. "infeedMotor", &m_protocolStack, REG_PY_MOTOR_CTRL_ADD_BASE,
  157. &io_fybjl_sensor1, // ZERO_GPIO
  158. NULL, // LGPIO
  159. NULL, // RGPIO
  160. &m_py_motor // motor
  161. );
  162. m_pyMotorControlService.cfg_acc->setVal(30000);
  163. m_pyMotorControlService.cfg_dec->setVal(30000);
  164. m_pyMotorControlService.cfg_velocity->setVal(1000000);
  165. m_pyMotorControlService.cfg_zero_shift->setVal(0);
  166. m_pyMotorControlService.cfg_runhome_velocity->setVal(50000);
  167. m_pyMotorControlService.cfg_runtohome_dec->setVal(100000);
  168. m_pyMotorControlService.cfg_min_pos->setVal(-1000);
  169. m_pyMotorControlService.cfg_max_pos->setVal(1144028);
  170. m_pyMotorControlService.cfg_runtohome_max_distance->setVal(INT32_MAX);
  171. m_pyMotorControlService.cfg_runtohome_leave_zero_point_distance->setVal(256 * 200 * 1);
  172. /*******************************************************************************
  173. * *
  174. *******************************************************************************/
  175. m_tj_motor.setIHOLD_IRUN(2, 12, 0);
  176. m_tj_motor.setMotorShaft(true);
  177. m_tjMotorControlService.initialize( //
  178. "outfeedMotor", &m_protocolStack, REG_TJ_MOTOR_CTRL_ADD_BASE,
  179. &io_fybjl_sensor4, // ZERO_GPIO
  180. NULL, // LGPIO
  181. NULL, // RGPIO
  182. &m_tj_motor // motor
  183. );
  184. m_tjMotorControlService.cfg_acc->setVal(30000);
  185. m_tjMotorControlService.cfg_dec->setVal(30000);
  186. m_tjMotorControlService.cfg_velocity->setVal(1000000);
  187. m_tjMotorControlService.cfg_zero_shift->setVal(0);
  188. m_tjMotorControlService.cfg_runhome_velocity->setVal(50000);
  189. m_tjMotorControlService.cfg_runtohome_dec->setVal(100000);
  190. m_tjMotorControlService.cfg_min_pos->setVal(-1000);
  191. m_tjMotorControlService.cfg_max_pos->setVal(1130108);
  192. m_tjMotorControlService.cfg_runtohome_max_distance->setVal(INT32_MAX);
  193. m_tjMotorControlService.cfg_runtohome_leave_zero_point_distance->setVal(256 * 200 * 1);
  194. {
  195. #if 0
  196. :518400
  197. :659200
  198. #endif
  199. OneDimensionalCodeLaserScanner::cfg_t cfg;
  200. cfg.triggerPin = FYBJL_SENSOR0;
  201. cfg.codestartpos = 518500;
  202. cfg.codeendpos = 659200;
  203. cfg.readder = [this]() { return m_tj_motor.getXACTUAL(); };
  204. m_oneDimensionalCodeLaserScanner.initialize(&m_protocolStack, REG_LARSER_SCANNER_CTRL_ADD_BASE, &cfg);
  205. }
  206. ZLOGI(TAG, "init done");
  207. while (1) {
  208. ZHALCORE::getInstance()->loop();
  209. }
  210. }