51单片机如何控制两相四线步进电机

求C语言程序,可以控制电机先进一段距离,在退另一段距离……,不要开关控制的,在主函数直接顺序执行的,不要设定正反转组后,直接调用的,在主函数里直接编写命令电机进或退连续多... 求C语言程序,可以控制电机先进一段距离,在退另一段距离……,不要开关控制的,在主函数直接顺序执行的,
不要设定正反转组后,直接调用的,在主函数里直接编写命令电机进或退连续多次,下面是本人的程序,设想是引用组代入主函数命令电机多次进退,执行过就的不再循环,一直往下执行,我编写的只能执行一步,也就是前进30mm,望神级人物补充或另发程序。
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int

uchar step1[]={0x05,0x06,0x0A,0x09};

void zs(uint a)
{
while(a--);
}

void main ()
{
uchar i;
j=50; //5为一个周期,所进距离为一个螺距3mm,
while(j--)
{
for(i=0;i<4;i++)
{
P0=step1[i];
zs(90); //控制转速
}
}
while(1);
}
展开
 我来答
做而论道
高能答主

2013-08-11 · 把复杂的事情简单说给你听
知道大有可为答主
回答量:3万
采纳率:80%
帮助的人:1.1亿
展开全部
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
//--------------------------------
uchar step1[] = {0x05, 0x06, 0x0A, 0x09};
uchar stepx = 0;
//--------------------------------
void zs(uint a)
{
while(a--);
}
//--------------------------------
void zheng(void)
{
P0 = step1[stepx]; //走一步
stepx++;
if (stepx >= 4) stepx = 0;
}
//--------------------------------
void fan(void)
{
P0 = step1[stepx]; //走一步
stepx--;
if (stepx == 255) stepx = 3;
}
//--------------------------------
void main ()
{
uint i;

while(1) {

for(i = 0; i < 400; i++) {//正转400步
zheng(); //走一步
zs(90); //控制转速
}

for(i = 0; i < 400; i++) {//反转400步
fan(); //走一步
zs(90); //控制转速
}

}
}
//--------------------------------
不尺不尽
2013-08-11
知道答主
回答量:65
采纳率:0%
帮助的人:34万
展开全部
退另一段距离的话是不是就是让电机反转。如果是的话你还要再设置一个反转数组,加一个反转程序,与上面类似。
更多追问追答
追问
不一定,可能是进另外一段距离
追答
LZ 的意思是写成子函数形式再调用该程序使电机正反转?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式