ciky 发表于 2010-2-2 03:45:08

新做的单片机控制步进电机简单实验

早几天网友让做个步进电机相关实验,正好也想了解一下步进电机,抽闲做了个简单例程,初学还请各位轻拍。

PS:之前所用单片机AT89S51烧坏,便改用了AT89S52。。。

软件:
a.        Keil uVision3.0;
b.        Easy 51Pro v2.0;
硬件:
a.        51最小系统板(带步进电机接口);
b.        1个四相六线步进电机;
(1)硬件电路原理:
http://cache.amobbs.com/bbs_upload782111/files_25/ourdev_531641.jpg
单片机控制电路原理图

图为单片机控制步进电机实例最小设计,其中单片机采用AT89S52。实验所用步进电机6根引线排列次序为:白白棕蓝红黄

(2)测试成功的源代码:
/****************************************************
* 声明:      此制作为CIKY单片机学习过程,欢迎爱好者
*            一起学习和探讨,共同进步。
* Title:       单片机控制步进电机简单例程
* Description: 单片机控制步进电机半步方式工作.实验采
*            用实验板上已有步进电机接口,输出端口为
*            P2^3-P2^6,整体将步进电机半步时序右移
*                     一位。
* @author:   CIKY
* Date:      Feb. 02, 2009
****************************************************/
#include <reg52.h>

#define uchar unsigned char

uchar MOTOR_H = {0x20,0x30,0x10,0x18,0x08,0x48,0x40,0x60};       
                                //步进电机半步时序

// 0000 100008
// 0001 100018
// 0001 000010
// 0011 000030
// 0010 000020
// 0110 000060
// 0100 000040
// 0100 100048

// 0010 000020
// 0011 000030
// 0001 000010
// 0001 100018
// 0000 100008
// 0100 100048
// 0100 000040
// 0110 000060   

///////////////////////延时函数////////////////////////////////
void Delay(uchar n)
{
        uchar i;

        while(n--)
        {
                i=20;
                while(i--);
        }
}

///////////////////主程序入口//////////////////////
void main(void)
{
         uchar step = 0;

        P1=0xf0;

        while(1)
        {
                P1 = MOTOR_H;
               
                step ++;
                step %= 8;

                Delay(10);
        }
}

ciky 发表于 2010-2-3 06:07:33

今天又给实验做了正反转功能,实验效果:单片机控制步进电机简单实验效果

加了两个按键,控制正反转:
http://cache.amobbs.com/bbs_upload782111/files_25/ourdev_532021.jpg
四相六线步进电机

http://cache.amobbs.com/bbs_upload782111/files_25/ourdev_532022.jpg
实验实拍

http://cache.amobbs.com/bbs_upload782111/files_25/ourdev_532023.jpg
电路原理图



/****************************************************

* 声明:      此制作为CIKY单片机学习过程,欢迎爱好者

*            一起学习和探讨,共同进步。

* Title:       单片机控制步进电机正反转

* Description: 在原单片机控制步进电机简单例程中增加正

*            反转功能。

* @author:   CIKY

* Date:      Feb. 03, 2009

****************************************************/

#include <reg51.h>



#define uchar unsigned char



sbit zKey=P2^0; //正转

sbit fKey=P2^1;//反转



uchar MOTOR_H = {0x20,0x30,0x10,0x18,0x08,0x48,0x40,0x60};

                                                       //半步工作方式时序数组

uchar step = 0;    //时序数组下标



// 0000 100008

// 0001 100018

// 0001 000010

// 0011 000030

// 0010 000020

// 0110 000060

// 0100 000040

// 0100 100048



// 0010 000020

// 0011 000030

// 0001 000010

// 0001 100018

// 0000 100008

// 0100 100048

// 0100 000040

// 0110 000060   

///////////////////////延时函数//////////////////////

void Delay(uchar n)

{

      uchar i;



      while(n--)

      {

             i=20;

             while(i--);

      }

}


/////////////步进电机方向控制选择函数////////////////////

void fun_transferSelCtrl()

{

       if(zKey==0)//正转

             step++;
   

       if(fKey==0)//反转

            step--;

step % = 8;

P1 = MOTOR_H;

delay(5);

}



////////////////////////主程序入口/////////////////////////

void main(void)                                                

{

   P1=0xf0;

      P2=0xff;

      step = 0;



      while(1)

      {

            fun_transferSelCtrl();

      }

}

wangzhq0618 发表于 2010-2-3 13:43:13

沙发   不错啊学习一下
这个电机多少钱啊

ciky 发表于 2010-2-3 15:38:25

回复【2楼】wangzhq0618 替身

这个电机多少钱啊
-----------------------------------------------------------------------

电机是CIKY朋友DIY雕刻机所剩,
CIKY就拿来实验...

刚在淘宝上查了一下,
这种电机二手的三十左右应该可以拿下...

z1234 发表于 2010-2-3 18:00:20

这个程序步进电机停转后一段时间会发热吧?或者你用低压驱动?

ciky 发表于 2010-2-3 18:09:05

回复【4楼】z1234 无知者
-----------------------------------------------------------------------


用的低压驱动。。。

z1234 发表于 2010-2-3 22:29:27

如果是低压驱动,不会是用电机上标的那个电压吧?如果这样电机的反应速度会很差的。

ciky 发表于 2010-2-4 03:23:19

电机上标的是6V,0.33A,
实验时电压用的是5V,ULN2003A驱动电机,
未发热现象,
电机运转也不错。。。

看完 Z1234无知者 的提示,
换ULN2803驱动电机,
电压12V,
测试时,
发现电机运转,ULN2803芯片严重发热,
电机停止运转,芯片温度马上下降。。。

换个功率小些的电机测试,
电机运转正常,
ULN2803芯片温度也正常了,

不过又出现 Z1234无知者 所提示问题,
“步进电机停转后一段时间会发热”现象。。。


PS:

CIKY初涉单片机,
对步进电机更是了解甚少,
感谢 Z1234无知者 的提示。。。

21006091 发表于 2010-2-4 04:49:22

标记!

z1234 发表于 2010-2-4 12:15:42

估计你的情况是电机空转测试,在实际使用中电机在带负载的情况下运动都是高电压驱动的,至于发热这就是为何大多数成品步进电机驱动都有半流功能的原因。你的做法其实在许多步进电机教材、资料上都是这样,但很少提及半流功能,这就是很多教程误导使用者的原因。

Jmjmjm 发表于 2010-2-4 16:11:29

图没画全吧?
电源,地都没接?
EA脚也没接。。。。。。。。

ksniper 发表于 2010-2-4 16:14:24

mark

williamrain 发表于 2010-2-4 16:19:44

mark

ciky 发表于 2010-2-4 20:27:40

经过一夜奋战,现在片子能控制4路步进电机,带半流功能,实验效果: 单片机控制4路步进电机

http://cache.amobbs.com/bbs_upload782111/files_25/ourdev_532461.jpg
自己设计的4路步进电机驱动板

http://cache.amobbs.com/bbs_upload782111/files_25/ourdev_532462.jpg
实验实拍图

ciky 发表于 2010-2-4 20:47:38

回复【10楼】Jmjmjm
-----------------------------------------------------------------------
经Jmjmjm提醒,
想起最近实验各种怪现象,
大概与偶片子上EA口悬空有关。。。

pangxie84 发表于 2010-2-4 21:04:07

楼主是不是那个 D什么II的女朋友啊,我在另一个网站上看到他说的他女友做的。。。

williamrain 发表于 2010-2-4 23:38:31

楼主问一下 步进电机主要用于什么 那个方面

ciky 发表于 2010-2-5 00:20:57

回复【16楼】williamrain
楼主问一下 步进电机主要用于什么 那个方面
-----------------------------------------------------------------------
williamrain有兴趣可看看:
         http://baike.baidu.com/view/528900.htm

ciky 发表于 2010-2-6 04:32:12

在键控4路步进电机实验的基础上,
设计了一个单字节多通道多步控制协议,
每条单字节命令可以控制4通道中任何一路的方向和步数,
51会返回电机的运行状态和命令执行结果。。。
还可以通过无线数传模块进行无线遥控操作。。。

上位机最新版 LP-COMM V2.20 串口调试软件,
以二进制模式测试控制协议。。。。
上位机调试:
http://cache.amobbs.com/bbs_upload782111/files_25/ourdev_532615.jpg


实验视频:串口控制4路步进电机

armok 发表于 2010-2-6 06:25:42

谢谢! 好资料。

步进电机的驱动,放到雕刻机分论坛吧。

gxy508 发表于 2010-2-6 08:53:56

mark

z1234 发表于 2010-2-7 14:20:38

从楼主提供的资料中没看出半流控制?能说说你半流控制的原理吗?

wanglituan 发表于 2010-2-7 17:58:41

标记

moan 发表于 2010-2-7 18:45:50

uln2003 2803也就能让小步进空载运行吧,阿莫的雕刻机上用的步进电机肯定带不动呵

CNCxinshou 发表于 2010-2-9 00:18:17

非常好的实验,适合初学51和步进电机的朋友,对我是很有帮助。

Argee 发表于 2010-2-9 00:42:17

超赞,basic的好东西。

有个建议把单字节命令搞成双字节或四字节,同时控制四个电机,配合buf,这样就有运动曲线了。
本来想说单字节来控制四路,想想通讯量太大,一定是个迟缓的执行机构,就改良了。

如果配合自动识别G代码的上位机,这不也是个串口接口板儿了!!!!前途无量。

另外,视频干吗佩钢琴曲阿?掩盖了电机的叫声。

ju748 发表于 2010-2-9 07:06:41

不错的,可惜用达林顿电流太小,建议直接达林顿扩用IGBT,IGBT电压也可以吃的大,出来的电流自然不在话下,当然mosfet是更好的

选择。

ciky 发表于 2010-2-13 12:48:20

在牛年最后一天完成进一步改进....

上位机调试截图:
http://cache.amobbs.com/bbs_upload782111/files_26/ourdev_533740.jpg


实验视频:单片机控制多路步进电机实验视频

ciky 发表于 2010-2-13 12:50:29

回复【25楼】Argee
-----------------------------------------------------------------------

实验用的电机较小,
电机运转时声音较小,几近听不到...

weiliang08 发表于 2010-2-13 14:16:11

谢谢! 好资料。

jiugui2010 发表于 2010-2-14 16:35:32

上位机软件是自己写的?不错啊!2803电流小不是问题,可以考虑并联啊!毕竟便宜啊

guocai 发表于 2010-2-27 14:43:56

uchar MOTOR_H = {0x20,0x30,0x10,0x18,0x08,0x48,0x40,0x60};
请问这数组是怎样得到的?

guocai 发表于 2010-2-27 14:46:05

我买的一个开发板送了一个步进电机有五条线,请问这些线分别是什么作用的,
颜色顺序是:橙色,黄色,红色,蓝色,粉红色。

wcm_e 发表于 2010-2-27 23:47:56

学习

ciky 发表于 2010-3-8 00:06:08

回复【31楼】guocai

uchar MOTOR_H = {0x20,0x30,0x10,0x18,0x08,0x48,0x40,0x60};
请问这数组是怎样得到的?

我买的一个开发板送了一个步进电机有五条线,请问这些线分别是什么作用的,
颜色顺序是:橙色,黄色,红色,蓝色,粉红色。
-----------------------------------------------------------------------

uchar MOTOR_H = {0x20,0x30,0x10,0x18,0x08,0x48,0x40,0x60};
为实验中所用6线步进电机半步时序。。。

相同型号,不同厂家生产的步进电机可能是不同的,
线的颜色也会有所不同。。。

jielove2003 发表于 2010-3-8 00:38:28

好帖收藏

damoplus 发表于 2010-3-8 09:09:38

好~收藏,THK

weiliang08 发表于 2010-3-8 11:03:09

好,收了

12fen 发表于 2010-3-12 15:44:24

mark

jindaofu 发表于 2010-3-12 20:27:41

能把上位机和下位机的程序传上来吗?谢谢!

moon0213 发表于 2010-3-13 00:09:40

mark

jrcsh 发表于 2010-3-21 03:27:06

羡慕阿~~~自己能写 上位机软件 ~~~

crose0106 发表于 2010-3-21 15:27:13

mark

flybird2010 发表于 2010-4-7 23:31:32

观摩观摩

jrcsh 发表于 2010-4-8 00:43:53

回复【39楼】jindaofu
能把上位机和下位机的程序传上来吗?谢谢!
-----------------------------------------------------------------------

对上位机软件~~有兴趣~~~

watter 发表于 2010-4-10 23:30:36

mark

zheshiwo 发表于 2010-4-15 20:14:16

LZ是女的?牛啊。

flybird2010 发表于 2010-4-29 22:00:19

回复【25楼】Argee
超赞,basic的好东西。
有个建议把单字节命令搞成双字节或四字节,同时控制四个电机,配合buf,这样就有运动曲线了。
本来想说单字节来控制四路,想想通讯量太大,一定是个迟缓的执行机构,就改良了。
如果配合自动识别g代码的上位机,这不也是个串口接口板儿了!!!!前途无量。
另外,视频干吗佩钢琴曲阿?掩盖了电机的叫声。
-----------------------------------------------------------------------

学习

thinki 发表于 2010-5-6 02:14:22

顶一下

Excellence 发表于 2010-5-6 08:37:38

现在专用的电机驱动器很多,细分数也大。
自己做,细分是不是很麻烦?
没细分,噪声大。

ivan261024 发表于 2010-5-11 13:06:39

能用2路脉冲比如相位相差90°的A 、B脉冲 通过单片机实现它的正反转吗?

majia_0517 发表于 2010-5-20 23:53:35

mark

wuxi_stl 发表于 2010-5-21 08:18:50

mark

2004353215 发表于 2010-5-21 10:33:35

好贴留名

li20030505 发表于 2010-6-28 22:02:09

mark

weiliang08 发表于 2010-6-28 22:03:54

mark 备用

zjj2010 发表于 2010-6-29 23:52:21

记号

ss_moyo 发表于 2010-7-13 08:57:18

回复【楼主位】ciky
-----------------------------------------------------------------------
LZ我有些疑问的地方:

下面是你的电机控制时序,但你的图中显示是P10-P13来控制电机的,为什么时序中涉及了P14-P17.
根据时序猜测应该是用P13-P16来控制电机的。



uchar MOTOR_H = {0x20,0x30,0x10,0x18,0x08,0x48,0x40,0x60};
//步进电机半步时序

// 0000 100008
// 0001 100018
// 0001 000010
// 0011 000030
// 0010 000020
// 0110 000060
// 0100 000040
// 0100 100048

// 0010 000020
// 0011 000030
// 0001 000010
// 0001 100018
// 0000 100008
// 0100 100048
// 0100 000040
// 0110 000060

tuowai 发表于 2010-8-22 21:32:05

好资料,适合学习,记号了!

tongyf 发表于 2010-11-19 11:53:23

mark

bland 发表于 2010-11-20 21:30:01

楼主只是晒了一下自己的技术,没有提供实际的制作资料,公布的都是些加了BUG的代码。

luzj05 发表于 2011-3-29 16:55:58

mark

wsxqazx 发表于 2011-3-29 21:00:53

好帖!收藏!

lixupeng 发表于 2011-3-29 21:42:44

mark

shirley1214 发表于 2011-3-31 12:46:58

收藏

ARMXIN 发表于 2011-3-31 12:59:59

学习了

samkkk 发表于 2011-3-31 15:29:34

mark

xiaolei0428 发表于 2011-4-1 12:38:37

mark,备用,现在正在捣鼓小车

ken_ly 发表于 2011-5-6 00:53:27

看看吧

wpnx 发表于 2011-5-6 09:12:40

mark

bu_kai_hu 发表于 2011-5-7 04:54:14

mark

samkkk 发表于 2011-5-7 06:13:45

mark1!

sfq2008 发表于 2011-5-7 07:56:11

MARK

289125361 发表于 2011-5-8 02:22:23

你用低压驱动?

kerrwang 发表于 2011-5-8 08:57:25

2803和2003是达林顿管,驱动电流也就里0。5A,因此功率不大,最好使用MOSFET驱动,IGBT不太熟悉,可能会贵些。

HYLG 发表于 2011-5-8 09:05:05

楼主步进电机搞了不少呀,我也收集了有二三十个,小的有直径1公分左右的,大的有8公分左右。

zprs 发表于 2011-5-8 11:26:43

mark

lixupeng 发表于 2011-5-16 23:43:11

mark!!!

28571840 发表于 2011-8-7 19:39:28

强人啊

dahuangabc 发表于 2011-8-7 20:58:27

步进电机驱动芯片TA8435

duanduanr 发表于 2011-8-10 22:15:20

mark

hebill 发表于 2011-8-19 21:09:41

学好基础,顶了

qq20707 发表于 2011-8-27 20:28:02

mark

lanjingjing 发表于 2011-8-27 22:13:58

xuexi!

Jimmyxu 发表于 2011-8-30 13:16:15

mark~

blackhorse21 发表于 2011-8-30 14:15:53

MARK

qfxian 发表于 2011-8-30 15:23:42

好帖,学习学习

weiliang08 发表于 2011-8-30 23:07:33

mark

xintaisniper 发表于 2011-10-16 11:14:31

mark

wcs1668 发表于 2011-11-30 20:11:52

能把上位机和下位机的程序传上来吗?谢谢!

qingfengpark 发表于 2011-11-30 21:24:07

mark。另一种方法控制步进电机。不错不错~!

lin562794072 发表于 2011-11-30 21:50:17

进来学习一下,犀利啊。

zkflsq 发表于 2011-12-1 23:05:55

看看

Crane 发表于 2011-12-7 14:09:45

mark!

aahui 发表于 2011-12-13 11:54:39

一直想驱动步进, 以前做过实验, 用ULN2003驱动 42步进, 发热厉害.
大步进, 还是需要至少2A的驱动片, 比如 3977

ljj977 发表于 2011-12-20 15:17:46

回复【30楼】jiugui2010
-----------------------------------------------------------------------

我也想知道写软件的问题。

iSTC 发表于 2011-12-27 23:36:57

很详细,认真学习

stingxing 发表于 2011-12-28 23:32:02

我最近也在学步进,mark

nyq123ok1 发表于 2012-1-2 10:39:00

请问LZ我也向写一个上位机的控制   但是发现点机运行时总是一顿一顿的 不是很流畅时怎么回事

309794325 发表于 2012-1-5 11:45:08

mark
页: [1] 2
查看完整版本: 新做的单片机控制步进电机简单实验