C语言控制步进电机

C语言控制步进电机,第1张

我之前做过一个,步进电机模拟电梯运行的控制程序,是那种发一个信号走一步的那种,步进角比较大,好像是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语言实现步进电机正反转控制程序和电路图,求帮助。等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/9286925.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-26
下一篇 2023-04-26

发表评论

登录后才能评论

评论列表(0条)

保存