新做的单片机控制步进电机简单实验
早几天网友让做个步进电机相关实验,正好也想了解一下步进电机,抽闲做了个简单例程,初学还请各位轻拍。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);
}
} 今天又给实验做了正反转功能,实验效果:单片机控制步进电机简单实验效果
加了两个按键,控制正反转:
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();
}
} 沙发 不错啊学习一下
这个电机多少钱啊 回复【2楼】wangzhq0618 替身
这个电机多少钱啊
-----------------------------------------------------------------------
电机是CIKY朋友DIY雕刻机所剩,
CIKY就拿来实验...
刚在淘宝上查了一下,
这种电机二手的三十左右应该可以拿下... 这个程序步进电机停转后一段时间会发热吧?或者你用低压驱动? 回复【4楼】z1234 无知者
-----------------------------------------------------------------------
用的低压驱动。。。 如果是低压驱动,不会是用电机上标的那个电压吧?如果这样电机的反应速度会很差的。 电机上标的是6V,0.33A,
实验时电压用的是5V,ULN2003A驱动电机,
未发热现象,
电机运转也不错。。。
看完 Z1234无知者 的提示,
换ULN2803驱动电机,
电压12V,
测试时,
发现电机运转,ULN2803芯片严重发热,
电机停止运转,芯片温度马上下降。。。
换个功率小些的电机测试,
电机运转正常,
ULN2803芯片温度也正常了,
不过又出现 Z1234无知者 所提示问题,
“步进电机停转后一段时间会发热”现象。。。
PS:
CIKY初涉单片机,
对步进电机更是了解甚少,
感谢 Z1234无知者 的提示。。。 标记! 估计你的情况是电机空转测试,在实际使用中电机在带负载的情况下运动都是高电压驱动的,至于发热这就是为何大多数成品步进电机驱动都有半流功能的原因。你的做法其实在许多步进电机教材、资料上都是这样,但很少提及半流功能,这就是很多教程误导使用者的原因。 图没画全吧?
电源,地都没接?
EA脚也没接。。。。。。。。 mark mark 经过一夜奋战,现在片子能控制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
实验实拍图 回复【10楼】Jmjmjm
-----------------------------------------------------------------------
经Jmjmjm提醒,
想起最近实验各种怪现象,
大概与偶片子上EA口悬空有关。。。 楼主是不是那个 D什么II的女朋友啊,我在另一个网站上看到他说的他女友做的。。。 楼主问一下 步进电机主要用于什么 那个方面 回复【16楼】williamrain
楼主问一下 步进电机主要用于什么 那个方面
-----------------------------------------------------------------------
williamrain有兴趣可看看:
http://baike.baidu.com/view/528900.htm 在键控4路步进电机实验的基础上,
设计了一个单字节多通道多步控制协议,
每条单字节命令可以控制4通道中任何一路的方向和步数,
51会返回电机的运行状态和命令执行结果。。。
还可以通过无线数传模块进行无线遥控操作。。。
上位机最新版 LP-COMM V2.20 串口调试软件,
以二进制模式测试控制协议。。。。
上位机调试:
http://cache.amobbs.com/bbs_upload782111/files_25/ourdev_532615.jpg
实验视频:串口控制4路步进电机 谢谢! 好资料。
步进电机的驱动,放到雕刻机分论坛吧。 mark 从楼主提供的资料中没看出半流控制?能说说你半流控制的原理吗? 标记 uln2003 2803也就能让小步进空载运行吧,阿莫的雕刻机上用的步进电机肯定带不动呵 非常好的实验,适合初学51和步进电机的朋友,对我是很有帮助。 超赞,basic的好东西。
有个建议把单字节命令搞成双字节或四字节,同时控制四个电机,配合buf,这样就有运动曲线了。
本来想说单字节来控制四路,想想通讯量太大,一定是个迟缓的执行机构,就改良了。
如果配合自动识别G代码的上位机,这不也是个串口接口板儿了!!!!前途无量。
另外,视频干吗佩钢琴曲阿?掩盖了电机的叫声。 不错的,可惜用达林顿电流太小,建议直接达林顿扩用IGBT,IGBT电压也可以吃的大,出来的电流自然不在话下,当然mosfet是更好的
选择。 在牛年最后一天完成进一步改进....
上位机调试截图:
http://cache.amobbs.com/bbs_upload782111/files_26/ourdev_533740.jpg
实验视频:单片机控制多路步进电机实验视频 回复【25楼】Argee
-----------------------------------------------------------------------
实验用的电机较小,
电机运转时声音较小,几近听不到... 谢谢! 好资料。 上位机软件是自己写的?不错啊!2803电流小不是问题,可以考虑并联啊!毕竟便宜啊 uchar MOTOR_H = {0x20,0x30,0x10,0x18,0x08,0x48,0x40,0x60};
请问这数组是怎样得到的? 我买的一个开发板送了一个步进电机有五条线,请问这些线分别是什么作用的,
颜色顺序是:橙色,黄色,红色,蓝色,粉红色。 学习 回复【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线步进电机半步时序。。。
相同型号,不同厂家生产的步进电机可能是不同的,
线的颜色也会有所不同。。。 好帖收藏 好~收藏,THK 好,收了 mark 能把上位机和下位机的程序传上来吗?谢谢! mark 羡慕阿~~~自己能写 上位机软件 ~~~ mark 观摩观摩 回复【39楼】jindaofu
能把上位机和下位机的程序传上来吗?谢谢!
-----------------------------------------------------------------------
对上位机软件~~有兴趣~~~ mark LZ是女的?牛啊。 回复【25楼】Argee
超赞,basic的好东西。
有个建议把单字节命令搞成双字节或四字节,同时控制四个电机,配合buf,这样就有运动曲线了。
本来想说单字节来控制四路,想想通讯量太大,一定是个迟缓的执行机构,就改良了。
如果配合自动识别g代码的上位机,这不也是个串口接口板儿了!!!!前途无量。
另外,视频干吗佩钢琴曲阿?掩盖了电机的叫声。
-----------------------------------------------------------------------
学习 顶一下 现在专用的电机驱动器很多,细分数也大。
自己做,细分是不是很麻烦?
没细分,噪声大。 能用2路脉冲比如相位相差90°的A 、B脉冲 通过单片机实现它的正反转吗? mark mark 好贴留名 mark mark 备用 记号 回复【楼主位】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 好资料,适合学习,记号了! mark 楼主只是晒了一下自己的技术,没有提供实际的制作资料,公布的都是些加了BUG的代码。 mark 好帖!收藏! mark 收藏 学习了 mark mark,备用,现在正在捣鼓小车 看看吧 mark mark mark1! MARK 你用低压驱动? 2803和2003是达林顿管,驱动电流也就里0。5A,因此功率不大,最好使用MOSFET驱动,IGBT不太熟悉,可能会贵些。 楼主步进电机搞了不少呀,我也收集了有二三十个,小的有直径1公分左右的,大的有8公分左右。 mark mark!!! 强人啊 步进电机驱动芯片TA8435 mark 学好基础,顶了 mark xuexi! mark~ MARK 好帖,学习学习 mark mark 能把上位机和下位机的程序传上来吗?谢谢! mark。另一种方法控制步进电机。不错不错~! 进来学习一下,犀利啊。 看看 mark! 一直想驱动步进, 以前做过实验, 用ULN2003驱动 42步进, 发热厉害.
大步进, 还是需要至少2A的驱动片, 比如 3977 回复【30楼】jiugui2010
-----------------------------------------------------------------------
我也想知道写软件的问题。 很详细,认真学习 我最近也在学步进,mark 请问LZ我也向写一个上位机的控制 但是发现点机运行时总是一顿一顿的 不是很流畅时怎么回事 mark
页:
[1]
2