Motor.h 8.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164
  1. #ifndef MOTOR_H
  2. #define MOTOR_H
  3. #include <p33FJ64MC204.h>
  4. #include <stdio.h>
  5. #include "math.h"
  6. #include "string.h"
  7. #define MOTOR1_FORWARD (!(Motor1.Reset_Direction&0X0001))
  8. #define MOTOR1_REVERSAL (Motor1.Reset_Direction&0X0001)
  9. #define MOTOR2_FORWARD (!(Motor2.Reset_Direction&0X0001))
  10. #define MOTOR2_REVERSAL (Motor2.Reset_Direction&0X0001)
  11. #define MOTOR3_FORWARD (!(Motor3.Reset_Direction&0X0001))
  12. #define MOTOR3_REVERSAL (Motor3.Reset_Direction&0X0001)
  13. #define MOTOR4_FORWARD (!(Motor4.Reset_Direction&0X0001))
  14. #define MOTOR4_REVERSAL (Motor4.Reset_Direction&0X0001)
  15. #define UNKNOWN 0x03
  16. #define SUCCESS 0x00
  17. #define MOTOR1_HOME !PORTAbits.RA10//1电机复位光电
  18. #define MOTOR2_HOME !PORTCbits.RC2//2电机复位光电
  19. #define MOTOR3_HOME !PORTCbits.RC4//3电机复位光电
  20. #define MOTOR4_HOME !PORTAbits.RA7//磁铁电机复位光电
  21. #define MOTOR1_PWM LATCbits.LATC9 //1电机
  22. #define MOTOR1_DIR LATBbits.LATB10 //1电机
  23. #define MOTOR2_PWM LATBbits.LATB4 //2电机
  24. #define MOTOR2_DIR LATAbits.LATA4 //2电机
  25. #define MOTOR3_PWM LATBbits.LATB5 //3电机
  26. #define MOTOR3_DIR LATCbits.LATC5 //3电机
  27. #define MOTOR4_PWM LATBbits.LATB13 //4电机
  28. #define MOTOR4_DIR LATBbits.LATB15 //4电机
  29. /*电机复位指令定义*/
  30. #define ACCLTH (unsigned int)2000 //加速度脉冲数限值
  31. //#define ACCLENGTH (unsigned int)1000 //实际加速度脉冲数
  32. #define REAGENT_MOTOR_ACC (unsigned int)500 //加速脉冲数
  33. #define REAGENT_MOTOR_FREQMAX (unsigned int)50000 //电机运行的最大速度
  34. #define REAGENT_MOTOR_FREQMIN (unsigned int)3000 //电机运行的起跳速度
  35. #define REAGENT_MOTOR_XFLEXIBLE (float)5 //x轴的压缩系数
  36. #define MOTOR_FREQLIMIT_H (unsigned int)300000 //电机运行的最大速度
  37. #define MOTOR_FREQLIMIT_L (unsigned int)10 //电机运行的起跳速度
  38. #define REAGENT_MOTOR_ACC2 (unsigned int)1000 //加速脉冲数
  39. #define REAGENT_MOTOR_FREQMAX2 (unsigned int)60000 //(unsigned int)2000 //电机运行的最大速度
  40. #define REAGENT_MOTOR_FREQMIN2 (unsigned int)1000//电机运行的起跳速度
  41. #define REAGENT_MOTOR_XFLEXIBLE2 (float)3 //x轴的压缩系数
  42. #define REAGENT_MOTOR_ACC3 (unsigned int)1000 //加速脉冲数
  43. #define REAGENT_MOTOR_FREQMAX3 (unsigned int)65000 //(unsigned int)2000 //电机运行的最大速度
  44. #define REAGENT_MOTOR_FREQMIN3 (unsigned int)4000 //电机运行的起跳速度
  45. #define REAGENT_MOTOR_XFLEXIBLE3 (float)2 //x轴的压缩系数
  46. #define REAGENT_MOTOR_ACC4 (unsigned int)800 //加速脉冲数
  47. #define REAGENT_MOTOR_FREQMAX4 (unsigned int)50000 //(unsigned int)2000 //电机运行的最大速度
  48. #define REAGENT_MOTOR_FREQMIN4 (unsigned int)4000 //电机运行的起跳速度
  49. #define REAGENT_MOTOR_XFLEXIBLE4 (float)2 //x轴的压缩系数
  50. /*电机运行参数定义*/
  51. extern unsigned char g_ucMotorXFinishFlag,g_ucMotorYFinishFlag,g_ucMotorZFinishFlag,g_ucMotorZ1FinishFlag,g_ucMotorZ2FinishFlag,g_ucMotor4FinishFlag; //电机运行完成标志位
  52. extern unsigned int g_uiAccIndex ;
  53. extern unsigned long int g_uliRunningPulse ;
  54. extern unsigned long int g_uliPulseCount ;
  55. extern unsigned int g_uiReagentMotorPeriod[REAGENT_MOTOR_ACC];
  56. extern unsigned int g_uiReagentMotorPeriod2[REAGENT_MOTOR_ACC2];
  57. extern unsigned int g_uiReagentMotorPeriod3[REAGENT_MOTOR_ACC3];
  58. extern unsigned int g_uiReagentMotorPeriod4[REAGENT_MOTOR_ACC4];
  59. extern unsigned long PulseNum;
  60. extern unsigned char Motor1_HOME_Flag,Motor2_HOME_Flag,Motor3_HOME_Flag,Motor4_HOME_Flag,Motor5_HOME_Flag;
  61. extern unsigned int Moving_Speed;
  62. extern unsigned int Reset_Speed;
  63. struct MotorParam
  64. {
  65. unsigned char ucXDirection;
  66. unsigned char uiXSpeed_switch;
  67. unsigned int uiXSpeed;
  68. unsigned int uiXprd;
  69. unsigned long int ulXiPosition;
  70. unsigned long int ulXiAccPulse;
  71. unsigned long int ulXiConstPulse;
  72. unsigned char ucZDirection;
  73. unsigned char uiZSpeed_switch;
  74. unsigned int uiZSpeed;
  75. unsigned int uiZprd;
  76. unsigned long int ulZiPosition;
  77. unsigned long int ulZiAccPulse;
  78. unsigned long int ulZiConstPulse;
  79. unsigned char ucZ1Direction;
  80. unsigned char uiZ1Speed_switch;
  81. unsigned int uiZ1Speed;
  82. unsigned int uiZ1prd;
  83. unsigned long int ulZ1iPosition;
  84. unsigned long int ulZ1iAccPulse;
  85. unsigned long int ulZ1iConstPulse;
  86. unsigned char uc4Direction;
  87. unsigned char ui4Speed_switch;
  88. unsigned int ui4Speed;
  89. unsigned int ui4prd;
  90. unsigned long int ul4iPosition;
  91. unsigned long int ul4iAccPulse;
  92. unsigned long int ul4iConstPulse;
  93. };
  94. extern struct MotorParam g_tReagentMotorParam;
  95. struct MotorParamEEPROM
  96. {
  97. unsigned int Moving_Speed;
  98. unsigned int Reset_Speed;
  99. unsigned int Reset_Direction;
  100. unsigned int Overshoot_Pulse;
  101. unsigned int Back_Pulse;
  102. unsigned long int Limit_Pulse;
  103. unsigned long int Limit_speed;
  104. };
  105. extern struct MotorParamEEPROM Motor1;
  106. extern struct MotorParamEEPROM Motor2;
  107. extern struct MotorParamEEPROM Motor3;
  108. extern struct MotorParamEEPROM Motor4;
  109. //extern struct MotorParamEEPROM Motor5;
  110. extern void CalculateSModelLine( unsigned int * period, unsigned int len, unsigned int fre_max, unsigned int fre_min, float flexible);
  111. extern void InitMotor1PWM(void);
  112. extern void InitMotor2PWM(void);
  113. extern void InitMotor3PWM(void);
  114. extern void InitMotor4PWM(void);
  115. //extern void InitMotor5PWM(void);
  116. extern void SetMotor1(unsigned long int Pulses,unsigned int spd,unsigned long int *AccPLS,unsigned long int *constVPLS);
  117. extern void SetMotor2(unsigned long int Pulses,unsigned int spd,unsigned long int *AccPLS,unsigned long int *constVPLS);
  118. extern void SetMotor3(unsigned long int Pulses,unsigned int spd,unsigned long int *AccPLS,unsigned long int *constVPLS);
  119. extern void SetMotor4(unsigned long int Pulses,unsigned int spd,unsigned long int *AccPLS,unsigned long int *constVPLS);
  120. //extern void SetMotor5(unsigned long int Pulses,unsigned int spd,unsigned long int *AccPLS,unsigned long int *constVPLS);
  121. extern void Motor1Home(unsigned int pulseoffset,unsigned int MOVEspd,unsigned int LEAVspd );
  122. extern void Motor2Home(unsigned int pulseoffset,unsigned int MOVEspd,unsigned int LEAVspd );
  123. extern void Motor3Home(unsigned int pulseoffset,unsigned int MOVEspd,unsigned int LEAVspd );
  124. extern void Motor4Home(unsigned int pulseoffset,unsigned int MOVEspd,unsigned int LEAVspd );
  125. //extern void Motor5Home(unsigned int pulseoffset,unsigned int MOVEspd,unsigned int LEAVspd );
  126. extern void Motor1Move(unsigned long int pulse,unsigned char dir,unsigned int spd);
  127. extern void Motor2Move(unsigned long int pulse,unsigned char dir,unsigned int spd);
  128. extern void Motor3Move(unsigned long int pulse,unsigned char dir,unsigned int spd);
  129. extern void Motor4Move(unsigned long int pulse,unsigned char dir,unsigned int spd);
  130. //extern void Motor5Move(unsigned long int pulse,unsigned char dir,unsigned int spd);
  131. extern void Motor1MoveTo(unsigned long int pulse,unsigned int spd);
  132. extern void Motor2MoveTo(unsigned long int pulse,unsigned int spd);
  133. extern void Motor3MoveTo(unsigned long int pulse,unsigned int spd);
  134. extern void Motor4MoveTo(unsigned long int pulse,unsigned int spd);
  135. //extern void Motor5MoveTo(unsigned long int pulse,unsigned int spd);
  136. extern void Motor2MoveTo_ok(unsigned long int pulse,unsigned int spd);
  137. extern void Move_to_by_volume(unsigned int volume,unsigned int spd);
  138. #endif /* MOTOR_H */