找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2522|回复: 36
打印 上一主题 下一主题
收起左侧

有没有办法能让51单片机控制多路步进电机时,各个电机独立控制,互不干扰?

  [复制链接]
跳转到指定楼层
楼主
ID:1055885 发表于 2023-1-13 15:19 来自手机 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
遇到一个问题,我用Delay函数做延时语句时,一路步进电机减速时,其他电机也跟着减速,有没有什么办法能解决呢?
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏2 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:57657 发表于 2023-1-13 21:17 | 只看该作者
程序逻辑有问题,控制多个步进电机用定时器中断。
回复

使用道具 举报

板凳
ID:152164 发表于 2023-1-13 22:09 | 只看该作者
用定时器产生脉冲,一个定时器控制一路电机。一般单片机都有2个以上定时器
回复

使用道具 举报

地板
ID:857072 发表于 2023-1-13 23:03 来自手机 | 只看该作者
不用Delay,改定时器用。
回复

使用道具 举报

5#
ID:1055885 发表于 2023-1-14 12:08 来自手机 | 只看该作者
ziiyn 发表于 2023-1-13 22:09
用定时器产生脉冲,一个定时器控制一路电机。一般单片机都有2个以上定时器

如果控制4路呢,52单片机只有两个定时器
回复

使用道具 举报

6#
ID:1055885 发表于 2023-1-14 12:10 来自手机 | 只看该作者
npn 发表于 2023-1-13 21:17
程序逻辑有问题,控制多个步进电机用定时器中断。

控制4路步进电机要怎么分配定时器呢?
回复

使用道具 举报

7#
ID:152164 发表于 2023-1-14 15:50 | 只看该作者
叫大个不叫老朱 发表于 2023-1-14 12:08
如果控制4路呢,52单片机只有两个定时器

换单片机,STC15有3路定时器加PCA模块配成1路定时器。或者直接换成有5个定时器的单片机,按键扫描和显示之类的最好再用一个定时器
回复

使用道具 举报

8#
ID:152164 发表于 2023-1-14 15:52 | 只看该作者
叫大个不叫老朱 发表于 2023-1-14 12:08
如果控制4路呢,52单片机只有两个定时器

非要用52的话就只有用两个单片机,两个单片机进行通讯联动控制
回复

使用道具 举报

9#
ID:152164 发表于 2023-1-14 15:54 | 只看该作者
叫大个不叫老朱 发表于 2023-1-14 12:08
如果控制4路呢,52单片机只有两个定时器

我记得52有T0 ,T1 ,T2, 3个定时器的吧
回复

使用道具 举报

10#
ID:161164 发表于 2023-1-14 17:52 | 只看该作者
本帖最后由 lkc8210 于 2023-1-14 20:33 编辑
叫大个不叫老朱 发表于 2023-1-14 12:08
如果控制4路呢,52单片机只有两个定时器

用一个定时器产生四个心跳标志位
各步进根据各自的标志位逐步输出
回复

使用道具 举报

11#
ID:57657 发表于 2023-1-14 20:25 | 只看该作者
叫大个不叫老朱 发表于 2023-1-14 12:10
控制4路步进电机要怎么分配定时器呢?

用74HC595控制100路都可以。
回复

使用道具 举报

12#
ID:408539 发表于 2023-1-15 00:07 | 只看该作者
用延时程序会造成整个程序大部分时间都卡在 延时上,,,整个程序运行效率不高
要学会用定时器,无论你控制几个电机  只要一个定时器就够了
利用定时器中断产生时间基准,如1ms
当定时器进入中断后 变脸自加加
当加到你需要的值时候  换相 , 处理完记得清零变量
这样你要控制多个电机不同转速  只要声明几个相应变量 即可

void TM0_Isr() interrupt 1
{
motor1++;//电机1
motor2++;//电机2
motor3++;电机3
motor4++;电机4
}
void main()
{
    TMOD = 0x00;
    TL0 = 0x66;                                 //65536-11.0592M/12/1000
    TH0 = 0xfc;
    TR0 = 1;                                    //启动定时器
    ET0 = 1;                                    //使能定时器中断
    EA = 1;
    while (1){if(motor1==10){motor1=0;     }  //判断是否=10Ms   清空变量   然后电机1换相
if(motor2==20){motor2=0;     } //判断是否=20Ms   清空变量   然后电机2换相
if(motor3==30){motor3=0;     } //判断是否=30Ms   清空变量   然后电机2换相
if(motor4==40){motor4=0;     }//判断是否=40Ms   清空变量   然后电机2换相
}
按这个思路就算10个电机不同转速都不会卡


回复

使用道具 举报

13#
ID:1055885 发表于 2023-1-15 00:52 来自手机 | 只看该作者
ziiyn 发表于 2023-1-14 15:54
我记得52有T0 ,T1 ,T2, 3个定时器的吧

是的,我记错了,尴尬
回复

使用道具 举报

14#
ID:1055885 发表于 2023-1-15 00:55 来自手机 | 只看该作者
ziiyn 发表于 2023-1-14 15:52
非要用52的话就只有用两个单片机,两个单片机进行通讯联动控制

联动控制应该可以的,显示和检测用一个单片机,动作部分用另一个单片机
回复

使用道具 举报

15#
ID:408539 发表于 2023-1-15 09:48 | 只看该作者
叫大个不叫老朱 发表于 2023-1-15 00:55
联动控制应该可以的,显示和检测用一个单片机,动作部分用另一个单片机

只要单片机IO足够,并且显示不是很复杂一个单片机就可以处理,
回复

使用道具 举报

16#
ID:526108 发表于 2023-1-15 09:58 | 只看该作者
学过红外线发射函数吗?使用一个定时器就能同时控制多个步进电机,通过载波把步进电机所有信号载入波形中
回复

使用道具 举报

17#
ID:1044091 发表于 2023-1-16 07:08 来自手机 | 只看该作者
真正写程序时用定时器,不用delay。
回复

使用道具 举报

18#
ID:1055885 发表于 2023-1-16 07:21 来自手机 | 只看该作者
明记冷气 发表于 2023-1-15 09:48
只要单片机IO足够,并且显示不是很复杂一个单片机就可以处理,

数码管动态显示和步进电机需要同时工作,还要加入光电检测,我在网上找了很久没有解决办法,大部分都说需要两个单片机
回复

使用道具 举报

19#
ID:1055885 发表于 2023-1-16 07:23 来自手机 | 只看该作者
qq624353765 发表于 2023-1-15 09:58
学过红外线发射函数吗?使用一个定时器就能同时控制多个步进电机,通过载波把步进电机所有信号载入波形中

哈哈,还没学,我现在去学,我自己DIY一个机器,0基础开始学,用到什么学什么,有思路我就一定能做出来
回复

使用道具 举报

20#
ID:1055885 发表于 2023-1-16 07:33 来自手机 | 只看该作者
qq624353765 发表于 2023-1-15 09:58
学过红外线发射函数吗?使用一个定时器就能同时控制多个步进电机,通过载波把步进电机所有信号载入波形中

我要实现的是两个以上的步进电机在某一时段同时工作,其中某个步进电机减速,但是其他步进还能正常运转,红外能实现吗
回复

使用道具 举报

21#
ID:1044091 发表于 2023-1-16 11:53 | 只看该作者
叫大个不叫老朱 发表于 2023-1-16 07:21
数码管动态显示和步进电机需要同时工作,还要加入光电检测,我在网上找了很久没有解决办法,大部分都说需 ...

用STC8H8K64U,有5个定时器,64kb flash,一片就够了。STC8H1K08系列有3个定时器,flash也小多了只有8K不一定够用,代码还要复杂一点点,能省几块钱,如果是做设备没必要。
回复

使用道具 举报

22#
ID:961114 发表于 2023-1-16 14:23 | 只看该作者
用 STC8G2K64S4-36I-LQFP48/LQFP32, 有 45路步进电机专用增强型15位PWM, 可以同时控制 45路 步进电机
回复

使用道具 举报

23#
ID:525244 发表于 2023-1-18 07:59 来自手机 | 只看该作者
用一个定时器就行,定时时间短点,然后各电机的时间累加。判断到时间了就控制电机信号或标志位!
回复

使用道具 举报

24#
ID:1055885 发表于 2023-1-18 11:19 来自手机 | 只看该作者
STC庄伟 发表于 2023-1-16 14:23
用 STC8G2K64S4-36I-LQFP48/LQFP32, 有 45路步进电机专用增强型15位PWM, 可以同时控制 45路 步进电机

我感觉我可能不会用
回复

使用道具 举报

25#
ID:1055885 发表于 2023-1-18 11:41 来自手机 | 只看该作者
明记冷气 发表于 2023-1-15 00:07
用延时程序会造成整个程序大部分时间都卡在 延时上,,,整个程序运行效率不高
要学会用定时器,无论你控制几 ...

这个思路是启动时间不同吧,脉冲发生频率应该要怎样呢
回复

使用道具 举报

26#
ID:1055885 发表于 2023-1-18 11:44 来自手机 | 只看该作者
lkc8210 发表于 2023-1-14 17:52
用一个定时器产生四个心跳标志位
各步进根据各自的标志位逐步输出

这个对我来说就有点超纲了,刚接触单片机不久
回复

使用道具 举报

27#
ID:1003077 发表于 2023-1-19 17:51 | 只看该作者
lkc8210 发表于 2023-1-14 17:52
用一个定时器产生四个心跳标志位
各步进根据各自的标志位逐步输出

如果定时时间允许,这个方法很好!!!
回复

使用道具 举报

28#
ID:408539 发表于 2023-1-20 20:58 | 只看该作者
叫大个不叫老朱 发表于 2023-1-18 11:41
这个思路是启动时间不同吧,脉冲发生频率应该要怎样呢

这只是一个让几个步进电机可以在不同转速下运行的思路;
你要随意调速 把if里面的固定条件换成变量
在其他地方赋值一下就可以改变转速了
如果你想控制启停  在if命令里追加上另一个条件即可
有了思路 自己去探索 才能真正学到东西
回复

使用道具 举报

29#
ID:1055885 发表于 2023-1-21 22:22 来自手机 | 只看该作者
明记冷气 发表于 2023-1-20 20:58
这只是一个让几个步进电机可以在不同转速下运行的思路;
你要随意调速 把if里面的固定条件换成变量
在 ...

我用开发板测试了一下,数码管也带起来了,我是改变的定时器初值,不过这样定时器就比较局限,控制进入定时器次数应该可以更好
回复

使用道具 举报

30#
ID:1055885 发表于 2023-1-21 22:24 来自手机 | 只看该作者
Hjc12345678 发表于 2023-1-19 17:51
如果定时时间允许,这个方法很好!!!

能详细一点吗,怎么用一个定时器产生四个标志位呢,不断装入初值吗
回复

使用道具 举报

31#
ID:1044091 发表于 2023-1-26 12:22 来自手机 | 只看该作者
电机需要独立实时调速吗?那样要一个电机一个定时器比较好。如果只是转起来,共用一个定时器也行,产生4个标志位。
回复

使用道具 举报

32#
ID:1061592 发表于 2023-1-27 09:32 | 只看该作者
试试多线程
回复

使用道具 举报

33#
ID:161164 发表于 2023-1-27 10:26 | 只看该作者
叫大个不叫老朱 发表于 2023-1-21 22:24
能详细一点吗,怎么用一个定时器产生四个标志位呢,不断装入初值吗

參考一下

回复

使用道具 举报

34#
ID:1055885 发表于 2023-1-28 21:53 来自手机 | 只看该作者
ebrowser 发表于 2023-1-27 09:32
试试多线程

多线程成本高了
回复

使用道具 举报

35#
ID:1055885 发表于 2023-1-28 21:54 来自手机 | 只看该作者
ningsy 发表于 2023-1-26 12:22
电机需要独立实时调速吗?那样要一个电机一个定时器比较好。如果只是转起来,共用一个定时器也行,产生4个 ...

部分电机同时启动,但是不是同时停止
回复

使用道具 举报

36#
ID:1061711 发表于 2023-1-29 11:11 | 只看该作者
明记冷气 发表于 2023-1-15 00:07
用延时程序会造成整个程序大部分时间都卡在 延时上,,,整个程序运行效率不高
要学会用定时器,无论你控制几 ...

兄弟解答详细,学习了,牛XXX
回复

使用道具 举报

37#
ID:285175 发表于 2023-3-31 17:18 | 只看该作者
单片机在delay,肯定等delay完了才会去发脉冲,所以不能用delay。用定时器试试
回复

使用道具 举报

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

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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