OpenEdv-开源电子网

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

STM32 控制7个步进电机

[复制链接]

3

主题

16

帖子

0

精华

初级会员

Rank: 2

积分
77
金钱
77
注册时间
2013-4-24
在线时间
8 小时
发表于 2013-4-24 14:00:14 | 显示全部楼层 |阅读模式
7个步进电机有驱动器,STM32只输出脉冲和方向就可以了。每个电机都有位移要求,用定时器发脉冲的话,脉冲数控制不够用。每一个电机的脉冲数控制需要2个定时器,7个的话就要14个。没有这么多的?我看见别人的控制板上用的芯片是STM32F103VCT6,也没有这篸多的定时器。我的思路有问题?哪位指点一下
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

43

主题

481

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1352
金钱
1352
注册时间
2014-12-24
在线时间
321 小时
发表于 2016-5-28 16:54:15 | 显示全部楼层
一个定时器都可以做!
回复 支持 1 反对 0

使用道具 举报

0

主题

25

帖子

0

精华

新手上路

积分
45
金钱
45
注册时间
2012-9-23
在线时间
0 小时
发表于 2013-4-24 22:37:14 | 显示全部楼层
是7种转速,还是1种转速7个电机?
回复 支持 反对

使用道具 举报

3

主题

16

帖子

0

精华

初级会员

Rank: 2

积分
77
金钱
77
注册时间
2013-4-24
在线时间
8 小时
 楼主| 发表于 2013-4-25 07:28:32 | 显示全部楼层
回复【2楼】beebee:
---------------------------------
是7个电机,速度和位移任意设定的
回复 支持 反对

使用道具 举报

42

主题

568

帖子

0

精华

高级会员

Rank: 4

积分
784
金钱
784
注册时间
2010-12-19
在线时间
5 小时
发表于 2013-4-25 08:07:19 | 显示全部楼层
我觉得你这个实现不了!

我用的MCU是STM32F103ZE。它的定时器计数EXT只有5个。TIM1_4
所以在位移控制上就可以否定了。
当然你也可以用其他的办法,但是不知道有什么好方法能确保丢布脉冲控制在5HZ左右!
一个上蹿下跳的猴子~~~
回复 支持 反对

使用道具 举报

3

主题

16

帖子

0

精华

初级会员

Rank: 2

积分
77
金钱
77
注册时间
2013-4-24
在线时间
8 小时
 楼主| 发表于 2013-4-25 12:06:19 | 显示全部楼层
回复【4楼】wolfdong7:
---------------------------------
有人已经做出来了,我就是想仿他们的板的,但是程序要自己弄的,没有方案。
回复 支持 反对

使用道具 举报

9

主题

52

帖子

0

精华

初级会员

Rank: 2

积分
165
金钱
165
注册时间
2013-2-5
在线时间
18 小时
发表于 2013-4-25 12:17:50 | 显示全部楼层
回复【楼主位】xh2008email:
---------------------------------
一个电机的脉冲数需要两个定时器是什么意思
话说我有严重的拖延症,怎样才能不做事不拖拖拉拉的呢...
回复 支持 反对

使用道具 举报

头像被屏蔽

52

主题

440

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1237
金钱
1237
注册时间
2013-1-9
在线时间
151 小时
发表于 2013-4-25 13:06:42 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

42

主题

568

帖子

0

精华

高级会员

Rank: 4

积分
784
金钱
784
注册时间
2010-12-19
在线时间
5 小时
发表于 2013-4-25 13:49:32 | 显示全部楼层
回复【5楼】xh2008email:
---------------------------------
哪想请问下,7个电机发脉冲至少需要7个定时器给脉冲信号吧。

位置控制电机的加速、减速停止。就需要计算脉冲的个数,需要一个反馈吧。

请问你是怎么做的?
我是采用4个定时器发,4个定时器计。
一个上蹿下跳的猴子~~~
回复 支持 反对

使用道具 举报

3

主题

16

帖子

0

精华

初级会员

Rank: 2

积分
77
金钱
77
注册时间
2013-4-24
在线时间
8 小时
 楼主| 发表于 2013-4-25 16:14:54 | 显示全部楼层
除了7个步进电机之外,还要和步科的HMI通讯,速度和位移都在HMI中设置,送到STM32中去。其它就是一些光电开关作为输入。
和HMI通讯应该是走MODBUS。
就上面的这些要求。
回复 支持 反对

使用道具 举报

3

主题

16

帖子

0

精华

初级会员

Rank: 2

积分
77
金钱
77
注册时间
2013-4-24
在线时间
8 小时
 楼主| 发表于 2013-4-25 16:16:51 | 显示全部楼层
回复【6楼】tinylaker:
---------------------------------
STM32发指定数目的脉冲,一般都要两个timer:一个发脉冲,一个计数。
回复 支持 反对

使用道具 举报

42

主题

568

帖子

0

精华

高级会员

Rank: 4

积分
784
金钱
784
注册时间
2010-12-19
在线时间
5 小时
发表于 2013-4-25 16:44:57 | 显示全部楼层
回复【10楼】xh2008email:
---------------------------------
请问下,你的定时器计数,工作于什么方式?
一个上蹿下跳的猴子~~~
回复 支持 反对

使用道具 举报

头像被屏蔽

52

主题

440

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1237
金钱
1237
注册时间
2013-1-9
在线时间
151 小时
发表于 2013-4-25 16:52:35 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

3

主题

16

帖子

0

精华

初级会员

Rank: 2

积分
77
金钱
77
注册时间
2013-4-24
在线时间
8 小时
 楼主| 发表于 2013-4-26 20:11:39 | 显示全部楼层
回复【12楼】hexboot:
---------------------------------
能详细点吗?
回复 支持 反对

使用道具 举报

3

主题

16

帖子

0

精华

初级会员

Rank: 2

积分
77
金钱
77
注册时间
2013-4-24
在线时间
8 小时
 楼主| 发表于 2013-4-26 20:14:05 | 显示全部楼层
老大怎么不出来指点指点啊?
回复 支持 反对

使用道具 举报

1

主题

4

帖子

0

精华

新手入门

积分
28
金钱
28
注册时间
2013-4-27
在线时间
0 小时
发表于 2013-4-27 23:03:54 | 显示全部楼层
回复【楼主位】xh2008email:
---------------------------------
你的思路来实现控制7个步进电机的话,资源肯定是不够的。

步进电机一般都是开环控制。

你可以参考st官网上的应用文档,有一个可以控制步进电机加减速的例子。按照文档里说,可以最多控制14个步进电机。
回复 支持 反对

使用道具 举报

11

主题

53

帖子

0

精华

初级会员

Rank: 2

积分
188
金钱
188
注册时间
2012-6-20
在线时间
38 小时
发表于 2013-4-27 23:12:03 | 显示全部楼层
一个定时器控制一个电机,速度也可以调节,可以设计上下限,急停。做好方法就是使用查表方法做,发一个脉冲就记一次数,就可以知道步进电机所走的步数了。跟屏modbus通讯一般都会加有通信超时的。
回复 支持 反对

使用道具 举报

31

主题

116

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
266
金钱
266
注册时间
2012-9-3
在线时间
4 小时
发表于 2013-4-28 00:01:32 | 显示全部楼层
回复【4楼】wolfdong7:
---------------------------------
绝对能做出来,而且理论上想做多少路就做多少路
打造完美
回复 支持 反对

使用道具 举报

42

主题

568

帖子

0

精华

高级会员

Rank: 4

积分
784
金钱
784
注册时间
2010-12-19
在线时间
5 小时
发表于 2013-4-28 15:27:42 | 显示全部楼层
回复【16楼】wufuhai216:
---------------------------------
发一个脉冲计一个数。
请问怎么计?
能不能来个例程。
一个上蹿下跳的猴子~~~
回复 支持 反对

使用道具 举报

42

主题

568

帖子

0

精华

高级会员

Rank: 4

积分
784
金钱
784
注册时间
2010-12-19
在线时间
5 小时
发表于 2013-4-28 15:28:27 | 显示全部楼层
回复【17楼】Berlin:
---------------------------------
请问你的理论点依据在哪里?
一个上蹿下跳的猴子~~~
回复 支持 反对

使用道具 举报

11

主题

53

帖子

0

精华

初级会员

Rank: 2

积分
188
金钱
188
注册时间
2012-6-20
在线时间
38 小时
发表于 2013-4-29 17:37:27 | 显示全部楼层
void motor_work(void)
{
while(flag ==0);  //等待定时器中断标志位溢出
flag = 0;
PUL = 0; 
TIM4->ARR = TimeWait; //重装初值   
if(Direction) 
{
if(CurrentLocation<65535)
CurrentLocation++;

}
else
{  
if(CurrentLocation>0)
CurrentLocation--;
}

if(AccSign)
{
if(AccSpeed < LimitSpeed)
{
AccSpeed++;
}
}
else
{
if(AccSpeed > 0)
{
AccSpeed--;
}
}
PUL = 1;
}
回复 支持 反对

使用道具 举报

31

主题

116

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
266
金钱
266
注册时间
2012-9-3
在线时间
4 小时
发表于 2013-4-30 01:25:12 | 显示全部楼层
回复【19楼】wolfdong7:
---------------------------------
你怀疑不行?当然不是用常规的PWM输出方法,用的是输出比较方法,理论上想输出多少路不同的PWM就输出多少路。给一篇帖子你参考。http://www.openedv.com/posts/list/2475.htm#13142
打造完美
回复 支持 反对

使用道具 举报

42

主题

568

帖子

0

精华

高级会员

Rank: 4

积分
784
金钱
784
注册时间
2010-12-19
在线时间
5 小时
发表于 2013-4-30 08:42:08 | 显示全部楼层
回复【21楼】Berlin:
---------------------------------
这个帖子我之前了解过,我自己也跑过,最后这个方案否了。
这样一直占用中断,后面的其他功能不能保证其稳定耶。
我在测试中,我的界面、系统等其他功能要求就很高了。
这个帖子多路PWM更详细
http://home.51.com/lizhonglin5151/diary/item/10042692.html 

如果用任意路的话,不如开定时器计数IO翻转。
一个上蹿下跳的猴子~~~
回复 支持 反对

使用道具 举报

6

主题

153

帖子

0

精华

初级会员

Rank: 2

积分
197
金钱
197
注册时间
2013-4-4
在线时间
0 小时
发表于 2013-4-30 10:14:25 | 显示全部楼层
步进电机不需要反馈
一个电机一个定时器
或者一个定时器完成多个功能
~~~~ 欢迎讨论,拒绝谩骂 ~~~~
回复 支持 反对

使用道具 举报

42

主题

568

帖子

0

精华

高级会员

Rank: 4

积分
784
金钱
784
注册时间
2010-12-19
在线时间
5 小时
发表于 2013-4-30 12:35:14 | 显示全部楼层
回复【23楼】兰斯洛:
---------------------------------
你要让步进电机转半圈,请问你怎么做?
一个上蹿下跳的猴子~~~
回复 支持 反对

使用道具 举报

6

主题

153

帖子

0

精华

初级会员

Rank: 2

积分
197
金钱
197
注册时间
2013-4-4
在线时间
0 小时
发表于 2013-4-30 12:58:31 | 显示全部楼层
回复【24楼】wolfdong7:
---------------------------------
让步进电机转半圈?送脉冲啊,送到转半圈停止送脉冲 这个时候这个定时器就可以用作他途
我举个例子 两个电机 转的速度是2:1 的关系 那定时器就是2:1的关系送脉冲
在编程上要麻烦点 硬件不够只能软件模拟
~~~~ 欢迎讨论,拒绝谩骂 ~~~~
回复 支持 反对

使用道具 举报

头像被屏蔽

52

主题

440

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1237
金钱
1237
注册时间
2013-1-9
在线时间
151 小时
发表于 2013-4-30 13:04:52 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

42

主题

568

帖子

0

精华

高级会员

Rank: 4

积分
784
金钱
784
注册时间
2010-12-19
在线时间
5 小时
发表于 2013-4-30 20:01:28 | 显示全部楼层
回复【25楼】兰斯洛:
---------------------------------
让步进电机转半圈?

比如,我要电机转半圈。
第一种   1.起始速度:0    2.最大速度:5K pluse/s   3.加速时间  0.3S 
第二种   1.起始速度:2K pluse/s 2.最大速度:5K pluse/s   3.加速时间  0.4S 

电机精准控制为20K pluse  这个不用定时器计数,如果用2:1的话。恐怕这个写软件有够痛苦的了。
一个上蹿下跳的猴子~~~
回复 支持 反对

使用道具 举报

46

主题

284

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
494
金钱
494
注册时间
2011-6-20
在线时间
0 小时
发表于 2013-4-30 20:47:25 | 显示全部楼层
回复【楼主位】xh2008email:

7个步进电机有驱动器,STM32只输出脉冲和方向就可以了。每个电机都有位移要求,用定时器发脉冲的话,脉冲数控制不够用。每一个电机的脉冲数控制需要2个定时器,7个的话就要14个。没有这么多的?我看见别人的控制板上用的芯片是STM32F103VCT6,也没有这篸多的定时器。我的思路有问题?哪位指点一下

---------------------------------
4轴联动倒是给公司做过  驱动四个伺服马达  带一定的负载  再把伺服马达的编码器接到电脑PCI运动控制卡上去读编码器的数据  输出频率用示波器测试都是很准。但是这个是给公司做的   现在还在日夜测试
回复 支持 反对

使用道具 举报

46

主题

284

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
494
金钱
494
注册时间
2011-6-20
在线时间
0 小时
发表于 2013-4-30 20:48:43 | 显示全部楼层
回复【27楼】wolfdong7:

回复【25楼】兰斯洛:
---------------------------------
让步进电机转半圈?
比如,我要电机转半圈。
第一种   1.起始速度:0    2.最大速度:5K pluse/s   3.加速时间  0.3S 
第二种   1.起始速度:2K pluse/s 2.最大速度:5K pluse/s   3.加速时间  0.4S 
电机精准控制为20K pluse  这个不用定时器计数,如果用2:1的话。恐怕这个写软件有够痛苦的了。

---------------------------------
可以设定起始速度  运行速度  停止速度    加速步数   减速步数
回复 支持 反对

使用道具 举报

6

主题

153

帖子

0

精华

初级会员

Rank: 2

积分
197
金钱
197
注册时间
2013-4-4
在线时间
0 小时
发表于 2013-5-1 21:52:04 | 显示全部楼层
你要想完全的自主设置的自由度 肯定要软件上麻烦啊 
hexboot 也说了 最大公倍数的思想 我就是这个意思
~~~~ 欢迎讨论,拒绝谩骂 ~~~~
回复 支持 反对

使用道具 举报

6

主题

46

帖子

0

精华

初级会员

Rank: 2

积分
90
金钱
90
注册时间
2013-4-24
在线时间
0 小时
发表于 2013-7-24 21:08:00 | 显示全部楼层
回复【15楼】dayaue:
---------------------------------
有没有网址
回复 支持 反对

使用道具 举报

7

主题

35

帖子

0

精华

初级会员

Rank: 2

积分
128
金钱
128
注册时间
2014-8-8
在线时间
9 小时
发表于 2014-8-29 10:34:33 | 显示全部楼层
回复【31楼】捷:
---------------------------------
我给大家建立了一个qq群,方便大家交流哈
回复 支持 反对

使用道具 举报

7

主题

35

帖子

0

精华

初级会员

Rank: 2

积分
128
金钱
128
注册时间
2014-8-8
在线时间
9 小时
发表于 2014-8-29 10:34:56 | 显示全部楼层
回复【32楼】pathfinder:
---------------------------------
qq群--210325486
回复 支持 反对

使用道具 举报

16

主题

253

帖子

0

精华

高级会员

Rank: 4

积分
565
金钱
565
注册时间
2013-10-16
在线时间
52 小时
发表于 2014-12-1 18:20:37 | 显示全部楼层
MARK============
回复 支持 反对

使用道具 举报

7

主题

123

帖子

0

精华

初级会员

Rank: 2

积分
194
金钱
194
注册时间
2014-3-5
在线时间
3 小时
发表于 2014-12-1 19:53:08 | 显示全部楼层
按照这个意思,我觉得“一个定时器+RAM”的模式
回复 支持 反对

使用道具 举报

14

主题

225

帖子

3

精华

高级会员

Rank: 4

积分
623
金钱
623
注册时间
2014-7-8
在线时间
26 小时
发表于 2014-12-30 19:08:21 | 显示全部楼层
回复【5楼】xh2008email:
---------------------------------
这个真能做到。
回复 支持 反对

使用道具 举报

14

主题

225

帖子

3

精华

高级会员

Rank: 4

积分
623
金钱
623
注册时间
2014-7-8
在线时间
26 小时
发表于 2014-12-30 19:09:23 | 显示全部楼层
就是64脚的32,,6个298就能实现
回复 支持 反对

使用道具 举报

14

主题

225

帖子

3

精华

高级会员

Rank: 4

积分
623
金钱
623
注册时间
2014-7-8
在线时间
26 小时
发表于 2014-12-30 19:22:05 | 显示全部楼层
 一个定时器中断就行。我们做过控制两个个步进电机的就是省赛。

[mw_shl_code=c,true] void task1(int i) { switch(i) { case 1:A1A2;break; case 2:B1B2;break; case 3:A2A1;break; case 4:B2B1;break; } } void task2(int i) { switch(i) { case 12D1;break; case 2:C2C1;break; case 31D2;break; case 4:C1C2;break; } } [/mw_shl_code]
这里是两个电机的驱动函数,D2D1等就是一个控制信号的宏定义
[mw_shl_code=c,true]void TimingDelay_Decrement() { if (task1_time!= 0x00) { task1_time--; } else work_flag_1=1; if (task2_time!= 0x00) { task2_time--; } else work_flag_2=1; }[/mw_shl_code]
[mw_shl_code=c,true]void work1() { if(work_flag_1) { if ((++task1flag)>4) task1flag=1; task1(task1flag); work_flag_1=0; task1_time=task1_time_conf; } } void work2() { if(work_flag_2) { if ((++task2flag)>4) task2flag=1; task2(task2flag); work_flag_2=0; task2_time=task2_time_conf; } } [/mw_shl_code]
这个是工作函数
然后你只需啊修改这个task2_time,和task1_time的参数就可以控制转的快慢,执行一次work函数走一步。
哎。。有时间了开个贴说说这个吧。。这个自己想的


回复 支持 反对

使用道具 举报

27

主题

110

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
329
金钱
329
注册时间
2013-5-12
在线时间
26 小时
发表于 2015-2-26 03:18:22 | 显示全部楼层
一个定时器就能控制一路,STM32F103VE总共有八个定时器,能输出PWM的有六个,就可以控制六路电机,实现加减速和定位控制,最高可达2MHz
回复 支持 反对

使用道具 举报

27

主题

110

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
329
金钱
329
注册时间
2013-5-12
在线时间
26 小时
发表于 2015-3-4 01:25:55 | 显示全部楼层
回复【18楼】wolfdong7:
---------------------------------
中断啊
回复 支持 反对

使用道具 举报

17

主题

587

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4467
金钱
4467
注册时间
2013-6-27
在线时间
565 小时
发表于 2015-3-4 10:47:44 | 显示全部楼层
步进电机的脉冲IO翻转频率不高比如小于1K的话,只要一个定时器就可以驱动任意个步进电机的,不过步进电机的频率不可能很高,所以肯定是可以设计出来的。
让我们的思维驾驭在电的速度之上!
回复 支持 反对

使用道具 举报

0

主题

2

帖子

0

精华

新手上路

积分
24
金钱
24
注册时间
2015-3-27
在线时间
0 小时
发表于 2015-3-27 18:19:48 | 显示全部楼层
沙发。。。。
回复 支持 反对

使用道具 举报

22

主题

147

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3983
金钱
3983
注册时间
2015-4-18
在线时间
403 小时
发表于 2015-4-18 09:00:20 | 显示全部楼层
到底怎么搞啊。。。
回复 支持 反对

使用道具 举报

7

主题

63

帖子

0

精华

初级会员

Rank: 2

积分
142
金钱
142
注册时间
2013-1-23
在线时间
4 小时
发表于 2015-4-24 11:21:18 | 显示全部楼层
回复【15楼】dayaue:
---------------------------------
我想看一下那个文档,你说的是这个吗
AN4277
Application note
Using STM32F3 Series WM shut-down features
for motor control and digital power conversion
回复 支持 反对

使用道具 举报

22

主题

147

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3983
金钱
3983
注册时间
2015-4-18
在线时间
403 小时
发表于 2016-4-4 21:16:56 | 显示全部楼层
问题还没解决吗。。。
回复 支持 反对

使用道具 举报

22

主题

147

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3983
金钱
3983
注册时间
2015-4-18
在线时间
403 小时
发表于 2016-4-4 21:17:25 | 显示全部楼层
问题解决没啊
回复 支持 反对

使用道具 举报

1

主题

6

帖子

0

精华

初级会员

Rank: 2

积分
73
金钱
73
注册时间
2013-10-29
在线时间
13 小时
发表于 2016-5-28 09:56:50 | 显示全部楼层
哥们,你是驱动舞台灯光的吧。
没有长不大的波,只有喂不饱的奶。
回复 支持 反对

使用道具 举报

29

主题

492

帖子

0

精华

高级会员

Rank: 4

积分
810
金钱
810
注册时间
2016-4-7
在线时间
123 小时
发表于 2016-5-28 11:53:22 | 显示全部楼层
每个步进需要的脉冲周期都不一样吗?那麻烦的
回复 支持 反对

使用道具 举报

10

主题

254

帖子

0

精华

高级会员

Rank: 4

积分
594
金钱
594
注册时间
2015-10-17
在线时间
145 小时
发表于 2016-5-28 15:32:51 | 显示全部楼层
普通定时器可以出两路PWM波,高级定时器更多,真么会没有办法控制呢。
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-5-29 06:04

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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