研究生
最后登录1970-1-1
在线时间 小时
注册时间2016-11-8
|
28YJ48步进电机,48的含义就是驱动方式为4相8拍。步距角度为5.625/64,减速比为1:64。由此可知当内部转子转了5.625度,则外部输出轴转(5.628/64)度。步进电机的工作方式是给一个脉冲转一步,所以要想让外部输出轴旋转360度,则需要360/(5.625/64)=4096个脉冲。下面来介绍如何驱动,我直接用现成的ULN2003驱动模块,一端接单片机的IO口,另一端接步进电机的线(不用担心线会接错,因为有防反插设计),然后是供电端,我是直接用开发板的5V供电,如果步进电机的驱动电压比较高,那就需要外接电源,且需要共地。身为新手的我,只想整理下自己所学,大神不喜勿喷!!,下面是51的程序:虽然我精确的给了4096个脉冲,可外部输出并没精确的转了一周,差了20度左右,附件里的压缩包有视频,不知道哪位同志有没有方法可以改进,欢迎交流讨论。
#include<reg51.h>
#define uint unsigned int
#define uchar unsigned char
#define motor P1
uint i,j;
uint N=4096; //4096个脉冲
uchar code table1[]={0x01,0x03,0x02,0x06,0x04,0x0c,0x08,0x09}; //顺时针旋转
uchar code table2[]={0x01,0x09,0x08,0x0c,0x04,0x06,0x02,0x03}; //逆时针旋转
void main()
{
TMOD=0x01; //设置定时器0为方式1
TH0=0xf8;
TL0=0x30; //每2ms进入定时器中断
EA=1; //开总中断
ET0=1; //开定时器中断
motor=table1[0]; //步进电机定位
TR0=1; //开启定时器0
while(1);
}
void ser() interrupt 1
{
TH0=0xf8; //定时器重装
TL0=0x30;
j++;
if(j>=8)
j=0;
motor=table1[j];
N--;
if(N==0)
{
TR0=0;
motor=0;
}
}
|
|