51单片机学习之3-步进电机
这种步进电机叫减速步进电机(里面有减速齿轮),减速比是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函数
}
步进电机主要知道它的工作原理和计算角度。步进电机最大的方便是可以精确控制转动角度和速度。
评论