这是我写的一个stm32驱动步进电机程序,请大神看看

2019-08-17 02:54发布

电机是28BYJ-48,为何走90度,Motor_Z只运行135次左右,这样步距角0.67左右了
void MOTOR_GPIO_Config(void)
{  
   GPIO_InitTypeDef GPIO_InitStructure;
  RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOB , ENABLE);
  
   GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6 |GPIO_Pin_7 |GPIO_Pin_10 |GPIO_Pin_11 |GPIO_Pin_12 |GPIO_Pin_13 |GPIO_Pin_14 |GPIO_Pin_15;   
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;   
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_Init(GPIOB, &GPIO_InitStructure);

  GPIO_SetBits(GPIOB, GPIO_Pin_6 |GPIO_Pin_7 |GPIO_Pin_10 |GPIO_Pin_11 |GPIO_Pin_12 |GPIO_Pin_13 |GPIO_Pin_14 |GPIO_Pin_15);  
}

void Motor_Z(uint8_t a)
{
CLI();
if(a == 0)
{
  digitalHi(GPIOB,GPIO_Pin_6);
  digitalLo(GPIOB,GPIO_Pin_7);
  digitalLo(GPIOB,GPIO_Pin_10);
  digitalHi(GPIOB,GPIO_Pin_11);
  Delay(50000);
   
  digitalLo(GPIOB,GPIO_Pin_6);
  digitalLo(GPIOB,GPIO_Pin_7);
  digitalLo(GPIOB,GPIO_Pin_10);
  digitalHi(GPIOB,GPIO_Pin_11);
  Delay(50000);
   
  digitalLo(GPIOB,GPIO_Pin_6);
  digitalLo(GPIOB,GPIO_Pin_7);
  digitalHi(GPIOB,GPIO_Pin_10);
  digitalHi(GPIOB,GPIO_Pin_11);
  Delay(50000);
   
  digitalLo(GPIOB,GPIO_Pin_6);
  digitalLo(GPIOB,GPIO_Pin_7);
  digitalHi(GPIOB,GPIO_Pin_10);
  digitalLo(GPIOB,GPIO_Pin_11);
  Delay(50000);
   
  digitalLo(GPIOB,GPIO_Pin_6);
  digitalHi(GPIOB,GPIO_Pin_7);
  digitalHi(GPIOB,GPIO_Pin_10);
  digitalLo(GPIOB,GPIO_Pin_11);
  Delay(50000);
   
  digitalLo(GPIOB,GPIO_Pin_6);
  digitalHi(GPIOB,GPIO_Pin_7);
  digitalLo(GPIOB,GPIO_Pin_10);
  digitalLo(GPIOB,GPIO_Pin_11);
  Delay(50000);
   
  digitalHi(GPIOB,GPIO_Pin_6);
  digitalHi(GPIOB,GPIO_Pin_7);
  digitalLo(GPIOB,GPIO_Pin_10);
  digitalLo(GPIOB,GPIO_Pin_11);
  Delay(50000);
   
  digitalHi(GPIOB,GPIO_Pin_6);
  digitalLo(GPIOB,GPIO_Pin_7);
  digitalLo(GPIOB,GPIO_Pin_10);
  digitalLo(GPIOB,GPIO_Pin_11);
  Delay(50000);
}   
else if(a == 1)
{
  digitalHi(GPIOB,GPIO_Pin_12);
  digitalLo(GPIOB,GPIO_Pin_13);
  digitalLo(GPIOB,GPIO_Pin_14);
  digitalLo(GPIOB,GPIO_Pin_15);
  Delay(50000);
   
  digitalHi(GPIOB,GPIO_Pin_12);
  digitalHi(GPIOB,GPIO_Pin_13);
  digitalLo(GPIOB,GPIO_Pin_14);
  digitalLo(GPIOB,GPIO_Pin_15);
  Delay(50000);
   
  digitalLo(GPIOB,GPIO_Pin_12);
  digitalHi(GPIOB,GPIO_Pin_13);
  digitalLo(GPIOB,GPIO_Pin_14);
  digitalLo(GPIOB,GPIO_Pin_15);
  Delay(50000);
   
  digitalLo(GPIOB,GPIO_Pin_12);
  digitalHi(GPIOB,GPIO_Pin_13);
  digitalHi(GPIOB,GPIO_Pin_14);
  digitalLo(GPIOB,GPIO_Pin_15);
  Delay(50000);
   
  digitalLo(GPIOB,GPIO_Pin_12);
  digitalLo(GPIOB,GPIO_Pin_13);
  digitalHi(GPIOB,GPIO_Pin_14);
  digitalLo(GPIOB,GPIO_Pin_15);
  Delay(50000);
   
  digitalLo(GPIOB,GPIO_Pin_12);
  digitalLo(GPIOB,GPIO_Pin_13);
  digitalHi(GPIOB,GPIO_Pin_14);
  digitalHi(GPIOB,GPIO_Pin_15);
  Delay(50000);
   
  digitalLo(GPIOB,GPIO_Pin_12);
  digitalLo(GPIOB,GPIO_Pin_13);
  digitalLo(GPIOB,GPIO_Pin_14);
  digitalHi(GPIOB,GPIO_Pin_15);
  Delay(50000);
   
  digitalHi(GPIOB,GPIO_Pin_12);
  digitalLo(GPIOB,GPIO_Pin_13);
  digitalLo(GPIOB,GPIO_Pin_14);
  digitalHi(GPIOB,GPIO_Pin_15);
  Delay(50000);
}
else if(a == 2)
{
  digitalHi(GPIOB,GPIO_Pin_6);
  digitalLo(GPIOB,GPIO_Pin_7);
  digitalLo(GPIOB,GPIO_Pin_10);
  digitalLo(GPIOB,GPIO_Pin_11);
  Delay(50000);
   
  digitalHi(GPIOB,GPIO_Pin_6);
  digitalHi(GPIOB,GPIO_Pin_7);
  digitalLo(GPIOB,GPIO_Pin_10);
  digitalLo(GPIOB,GPIO_Pin_11);
  Delay(50000);
   
  digitalLo(GPIOB,GPIO_Pin_6);
  digitalHi(GPIOB,GPIO_Pin_7);
  digitalLo(GPIOB,GPIO_Pin_10);
  digitalLo(GPIOB,GPIO_Pin_11);
  Delay(50000);
   
  digitalLo(GPIOB,GPIO_Pin_6);
  digitalHi(GPIOB,GPIO_Pin_7);
  digitalHi(GPIOB,GPIO_Pin_10);
  digitalLo(GPIOB,GPIO_Pin_11);
  Delay(50000);
   
  digitalLo(GPIOB,GPIO_Pin_6);
  digitalLo(GPIOB,GPIO_Pin_7);
  digitalHi(GPIOB,GPIO_Pin_10);
  digitalLo(GPIOB,GPIO_Pin_11);
  Delay(50000);
   
  digitalLo(GPIOB,GPIO_Pin_6);
  digitalLo(GPIOB,GPIO_Pin_7);
  digitalHi(GPIOB,GPIO_Pin_10);
  digitalHi(GPIOB,GPIO_Pin_11);
  Delay(50000);
   
  digitalLo(GPIOB,GPIO_Pin_6);
  digitalLo(GPIOB,GPIO_Pin_7);
  digitalLo(GPIOB,GPIO_Pin_10);
  digitalHi(GPIOB,GPIO_Pin_11);
  Delay(50000);
   
  digitalHi(GPIOB,GPIO_Pin_6);
  digitalLo(GPIOB,GPIO_Pin_7);
  digitalLo(GPIOB,GPIO_Pin_10);
  digitalHi(GPIOB,GPIO_Pin_11);
  Delay(50000);
}  
  else if(a == 3)
{
  digitalHi(GPIOB,GPIO_Pin_12);
  digitalLo(GPIOB,GPIO_Pin_13);
  digitalLo(GPIOB,GPIO_Pin_14);
  digitalHi(GPIOB,GPIO_Pin_15);
  Delay(50000);
   
  digitalLo(GPIOB,GPIO_Pin_12);
  digitalLo(GPIOB,GPIO_Pin_13);
  digitalLo(GPIOB,GPIO_Pin_14);
  digitalHi(GPIOB,GPIO_Pin_15);
  Delay(50000);
   
  digitalLo(GPIOB,GPIO_Pin_12);
  digitalLo(GPIOB,GPIO_Pin_13);
  digitalHi(GPIOB,GPIO_Pin_14);
  digitalHi(GPIOB,GPIO_Pin_15);
  Delay(50000);
   
  digitalLo(GPIOB,GPIO_Pin_12);
  digitalLo(GPIOB,GPIO_Pin_13);
  digitalHi(GPIOB,GPIO_Pin_14);
  digitalLo(GPIOB,GPIO_Pin_15);
  Delay(50000);
   
  digitalLo(GPIOB,GPIO_Pin_12);
  digitalHi(GPIOB,GPIO_Pin_13);
  digitalHi(GPIOB,GPIO_Pin_14);
  digitalLo(GPIOB,GPIO_Pin_15);
  Delay(50000);
   
  digitalLo(GPIOB,GPIO_Pin_12);
  digitalHi(GPIOB,GPIO_Pin_13);
  digitalLo(GPIOB,GPIO_Pin_14);
  digitalLo(GPIOB,GPIO_Pin_15);
  Delay(50000);
   
  digitalHi(GPIOB,GPIO_Pin_12);
  digitalHi(GPIOB,GPIO_Pin_13);
  digitalLo(GPIOB,GPIO_Pin_14);
  digitalLo(GPIOB,GPIO_Pin_15);
  Delay(50000);
   
  digitalHi(GPIOB,GPIO_Pin_12);
  digitalLo(GPIOB,GPIO_Pin_13);
  digitalLo(GPIOB,GPIO_Pin_14);
  digitalLo(GPIOB,GPIO_Pin_15);
  Delay(50000);
}
SEI();
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。