新手上路
- 积分
- 43
- 金钱
- 43
- 注册时间
- 2015-11-26
- 在线时间
- 0 小时
|
5金钱
if(Receive_Mark==0xff)
{
if(STEP_NUM==0x00) //第一步动作
{
uint8_t S_D= 0x00;
for(S_D=0;S_D<10;S_D++) //返回上位机的控制命令
{
USART_SendData(USART1 ,Control_Step_Now[S_D]);
while(USART_GetFlagStatus(USART1, USART_FLAG_TC)==RESET);
}
M1_Position=(Control_Step_Now[0]<<8)+(Control_Step_Now[1]); //电机1指令位置
M2_Position=(Control_Step_Now[2]<<8)+(Control_Step_Now[3]); //电机2指令位置
M3_Position=(Control_Step_Now[4]<<8)+(Control_Step_Now[5]); //电机3指令位置
M4_Position=(Control_Step_Now[6]<<8)+(Control_Step_Now[7]); //电机4指令位置
M5_Position=(Control_Step_Now[8]<<8)+(Control_Step_Now[9]); //电机5指令位置
}
if(STEP_NUM==0x01) //第二步动作
{
uint8_t S_D= 0x0a;
for(S_D=10;S_D<20;S_D++) //返回上位机的控制命令
{
USART_SendData(USART1 ,Control_Step_Now[S_D]);
while(USART_GetFlagStatus(USART1, USART_FLAG_TC)==RESET);
}
M1_Position=(Control_Step_Now[10]<<8)+(Control_Step_Now[11]); //电机1指令位置
M2_Position=(Control_Step_Now[12]<<8)+(Control_Step_Now[13]); //电机2指令位置
M3_Position=(Control_Step_Now[14]<<8)+(Control_Step_Now[15]); //电机3指令位置
M4_Position=(Control_Step_Now[16]<<8)+(Control_Step_Now[17]); //电机4指令位置
M5_Position=(Control_Step_Now[18]<<8)+(Control_Step_Now[19]); //电机5指令位置
}
if(STEP_NUM==0x02) //第三步动作
{
uint8_t S_D= 0x14;
for(S_D=20;S_D<30;S_D++) //返回上位机的控制命令
{
USART_SendData(USART1 ,Control_Step_Now[S_D]);
while(USART_GetFlagStatus(USART1, USART_FLAG_TC)==RESET);
}
M1_Position=(Control_Step_Now[20]<<8)+(Control_Step_Now[21]); //电机1指令位置
M2_Position=(Control_Step_Now[22]<<8)+(Control_Step_Now[23]); //电机2指令位置
M3_Position=(Control_Step_Now[24]<<8)+(Control_Step_Now[25]); //电机3指令位置
M4_Position=(Control_Step_Now[26]<<8)+(Control_Step_Now[27]); //电机4指令位置
M5_Position=(Control_Step_Now[28]<<8)+(Control_Step_Now[29]); //电机5指令位置
}
if(STEP_NUM==0x03) //第四步动作
{
uint8_t S_D= 0x1e;
for(S_D=30;S_D<40;S_D++) //返回上位机的控制命令
{
USART_SendData(USART1 ,Control_Step_Now[S_D]);
while(USART_GetFlagStatus(USART1, USART_FLAG_TC)==RESET);
}
M1_Position=(Control_Step_Now[30]<<8)+(Control_Step_Now[31]); //电机1指令位置
M2_Position=(Control_Step_Now[32]<<8)+(Control_Step_Now[33]); //电机2指令位置
M3_Position=(Control_Step_Now[34]<<8)+(Control_Step_Now[35]); //电机3指令位置
M4_Position=(Control_Step_Now[36]<<8)+(Control_Step_Now[37]); //电机4指令位置
M5_Position=(Control_Step_Now[38]<<8)+(Control_Step_Now[39]); //电机5指令位置
}
if(STEP_NUM==0x04) //第五步动作
{
uint8_t S_D= 0x28;
for(S_D=40;S_D<50;S_D++) //返回上位机的控制命令
{
USART_SendData(USART1 ,Control_Step_Now[S_D]);
while(USART_GetFlagStatus(USART1, USART_FLAG_TC)==RESET);
}
M1_Position=(Control_Step_Now[40]<<8)+(Control_Step_Now[41]); //电机1指令位置
M2_Position=(Control_Step_Now[42]<<8)+(Control_Step_Now[43]); //电机2指令位置
M3_Position=(Control_Step_Now[44]<<8)+(Control_Step_Now[45]); //电机3指令位置
M4_Position=(Control_Step_Now[46]<<8)+(Control_Step_Now[47]); //电机4指令位置
M5_Position=(Control_Step_Now[48]<<8)+(Control_Step_Now[49]); //电机5指令位置
}
if(STEP_NUM==0x05) //第六步动作
{
uint8_t S_D= 0x32;
for(S_D=50;S_D<60;S_D++) //返回上位机的控制命令
{
USART_SendData(USART1 ,Control_Step_Now[S_D]);
while(USART_GetFlagStatus(USART1, USART_FLAG_TC)==RESET);
}
M1_Position=(Control_Step_Now[50]<<8)+(Control_Step_Now[51]); //电机1指令位置
M2_Position=(Control_Step_Now[52]<<8)+(Control_Step_Now[53]); //电机2指令位置
M3_Position=(Control_Step_Now[54]<<8)+(Control_Step_Now[55]); //电机3指令位置
M4_Position=(Control_Step_Now[56]<<8)+(Control_Step_Now[57]); //电机4指令位置
M5_Position=(Control_Step_Now[58]<<8)+(Control_Step_Now[59]); //电机5指令位置
}
if(STEP_NUM==0x06) //第七步动作
{
uint8_t S_D= 0x3c;
for(S_D=60;S_D<70;S_D++) //返回上位机的控制命令
{
USART_SendData(USART1 ,Control_Step_Now[S_D]);
while(USART_GetFlagStatus(USART1, USART_FLAG_TC)==RESET);
}
M1_Position=(Control_Step_Now[60]<<8)+(Control_Step_Now[61]); //电机1指令位置
M2_Position=(Control_Step_Now[62]<<8)+(Control_Step_Now[63]); //电机2指令位置
M3_Position=(Control_Step_Now[64]<<8)+(Control_Step_Now[65]); //电机3指令位置
M4_Position=(Control_Step_Now[66]<<8)+(Control_Step_Now[67]); //电机4指令位置
M5_Position=(Control_Step_Now[68]<<8)+(Control_Step_Now[69]); //电机5指令位置
}
if(STEP_NUM==0x07) //第八步动作
{
uint8_t S_D= 0x46;
for(S_D=70;S_D<80;S_D++) //返回上位机的控制命令
{
USART_SendData(USART1 ,Control_Step_Now[S_D]);
while(USART_GetFlagStatus(USART1, USART_FLAG_TC)==RESET);
}
M1_Position=(Control_Step_Now[70]<<8)+(Control_Step_Now[71]); //电机1指令位置
M2_Position=(Control_Step_Now[72]<<8)+(Control_Step_Now[73]); //电机2指令位置
M3_Position=(Control_Step_Now[74]<<8)+(Control_Step_Now[75]); //电机3指令位置
M4_Position=(Control_Step_Now[76]<<8)+(Control_Step_Now[77]); //电机4指令位置
M5_Position=(Control_Step_Now[78]<<8)+(Control_Step_Now[79]); //电机5指令位置
}
if(STEP_NUM==0x08) //第九步动作
{
uint8_t S_D= 0x50;
for(S_D=80;S_D<90;S_D++) //返回上位机的控制命令
{
USART_SendData(USART1 ,Control_Step_Now[S_D]);
while(USART_GetFlagStatus(USART1, USART_FLAG_TC)==RESET);
}
M1_Position=(Control_Step_Now[80]<<8)+(Control_Step_Now[81]); //电机1指令位置
M2_Position=(Control_Step_Now[82]<<8)+(Control_Step_Now[83]); //电机2指令位置
M3_Position=(Control_Step_Now[84]<<8)+(Control_Step_Now[85]); //电机3指令位置
M4_Position=(Control_Step_Now[86]<<8)+(Control_Step_Now[87]); //电机4指令位置
M5_Position=(Control_Step_Now[88]<<8)+(Control_Step_Now[89]); //电机5指令位置
}
if(STEP_NUM==0x09) //第十步动作
{
uint8_t S_D= 0x5a;
for(S_D=90;S_D<100;S_D++) //返回上位机的控制命令
{
USART_SendData(USART1 ,Control_Step_Now[S_D]);
while(USART_GetFlagStatus(USART1, USART_FLAG_TC)==RESET);
}
M1_Position=(Control_Step_Now[90]<<8)+(Control_Step_Now[91]); //电机1指令位置
M2_Position=(Control_Step_Now[92]<<8)+(Control_Step_Now[93]); //电机2指令位置
M3_Position=(Control_Step_Now[94]<<8)+(Control_Step_Now[95]); //电机3指令位置
M4_Position=(Control_Step_Now[96]<<8)+(Control_Step_Now[97]); //电机4指令位置
M5_Position=(Control_Step_Now[98]<<8)+(Control_Step_Now[99]); //电机5指令位置
}
}
if((STEPMOTOR2_Mark == 0X00)&&(STEPMOTOR1_Mark == 0X00))
{
/*步进电机一控制程序*/
/*匀速运动*/
if(M1_Position_N<M1_Position)
{
BUSY_Mark1=0xf0;
  TO1_Valu=1000-1;
TIM_SetCompare1(TIM3,PTO1_Valu);
GPIO_SetBits(GPIOB , GPIO_Pin_2);
GPIO_SetBits(GPIOB , GPIO_Pin_3);
M1_Position_N++;
}
if(M1_Position_N>M1_Position)
{
BUSY_Mark1=0xf0;
  TO1_Valu=1000-1;
TIM_SetCompare1(TIM3,PTO1_Valu);
GPIO_ResetBits(GPIOB , GPIO_Pin_2);
GPIO_SetBits(GPIOB , GPIO_Pin_3);
M1_Position_N--;
}
if(M1_Position_N==M1_Position) //当前角度等于指令角度
{
BUSY_Mark1=0x00;
  TO1_Valu=0;
TIM_SetCompare1(TIM3,PTO1_Valu);
}
/*步进电机二控制程序*/
/*匀速运动*/ //当前角度小于指令角度
if(M2_Position_N<M2_Position)
{
BUSY_Mark2=0xf0;
  TO2_Valu=1000-1;
TIM_SetCompare2(TIM3,PTO2_Valu);
GPIO_SetBits(GPIOB , GPIO_Pin_4);
GPIO_SetBits(GPIOB , GPIO_Pin_5);
M2_Position_N++;
}
if(M2_Position_N>M2_Position) //当前角度大于指令角度
{
BUSY_Mark2=0xf0;
  TO2_Valu=1000-1;
TIM_SetCompare2(TIM3,PTO2_Valu);
GPIO_ResetBits(GPIOB , GPIO_Pin_4);
GPIO_ResetBits(GPIOB , GPIO_Pin_5);
M2_Position_N--;
}
if(M2_Position_N==M2_Position) //当前角度等于指令角度
{
BUSY_Mark2=0x00;
  TO2_Valu=0;
TIM_SetCompare2(TIM3,PTO2_Valu);
}
/*步进电机三控制程序*/
/*匀速运动*/ //当前角度小于指令角度
if(M3_Position_N<M3_Position)
{
BUSY_Mark3=0xf0;
PTO3_Valu=1000-1;
TIM_SetCompare3(TIM3,PTO3_Valu);
GPIO_SetBits(GPIOB , GPIO_Pin_10);
GPIO_ResetBits(GPIOB , GPIO_Pin_11);
M3_Position_N++;
}
if(M3_Position_N>M3_Position) //当前角度大于指令角度
{
BUSY_Mark3=0xf0;
PTO3_Valu=1000-1;
TIM_SetCompare3(TIM3,PTO3_Valu);
GPIO_ResetBits(GPIOB , GPIO_Pin_10);
GPIO_SetBits(GPIOB , GPIO_Pin_11);
M3_Position_N--;
}
if(M3_Position_N==M3_Position) //当前角度等于指令角度
{
BUSY_Mark3=0x00;
  TO3_Valu=0;
TIM_SetCompare3(TIM3,PTO3_Valu);
}
}
else
{
if((M4_Position+700)> WM3_Valu) //舵机1正转
{
BUSY_Mark4=0xf0;
  WM3_Valu=M4_Position+700;
TIM_SetCompare3(TIM4,PWM3_Valu);
}
if((M4_Position+700)< WM3_Valu) //舵机1反转
{
BUSY_Mark4=0xf0;
PWM3_Valu=M4_Position+700;
TIM_SetCompare3(TIM4,PWM3_Valu);
}
if((M4_Position+700)==PWM3_Valu) //舵机1停转
{
BUSY_Mark4=0x00;
STEPMOTOR1_Mark=0X00;
TIM_SetCompare3(TIM4,PWM3_Valu);
}
Delay(1000000);
if((M5_Position+700)>PWM4_Valu) //舵机2正转
{
BUSY_Mark5=0xf0;
PWM4_Valu=M5_Position+700;
TIM_SetCompare4(TIM4,PWM4_Valu);
}
if((M5_Position+700)<PWM4_Valu)
{ //舵机2反转
BUSY_Mark5=0xf0;
PWM4_Valu=M5_Position+700;
TIM_SetCompare4(TIM4,PWM4_Valu);
}
if((M5_Position+700)==PWM4_Valu) //舵机2停转
{
BUSY_Mark5=0x00;
STEPMOTOR2_Mark=0X00;
TIM_SetCompare4(TIM4,PWM4_Valu);
}
}
if((BUSY_Mark1==0x00)&&(BUSY_Mark2==0x00)&&(BUSY_Mark3==0x00)&&(BUSY_Mark4==0x00)&&(BUSY_Mark5==0x00)) //指令动作执行完毕,发送完成标志
{
STEP_NUM++;
USART_SendData(USART1 , STEP_NUM);
while(USART_GetFlagStatus(USART1, USART_FLAG_TC) == RESET);
if(STEP_NUM==0x10)
{
USART_SendData(USART1 , READY_Mark);
while(USART_GetFlagStatus(USART1, USART_FLAG_TC) == RESET);
Receive_Mark=0x00;
}
我的想法是让舵机先于步进电机完成动作,并且延时一段时间,但是实际测试结果是只有一开始全都不动,延时一段时间之后舵机电机开始运动,但是后续延时全都无效,因为我把延时的时间弄的很夸张,所以可以看到延时根本没起作用,求高手指点一下 先行谢过了
|
|