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.

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