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);
} 展开
不要设定正反转组后,直接调用的,在主函数里直接编写命令电机进或退连续多次,下面是本人的程序,设想是引用组代入主函数命令电机多次进退,执行过就的不再循环,一直往下执行,我编写的只能执行一步,也就是前进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);
} 展开
展开全部
#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); //控制转速
}
}
}
//--------------------------------
#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); //控制转速
}
}
}
//--------------------------------
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询