axis_app.c 7.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256
  1. #include "board.h"
  2. #include "io_app.h"
  3. #include "mv_port.h"
  4. #include "user_app.h"
  5. #include "variable.h"
  6. #include <string.h>
  7. #define i_F_XOring 0
  8. #define i_F_YOring 1
  9. #define i_F_ZOring 2
  10. #define i_F_UOring 3
  11. #define X_Origin X00
  12. #define Y_Origin X01
  13. typedef struct
  14. {
  15. unsigned short no;
  16. unsigned short speed;
  17. int position;
  18. int dst_position;
  19. unsigned short aac;
  20. unsigned short ddc;
  21. unsigned short max_acc;
  22. unsigned short max_dec;
  23. unsigned short min_speed;
  24. unsigned short max_speed;
  25. unsigned short time_uint;
  26. unsigned short speed_unit;
  27. } motion_parameter_t;
  28. /**
  29. * 轴初始化,包括参数初始化,回掉函数设置
  30. *
  31. * @author lxz
  32. *
  33. * @param void
  34. */
  35. void axis_app_init(void)
  36. {
  37. hw_io_infomation_t info;
  38. //轴分配与初始化
  39. #if AXIS_NUMBER > 0
  40. if (MotorParam->XCycleLength == 0)
  41. MotorParam->XCycleLength = 1000;
  42. if (MotorParam->XCyclePulse == 0)
  43. MotorParam->XCyclePulse = 10000;
  44. MV_AxisInit(X_AXIS, PHY_AXIS_1);
  45. MV_SetParam(X_AXIS, MV_PARAM_CLOCK, 6000000);
  46. MV_SetRatio(X_AXIS,
  47. MotorParam->XCyclePulse,
  48. MotorParam->XCycleLength, 1);
  49. MV_EnableRatio(X_AXIS);
  50. MV_SetParam(X_AXIS, MV_PARAM_HOME_SPACE, 50);
  51. MV_SetParam(X_AXIS, MV_PARAM_HOME_OFFSET, 0);
  52. MV_SetParam(X_AXIS, MV_PARAM_START_SPEED, 1000);
  53. MV_SetAccDec(X_AXIS, 1, 200, 200);
  54. MV_SetParam(X_AXIS, AXIS_HOME_LOW_SPEED, 8000);
  55. MV_SetParam(X_AXIS, AXIS_HOME_FIND_SPEED, 1000);
  56. MV_SetParam(X_AXIS, MV_PARAM_MIN_STEP, 1);
  57. MV_SetParam(X_AXIS, MV_PARAM_PERIOD, 1);
  58. MV_SetParam(X_AXIS, MV_PARAM_AAC_LMT, 5000);
  59. MV_SetParam(X_AXIS, MV_PARAM_ACC_LMT, 30000);
  60. MV_SetParam(X_AXIS, MV_PARAM_DEC_LMT, 30000);
  61. if (MotorParam->XDir > 0)
  62. {
  63. MotorParam->XDir = 1;
  64. }
  65. MV_SetParam(X_AXIS,
  66. MV_PARAM_DIR_LEVEL,
  67. MotorParam->XDir);
  68. if (hw_io_get_input_pin_infomation(i_F_XOring, &info))
  69. {
  70. MV_SetHomeSgn(X_AXIS,
  71. info.io_register,
  72. info.pin_mask,
  73. info.valid_value, 5);
  74. }
  75. #endif
  76. #if AXIS_NUMBER > 1
  77. // if (MotorParam->YCycleLength == 0)
  78. MotorParam->YCycleLength = 1000;
  79. // if (MotorParam->YCyclePulse == 0)
  80. MotorParam->YCyclePulse = 10000;
  81. MV_AxisInit(Y_AXIS, PHY_AXIS_2);
  82. MV_SetParam(Y_AXIS, MV_PARAM_CLOCK, 6000000);
  83. MV_SetRatio(Y_AXIS,
  84. MotorParam->YCyclePulse,
  85. MotorParam->YCycleLength, 1);
  86. MV_EnableRatio(Y_AXIS);
  87. MV_SetParam(Y_AXIS, MV_PARAM_HOME_SPACE, 50);
  88. MV_SetParam(Y_AXIS, MV_PARAM_HOME_OFFSET, 0);
  89. MV_SetParam(Y_AXIS, MV_PARAM_START_SPEED, 1000);
  90. MV_SetAccDec(Y_AXIS, 1, 200, 200);
  91. MV_SetParam(Y_AXIS, AXIS_HOME_LOW_SPEED, 8000);
  92. MV_SetParam(Y_AXIS, AXIS_HOME_FIND_SPEED, 1000);
  93. MV_SetParam(Y_AXIS, MV_PARAM_MIN_STEP, 1);
  94. MV_SetParam(Y_AXIS, MV_PARAM_PERIOD, 1);
  95. MV_SetParam(Y_AXIS, MV_PARAM_AAC_LMT, 5000);
  96. MV_SetParam(Y_AXIS, MV_PARAM_ACC_LMT, 30000);
  97. MV_SetParam(Y_AXIS, MV_PARAM_DEC_LMT, 30000);
  98. if (MotorParam->YDir > 0)
  99. {
  100. MotorParam->YDir = 1;
  101. }
  102. MV_SetParam(Y_AXIS,
  103. MV_PARAM_DIR_LEVEL,
  104. MotorParam->YDir);
  105. if (hw_io_get_input_pin_infomation(i_F_YOring, &info))
  106. {
  107. MV_SetHomeSgn(Y_AXIS,
  108. info.io_register,
  109. info.pin_mask,
  110. info.valid_value, 5);
  111. }
  112. #endif
  113. #if AXIS_NUMBER > 2
  114. if (MotorParam->ZCycleLength == 0)
  115. MotorParam->ZCycleLength = 500;
  116. if (MotorParam->ZCyclePulse == 0)
  117. MotorParam->ZCyclePulse = 5000;
  118. MV_AxisInit(Z_AXIS, PHY_AXIS_1);
  119. MV_SetParam(Z_AXIS, MV_PARAM_CLOCK, 6000000);
  120. MV_SetRatio(Z_AXIS,
  121. MotorParam->ZCyclePulse,
  122. MotorParam->ZCycleLength, 10);
  123. MV_EnableRatio(Z_AXIS);
  124. MV_SetParam(Z_AXIS, MV_PARAM_HOME_SPACE, 50);
  125. MV_SetParam(Z_AXIS, MV_PARAM_HOME_OFFSET, 0);
  126. MV_SetParam(Z_AXIS, MV_PARAM_START_SPEED, 1000);
  127. MV_SetAccDec(Z_AXIS, 1, 200, 200);
  128. MV_SetParam(Z_AXIS, MV_PARAM_MIN_STEP, 1);
  129. MV_SetParam(Z_AXIS, MV_PARAM_PERIOD, 1);
  130. MV_SetParam(Z_AXIS, MV_PARAM_AAC_LMT, 5000);
  131. MV_SetParam(Z_AXIS, MV_PARAM_ACC_LMT, 30000);
  132. MV_SetParam(Z_AXIS, MV_PARAM_DEC_LMT, 30000);
  133. if (MotorParam->ZDir > 0)
  134. {
  135. MotorParam->ZDir = 1;
  136. }
  137. MV_SetParam(Z_AXIS,
  138. MV_PARAM_DIR_LEVEL,
  139. MotorParam->ZDir);
  140. if (hw_io_get_input_pin_infomation(i_F_ZOring, &info))
  141. {
  142. MV_SetHomeSgn(Z_AXIS,
  143. info.io_register,
  144. info.pin_mask,
  145. info.valid_value, 5);
  146. }
  147. #endif
  148. #if AXIS_NUMBER > 3
  149. if (MotorParam->UCyclePulse == 0)
  150. MotorParam->UCyclePulse = 5000;
  151. if (MotorParam->UCycleLength == 0)
  152. MotorParam->UCycleLength = 10000;
  153. MV_AxisInit(U_AXIS, PHY_AXIS_4);
  154. MV_SetParam(U_AXIS, MV_PARAM_CLOCK, 6000000); //设置频率
  155. MV_SetRatio(U_AXIS,
  156. MotorParam->UCyclePulse,
  157. MotorParam->UCycleLength, 10); //设置齿轮比
  158. MV_EnableRatio(U_AXIS);
  159. MV_SetParam(U_AXIS, MV_PARAM_HOME_SPACE, 50);
  160. MV_SetParam(U_AXIS, MV_PARAM_HOME_OFFSET, 0); //设置原点偏移
  161. //设置启动速度
  162. MV_SetParam(U_AXIS, MV_PARAM_START_SPEED, 1000);
  163. MV_SetAccDec(U_AXIS, 1, 200, 200); //设置加减速时间
  164. MV_SetParam(U_AXIS, MV_PARAM_MIN_STEP, 1); //设置最小加速步
  165. MV_SetParam(U_AXIS, MV_PARAM_PERIOD, 1); //设置加减速周期
  166. //伺服采用的是定加加速S曲线加减速
  167. MV_SetParam(U_AXIS, MV_PARAM_AAC_LMT, 5000);
  168. MV_SetParam(U_AXIS, MV_PARAM_ACC_LMT, 30000);
  169. MV_SetParam(U_AXIS, MV_PARAM_DEC_LMT, 30000);
  170. if (MotorParam->UDir > 0)
  171. {
  172. MotorParam->UDir = 1;
  173. }
  174. MV_SetParam(U_AXIS,
  175. MV_PARAM_ENABLE_SGN_LEVEL,
  176. MotorParam->UDir);
  177. if (hw_io_get_input_pin_infomation(i_F_UOring, &info))
  178. { //设置原点引脚
  179. MV_SetHomeSgn(U_AXIS,
  180. info.io_register,
  181. info.pin_mask,
  182. info.valid_value, 5);
  183. }
  184. //设置方向
  185. #endif
  186. #if INTERP_TASK_NUMBER
  187. float X_JGRatio = (float)MotorParam->XCyclePulse / (float)MotorParam->XCycleLength;
  188. float Y_JGRatio = (float)MotorParam->YCyclePulse / (float)MotorParam->YCycleLength;
  189. float Z_JGRatio = (float)MotorParam->ZCyclePulse / (float)MotorParam->ZCycleLength;
  190. //插补任务初始化
  191. MV_InterpInit(0, MV_GetParam(X_AXIS, AXIS_CLOCK));
  192. //插补虚拟轴分配
  193. MV_InterpSetAxis(0, X_AXIS, X_AXIS, X_JGRatio , 1); //X_JGRatio);
  194. MV_InterpSetAxis(0, Y_AXIS, Y_AXIS, Y_JGRatio , 1); //Y_JGRatio);
  195. MV_InterpSetAxis(0, Z_AXIS, Z_AXIS, Z_JGRatio , 1); //Z_JGRatio);
  196. #endif
  197. }
  198. /**
  199. * 轴应用函数
  200. *
  201. * @author lxz
  202. *
  203. * @param void
  204. */
  205. void axis_app_run(void)
  206. {
  207. //更新回零信号
  208. MV_UpdateHomeSgn(X_AXIS, X_Origin, 0);
  209. MV_UpdateHomeSgn(Y_AXIS, Y_Origin, 0);
  210. //更新报警信息
  211. //MV_UpdateAlarmSgn(X_AXIS, iServoError, 0, 0);
  212. MV_IdleTask();
  213. }