ServoStep.c 33 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063
  1. #include "servostep.h"
  2. #include "global.h"
  3. StepperDataInfo tXAxisStepper @".ccram";
  4. StepperDataInfo tYAxisStepper @".ccram";
  5. word_bits_t cAxisDriveState @".ccram";
  6. word_bits_t cAxisAlarmState @".ccram";
  7. static StepperDataInfo *StepInfo[] = {
  8. &tXAxisStepper,
  9. &tYAxisStepper
  10. };
  11. #define X_FreqTab_Number 150
  12. #define Y_FreqTab_Number 150
  13. #define DATA_SIZE 100
  14. const unsigned long FreqTab_XX[] = {
  15. 2000, 4000, 6774, 9440, 15998, 19998, 24002, 27997, 32009, 35994,
  16. 39997, 44016, 47979, 51982, 55995, 60022, 64018, 67952, 72046, 76008,
  17. 79994, 83940, 87945, 91968, 95958, 100083, 104086, 107894, 111991, 116107,
  18. 119882, 123912, 127852, 132050, 136113, 139989, 144093, 147949, 152016, 155763,
  19. 160278, 163840, 168200, 172127, 176242, 179824, 184320, 188241, 192333, 195738,
  20. 200166, 203856, 207684, 211659, 215789, 220083, 224552, 228024, 231606, 236560,
  21. 240417, 244402, 248521, 251345, 255704, 260216, 263314, 268101, 271391, 276480,
  22. 279979, 283569, 287251, 292958, 296891, 300930, 302991, 307200, 311526, 315977,
  23. 320556, 322896, 327680, 332607, 335127, 340283, 342920, 348321, 351085, 356748,
  24. 359648, 362596, 368640, 371737, 374888, 381351, 384667, 388042, 391476, 394971,
  25. 398529, 402152, 405842, 409600, 413428, 417328, 421302, 425353, 429483, 433694,
  26. 437988, 442368,
  27. };
  28. unsigned short FreqTab_X[X_FreqTab_Number]@".ccram";
  29. static unsigned short FreqTab_X2[X_FreqTab_Number]@".ccram";
  30. const unsigned long FreqTab_YY[] = {
  31. 2000, 4000, 9999, 11668, 13332, 15000, 16667, 18332, 19998, 21663,
  32. 23331, 25006, 26664, 28338, 29991, 31665, 33335, 34997, 36680, 38333,
  33. 39997, 41654, 43326, 45001, 46663, 48346, 49985, 51678, 53361, 55020,
  34. 56641, 58359, 60022, 61697, 63376, 64958, 66621, 67331, 67952, 68690,
  35. 69336, 69994, 70665, 71349, 72046, 72638, 73361, 73974, 74724, 75360,
  36. 76008, 76666, 77337, 78019, 78713, 79277, 79994, 80724, 81317, 82071,
  37. 82685, 83308, 83940, 84744, 85399, 86063, 86738, 87252, 87945, 88650,
  38. 89367, 89912, 90649, 91398, 91968, 92739, 93326, 93921, 94725, 95337,
  39. 95958, 96586, 97437, 98086, 98742, 99408, 100083, 100767, 101228, 101928,
  40. 102637, 103357, 104086, 104578, 105325, 106083, 106594, 107370, 107894, 108689,
  41. 109226, 110041, 110592, 111427, 111991,
  42. };
  43. static unsigned short FreqTab_Y[X_FreqTab_Number]@".ccram";
  44. static unsigned short FreqTab_Y2[X_FreqTab_Number]@".ccram";
  45. void CalculateSModelLine(unsigned short *fre,float len, float fre_max, float fre_min, float flexible)
  46. {
  47. int i=0;
  48. float deno ;
  49. float melo ;
  50. float delt = fre_max-fre_min;
  51. float freq_buff;
  52. for(i=0; i<len; i++)
  53. {
  54. melo = flexible * (i-len/2) / (len/2);
  55. deno = 1.0 / (1 + expf(-melo)); //expf is a library function of exponential(e)
  56. freq_buff = delt * deno + fre_min;
  57. *(fre+i) = 4000000/(unsigned short)freq_buff;
  58. }
  59. for(i=(int)len;i<DATA_SIZE;i++)
  60. {
  61. *(fre+i) = *(fre+(unsigned short)(len - 1));
  62. }
  63. }
  64. /*
  65. void CalAccDecTab(unsigned char *acc_dec,unsigned short acc_dec_time,unsigned short max_speed)
  66. {
  67. float acc_time_buff,deno;
  68. unsigned short i;
  69. acc_time_buff = acc_dec_time;
  70. acc_time_buff = acc_time_buff / (max_speed);
  71. for(i = 0;i<max_speed;i++)
  72. {
  73. *(acc_dec+i) = (unsigned char)acc_time_buff;
  74. }
  75. cPulseStepDEC = 0;
  76. for(i = 0;i<DATA_SIZE;i++)
  77. {
  78. if(*(acc_dec+i) == 0)
  79. cPulseStepDEC += 1;
  80. else
  81. cPulseStepDEC += *(acc_dec+i);
  82. }
  83. cDecPulseBuff = cPulseStepDEC;
  84. }*/
  85. // APB2_TIM9 X
  86. void CalFreqTab_X(void)
  87. {
  88. short i = 0;
  89. short j = 0;
  90. j = sizeof(FreqTab_XX) / 4;
  91. for (i = 0; i < j; i++)
  92. {
  93. if (FreqTab_XX[i] > 0)
  94. {
  95. FreqTab_X[i] = 4000000/(FreqTab_XX[i]/7);
  96. }
  97. }
  98. }
  99. void CalFreqTab_X_Free(unsigned char divide_var)
  100. {
  101. short i = 0;
  102. short j = 0;
  103. j = sizeof(FreqTab_XX) / 4;
  104. for (i = 0; i < j; i++)
  105. {
  106. if (FreqTab_XX[i] > 0)
  107. {
  108. FreqTab_X[i] = 4000000/(FreqTab_XX[i]/divide_var);
  109. }
  110. }
  111. }
  112. void CalFreqTab_X_Free_JY(unsigned char divide_var)
  113. {
  114. short i = 0;
  115. short j = 0;
  116. j = sizeof(FreqTab_XX) / 4;
  117. for (i = 0; i < j; i=i+3)
  118. {
  119. if (FreqTab_XX[i] > 0)
  120. {
  121. if(i >= j)i= j-1;
  122. FreqTab_X[i] = 4000000/(FreqTab_XX[3*i]/divide_var);
  123. }
  124. }
  125. }
  126. // APB1_TIM13 Y
  127. void CalFreqTab_Y(void)
  128. {
  129. short i = 0;
  130. short j = 0;
  131. j = sizeof(FreqTab_YY) / 4;
  132. for (i = 0; i < j; i++)
  133. {
  134. if (FreqTab_YY[i] > 0)
  135. {
  136. FreqTab_Y[i] = 4000000/(FreqTab_YY[i]/7);
  137. }
  138. }
  139. }
  140. //#pragma inline
  141. void XAxis_PWMProc(void)
  142. {
  143. if (bXDirction) tXAxisStepper.cRealPosi--;
  144. else tXAxisStepper.cRealPosi++;
  145. PWMAction();
  146. if (tXAxisStepper.bAuto_Mov == 1)
  147. {
  148. tXAxisStepper.cPmovPulse--;
  149. if (tXAxisStepper.cPmovPulse == 0)
  150. {
  151. hw_pwm_stop(axis_x->axis_no);
  152. tXAxisStepper.bAuto_Mov = 0;
  153. tXAxisStepper.cCurSpeed = 0;
  154. }
  155. else if (tXAxisStepper.cPmovPulse > tXAxisStepper.cCalDecPulse)
  156. {
  157. if (tXAxisStepper.cCurSpeed < tXAxisStepper.cCalSpeed)
  158. {
  159. tXAxisStepper.cAccDecVal++;
  160. if (tXAxisStepper.cAccDecVal >= tXAxisStepper.cSetAccVal)
  161. {
  162. tXAxisStepper.cAccDecVal = 0;
  163. tXAxisStepper.cCurSpeed++;
  164. hw_pwm_set_period(axis_x->axis_no,FreqTab_X[tXAxisStepper.cCurSpeed]);
  165. }
  166. }
  167. }
  168. else
  169. {
  170. if (tXAxisStepper.cCurSpeed > tXAxisStepper.cSetStartSpeed)
  171. {
  172. tXAxisStepper.cAccDecVal++;
  173. if (tXAxisStepper.cAccDecVal >= tXAxisStepper.cSetDecVal)
  174. {
  175. tXAxisStepper.cAccDecVal = 0;
  176. tXAxisStepper.cCurSpeed--;
  177. hw_pwm_set_period(axis_x->axis_no,FreqTab_X[tXAxisStepper.cCurSpeed]);
  178. }
  179. }
  180. }
  181. }
  182. else if(tXAxisStepper.bAuto_Mov == 2)
  183. {
  184. tXAxisStepper.cPmovPulse--;
  185. if (tXAxisStepper.cPmovPulse == 0)
  186. {
  187. hw_pwm_stop(axis_x->axis_no);
  188. tXAxisStepper.bAuto_Mov = 0;
  189. tXAxisStepper.cCurSpeed = 0;
  190. }
  191. else if (tXAxisStepper.cPmovPulse > tXAxisStepper.HighSpeedPulse + tXAxisStepper.cCalDecPulse)
  192. {
  193. if (tXAxisStepper.cCurSpeed < tXAxisStepper.FirstLowSpeed)
  194. {
  195. tXAxisStepper.cAccDecVal++;
  196. if (tXAxisStepper.cAccDecVal >= tXAxisStepper.cSetAccVal)
  197. {
  198. tXAxisStepper.cAccDecVal = 0;
  199. tXAxisStepper.cCurSpeed++;
  200. hw_pwm_set_period(axis_x->axis_no,FreqTab_X[tXAxisStepper.cCurSpeed]);
  201. }
  202. }
  203. }
  204. else if (tXAxisStepper.cPmovPulse > tXAxisStepper.cCalDecPulse)
  205. {
  206. if (tXAxisStepper.cCurSpeed < tXAxisStepper.cCalSpeed)
  207. {
  208. tXAxisStepper.cAccDecVal++;
  209. if (tXAxisStepper.cAccDecVal >= tXAxisStepper.cSetAccVal)
  210. {
  211. tXAxisStepper.cAccDecVal = 0;
  212. tXAxisStepper.cCurSpeed++;
  213. hw_pwm_set_period(axis_x->axis_no,FreqTab_X[tXAxisStepper.cCurSpeed]);
  214. }
  215. }
  216. }
  217. else
  218. {
  219. if (tXAxisStepper.cCurSpeed > tXAxisStepper.cSetStartSpeed)
  220. {
  221. tXAxisStepper.cAccDecVal++;
  222. if (tXAxisStepper.cAccDecVal >= tXAxisStepper.cSetDecVal)
  223. {
  224. tXAxisStepper.cAccDecVal = 0;
  225. tXAxisStepper.cCurSpeed--;
  226. hw_pwm_set_period(axis_x->axis_no,FreqTab_X[tXAxisStepper.cCurSpeed]);
  227. }
  228. }
  229. }
  230. }
  231. else
  232. {
  233. if (tXAxisStepper.State == 3)
  234. {
  235. if (hw_io_pin_input(5))
  236. {
  237. tXAxisStepper.cZeroFilter++;
  238. if (tXAxisStepper.cZeroFilter >= 3)
  239. {
  240. hw_pwm_stop(axis_x->axis_no);
  241. tXAxisStepper.cRealPosi = 0;
  242. tXAxisStepper.State = 0;
  243. tXAxisStepper.cCurSpeed = 0;
  244. }
  245. }
  246. else
  247. {
  248. tXAxisStepper.cZeroFilter = 0;
  249. }
  250. if (tXAxisStepper.cCurSpeed < tXAxisStepper.cSetSpeed)
  251. {
  252. ++tXAxisStepper.cAccDecVal;
  253. if (tXAxisStepper.cAccDecVal >= tXAxisStepper.cSetAccVal)
  254. {
  255. tXAxisStepper.cAccDecVal = 0;
  256. tXAxisStepper.cCurSpeed++;
  257. hw_pwm_set_period(axis_x->axis_no,FreqTab_X[tXAxisStepper.cCurSpeed]);
  258. }
  259. }
  260. else if (tXAxisStepper.cCurSpeed > tXAxisStepper.cSetSpeed)
  261. {
  262. ++tXAxisStepper.cAccDecVal;
  263. if (tXAxisStepper.cAccDecVal >= tXAxisStepper.cSetDecVal)
  264. {
  265. tXAxisStepper.cAccDecVal = 0;
  266. tXAxisStepper.cCurSpeed--;
  267. hw_pwm_set_period(axis_x->axis_no,FreqTab_X[tXAxisStepper.cCurSpeed]);
  268. }
  269. }
  270. }
  271. else if (tXAxisStepper.State == 1)
  272. {
  273. if (tXAxisStepper.cCurSpeed < tXAxisStepper.cSetSpeed)
  274. {
  275. ++tXAxisStepper.cAccDecVal;
  276. if (tXAxisStepper.cAccDecVal >= tXAxisStepper.cSetAccVal)
  277. {
  278. tXAxisStepper.cAccDecVal = 0;
  279. tXAxisStepper.cCurSpeed++;
  280. hw_pwm_set_period(axis_x->axis_no,FreqTab_X[tXAxisStepper.cCurSpeed]);
  281. }
  282. }
  283. else if (tXAxisStepper.cCurSpeed > tXAxisStepper.cSetSpeed)
  284. {
  285. ++tXAxisStepper.cAccDecVal;
  286. if (tXAxisStepper.cAccDecVal >= tXAxisStepper.cSetDecVal)
  287. {
  288. tXAxisStepper.cAccDecVal = 0;
  289. tXAxisStepper.cCurSpeed--;
  290. hw_pwm_set_period(axis_x->axis_no,FreqTab_X[tXAxisStepper.cCurSpeed]);
  291. }
  292. }
  293. }
  294. else if (tXAxisStepper.State == 2)
  295. {
  296. if (tXAxisStepper.cCurSpeed > tXAxisStepper.cSetStartSpeed)
  297. {
  298. ++tXAxisStepper.cAccDecVal;
  299. if (tXAxisStepper.cAccDecVal >= tXAxisStepper.cSetDecVal)
  300. {
  301. tXAxisStepper.cAccDecVal = 0;
  302. tXAxisStepper.cCurSpeed--;
  303. hw_pwm_set_period(axis_x->axis_no,FreqTab_X[tXAxisStepper.cCurSpeed]);
  304. }
  305. }
  306. else
  307. {
  308. hw_pwm_stop(axis_x->axis_no);
  309. tXAxisStepper.State = 0;
  310. tXAxisStepper.cCurSpeed = 0;
  311. }
  312. }
  313. else if (tXAxisStepper.State == 4)
  314. {
  315. if(tXAxisStepper.cPmovPulse)tXAxisStepper.cPmovPulse--;
  316. if (hw_io_pin_input(4))
  317. {
  318. tXAxisStepper.cZeroFilter++;
  319. if (tXAxisStepper.cZeroFilter >= 3)
  320. {
  321. hw_pwm_stop(axis_x->axis_no);
  322. tXAxisStepper.State = 0;
  323. tXAxisStepper.cCurSpeed = 0;
  324. }
  325. }
  326. else
  327. {
  328. tXAxisStepper.cZeroFilter = 0;
  329. }
  330. if(tXAxisStepper.cPmovPulse == 0)
  331. {
  332. if (tXAxisStepper.cCurSpeed > tXAxisStepper.cSetStartSpeed)
  333. {
  334. ++tXAxisStepper.cAccDecVal;
  335. if (tXAxisStepper.cAccDecVal >= tXAxisStepper.cSetDecVal)
  336. {
  337. tXAxisStepper.cAccDecVal = 0;
  338. tXAxisStepper.cCurSpeed--;
  339. hw_pwm_set_period(axis_x->axis_no,FreqTab_X[tXAxisStepper.cCurSpeed]);
  340. }
  341. }
  342. }
  343. else
  344. {
  345. if (tXAxisStepper.cCurSpeed < tXAxisStepper.cSetSpeed)
  346. {
  347. ++tXAxisStepper.cAccDecVal;
  348. if (tXAxisStepper.cAccDecVal >= tXAxisStepper.cSetAccVal)
  349. {
  350. tXAxisStepper.cAccDecVal = 0;
  351. tXAxisStepper.cCurSpeed++;
  352. hw_pwm_set_period(axis_x->axis_no,FreqTab_X[tXAxisStepper.cCurSpeed]);
  353. }
  354. }
  355. }
  356. }
  357. else if (tXAxisStepper.State == 5)
  358. {
  359. tXAxisStepper.cPmovPulse--;
  360. if (tXAxisStepper.cPmovPulse == 0)
  361. {
  362. hw_pwm_stop(axis_x->axis_no);
  363. tXAxisStepper.bAuto_Mov = 0;
  364. tXAxisStepper.cCurSpeed = 0;
  365. }
  366. if (tXAxisStepper.cCurSpeed < tXAxisStepper.cSetSpeed)
  367. {
  368. ++tXAxisStepper.cAccDecVal;
  369. if (tXAxisStepper.cAccDecVal >= tXAxisStepper.cSetAccVal)
  370. {
  371. tXAxisStepper.cAccDecVal = 0;
  372. tXAxisStepper.cCurSpeed++;
  373. hw_pwm_set_period(axis_x->axis_no,FreqTab_X[tXAxisStepper.cCurSpeed]);
  374. }
  375. }
  376. else if (tXAxisStepper.cCurSpeed > tXAxisStepper.cSetSpeed)
  377. {
  378. ++tXAxisStepper.cAccDecVal;
  379. if (tXAxisStepper.cAccDecVal >= tXAxisStepper.cSetDecVal)
  380. {
  381. tXAxisStepper.cAccDecVal = 0;
  382. tXAxisStepper.cCurSpeed--;
  383. hw_pwm_set_period(axis_x->axis_no,FreqTab_X[tXAxisStepper.cCurSpeed]);
  384. }
  385. }
  386. }
  387. }
  388. }
  389. /********************************************
  390. MTU9-PWM????????ж????
  391. *********************************************/
  392. //#pragma inline
  393. void YAxis_PWMProc(void)
  394. { // y zhou
  395. if (bYDirction) tYAxisStepper.cRealPosi++;
  396. else tYAxisStepper.cRealPosi--;
  397. if (tYAxisStepper.bAuto_Mov)
  398. {
  399. if (--tYAxisStepper.cPmovPulse == 0)
  400. {
  401. hw_pwm_stop(axis_y->axis_no);
  402. Y_DRV = 0;
  403. tYAxisStepper.cCurSpeed = 0;
  404. tYAxisStepper.bAuto_Mov = 0;
  405. }
  406. else if (tYAxisStepper.cPmovPulse > tYAxisStepper.cCalDecPulse)
  407. {
  408. if (tYAxisStepper.cCurSpeed < tYAxisStepper.cCalSpeed)
  409. {
  410. if (++tYAxisStepper.cAccDecVal >= tYAxisStepper.cSetAccVal)
  411. {
  412. tYAxisStepper.cAccDecVal = 0;
  413. tYAxisStepper.cCurSpeed++;
  414. hw_pwm_set_period(axis_y->axis_no,FreqTab_Y[tYAxisStepper.cCurSpeed]);
  415. }
  416. }
  417. }
  418. else
  419. {
  420. if (tYAxisStepper.cCurSpeed > tYAxisStepper.cSetStartSpeed)
  421. {
  422. if (++tYAxisStepper.cAccDecVal >= tYAxisStepper.cSetDecVal)
  423. {
  424. tYAxisStepper.cAccDecVal = 0;
  425. tYAxisStepper.cCurSpeed--;
  426. hw_pwm_set_period(axis_y->axis_no,FreqTab_Y[tYAxisStepper.cCurSpeed]);
  427. }
  428. }
  429. }
  430. }
  431. else
  432. {
  433. if (tYAxisStepper.State == 3)
  434. {
  435. if (1)
  436. {
  437. tYAxisStepper.cZeroFilter++;
  438. if (tYAxisStepper.cZeroFilter >= 50)
  439. {
  440. hw_pwm_stop(axis_y->axis_no);;
  441. Y_DRV = 0;
  442. tYAxisStepper.cRealPosi = 0;
  443. tYAxisStepper.State = 0;
  444. tYAxisStepper.cCurSpeed = 0;
  445. }
  446. }
  447. else tYAxisStepper.cZeroFilter = 0;
  448. }
  449. else if (tYAxisStepper.State == 1)
  450. {
  451. if (tYAxisStepper.cCurSpeed < tYAxisStepper.cSetSpeed)
  452. {
  453. if (++tYAxisStepper.cAccDecVal >= tYAxisStepper.cSetAccVal)
  454. {
  455. tYAxisStepper.cAccDecVal = 0;
  456. tYAxisStepper.cCurSpeed++;
  457. hw_pwm_set_period(axis_y->axis_no,FreqTab_Y[tYAxisStepper.cCurSpeed]);
  458. }
  459. }
  460. else tYAxisStepper.State = 0;
  461. }
  462. else if (tYAxisStepper.State == 2)
  463. {
  464. if (tYAxisStepper.cCurSpeed > tYAxisStepper.cSetStartSpeed)
  465. {
  466. if (++tYAxisStepper.cAccDecVal >= tYAxisStepper.cSetDecVal)
  467. {
  468. tYAxisStepper.cAccDecVal = 0;
  469. tYAxisStepper.cCurSpeed--;
  470. hw_pwm_set_period(axis_y->axis_no,FreqTab_Y[tYAxisStepper.cCurSpeed]);
  471. }
  472. }
  473. else
  474. {
  475. hw_pwm_stop(axis_y->axis_no);
  476. Y_DRV = 0;
  477. tYAxisStepper.State = 0;
  478. tYAxisStepper.cCurSpeed = 0;
  479. }
  480. }
  481. }
  482. }
  483. void StartPWM(unsigned short cAxisNo)
  484. {
  485. if (cAxisNo == X_AXIS)
  486. {
  487. tXAxisStepper.cCurSpeed = tXAxisStepper.cSetStartSpeed;
  488. hw_pwm_set_period(axis_x->axis_no,FreqTab_X[tXAxisStepper.cCurSpeed]);
  489. // X_CNT = 0;
  490. hw_pwm_start(axis_x->axis_no);
  491. // X_DRV = 1;
  492. }
  493. else if (cAxisNo == Y_AXIS)
  494. {
  495. tYAxisStepper.cCurSpeed = tYAxisStepper.cSetStartSpeed;
  496. hw_pwm_set_period(axis_y->axis_no,FreqTab_Y[tYAxisStepper.cCurSpeed]);
  497. // Y_CNT = 0;
  498. hw_pwm_start(axis_y->axis_no);
  499. }
  500. }
  501. void SetAxisDir_Move(StepperDataInfo *tCurSetStpper, unsigned short dir)
  502. {
  503. switch (tCurSetStpper->cAxisNo)
  504. {
  505. case X_AXIS:
  506. hw_pwm_set_dir(axis_x->axis_no, dir);
  507. break;
  508. case Y_AXIS:
  509. hw_pwm_set_dir(axis_y->axis_no, dir);
  510. break;
  511. default:
  512. tCurSetStpper->cPmovPulse = 0;
  513. break;
  514. }
  515. }
  516. void LCalRunPulse(StepperDataInfo *tCurSetStpper)
  517. {
  518. if (tCurSetStpper->cDestPosi & 0x80000000)
  519. {
  520. tCurSetStpper->cPmovPulse = 0 - tCurSetStpper->cDestPosi;
  521. SetAxisDir_Move(tCurSetStpper, 1);
  522. }
  523. else
  524. {
  525. tCurSetStpper->cPmovPulse = tCurSetStpper->cDestPosi;
  526. SetAxisDir_Move(tCurSetStpper, 0);
  527. }
  528. tCurSetStpper->cCalAccPulse = tCurSetStpper->cSetAccVal * (tCurSetStpper->cSetSpeed - tCurSetStpper->cSetStartSpeed);
  529. tCurSetStpper->cCalDecPulse = tCurSetStpper->cSetDecVal * (tCurSetStpper->cSetSpeed - tCurSetStpper->cSetStartSpeed);
  530. tCurSetStpper->cCurSpeed = tCurSetStpper->cSetStartSpeed;
  531. tCurSetStpper->cAccDecVal = 0;
  532. if (tCurSetStpper->cPmovPulse < (tCurSetStpper->cCalAccPulse + tCurSetStpper->cCalDecPulse))
  533. {
  534. tCurSetStpper->cCalSpeed = tCurSetStpper->cPmovPulse / (tCurSetStpper->cSetAccVal + tCurSetStpper->cSetDecVal);
  535. tCurSetStpper->cCalDecPulse = tCurSetStpper->cSetDecVal * (tCurSetStpper->cCalSpeed - tCurSetStpper->cSetStartSpeed);
  536. }
  537. else
  538. {
  539. tCurSetStpper->cCalSpeed = tCurSetStpper->cSetSpeed;
  540. }
  541. }
  542. void LCalRunPulse2(StepperDataInfo *tCurSetStpper)
  543. {
  544. if (tCurSetStpper->cDestPosi & 0x80000000)
  545. {
  546. tCurSetStpper->cPmovPulse = 0 - tCurSetStpper->cDestPosi;
  547. SetAxisDir_Move(tCurSetStpper, 0);
  548. }
  549. else
  550. {
  551. tCurSetStpper->cPmovPulse = tCurSetStpper->cDestPosi;
  552. SetAxisDir_Move(tCurSetStpper, 1);
  553. }
  554. tCurSetStpper->FirstAccPulse = tCurSetStpper->cSetAccVal * (tCurSetStpper->FirstLowSpeed - tCurSetStpper->cSetStartSpeed) + tCurSetStpper->LowSpeedPulse;
  555. tCurSetStpper->cCalAccPulse = tCurSetStpper->cSetAccVal * (tCurSetStpper->cSetSpeed - tCurSetStpper->FirstLowSpeed);
  556. tCurSetStpper->cCalDecPulse = tCurSetStpper->cSetDecVal * (tCurSetStpper->cSetSpeed - tCurSetStpper->cSetStartSpeed);
  557. tCurSetStpper->cCurSpeed = tCurSetStpper->cSetStartSpeed;
  558. tCurSetStpper->cAccDecVal = 0;
  559. if (tCurSetStpper->cPmovPulse < (tCurSetStpper->cCalAccPulse + tCurSetStpper->cCalDecPulse + tCurSetStpper->FirstAccPulse))
  560. {
  561. tCurSetStpper->cCalSpeed = tCurSetStpper->FirstLowSpeed;
  562. tCurSetStpper->FirstAccPulse = tCurSetStpper->cSetDecVal * (tCurSetStpper->FirstLowSpeed - tCurSetStpper->cSetStartSpeed);
  563. tCurSetStpper->cCalDecPulse = tCurSetStpper->cSetDecVal * (tCurSetStpper->cCalSpeed - tCurSetStpper->FirstLowSpeed);
  564. tCurSetStpper->HighSpeedPulse = tCurSetStpper->cPmovPulse - tCurSetStpper->cCalDecPulse;
  565. }
  566. else
  567. {
  568. tCurSetStpper->HighSpeedPulse = tCurSetStpper->cPmovPulse - tCurSetStpper->cCalAccPulse - tCurSetStpper->FirstAccPulse - tCurSetStpper->cCalDecPulse;
  569. tCurSetStpper->cCalSpeed = tCurSetStpper->cSetSpeed;
  570. }
  571. }
  572. void MV_Set_Startv_CPU(unsigned short cAxisNo, unsigned short cSpeed)
  573. {
  574. StepInfo[cAxisNo]->cSetStartSpeed = cSpeed;
  575. }
  576. void MV_Set_Speed_CPU(unsigned short cAxisNo, unsigned short cSpeed)
  577. {
  578. if (cSpeed < StepInfo[X_AXIS]->cSetStartSpeed)
  579. {
  580. cSpeed = StepInfo[X_AXIS]->cSetStartSpeed;
  581. }
  582. StepInfo[cAxisNo]->cSetSpeed = cSpeed;
  583. }
  584. void MoveChangSpeed(unsigned short cAxisNo, unsigned short cSpeed)
  585. {
  586. MV_Set_Speed_CPU(cAxisNo, cSpeed);
  587. }
  588. void MoveChangSpeedPos(unsigned short cAxisNo, unsigned short cSpeed,long pulse)
  589. {
  590. StepInfo[cAxisNo]->cCalDecPulse = StepInfo[cAxisNo]->cCalDecPulse + pulse;
  591. StepInfo[cAxisNo]->cSetStartSpeed = cSpeed;
  592. //MV_Set_Speed_CPU(cAxisNo, cSpeed);
  593. }
  594. void MV_Set_FirstSpeed(unsigned short cAxisNo, unsigned short cSpeed)
  595. {
  596. StepInfo[cAxisNo]->FirstLowSpeed = cSpeed;
  597. }
  598. void MV_Set_FirstLowPulse(unsigned short cAxisNo,long pulse)
  599. {
  600. StepInfo[cAxisNo]->LowSpeedPulse = pulse;
  601. }
  602. void MV_Set_Acc_CPU(unsigned short cAxisNo, unsigned short cSetAcc)
  603. {
  604. StepInfo[cAxisNo]->cSetAccVal = cSetAcc;
  605. StepInfo[cAxisNo]->cAccDecVal = 0;
  606. }
  607. void MV_AccDec_Set_CPU(unsigned short cAxisNo, unsigned short cSetAcc, unsigned short cSetDec)
  608. {
  609. StepInfo[cAxisNo]->cSetAccVal = cSetAcc;
  610. StepInfo[cAxisNo]->cSetDecVal = cSetDec;
  611. StepInfo[cAxisNo]->cAccDecVal = 0;
  612. }
  613. void MV_Set_Dec_CPU(unsigned short cAxisNo, unsigned short cSetDec)
  614. {
  615. StepInfo[cAxisNo]->cSetDecVal = cSetDec;
  616. StepInfo[cAxisNo]->cAccDecVal = 0;
  617. }
  618. long MV_Get_Command_Pos_CPU(unsigned short cAxisNo)
  619. {
  620. long cRealPosi = 0;
  621. cRealPosi = StepInfo[cAxisNo]->cRealPosi;
  622. return cRealPosi;
  623. }
  624. void MV_Set_Command_Pos_CPU(unsigned short cAxisNo, long pos)
  625. {
  626. StepInfo[cAxisNo]->cRealPosi = pos;
  627. }
  628. void MV_Pmove_CPU(unsigned short cAxisNo, long dwPosi)
  629. {
  630. StepInfo[cAxisNo]->cDestPosi = dwPosi - StepInfo[cAxisNo]->cRealPosi;
  631. //StepInfo[cAxisNo]->cSetStartSpeed = 3;
  632. StepInfo[cAxisNo]->State = 0;
  633. StepInfo[cAxisNo]->cAccDecVal = 0;
  634. LCalRunPulse(StepInfo[cAxisNo]);
  635. if (StepInfo[cAxisNo]->cPmovPulse)
  636. {
  637. StepInfo[cAxisNo]->bAuto_Mov = 1;
  638. StartPWM(cAxisNo);
  639. }
  640. }
  641. void MV_Set_Command_SlMTP_CPU(unsigned short cAxisNo, unsigned long dwMaxLen)
  642. {
  643. StepInfo[cAxisNo]->cMaxPulse = dwMaxLen;
  644. }
  645. void MV_Set_Command_SlMTN_CPU(unsigned short cAxisNo, unsigned long dwMinLen)
  646. {
  647. StepInfo[cAxisNo]->cMinPulse = dwMinLen;
  648. }
  649. void MV_Suddent_Stop(unsigned short cAxisNo)
  650. {
  651. switch (cAxisNo)
  652. {
  653. case X_AXIS:
  654. hw_pwm_stop(axis_x->axis_no);
  655. X_DRV = 0;
  656. tXAxisStepper.bAuto_Mov = 0;
  657. break;
  658. case Y_AXIS:
  659. hw_pwm_stop(axis_y->axis_no);
  660. Y_DRV = 0;
  661. tYAxisStepper.bAuto_Mov = 0;
  662. break;
  663. }
  664. StepInfo[cAxisNo]->bAuto_Mov = 0;
  665. StepInfo[cAxisNo]->cRstStep = 0;
  666. StepInfo[cAxisNo]->State = 0;
  667. StepInfo[cAxisNo]->cCurSpeed = 0;
  668. }
  669. void MV_Dec_Stop_CPU(unsigned short cAxisNo)
  670. {
  671. StepInfo[cAxisNo]->bAuto_Mov = 0;
  672. StepInfo[cAxisNo]->State = 2;
  673. }
  674. unsigned long MV_Cal_Dec_pulse(unsigned short high_speed,unsigned short low_speed,unsigned short dec_time)
  675. {
  676. if(high_speed > low_speed)
  677. return ((high_speed - low_speed)*dec_time);
  678. else
  679. return 0;
  680. }
  681. void MV_Continue_Move_CPU(unsigned short cAxisNo, unsigned short dir)
  682. {
  683. StepInfo[cAxisNo]->bAuto_Mov = 0;
  684. switch (cAxisNo)
  685. {
  686. case X_AXIS:
  687. if(SET_PULSE_TYPE != X_AXIS_PULSE_Y_ON)hw_pwm_set_dir(axis_x->axis_no, dir);
  688. break;
  689. case Y_AXIS:
  690. hw_pwm_set_dir(axis_y->axis_no, dir);
  691. break;
  692. }
  693. StepInfo[cAxisNo]->State = 1;
  694. StepInfo[cAxisNo]->cAccDecVal = 0;
  695. StartPWM(cAxisNo);
  696. }
  697. void MV_Continue_Move_CPU_With_Stop(unsigned short cAxisNo, unsigned short dir)
  698. {
  699. StepInfo[cAxisNo]->bAuto_Mov = 0;
  700. switch (cAxisNo)
  701. {
  702. case X_AXIS:
  703. hw_pwm_set_dir(axis_x->axis_no, dir);
  704. break;
  705. case Y_AXIS:
  706. hw_pwm_set_dir(axis_y->axis_no, dir);
  707. break;
  708. }
  709. StepInfo[cAxisNo]->State = 3;
  710. StepInfo[cAxisNo]->cAccDecVal = 0;
  711. StartPWM(cAxisNo);
  712. }
  713. void MV_Pmove2(unsigned short cAxisNo, unsigned long dwPosi,long back_lowpos)
  714. {
  715. StepInfo[cAxisNo]->cDestPosi = dwPosi - StepInfo[cAxisNo]->cRealPosi;
  716. StepInfo[cAxisNo]->State = 0;
  717. StepInfo[cAxisNo]->cAccDecVal = 0;
  718. LCalRunPulse2(StepInfo[cAxisNo]);
  719. StepInfo[cAxisNo]->cCalDecPulse += back_lowpos;
  720. if (StepInfo[cAxisNo]->cPmovPulse)
  721. {
  722. StepInfo[cAxisNo]->bAuto_Mov = 2;
  723. StartPWM(cAxisNo);
  724. }
  725. }
  726. /**
  727. * 连续走
  728. *
  729. * @author xt (2019/7/23)
  730. *
  731. * @param cAxisNo
  732. * @param dir
  733. * @param startv
  734. * @param cSpeed
  735. */
  736. void MoveAction_Const(unsigned short cAxisNo, unsigned short dir, unsigned short cSpeed)
  737. {
  738. if (cAxisNo == X_AXIS)
  739. {
  740. MV_Set_Startv_CPU(cAxisNo, 20);
  741. MV_AccDec_Set_CPU(cAxisNo, 10, 30);
  742. MV_Set_Speed_CPU(X_AXIS, cSpeed);
  743. MV_Continue_Move_CPU(cAxisNo,dir);
  744. }
  745. else if (cAxisNo == Y_AXIS)
  746. {
  747. MV_Set_Startv_CPU(Y_AXIS, 1);
  748. MV_AccDec_Set_CPU(Y_AXIS, 10, 10);
  749. MV_Set_Speed_CPU(Y_AXIS, cSpeed);
  750. MV_Continue_Move_CPU(cAxisNo,dir);
  751. }
  752. }
  753. void MoveAction_Const_AccDec(unsigned short cAxisNo, unsigned short dir, unsigned short cSpeed,unsigned short start_speed,unsigned short accpulse,unsigned short dec_pulse)
  754. {
  755. if (cAxisNo == X_AXIS)
  756. {
  757. MV_Set_Startv_CPU(cAxisNo, start_speed);
  758. MV_AccDec_Set_CPU(cAxisNo, accpulse, dec_pulse);
  759. MV_Set_Speed_CPU(X_AXIS, cSpeed);
  760. MV_Continue_Move_CPU(cAxisNo,dir);
  761. }
  762. else if (cAxisNo == Y_AXIS)
  763. {
  764. MV_Set_Startv_CPU(Y_AXIS, start_speed);
  765. MV_AccDec_Set_CPU(Y_AXIS, accpulse, dec_pulse);
  766. MV_Set_Speed_CPU(Y_AXIS, cSpeed);
  767. MV_Continue_Move_CPU(cAxisNo,dir);
  768. }
  769. }
  770. void MoveAction_Const_Back(unsigned short cAxisNo, unsigned short dir, unsigned short cSpeed,unsigned short low_speed,unsigned long pulse)
  771. {
  772. if (cAxisNo == X_AXIS)
  773. {
  774. MV_Set_Startv_CPU(cAxisNo, low_speed);
  775. MV_AccDec_Set_CPU(cAxisNo, 10, 30);
  776. MV_Set_Speed_CPU(X_AXIS, cSpeed);
  777. StepInfo[cAxisNo]->bAuto_Mov = 0;
  778. switch (cAxisNo)
  779. {
  780. case X_AXIS:
  781. hw_pwm_set_dir(axis_x->axis_no, dir);
  782. break;
  783. }
  784. StepInfo[cAxisNo]->State = 4;
  785. StepInfo[cAxisNo]->cAccDecVal = 0;
  786. tXAxisStepper.cPmovPulse = pulse;
  787. StartPWM(cAxisNo);
  788. }
  789. }
  790. void MoveAction_Const_Back_AccDec(unsigned short cAxisNo, unsigned short dir, unsigned short cSpeed,unsigned short low_speed,unsigned long pulse,unsigned short start_speed,unsigned short cAccPulse,unsigned short cDecPulse)
  791. {
  792. MV_Set_Startv_CPU(cAxisNo, start_speed);
  793. MV_AccDec_Set_CPU(cAxisNo, cAccPulse, cDecPulse);
  794. MV_Set_Speed_CPU(X_AXIS, cSpeed);
  795. StepInfo[cAxisNo]->bAuto_Mov = 0;
  796. hw_pwm_set_dir(axis_x->axis_no, dir);
  797. StepInfo[cAxisNo]->State = 4;
  798. StepInfo[cAxisNo]->cAccDecVal = 0;
  799. tXAxisStepper.cPmovPulse = pulse;
  800. StartPWM(cAxisNo);
  801. }
  802. void MoveAction_Const_Stop(unsigned short cAxisNo, unsigned short dir, unsigned short cSpeed)
  803. {
  804. if (cAxisNo == X_AXIS)
  805. {
  806. MV_Set_Startv_CPU(cAxisNo, 20);
  807. MV_AccDec_Set_CPU(cAxisNo, 10, 30);
  808. MV_Set_Speed_CPU(X_AXIS, cSpeed);
  809. MV_Continue_Move_CPU_With_Stop(cAxisNo,dir);
  810. }
  811. }
  812. void MoveAction_Const_Stop_AccDec(unsigned short cAxisNo, unsigned short dir, unsigned short cSpeed,unsigned short cStartSpeed,unsigned short cAccPulse,unsigned short cDecPulse)
  813. {
  814. if (cAxisNo == X_AXIS)
  815. {
  816. MV_Set_Startv_CPU(cAxisNo, cStartSpeed);
  817. MV_AccDec_Set_CPU(cAxisNo, cAccPulse, cDecPulse);
  818. MV_Set_Speed_CPU(X_AXIS, cSpeed);
  819. MV_Continue_Move_CPU_With_Stop(cAxisNo,dir);
  820. }
  821. }
  822. // 走相对位置脉冲
  823. void MoveAction_Pulse(unsigned short cAxisNo, long dwPosi, unsigned short cSpeed)
  824. {
  825. if (cAxisNo == X_AXIS)
  826. {
  827. MV_Set_Startv_CPU(X_AXIS, 2);
  828. MV_Set_Acc_CPU(X_AXIS, 10);
  829. MV_Set_Dec_CPU(X_AXIS, 5);
  830. MV_Set_Speed_CPU(X_AXIS, cSpeed);
  831. MV_Pmove_CPU(X_AXIS, dwPosi + MV_Get_Command_Pos_CPU(X_AXIS));
  832. }
  833. else if (cAxisNo == Y_AXIS)
  834. {
  835. unsigned short acc = 10;
  836. MV_Set_Startv_CPU(Y_AXIS, 3);
  837. MV_Set_Acc_CPU(Y_AXIS, acc);
  838. MV_Set_Dec_CPU(Y_AXIS, acc);
  839. MV_Set_Speed_CPU(Y_AXIS, cSpeed);
  840. MV_Pmove_CPU(Y_AXIS, dwPosi + MV_Get_Command_Pos_CPU(X_AXIS));
  841. }
  842. }
  843. // 走相对位置脉冲
  844. void MoveAction_Pulse_AccDec(unsigned short cAxisNo, long dwPosi, unsigned short cSpeed,unsigned short cStartSpeed,unsigned short cAccPulse,unsigned short cDecPulse)
  845. {
  846. if (cAxisNo == X_AXIS)
  847. {
  848. MV_Set_Startv_CPU(X_AXIS, cStartSpeed);
  849. MV_Set_Acc_CPU(X_AXIS, cAccPulse);
  850. MV_Set_Dec_CPU(X_AXIS, cDecPulse);
  851. MV_Set_Speed_CPU(X_AXIS, cSpeed);
  852. MV_Pmove_CPU(X_AXIS, dwPosi + MV_Get_Command_Pos_CPU(X_AXIS));
  853. }
  854. }
  855. // 两段速走相对位置脉冲最后一段慢速长度
  856. void MoveAction_Pulse2(unsigned short cAxisNo, long dwPosi,long lowpos,long back_lowpos, unsigned short cSpeed,unsigned short low_speed)
  857. {
  858. if (cAxisNo == X_AXIS)
  859. {
  860. unsigned short acc = 10;
  861. MV_Set_Startv_CPU(X_AXIS, 3);
  862. MV_Set_Acc_CPU(X_AXIS, acc);
  863. MV_Set_Dec_CPU(X_AXIS, acc);
  864. MV_Set_Speed_CPU(X_AXIS, cSpeed);
  865. MV_Set_FirstSpeed(X_AXIS, low_speed);
  866. MV_Set_FirstLowPulse(X_AXIS,lowpos);
  867. MV_Pmove2(X_AXIS, dwPosi + MV_Get_Command_Pos_CPU(X_AXIS),back_lowpos);
  868. }
  869. else if (cAxisNo == Y_AXIS)
  870. {
  871. unsigned short acc = 10;
  872. MV_Set_Startv_CPU(Y_AXIS, 3);
  873. MV_Set_Acc_CPU(Y_AXIS, acc);
  874. MV_Set_Dec_CPU(Y_AXIS, acc);
  875. MV_Set_Speed_CPU(Y_AXIS, cSpeed);
  876. MV_Set_FirstSpeed(Y_AXIS, low_speed);
  877. MV_Set_FirstLowPulse(Y_AXIS,lowpos);
  878. MV_Pmove2(Y_AXIS, dwPosi + MV_Get_Command_Pos_CPU(Y_AXIS),back_lowpos);
  879. }
  880. }
  881. // 两段速走相对位置脉冲最后一段慢速长度
  882. void MoveAction_Pulse2_AccDec(unsigned short cAxisNo, long dwPosi,long lowpos,long back_lowpos, unsigned short cSpeed,unsigned short low_speed,unsigned short start_speed, unsigned short acc_pulse,unsigned short dec_pulse)
  883. {
  884. if (cAxisNo == X_AXIS)
  885. {
  886. MV_Set_Startv_CPU(X_AXIS, start_speed);
  887. MV_Set_Acc_CPU(X_AXIS, acc_pulse);
  888. MV_Set_Dec_CPU(X_AXIS, dec_pulse);
  889. MV_Set_Speed_CPU(X_AXIS, cSpeed);
  890. MV_Set_FirstSpeed(X_AXIS, low_speed);
  891. MV_Set_FirstLowPulse(X_AXIS,lowpos);
  892. MV_Pmove2(X_AXIS, dwPosi + MV_Get_Command_Pos_CPU(X_AXIS),back_lowpos);
  893. }
  894. else if (cAxisNo == Y_AXIS)
  895. {
  896. MV_Set_Startv_CPU(Y_AXIS, start_speed);
  897. MV_Set_Acc_CPU(Y_AXIS, acc_pulse);
  898. MV_Set_Dec_CPU(Y_AXIS, dec_pulse);
  899. MV_Set_Speed_CPU(Y_AXIS, cSpeed);
  900. MV_Set_FirstSpeed(Y_AXIS, low_speed);
  901. MV_Set_FirstLowPulse(Y_AXIS,lowpos);
  902. MV_Pmove2(Y_AXIS, dwPosi + MV_Get_Command_Pos_CPU(Y_AXIS),back_lowpos);
  903. }
  904. }
  905. /**
  906. * 必须与当前运动方向相同
  907. *
  908. * @author zhang (2019/12/6)
  909. *
  910. * @param cAxisNo
  911. * @param dwPosi
  912. */
  913. void MV_Move_To_Position(unsigned short cAxisNo, long dwPosi)
  914. {
  915. if (dwPosi < StepInfo[cAxisNo]->cRealPosi)
  916. {
  917. StepInfo[cAxisNo]->cDestPosi = StepInfo[cAxisNo]->cRealPosi - dwPosi;
  918. }
  919. else
  920. {
  921. StepInfo[cAxisNo]->cDestPosi = dwPosi - StepInfo[cAxisNo]->cRealPosi;
  922. }
  923. {
  924. //StepInfo[cAxisNo]->cDestPosi = dwPosi - StepInfo[cAxisNo]->cRealPosi;
  925. StepInfo[cAxisNo]->cPmovPulse = StepInfo[cAxisNo]->cDestPosi;
  926. StepInfo[cAxisNo]->State = 0;
  927. StepInfo[cAxisNo]->cAccDecVal = 0;
  928. StepInfo[cAxisNo]->cCalSpeed = StepInfo[cAxisNo]->cSetSpeed;
  929. StepInfo[cAxisNo]->cCalDecPulse = (StepInfo[cAxisNo]->cSetSpeed - StepInfo[cAxisNo]->cSetStartSpeed);
  930. StepInfo[cAxisNo]->cCalDecPulse *= StepInfo[cAxisNo]->cSetDecVal;
  931. StepInfo[cAxisNo]->cCalDecPulse += 50;
  932. StepInfo[cAxisNo]->bAuto_Mov = 1;
  933. }
  934. }
  935. void ResetServoDrv_CPU(unsigned short axis)
  936. {
  937. if (axis == X_AXIS)
  938. {
  939. hw_pwm_set_enable(axis_x->axis_no,1);
  940. CalFreqTab_X();
  941. tXAxisStepper.cAxisNo = X_AXIS;
  942. tXAxisStepper.cDestPosi = 0;
  943. tXAxisStepper.cSetStartSpeed = 0;
  944. tXAxisStepper.cSetSpeed = 20;
  945. tXAxisStepper.cSetAccVal = 50;
  946. tXAxisStepper.cSetDecVal = 50;
  947. tXAxisStepper.State = 0;
  948. tXAxisStepper.cAccDecVal = 0;
  949. tXAxisStepper.PulseOffset = 0;
  950. }
  951. else if (axis == Y_AXIS)
  952. {
  953. hw_pwm_set_enable(axis_y->axis_no,1);
  954. CalFreqTab_Y();
  955. tYAxisStepper.cAxisNo = Y_AXIS;
  956. tYAxisStepper.cDestPosi = 0;
  957. tYAxisStepper.cSetStartSpeed = 0;
  958. tYAxisStepper.cSetSpeed = 20;
  959. tYAxisStepper.cSetAccVal = 50;
  960. tYAxisStepper.cSetDecVal = 50;
  961. tYAxisStepper.State = 0;
  962. tYAxisStepper.cAccDecVal = 0;
  963. tYAxisStepper.PulseOffset = 0;
  964. }
  965. }
  966. void SetRemainLength(unsigned short cAxisNo, long dwPosi,unsigned short set_speed)
  967. {
  968. if(dwPosi == 0)
  969. {
  970. AxisEgmStop(X_AXIS);
  971. }
  972. else
  973. {
  974. StepInfo[cAxisNo]->bAuto_Mov = 0;
  975. StepInfo[cAxisNo]->State = 5;
  976. StepInfo[cAxisNo]->cSetSpeed = set_speed;
  977. StepInfo[cAxisNo]->cPmovPulse = PosToPulse(cAxisNo,dwPosi);
  978. }
  979. }