这也太有趣了吧,电机转动的那一刻,小小的成就感产生大大的喜爱,自行焊接的一个51单片机最小系统,这个设计是这样的单片机Io输出到一个ULN2003,ULN2003是一个高耐压,7路反向器的芯片,输入高电平时为低电平,里面是非门电路,每一个单元可以驱动电流最大500mA,用这款芯片输出到一个步进电机,引脚输出信号到A+B+A-B-端。
四相步进电机可以在不同的通电方式下运行,常见的通电方式有如下三种:
a)A+,B+,A-,B-
b)A+B+,B+A-,A-B-,B-A+
c)A+B+,B+,B+A-,A-,A-B-,B-,B-A+,A+
倒过来为反转。
当步进驱动器接收到一个脉冲信号,它就驱动步进电机按设定的方向转动一个固定的角度(及步进角)。可以通过控制脉冲个来控制角位移量,从而达到准确定位的目的;同时可以通过控制脉冲频率来控制电机转动的速度和加速度,从而达到调速的目的,电压输入为DC5V—DC12V
I love it
下面是具体例程
刚开始选错了电机仿真转不了,当然实物不会出现这种情况
这是按键模块控制电机正反转跟控制速度快慢。
#include "reg52.h"
typedef unsigned char u8;
typedef unsigned int u16;
sbit key1 = P2^0;
sbit key2 = P2^1;
sbit key3 = P2^2;
sbit key4 = P2^3;
u8 code right[]={0x01,0x03,0x02,0x06,0x04,0x0c,0x08,0x09};//正转
u8 code left[]={0x09,0x08,0x0c,0x04,0x06,0x02,0x03,0x01};//反转
u8 count = 0,speed = 3;//初始速度
u8 key_pro = 1;//初始状态
void delay(u8 s) //延迟
{
while(s--);
}
void delay1ms(u16 i) //延时1毫秒
{
char t;
while(i--)
{
for(t=0;t<113;t++);
}
}
void turn_right() //右转状态状态
{
u16 i;
for(i = 0;i<8;i++)
{
P1 =right[i];
delay1ms(speed);
}
if(key3==0)
{
delay(30);
while(key3==0) //快
{
speed = 1;
}
}
if(key4==0) //慢
{
delay(30);
while(key4==0)
{
speed = 5;
}
}
}
void turn_left() //第一种状态
{
u16 i;
for(i = 0;i<8;i++)
{
P1 = left[i];
delay1ms(speed);
}
if(key3==0) //快
{
delay(30);
while(key3==0)
{
speed = 1;
}
}
if(key4==0)//慢
{
delay(30);
while(key4==0)
{
speed = 5;
}
}
}
u8 key_scan() //检测哪个按键按下
{
if(key1==0||key2==0)
{
delay(30);
if(key1==0||key2==0)
{
if(key1==0)
{
key_pro = 1;
}
if(key2==0)
{
key_pro = 2;
}
}
}
return key_pro;
}
void main()
{
int i;
while(1)
{
i = key_scan();//接受信号
delay(1000);//延时缓冲
switch(i) //模式选择
{
case 1:turn_right();break;
case 2:turn_left();break;
}
}
}