控制步进电机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();
最好一步一步解释 课程设计答辩用 谢谢
我用的是永磁式步进电机,不知道你用的是什么样的,我使用的这种,步进角比较大,步进电机都是一步步转的,转快了就看不出步进电机是一步步转了
而当是步进电机正转是按这样的顺序发送信号,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语言代码解释的主要内容,如果未能解决你的问题,请参考以下文章