OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 5505|回复: 6

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

[复制链接]

5

主题

11

帖子

0

精华

新手上路

积分
40
金钱
40
注册时间
2016-5-25
在线时间
4 小时
发表于 2016-5-31 07:58:50 | 显示全部楼层 |阅读模式
1金钱
电机是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();
}

最佳答案

查看完整内容[请看2#楼]

常见的通电方式有单(单相绕组通电)四拍(A-B-C-D-A。。。),双(双相绕组通电)四拍(AB-BC- CD-DA-AB-。。。),八拍(A-AB-B-BC-C-CD-D-DA-A。。。)
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

29

主题

492

帖子

0

精华

高级会员

Rank: 4

积分
811
金钱
811
注册时间
2016-4-7
在线时间
123 小时
发表于 2016-5-31 07:58:51 | 显示全部楼层
常见的通电方式有单(单相绕组通电)四拍(A-B-C-D-A。。。),双(双相绕组通电)四拍(AB-BC- CD-DA-AB-。。。),八拍(A-AB-B-BC-C-CD-D-DA-A。。。)
回复

使用道具 举报

14

主题

1592

帖子

0

精华

资深版主

Rank: 8Rank: 8

积分
2622
金钱
2622
注册时间
2014-7-17
在线时间
350 小时
发表于 2016-5-31 13:57:03 | 显示全部楼层
回复

使用道具 举报

83

主题

400

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2408
金钱
2408
注册时间
2013-8-26
在线时间
235 小时
发表于 2016-5-31 14:07:16 | 显示全部楼层
回复

使用道具 举报

1

主题

4

帖子

0

精华

初级会员

Rank: 2

积分
54
金钱
54
注册时间
2016-4-20
在线时间
13 小时
发表于 2016-5-31 14:20:25 | 显示全部楼层
感觉很麻烦
回复

使用道具 举报

29

主题

492

帖子

0

精华

高级会员

Rank: 4

积分
811
金钱
811
注册时间
2016-4-7
在线时间
123 小时
发表于 2016-5-31 14:42:10 | 显示全部楼层
本帖最后由 xujian468 于 2016-5-31 14:45 编辑

有4拍的8拍的,不用驱动器很麻烦的,你用I/O口直接驱动的还是加达林顿管ULN2003驱动的?
回复

使用道具 举报

0

主题

4

帖子

0

精华

新手入门

积分
12
金钱
12
注册时间
2017-7-6
在线时间
1 小时
发表于 2017-7-6 15:31:30 | 显示全部楼层

谢谢分享....
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-8-17 01:45

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表