我之前做过一个,步进电机模拟电梯运行的控制程序,是那种发一个信号走一步的那种,步进角比较大,好像是15度左右,我当时的做法就是加入系统延时,让程序给步进电机发送信号,通过控制延时来决定单位时间内步进电机转动的次数
我用的是永磁式步进电机,不知道你用的是什么样的,我使用的这种,步进角比较大,步进电机都是一步步转的,转快了就看不出步进电机是一步步转了
而当是步进电机正转是按这样的顺序发送信号,abcd,反转是dcba
转多少圈,就是循环给步进电机发送信号,使用程序控制发送信号的次数,至于怎么控制只要知道接口函数什么的还是不难的。
如果还是不大明白,我倒是可以帮你看看程序
/89C51控制步进电机c程序
使用89C51控制四相六线步进电机,
步进电机采用四相六线,步距角18度,半步工作09度八拍运行。
接口如下:
P15---启动输入
P14---停止输入
P13---接光电传感器
P20---输出控制步进电机的A相
P21---输出控制步进电机的B相
P22---输出控制步进电机的C相
P23---输出控制步进电机的D相
如下是我给步进电机八拍运行正向通电顺序:
P23(D相)、P22(C相)、P21(B相)、P20(A相)
第一步: 0 0 0 1
第二步: 0 0 1 1
第三步: 0 0 1 0
第四步: 0 1 1 0
第五步: 0 1 0 0
第六步: 1 1 0 0
第七步: 1 0 0 0
第八步: 1 0 0 1
使用光电传感器的输出作为脉冲,光电接收管的后面加一个三极管做放大。
光电传感器前有个齿盘,齿空的间隔距离是相等的,要求齿盘每一格,
光电传感器输出一个脉冲,步进电机一个角度09度。齿盘转动的速度不固定,
可能快也可能慢。步进电机没有转动之前,齿盘一直是转动的,
只有按下启动按钮步进电机才开始转动。
/
//作成:吴天
//
//完成时间0511
//上海奉贤
#include<reg52h>
#define uint unsigned int
#define uchar unsigned char
it START = P1^5;
it STOP = P1^4;
it COM = P1^3;
//电机接在低4位,接在其他位可修改数组。
uchar code lab[8]={0x01,0x03,0x02,0x06,0x04,0x0c,0x08,0x09;
void Mdelay(uchar x)
{uchar j,k;for(j=x;j
我有程序,电路图可以在程序中看出,
#include<reg52h>
#include<intrinsh>
#define uchar unsigned char
#define uint unsigned int
sbit key1=P3^7;
sbit key2=P3^6;
sbit key3=P3^5;
uchar kz,i=200;
uchar zhengzhuan[]={0xf3,0xf9,0xfc,0xf6};
uchar fanzhuan[]={0xf3,0xf6,0xfc,0xf9};
void delay1ms(uint ms)
{
uchar i;
while(ms--)
{
for(i = 0; i<10; i++)
{
_nop_();
_nop_();
_nop_();
_nop_();
}
}
}
void key()
{
if(key2==0)
{
delay1ms(10);
if(key2==0)
kz=1;
while(!key2)
{}
}
if(key3==0)
{
delay1ms(10);
if(key3==0)
kz=2;
while(!key3)
{}
}
}
void zz()//正转
{
uchar a=0,b=20;
while(kz==1)
{
P1=zhengzhuan[a];
a++;
if(a>3)
a=0;
i--;if(i==0)kz=0;
if(key1==0)
{
delay1ms(10);
if(key1==0)
{
kz=0;
P1=0xff;
while(!key1);
}
}
if(key2==0)
{
b=b+5;
if(b>=240)
b=240;
while(!key2)
{
}
}
if(key3==0)
{
b=b-5;
if(b<=20)
b=20;
while(!key3)
{
}
}
delay1ms(b);
}i=200;
}
void fz()//反转
{
uchar a=0,b=20;
while(kz==2)
{
P1=fanzhuan[a];
a++;
if(a>3)
a=0;
if(key1==0)
{
delay1ms(10);
if(key1==0)
{
kz=0;
P1=0xff;
}
}
if(key2==0)
{
b+=5;
if(b>=240)
b=240;
while(!key2)
{
}
}
if(key3==0)
{
b-=5;
if(b<=20)
b=20;
while(!key3)
{
}
}
delay1ms(b);
}
}
void main()
{
while(1)
{
key();
if(kz==0);
else if(kz==1)
zz();
else
fz();
}
}
以上就是关于C语言控制步进电机全部的内容,包括:C语言控制步进电机、求一个两相四线步进电机的c程序,电机用三极管和场管控制的、用C语言实现步进电机正反转控制程序和电路图,求帮助。等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)