① 1. 设计要求 采用单片机控制一个三相单三拍的步进电机工作。求大神给出汇编程序,谢谢,急用。
#include <reg51.h>
#define unchar unsigned char
sbit kai_key p3^1; //开关,作锁功能
sbit zheng_key p3^2; //正转
sbit fan_key p3^3; //翻转睁卜
sbit 18_key p1^0; //18步
sbit 15_key p1^1; //15步
sbit 12_key p1^2; //12步
sbit 9_key p1^3; //9步
sbit 6_key p1^4; //6步
sbit 3_key p1^5; //3步
sbit 21_key p1^6; //备厅21步
sbit 24_key p1^7; //24步
sbit 27_key p3^0; //27步
bit flag=0; //电机正反标志位
uchar bushu,maichong=3,table_begin=0;
uchar code table[]={0x01,0x02,0x04,0x04,0x02,0x01};
//电机正反转I/O口的高低电平对应表
void delay(uchar i) //延时函数
{
uchar j,k;
for(j=i;j>0;j--)
for(k=125;k>0;k--);
}
void key()
{
/仿早隐/kaikey=shuo_key;
if(kai_key==0) //这里开关闭合,表示键盘锁打开。如果开关不闭合,表示上锁,电机不转
{
if(27_key==0) bushu=27; //步数高的优先,即多个步数开关同时打上,运行高步数
else if(24_key==0) bushu=24;
else if(21_key==0) bushu=21;
else if(18_key==0) bushu=18;
else if(15_key==0) bushu=15;
else if(12_key==0) bushu=12;
else if(9_key==0) bushu=9;
else if(6_key==0) bushu=6;
else if(3_key==0) bushu=3;
esle bushu=0;
}
if(zheng_key==0)
flg=0;
else if(fan_key==0)
flg=1;
}
void dispose() //数据处理函数
{
if(flag==0)
{
table_begin=0; //flag为0正转
}
else
table_begin=3; //flag为1反转
}
void qudong()
{
while(kai_key==0)
{
while(bushu!=0)
{
unchar i,j;
for(j=0+table_begin;(j<3+table_begin)&&(bushu!=0);j++)
{
PO=table[j]
for(i=0;i<maichong;i++)
{
delay(10) //延时函数,控制电机速度
}
bushu--;
}
}
}
}
void main()
{
while(1)
{
key();
dispose();
qudong();
while(kai_key==0); //等待开锁
}
}
② 单片机控制步进电动机的运动的原理及单片机程序
51单片步进电机控制原理与控制设计程序
51单片步进电机是数字控制电机,它将脉冲信号转变成角位移,即给一个脉冲信号,步进电机就转动一个角度,因此非常适合于单片机控制。步进电机可分为反应式步进电机(简称vr)、永磁式步进电机(简称pm)和混合式步进电机(简称hb)。
51单片步进电机区别于其他控制电机的最大特点是,它是通过输入脉冲信号来进行控制的,即电机的总转动角度由输入脉冲数决定,而电机的转速由脉冲信号频率决定。
51单片步进电机的驱动电路根据控制信号工作,控制信号由单片机产生。其基本原理作用如下:
(1)控制换相顺序
通电换相这一过程称为脉冲分配。例如:三相步进电机的三拍工作方式,其各相通电顺序为a-b-c-d,通电控制脉冲必须严格按照这一顺序分别控制a,b,c,d相的通断。
(2)控制步51单片进电机的转向
如果给定工作方式正序换相通电,步进电机正转,如果按反序通电换相,则电机就反转。
(3)控制51单片步进电机的速度
如果给步进电机发一个控制脉冲,它就转一步,再发一个脉冲,它会再转一步。两个脉冲的间隔越短,步进电机就转得越快。调整单片机发出的脉冲频率,就可以对步进电机进行调速。步进电机是机电控制中一种常用的执行机构,它的用途是将电脉冲转化为角位移,通俗地说:当步进驱动器接收到一个脉冲信号,它就驱动步进电机按设定的方向转动一个固定的角度(及步进角)。通过控制脉冲个数即可以控制角位移量,从而达到准确定位的目的;同时通过控制脉冲频率来控制电机转动的速度和加速度,从而达到调速的目的。
③ 如何用51单片机PWM控制3个步进电机
用单片机同时是不可能的,当然,时间间隔小到可以接受,跑几个任务,那也可以视为同时。要实现真正意义上的同时,用FPGA/CPLD是可以完成的。
话说回来,也许你的同时并不是说一定严格地同时工作,只是说一个单片机去控制四个步进电机,那就好办多了。
一个步进电机,比如4相5线那种,4个IO口可控制一个,四个步进电机就要16个,驱动芯片用ULN2003即可。
当然,如果你的IO口不允许使用这么多,那也可以通过串转并的方法,扩展IO口,比如用74HC595,三根IO口控制它,它可以级联,三根线可以控制很多片。一片为8位,两片就为16位,3片为24位 ……