标题: 有没有办法能让51单片机控制多路步进电机时,各个电机独立控制,互不干扰? [打印本页]

作者: 叫大个不叫老朱    时间: 2023-1-13 15:19
标题: 有没有办法能让51单片机控制多路步进电机时,各个电机独立控制,互不干扰?
遇到一个问题,我用Delay函数做延时语句时,一路步进电机减速时,其他电机也跟着减速,有没有什么办法能解决呢?
作者: npn    时间: 2023-1-13 21:17
程序逻辑有问题,控制多个步进电机用定时器中断。
作者: ziiyn    时间: 2023-1-13 22:09
用定时器产生脉冲,一个定时器控制一路电机。一般单片机都有2个以上定时器
作者: a185980800    时间: 2023-1-13 23:03
不用Delay,改定时器用。
作者: 叫大个不叫老朱    时间: 2023-1-14 12:08
ziiyn 发表于 2023-1-13 22:09
用定时器产生脉冲,一个定时器控制一路电机。一般单片机都有2个以上定时器

如果控制4路呢,52单片机只有两个定时器
作者: 叫大个不叫老朱    时间: 2023-1-14 12:10
npn 发表于 2023-1-13 21:17
程序逻辑有问题,控制多个步进电机用定时器中断。

控制4路步进电机要怎么分配定时器呢?
作者: ziiyn    时间: 2023-1-14 15:50
叫大个不叫老朱 发表于 2023-1-14 12:08
如果控制4路呢,52单片机只有两个定时器

换单片机,STC15有3路定时器加PCA模块配成1路定时器。或者直接换成有5个定时器的单片机,按键扫描和显示之类的最好再用一个定时器
作者: ziiyn    时间: 2023-1-14 15:52
叫大个不叫老朱 发表于 2023-1-14 12:08
如果控制4路呢,52单片机只有两个定时器

非要用52的话就只有用两个单片机,两个单片机进行通讯联动控制
作者: ziiyn    时间: 2023-1-14 15:54
叫大个不叫老朱 发表于 2023-1-14 12:08
如果控制4路呢,52单片机只有两个定时器

我记得52有T0 ,T1 ,T2, 3个定时器的吧
作者: lkc8210    时间: 2023-1-14 17:52
本帖最后由 lkc8210 于 2023-1-14 20:33 编辑
叫大个不叫老朱 发表于 2023-1-14 12:08
如果控制4路呢,52单片机只有两个定时器

用一个定时器产生四个心跳标志位
各步进根据各自的标志位逐步输出
作者: npn    时间: 2023-1-14 20:25
叫大个不叫老朱 发表于 2023-1-14 12:10
控制4路步进电机要怎么分配定时器呢?

用74HC595控制100路都可以。
作者: 明记冷气    时间: 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个电机不同转速都不会卡



作者: 叫大个不叫老朱    时间: 2023-1-15 00:52
ziiyn 发表于 2023-1-14 15:54
我记得52有T0 ,T1 ,T2, 3个定时器的吧

是的,我记错了,尴尬
作者: 叫大个不叫老朱    时间: 2023-1-15 00:55
ziiyn 发表于 2023-1-14 15:52
非要用52的话就只有用两个单片机,两个单片机进行通讯联动控制

联动控制应该可以的,显示和检测用一个单片机,动作部分用另一个单片机
作者: 明记冷气    时间: 2023-1-15 09:48
叫大个不叫老朱 发表于 2023-1-15 00:55
联动控制应该可以的,显示和检测用一个单片机,动作部分用另一个单片机

只要单片机IO足够,并且显示不是很复杂一个单片机就可以处理,
作者: 624353765    时间: 2023-1-15 09:58
学过红外线发射函数吗?使用一个定时器就能同时控制多个步进电机,通过载波把步进电机所有信号载入波形中
作者: ningsy    时间: 2023-1-16 07:08
真正写程序时用定时器,不用delay。
作者: 叫大个不叫老朱    时间: 2023-1-16 07:21
明记冷气 发表于 2023-1-15 09:48
只要单片机IO足够,并且显示不是很复杂一个单片机就可以处理,

数码管动态显示和步进电机需要同时工作,还要加入光电检测,我在网上找了很久没有解决办法,大部分都说需要两个单片机
作者: 叫大个不叫老朱    时间: 2023-1-16 07:23
qq624353765 发表于 2023-1-15 09:58
学过红外线发射函数吗?使用一个定时器就能同时控制多个步进电机,通过载波把步进电机所有信号载入波形中

哈哈,还没学,我现在去学,我自己DIY一个机器,0基础开始学,用到什么学什么,有思路我就一定能做出来
作者: 叫大个不叫老朱    时间: 2023-1-16 07:33
qq624353765 发表于 2023-1-15 09:58
学过红外线发射函数吗?使用一个定时器就能同时控制多个步进电机,通过载波把步进电机所有信号载入波形中

我要实现的是两个以上的步进电机在某一时段同时工作,其中某个步进电机减速,但是其他步进还能正常运转,红外能实现吗
作者: ningsy    时间: 2023-1-16 11:53
叫大个不叫老朱 发表于 2023-1-16 07:21
数码管动态显示和步进电机需要同时工作,还要加入光电检测,我在网上找了很久没有解决办法,大部分都说需 ...

用STC8H8K64U,有5个定时器,64kb flash,一片就够了。STC8H1K08系列有3个定时器,flash也小多了只有8K不一定够用,代码还要复杂一点点,能省几块钱,如果是做设备没必要。
作者: STC庄伟    时间: 2023-1-16 14:23
用 STC8G2K64S4-36I-LQFP48/LQFP32, 有 45路步进电机专用增强型15位PWM, 可以同时控制 45路 步进电机
作者: zgrfox110    时间: 2023-1-18 07:59
用一个定时器就行,定时时间短点,然后各电机的时间累加。判断到时间了就控制电机信号或标志位!
作者: 叫大个不叫老朱    时间: 2023-1-18 11:19
STC庄伟 发表于 2023-1-16 14:23
用 STC8G2K64S4-36I-LQFP48/LQFP32, 有 45路步进电机专用增强型15位PWM, 可以同时控制 45路 步进电机

我感觉我可能不会用
作者: 叫大个不叫老朱    时间: 2023-1-18 11:41
明记冷气 发表于 2023-1-15 00:07
用延时程序会造成整个程序大部分时间都卡在 延时上,,,整个程序运行效率不高
要学会用定时器,无论你控制几 ...

这个思路是启动时间不同吧,脉冲发生频率应该要怎样呢
作者: 叫大个不叫老朱    时间: 2023-1-18 11:44
lkc8210 发表于 2023-1-14 17:52
用一个定时器产生四个心跳标志位
各步进根据各自的标志位逐步输出

这个对我来说就有点超纲了,刚接触单片机不久
作者: Hjc12345678    时间: 2023-1-19 17:51
lkc8210 发表于 2023-1-14 17:52
用一个定时器产生四个心跳标志位
各步进根据各自的标志位逐步输出

如果定时时间允许,这个方法很好!!!
作者: 明记冷气    时间: 2023-1-20 20:58
叫大个不叫老朱 发表于 2023-1-18 11:41
这个思路是启动时间不同吧,脉冲发生频率应该要怎样呢

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

作者: 叫大个不叫老朱    时间: 2023-1-21 22:22
明记冷气 发表于 2023-1-20 20:58
这只是一个让几个步进电机可以在不同转速下运行的思路;
你要随意调速 把if里面的固定条件换成变量
在 ...

我用开发板测试了一下,数码管也带起来了,我是改变的定时器初值,不过这样定时器就比较局限,控制进入定时器次数应该可以更好
作者: 叫大个不叫老朱    时间: 2023-1-21 22:24
Hjc12345678 发表于 2023-1-19 17:51
如果定时时间允许,这个方法很好!!!

能详细一点吗,怎么用一个定时器产生四个标志位呢,不断装入初值吗
作者: ningsy    时间: 2023-1-26 12:22
电机需要独立实时调速吗?那样要一个电机一个定时器比较好。如果只是转起来,共用一个定时器也行,产生4个标志位。
作者: ebrowser    时间: 2023-1-27 09:32
试试多线程
作者: lkc8210    时间: 2023-1-27 10:26
叫大个不叫老朱 发表于 2023-1-21 22:24
能详细一点吗,怎么用一个定时器产生四个标志位呢,不断装入初值吗

參考一下


作者: 叫大个不叫老朱    时间: 2023-1-28 21:53
ebrowser 发表于 2023-1-27 09:32
试试多线程

多线程成本高了
作者: 叫大个不叫老朱    时间: 2023-1-28 21:54
ningsy 发表于 2023-1-26 12:22
电机需要独立实时调速吗?那样要一个电机一个定时器比较好。如果只是转起来,共用一个定时器也行,产生4个 ...

部分电机同时启动,但是不是同时停止
作者: 机械神童    时间: 2023-1-29 11:11
明记冷气 发表于 2023-1-15 00:07
用延时程序会造成整个程序大部分时间都卡在 延时上,,,整个程序运行效率不高
要学会用定时器,无论你控制几 ...

兄弟解答详细,学习了,牛XXX
作者: .小破孩    时间: 2023-3-31 17:18
单片机在delay,肯定等delay完了才会去发脉冲,所以不能用delay。用定时器试试




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1