新闻中心

EEPW首页>嵌入式系统>设计应用> 51单片机学习之3-步进电机

51单片机学习之3-步进电机

作者: 时间:2016-11-30 来源:网络 收藏



这种步进电机叫减速步进电机(里面有减速齿轮),减速比是1/64。

里面减速齿轮转动64圈,外面的转子才转动1圈。

驱动电压为5V,步进(距)角度5.625*1/64,采用5线4相。

线的顺序是VCC、A、B、C、D。


1相励磁方式驱动程序代码:实现让步进电机转动360°。

现在知道步进电机的最小步距角是5.625*1/64=0.087890625°

1相励磁方式每通一相电(即每转动一次)的角度应该是最小步距角的2倍(即0.087890625°*2=0.17578125)。一个循环就是4相:A→B→C→D(即0.17578125*4=0.703125°)。

那么一个循环就是0.703125°,要几个循环才能转动360°呢?360°/0.703125=512个循环。

下面这份代码是通过按位方式给A、B、C、D相轮流通电。

#include"reg51.h"

#defineucharunsignedchar

#defineuintunsignedint

sbitDA=P1^0;//A相

sbitDB=P1^1;//B相

sbitDC=P1^2;//C相

sbitDD=P1^3;//D相

voiddelay(uintx)

{
uinty;

for(;x>0;x--)

for(y=10;y>0;y--);

}

voidmain()

{

uinti=512;

uchardelayCout=25;

while(i--)//循环512次就转动360°的角度。

{

DA=1; //A相通电

delay(delayCout); //需要延时一小段时间让硬件反应的过来

DA=0; //A相断电

DB=1; //B相通电

delay(delayCout);//需要延时一小段时间让硬件反应的过来

DB=0; //B相断电

DC=1; //C相通电

delay(delayCout); //需要延时一小段时间让硬件反应的过来

DC=0; //C相断电

DD=1; //D相通电

delay(delayCout);//需要延时一小段时间让硬件反应的过来

DD=0;//D相断电

}

while(1);//旋转完后就停在这里,避免重复执行main函数

}

上面那份源码很好理解,下面是按逻辑运算实现的通断A、B、C、D四相:

#include"reg51.h"

#defineucharunsignedchar

#defineuintunsignedint

voiddelay(uintx)

{
uinty;

for(;x>0;x--)

for(y=10;y>0;y--);

}

voidmain()

{

uinti=512;

ucharXh;

uchardelayCout=25;

while(i--)//循环512次就转动360°的角度。调整角度

{

Xh=3;

P1=0x01;//P1==00000001相当于P1^0置1将A相通电

delay(delayCout);//延时一段时间让步进电机能反应过来

while(Xh--)

{

P1<<=1;//第一次循环00000001<<1=00000010相当于P1^1置1同时将P1^0置0A相断电B相通
电每次循环都会将1向左移动一位
delay(delayCout);//这里是调节切换速度,即转动速度

}

}

while(1);//旋转完后就停在这里,避免重复执行main函数

}


步进电机主要知道它的工作原理和计算角度。步进电机最大的方便是可以精确控制转动角度和速度。


上一页 1 2 下一页

关键词:51单片机步进电

评论


技术专区

关闭