OpenEdv-开源电子网

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

步进电机控制问题

[复制链接]

5

主题

46

帖子

0

精华

高级会员

Rank: 4

积分
628
金钱
628
注册时间
2016-3-3
在线时间
68 小时
发表于 2016-5-8 17:04:29 | 显示全部楼层 |阅读模式
10金钱

大家好,我刚开始接触步进电机;想通过一个STM32F103C8T6芯片进行控制;所用的驱动器是LV8729。刚开始玩,想先通过以下一个简单的程序来产生脉冲进而来控制电机的转动;程序如下:
int main(void)
{
  int i;
    delay_init();          //初始化延时函数
    LED_Init();                //初始化LED端口
   
    for(i=0;i<15;i++)
    {
      GPIO_ResetBits(GPIOB,GPIO_Pin_8);
        delay_us(500);
        GPIO_SetBits(GPIOB,GPIO_Pin_8);
        delay_us(500);
    }
      
}
但是把这个烧进去之后,电机就会一直转动停不下来。然后我把for循环去掉以后,即使只执行一次,(程序如下)电机还是会一直转动。这是为什么?该怎么解决?
int main(void)
{
  int i;
    delay_init();          //初始化延时函数
    LED_Init();                //初始化LED端口
   

      GPIO_ResetBits(GPIOB,GPIO_Pin_8);
        delay_us(500);
        GPIO_SetBits(GPIOB,GPIO_Pin_8);
        delay_us(500);  
}
谢谢大家的指导和帮助
附:源程序我是直接在STM32F1精英版中的跑马灯实验的基础上改的。
谢谢大家。

最佳答案

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

是的,在for循环后边加上[mw_shl_code=applescript,true]while(1);[/mw_shl_code]
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

69

主题

978

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3772
金钱
3772
注册时间
2015-4-26
在线时间
765 小时
发表于 2016-5-8 17:04:30 | 显示全部楼层
0xtobit 发表于 2016-5-9 09:50
昂  意思是它可能执行完后又自动从头开始执行了吗?

是的,在for循环后边加上[mw_shl_code=applescript,true]while(1);[/mw_shl_code]
我有故事,你有酒吗
回复

使用道具 举报

5

主题

75

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
200
金钱
200
注册时间
2015-12-26
在线时间
54 小时
发表于 2016-5-9 09:24:52 | 显示全部楼层
你在for函数加个停止函数试试。
回复

使用道具 举报

69

主题

978

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3772
金钱
3772
注册时间
2015-4-26
在线时间
765 小时
发表于 2016-5-9 09:36:15 | 显示全部楼层
你是刚开始接触单片机吧?不加while大循环我记得当初入门学51的时候程序会从头开始,不过后来从来没有不加while的情况,所以不知道32会怎么样。不过看楼主现象应该也是会从头运行吧
我有故事,你有酒吗
回复

使用道具 举报

62

主题

903

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3566
金钱
3566
注册时间
2016-1-8
在线时间
544 小时
发表于 2016-5-9 09:48:21 | 显示全部楼层
for循环出来之后把两个管脚都setbit或者resetbit
回复

使用道具 举报

5

主题

46

帖子

0

精华

高级会员

Rank: 4

积分
628
金钱
628
注册时间
2016-3-3
在线时间
68 小时
 楼主| 发表于 2016-5-9 09:48:52 | 显示全部楼层
zhangyimj007 发表于 2016-5-9 09:24
你在for函数加个停止函数试试。

什么意思?它不是循环完后就停止了?
回复

使用道具 举报

5

主题

46

帖子

0

精华

高级会员

Rank: 4

积分
628
金钱
628
注册时间
2016-3-3
在线时间
68 小时
 楼主| 发表于 2016-5-9 09:50:15 | 显示全部楼层
来俩不甜的 发表于 2016-5-9 09:36
你是刚开始接触单片机吧?不加while大循环我记得当初入门学51的时候程序会从头开始,不过后来从来没有不加w ...

昂  意思是它可能执行完后又自动从头开始执行了吗?
回复

使用道具 举报

5

主题

75

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
200
金钱
200
注册时间
2015-12-26
在线时间
54 小时
发表于 2016-5-9 09:56:43 | 显示全部楼层
0xtobit 发表于 2016-5-9 09:48
什么意思?它不是循环完后就停止了?

不是的,你这个函数会无限循环
回复

使用道具 举报

5

主题

46

帖子

0

精华

高级会员

Rank: 4

积分
628
金钱
628
注册时间
2016-3-3
在线时间
68 小时
 楼主| 发表于 2016-5-9 10:17:34 | 显示全部楼层
zhangyimj007 发表于 2016-5-9 09:56
不是的,你这个函数会无限循环

为什么?请大神指导一下,该如何解决?
回复

使用道具 举报

5

主题

46

帖子

0

精华

高级会员

Rank: 4

积分
628
金钱
628
注册时间
2016-3-3
在线时间
68 小时
 楼主| 发表于 2016-5-9 10:17:56 | 显示全部楼层
Sun_Fly 发表于 2016-5-9 09:48
for循环出来之后把两个管脚都setbit或者resetbit

好的  我试一下
回复

使用道具 举报

5

主题

46

帖子

0

精华

高级会员

Rank: 4

积分
628
金钱
628
注册时间
2016-3-3
在线时间
68 小时
 楼主| 发表于 2016-5-9 10:52:33 | 显示全部楼层
来俩不甜的 发表于 2016-5-9 10:29
是的,在for循环后边加上

嗯  确实是  加上就可以了  谢谢你
回复

使用道具 举报

29

主题

492

帖子

0

精华

高级会员

Rank: 4

积分
810
金钱
810
注册时间
2016-4-7
在线时间
123 小时
发表于 2016-5-9 15:30:19 | 显示全部楼层
EN要给高电平,然后CE给个高或者低都行这个决定方向,然后给CLK脉冲,电机就转了,如果要停那EN给低电平,CLK脉冲也停止发送
回复

使用道具 举报

5

主题

46

帖子

0

精华

高级会员

Rank: 4

积分
628
金钱
628
注册时间
2016-3-3
在线时间
68 小时
 楼主| 发表于 2016-5-10 09:05:11 | 显示全部楼层
xujian468 发表于 2016-5-9 15:30
EN要给高电平,然后CE给个高或者低都行这个决定方向,然后给CLK脉冲,电机就转了,如果要停那EN给低电平,C ...

哦   好的   知道了  谢谢
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-11 03:50

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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