Ⅰ 5线4相步进电机如何应用51单片机实现单步运转,求C程序(用ULN2003控制电机)
ULN2003驱动电机可能不够吧。你电机是什么参数?
根据你电机的控制时序图,一个口一个口的去控制就行了。
Ⅱ AT89S52或S51单片机控制步进电机的汇编语言程序
P0口做驱动要加上拉电阻,建议用P1口驱动,这是一个步进电机的驱动,如果驱动两个,可以在每个电机的VCC分别用一个继电器做开关
;这是一个使用单片机通过NUL2003驱动步进电机程序.
;步进电机: 5伏,500MA/STEP.
;将步进电机的A B C D四个绕组连接到UML2003A的13,14,15,16,P1口的4567分别接UML2003A的1234脚,将公用抽头并接在VCC上.
BUFF_STEP EQU 21H
SW1 BIT P3.1
org 000h
JMP START
ORG 100H
;----------------------------------------
start:MOV BUFF_STEP,#00H
mov P0,#0fFh ;初始化MCU端口
mov P1,#0ffh
mov P3,#0ffh
MOV P2,#0ffH
MOV A,#00H ;初始化寄存器
MOV PSW,#00H
MOV IE,#00H
MOV SP,#30H
MAIN: JNB SW1,CCW_LP ;正常电机正向转动
MOV DPTR,#TAB_CW ;按下SW1(P31)键,电机反向转动
JMP LOOP
CCW_LP:MOV DPTR,#TAB_CCW
LOOP: MOV A,BUFF_STEP
MOVC A,@A+DPTR
MOV P1,A ;这里可以改成用P0口驱动
LCALL DEL
INC BUFF_STEP
MOV A,BUFF_STEP
CJNE A,#08H,MAIN
MOV BUFF_STEP,#00H
JMP MAIN
DEL: MOV R6,#500
DEL0: MOV R7,#200
DJNZ R7,$
DJNZ R6,DEL0
RET
TAB_CW: DB 10001111B,11001111B,01001111B,01101111B,00101111B,00111111B,00011111B,10011111B ;正转相序(八拍)
TAB_CCW: DB 10001111B,10011111B,00011111B,00111111B,00101111B,01101111B,01001111B,11001111B, ;反转相序(八拍)
END
再给你一个串口通信的程序,你自己按需要改吧,是用MAX232转换电平
ORG 0000H
AJMP MAIN
ORG 0023H
AJMP RECEIVE ;跳转到接收中断入口
ORG 0030H
MAIN: MOV TMOD,#20H ;T1工作方式2
MOV TH1,#0FDH ;波特率9600
MOV SCON,#50H ;传口工作方式1,允许中断接受
SETB EA ;打开总中断
SETB ES ;打开串口中断
SETB TR1 ;打开定时器1
AJMP $
RECEIVE:
CLR RI
MOV A,SBUF ;串口接收数据
MOV R0,A
MOV SBUF,A ;将接收的数据再传送给计算机
JNB TI,$
CLR TI
MOV A,R0
MOV DPTR,#TAB ;查表显示
MOVC A,@A+DPTR
MOV P2,#0FFH
NOP
MOV P2,#00H ;送LED显示
MOV P0,A
RETI
TAB: DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H ;共阳字码表
END
Ⅲ 单片机控制一相步进电机的汇编程序,谢谢
ORG 00H
START: MOV DPTR , #TAB1
MOV R0, #03H
MOV R1 , #4H
MOV R4, #00H
MOV P0, #03H
WAIT: MOV P0, R0
MOV P0, #0FFH
JNB P3.4,TIZ ;P3.4有停止键按下时,跳到停止子程序专
JNB P3.0,ZHENG ;P3.0有启动正转键按下时,跳到停止子程序
JNB P3.1,FAN
SJMP WAIT
ZHENG : ;正转子属程序
MOV A,R4
MOVC A,@A+DPTR
ACALL DELAY
INC R4
AJMP KEY
Ⅳ 单片机步进电机控制实验,求编程代码,最好汇编语言,c也行
^#include<reg51.h>
#define uchar unsigned char
uchar stepd[]={0x01,0x03,0x02,0x06,0x04,0xc0,0x08,0x09};
uchar num=0,fx=0;
sbit key1=P3^;
sbit key2=P3^1;
sbit key3=P3^2;
uchar stepn;
void t0isr() interrupt 1
{
TH0=(65536-10000)/256;
TL0=(65536-10000)%256;
P2=stepd[num];
if(fx==0){num++;num%=8;}
if(fx==1)
{
if(num==0)num=7;
else num--;
}
stepn--;
if(stepn==0)TR0=0;
}
main()
{
TMOD=0x01;
TH0=(65536-10000)/256;
TL0=(65536-10000)%256;
TR0=1;
ET0=1;
EA=1;
stepn=200;
while(1)
{
if(key1==0)
{
while(key1==0);
TR0=~TR0;
}
if(key2==0)
{
while(key2==0);
fx=0;
}
if(key3==0)
{
while(key3==0);
fx=1;
}
}
}
Ⅳ 关于51单片机控制步进电机编程(c语言),求助
#include<reg52.h>
#defineucharunsignedchar
#defineuintunsignedint
ucharkey_l,key,i;
ucharcodetemp1[]={0x01,0x03,0x02,0x06,0x04,0x0c,0x08,0x09};
ucharcodetemp2[]={0x09,0x08,0x0c,0x04,0x06,0x02,0x03,0x01};
ucharcodeaa[16]=":";
ucharcodesmg[]="";
sbite=P2^6;
sbitrs=P2^4;
sbitrw=P2^5;
voiddelay(inttt)
{
while(tt--);
}
voidw_cmd(uchardd)
{
rs=0;
rw=0;
e=0;
delay(50);
P0=dd;
e=1;
delay(50);
e=0;
delay(50);
}
voidw_dat(uchardd)
{
rs=1;
rw=0;
e=0;
delay(50);
P0=dd;
e=1;
delay(50);
e=0;
}
voidinit(ucharsmg4[],uchartime[])
{
w_cmd(0x38);
delay(2000);
w_cmd(0x38);
delay(500);
w_cmd(0x38);//注意顺序,设置工作方式,显示模式设置
delay(500);
w_cmd(0x08);//注意顺序,关闭显示
w_cmd(0x01);//清屏
w_cmd(0x07);//光标·画面滚动模式设置
w_cmd(0x0c);//显示及光标模式设置
w_cmd(0x80);//
for(i=0;i<16;i++)
w_dat(time[i]);
w_cmd(0x80+0X40);
for(i=0;i<16;i++)
w_dat(smg4[i]);
}
voidTb(ucharsmg[],ucharn,uchars,ucharl,uchard)
{
unsignedcharm;
w_cmd(0x82);
for(m=n;m<s;m++)
w_dat(smg[m]);
w_cmd(0x80+0X42);
for(m=l;m<d;m++)
w_dat(smg[m]);
}
voidmain()
{
init(aa,aa);
while(1)
{
P1=0xf0;
key_l=P1;
if(key_l!=0xf0)
{
delay(100);
if(key_l!=0xf0)
{
P1=key_l|0x0f;
key=P1;
}
}
switch(key)
{
case0xee:Tb(smg,0,10,11,21);
for(i=0;i<8;i++)
{
P2=temp1[i];
delay(500);
}
break;
case0xde:Tb(smg,0,10,19,29);
for(i=0;i<8;i++)
{
P2=temp1[i];
delay(300);
}
break;
case0xbe:Tb(smg,0,10,30,40);
for(i=0;i<8;i++)
{
P2=temp1[i];
delay(100);
}
break;
case0x7e:P2=0xff;Tb(smg,0,10,39,49);break;
case0xed:Tb(smg,50,60,11,21);
for(i=0;i<8;i++)
{
P2=temp2[i];
delay(200);
}
break;
case0xdd:Tb(smg,50,60,19,29);
for(i=0;i<8;i++)
{
P2=temp2[i];
delay(120);
}
break;
case0xbd:P2=0xff;Tb(smg,50,60,40,50);break;
}
}
}