单片机控制步进电机程序(含电路原理图和程序)
1、设计电路:
主要元件:与门AND_5(5路),ULN2003A(放大电压用来驱动电机),AT89C52,步进电机MOTOR-STEPPER
步进电机连接电路图
2、编写程序:
#include
#define uint unsigned int
#define uchar unsigned
#include #define uint unsigned int #define uchar unsigned char int state = 0;
char int state = 0; //定义电机的状态 state = 1 正转 state = -1电机反转 state = 0 电机停止
uint time = 50; //定义延时时间
int step[8]={0x01,0x03,0x02,0x06,0x04,0x0c,0x08,0x09};//每一步的通电顺序
//几个控制开关量
sbit drive = P3^5;
sbit stop = P3^6;
sbit re_drive = P3^7;
sbit add = P3^1;
sbit reduce = P3^0;
//延时程序 x*10ms
void Delay_xms(uint x)
{
uint i,j;
for(i=0;i<x;i++)
for(j=0;j<112;j++);//10ms
}
//反转
void Move_reverse(uint time)
{
uint i;
for(i= 0;i < 8;i++)
{
P2 = step[i];
Delay_xms(time);
}
}
//正转
void Move(uint time)
{
int i;
for(i= 7;i >= 0;i--)
{
P2 = step[i];
Delay_xms(time);
}
}
//定义外部中断INT0的中断函数 开关量变化时做出反应
void ChangeState() interrupt 0
{
if(!drive)
{
state = 1;
drive = 1;
}
if(!stop)
{
state = 0;
stop = 1;
}
if(!re_drive)
{
state = -1;
re_drive = 1;
}
if(!add)
{
time -= 10;
add = 1;
if(time <= 10)
time = 10;
}
if(!reduce)
{
time += 10;
reduce = 1;
if(time >= 100)
time = 100;
}
}
void main()
{
EA = 1; //EA (IE.7), CPU中断允许(总允许)位。
EX0 = 1; //EX0(IE.0),外部中断0允许位 IE0(TCON.1),外部中断0中断请求标志位。
IT0 = 1; //定义下降沿触发
while(1)
{
switch(state)
{
case 1: Move(time);
break;
case 0: Delay_xms(10);
break;
case -1: Move_reverse(time);
break;
}
}
}
// 由于编辑器排版问题,没办法做到代码对齐
3、运行结果:
运行结果
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。