控制步进电机C语言代码解释

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了控制步进电机C语言代码解释相关的知识,希望对你有一定的参考价值。

#include <reg52.h>

sbit p00 = P0^0;
sbit p01 = P0^1;
sbit p02 = P0^2;

unsigned char code Forward[4]=0xFC,0xF9,0xF3,0xF6;//正转表格
unsigned char code Return[8]=0xF7,0xF3,0xFB,0xF9,0xFD,0xFC,0xFE,0xF6;//反转表格

void delay(unsigned int i)//延时

while(--i);

/*******************************************************************************
** 步进电机正转 P0口的第三口,P0^2
********************************************************************************/
void turnfor(void)

unsigned char i;
while(1)

if(p01 == 0)

delay(1000);
if(p01 == 0)
break;

if(p01 == 0)

if(p01 == 0)
break;

for(i = 0; i < 4; i++)

P1 = Forward[i];
delay(2000);



/*******************************************************************************
** 步进电机反转 P0口的第二口,P0^1
********************************************************************************/
void retur(void)

unsigned char i;
while(1)

if(p00 == 0)

delay(1000);
if(p00 == 0)
break;

if(p02 == 0)

if(p02 == 0)
break;

for(i = 0; i < 8; i++)

P1 = Return[i];
delay(2000);



/*******************************************************************************
** 步进电机停止转动 P0口的第一口,P0^0
********************************************************************************/
void stop(void)

while(1)

if(p01 == 0)

delay(1000);
if(p01 == 0)
break;

if(p02 == 0)

if(p02 == 0)
break;

P1 = 0xFF;
delay(300);


/*******************************************************************************
** 步进电机转动主函数
********************************************************************************/
void Main(void)

stop();
while(1)

if(p00 == 0)

delay(1000);
if(p00 == 0)
stop();

if(p01 == 0)

delay(1000);
if(p01 == 0)
retur();

if(p02 == 0)

delay(1000);
if(p02 == 0)
turnfor();




最好一步一步解释 课程设计答辩用 谢谢

参考技术A 我之前做过一个,步进电机模拟电梯运行的控制程序,是那种发一个信号走一步的那种,步进角比较大,好像是15度左右,我当时的做法就是加入系统延时,让程序给步进电机发送信号,通过控制延时来决定单位时间内步进电机转动的次数
我用的是永磁式步进电机,不知道你用的是什么样的,我使用的这种,步进角比较大,步进电机都是一步步转的,转快了就看不出步进电机是一步步转了
而当是步进电机正转是按这样的顺序发送信号,abcd,反转是dcba
转多少圈,就是循环给步进电机发送信号,使用程序控制发送信号的次数,至于怎么控制只要知道接口函数什么的还是不难的。
如果还是不大明白,我倒是可以帮你看看程序
参考技术B sbit p00 = P0^0; //定义引脚,方便使用
sbit p01 = P0^1;
sbit p02 = P0^2;

unsigned char code Forward[4]=0xFC,0xF9,0xF3,0xF6;//正转表格
unsigned char code Return[8]=0xF7,0xF3,0xFB,0xF9,0xFD,0xFC,0xFE,0xF6;//反转表格

void delay(unsigned int i)//延时

while(--i);

/*******************************************************************************
** 步进电机正转 P0口的第三口,P0^2
********************************************************************************/
void turnfor(void)

unsigned char i;
while(1) //进入工作状态

if(p01 == 0) //检测端口状态

delay(1000); //延时1000个单位
if(p01 == 0) //如果端口还是那个状态
break; //退出if()

if(p01 == 0)

if(p01 == 0)
break;

for(i = 0; i < 4; i++)

P1 = Forward[i];
delay(2000);



/*******************************************************************************
** 步进电机反转 P0口的第二口,P0^1
********************************************************************************/
void retur(void)

unsigned char i;
while(1)

if(p00 == 0)

delay(1000);
if(p00 == 0)
break;

if(p02 == 0)

if(p02 == 0)
break;

for(i = 0; i < 8; i++)

P1 = Return[i];
delay(2000);



/*******************************************************************************
** 步进电机停止转动 P0口的第一口,P0^0
********************************************************************************/
void stop(void)

while(1)

if(p01 == 0)

delay(1000);
if(p01 == 0)
break;

if(p02 == 0)

if(p02 == 0)
break;

P1 = 0xFF;
delay(300);


/*******************************************************************************
** 步进电机转动主函数
********************************************************************************/
void Main(void)

stop();
while(1)

if(p00 == 0)

delay(1000);
if(p00 == 0)
stop();

if(p01 == 0)

delay(1000);
if(p01 == 0)
retur();

if(p02 == 0)

delay(1000);
if(p02 == 0)
turnfor();




//不好意思,你这个程序好像有问题,我无法帮你解译了,呵呵
//严重的问题出现在:如果进入了正转,就出不来了本回答被提问者采纳

以上是关于控制步进电机C语言代码解释的主要内容,如果未能解决你的问题,请参考以下文章

步进电机驱动程序C语言

php是用啥语言开发的,c语言吗?

c语言程序解释

有人能帮解释一下下面的C语言代码吗?主要是指针

一下是c语言的一段代码,我很难理解,尤其是有关bool的,求注释解释。感谢!

求C语言隐藏光标函数的详细解释