eufo 发表于 2015-6-3 22:00:55

求助:Arduino同时执行2个步进电机命令

本帖最后由 eufo 于 2015-6-3 22:28 编辑

突然想到一个问题:
假如stepper1(int a)为控制步进电机1运行a秒然后停止的函数,stepper2(int b)为控制步进电机2运行b秒然后停止的的函数。

void loop()
{
stepper1(100);
stepper2(200);
}
因为单片机是逐行执行命令的,所以步进1先运行100秒后停止,然后步进2再运行200秒后停止。

void loop()
{
stepper1(10);   步进1运行10秒后停止
stepper2(200);步进2运行200秒后停止
stepper1(90);步进1在运行90秒后停止
}

如果我想步进1运行10秒后步进2立即启动运行200秒,但此时的步进1不停止下来怎么办?

rick_hou 发表于 2015-6-4 00:13:08

你说的不停下来是什么意思?没有立刻停止,但是之后会停止,还是说一直都不停止?

nick_zm 发表于 2015-6-4 00:18:56

参考这个网页http://www.airspayce.com/mikem/arduino/AccelStepper/,accelstepper库可以设置加速度,并可驱动多个步进电机

eufo 发表于 2015-6-4 11:44:58

本帖最后由 eufo 于 2015-6-4 20:20 编辑

rick_hou 发表于 2015-6-4 00:13 static/image/common/back.gif
你说的不停下来是什么意思?没有立刻停止,但是之后会停止,还是说一直都不停止?

意思是步进1运行了10s时,步进2就开始运动,但此时步进1还是在转,如图绿色标识。我的理解是单片机只能执行完步进1运行的命令才能执行步进2运行的命令,所以执行步进1命令的中途(10S时)无法执行步进2的命令,下图的情形无法实现。

rick_hou 发表于 2015-6-4 20:48:42

eufo 发表于 2015-6-4 11:44 static/image/common/back.gif
意思是步进1运行了10s时,步进2就开始运动,但此时步进1还是在转,如图绿色标识。我的理解是单片机只能 ...

是的,如果按照你的要求要想实现确实有点难度。没有研究过stepper的实现方法,你说的这种方式属于多轴联动。

nick_zm 发表于 2015-6-4 22:02:33

我上面已经回复了,楼主视若无睹,上面那个库可以同时驱动多个电机,自己编程的话协调好脉冲信号的发射也不是什么难事

eufo 发表于 2015-6-5 09:21:04

nick_zm 发表于 2015-6-4 22:02 static/image/common/back.gif
我上面已经回复了,楼主视若无睹,上面那个库可以同时驱动多个电机,自己编程的话协调好脉冲信号的发射也不 ...

谢谢了。但我看不懂同类相关的代码,看来要学一下C++了

积极阳光好少年 发表于 2016-9-1 14:17:31

楼主停止函数咋写 分享一下 谢谢了

michel616 发表于 2018-2-26 17:46:13

本帖最后由 michel616 于 2018-2-26 17:50 编辑

写一个双进程的函数就可以了,需要用到metro函数()

这里有个差不多的用双线程的步进电机帖子。。应该能帮到你

http://bit.ly/steppermotorcontrolbyphone

Damn_intuition 发表于 2018-3-6 12:48:14

本帖最后由 Damn_intuition 于 2018-3-6 12:49 编辑

多设备协同工作可以采用一个比较简单的时间分片思想:

for (i=0;i<210;i++){
if (i<10)
stepper1(1);
else
{
stepper1(1);
stepper2(1);
}
}
stepper1(1);

页: [1]
查看完整版本: 求助:Arduino同时执行2个步进电机命令