这是我写的一个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();
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
6条回答
xujian468
1楼-- · 2019-08-17 08:17
常见的通电方式有单(单相绕组通电)四拍(A-B-C-D-A。。。),双(双相绕组通电)四拍(AB-BC- CD-DA-AB-。。。),八拍(A-AB-B-BC-C-CD-D-DA-A。。。)
FantaSy_
2楼-- · 2019-08-17 08:19
ws_zdyz
3楼-- · 2019-08-17 11:19
quanpinru
4楼-- · 2019-08-17 16:37
感觉很麻烦
xujian468
5楼-- · 2019-08-17 17:23
 精彩回答 2  元偷偷看……
触摸春天
6楼-- · 2019-08-17 21:54

谢谢分享....

一周热门 更多>