51单片机完全学习——步进电机

一、什么是步进电机

步进电机需要按照一定的时序进行通电,才能够进行转动。我使用的是4线步进电机,需要接4个IO口,两两一组。步进电机有一个固定的步距角,和步进电机本身有关。步进电机一般情况下只能以固有步距角的整数倍来运动,一个固有步进角的移动就叫做一个节拍。电机还有可以比固有步进角更小的运动方法,这种方法叫细分,由电机驱动器来支持。相数越多步进电机越精确,也就是绕阻的个数。我们使用的是2相的步进电机。

步进电机的极性:单极性,双极性。

二、步进电机的时序

拍数:单相四拍:驱动时序:正转:A/  B  A  B/    反转:B/  A  B  A/

双相四拍:驱动时序:正转:A/B  AB  AB/  A/B/   反转:A/B/   AB/   AB   A/B

半步八拍:驱动时序:正转:A/   A/B   B  AB  A  AB/   B/  A/B/

                                     反转:A/B/   B/   AB/  A  AB   B   A/B   A/

一些说明:对单相4拍 正转解释 A/ 意思就是A/这头给一个正电 A给一个负电

                                                  B就是 给B一个正电 B/给一个负电,下面做一个表格更直观的看一下:这里的0和1就是给正点或者负电的意思。其他的和这个类似

单项四拍正转时序
AA/BB/
0100第一拍
0010第二拍
1000第三拍
0001第四拍
双相四拍正转时序
AA/BB/
0110第一拍
1010第二拍
1001第三拍
0101第四拍
半步八拍正转时序
AA/BB/
0100第一拍
0110第二拍
0010第三拍
1010第四拍
1000第五拍
1001第六拍
0001第七拍
0101第八拍

三、步进电机的接线和编程

A接OUTA     A/接OUTB       B接OUTC        B/接OUTD  

INA INB INC IND这边直接连接单片机的IO就可以了。必须使用驱动芯片来进行驱动,因为单片机IO口的电流太小了达不到电机的驱动电流。需要注意的是:INA INB 是一组INC IND是一组,一定要注意他们之间的对应关系。下面这个例子是用单相四拍正转的时序进行控制。其他的只需要改变给的电平的不同就可以实现

sbit APositive = P0^0;
sbit ANegative = P0^1;
sbit BPositive = P0^2;
sbit BNegative = P0^3;


void delay1ms(void)   //误差 0us
{
    unsigned char a,b,c;
    for(c=1;c>0;c--)
        for(b=142;b>0;b--)
            for(a=2;a>0;a--);
}


void main(void)
{
	

	while(1)
	{
		//第一拍
    APositive = 0;
		ANegative = 1;
		BPositive = 0;
		BNegative = 0;
		delay1ms();    //一定要有这个延时,
		               //主要是让上面给的电流持续一段时间,不然极性变换太快
		               //改变延时的长短可以改变电机转动的速度
		//第二拍
		APositive = 0;
		ANegative = 0;
		BPositive = 1;
		BNegative = 0;
		delay1ms();
		//第三拍
		APositive = 1;
		ANegative = 0;
		BPositive = 0;
		BNegative = 0;
		delay1ms();
		//第四拍
		APositive = 0;
		ANegative = 0;
		BPositive = 0;
		BNegative = 1;
		delay1ms();
  }
}

下面再举例子半步八拍正转的编程

sbit APositive = P0^0;
sbit ANegative = P0^1;
sbit BPositive = P0^2;
sbit BNegative = P0^3;


void delay1ms(void)   //误差 0us
{
    unsigned char a,b,c;
    for(c=1;c>0;c--)
        for(b=142;b>0;b--)
            for(a=2;a>0;a--);
}


void main(void)
{
	

	while(1)
	{
		//第一拍
        APositive = 0;
		ANegative = 1;
		BPositive = 0;
		BNegative = 0;
		delay1ms();    //一定要有这个延时,
		               //主要是让上面给的电流持续一段时间,不然极性变换太快
		               //改变延时的长短可以改变电机转动的速度
		//第二拍
		APositive = 0;
		ANegative = 1;
		BPositive = 1;
		BNegative = 0;
		delay1ms();
		//第三拍
		APositive = 0;
		ANegative = 0;
		BPositive = 1;
		BNegative = 0;
		delay1ms();
		//第四拍
		APositive = 1;
		ANegative = 1;
		BPositive = 0;
		BNegative = 0;
		delay1ms();
        //第五拍
		APositive = 1;
		ANegative = 0;
		BPositive = 0;
		BNegative = 0;
		delay1ms();
        //第六拍
		APositive = 1;
		ANegative = 0;
		BPositive = 0;
		BNegative = 1;
		delay1ms();
        //第七拍
		APositive = 0;
		ANegative = 0;
		BPositive = 0;
		BNegative = 1;
		delay1ms();
        //第八拍
		APositive = 0;
		ANegative = 1;
		BPositive = 0;
		BNegative = 1;
		delay1ms();
  }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值