求 用AT89S52单片机控制两个两相四线步进电机 的程序,要C语言的

驱动器用的是M542H。。
驱动器图片

什么芯片? 标题: 步进电机试验一(双极性步进电机) *
* *
* 通过本例程了解步进马达使用及驱动程序编写 *
*; 单相四拍通电驱动时序: *
*; 正转: A/ B A B/
* 反转: B/ A B A/ *
*
* UDN2916电流控制真值表
* I0 I1 输出电流
* L L 最大
* H L 最大*2/3
* L H 最大*1/3
* H H 0 *
* 请学员一定要消化掉本例程 0x30,0x0e,0x39,0x07 *
注意:J14短路冒需断开 *
**************************************************************************************/
#include "reg52.h"

#define speed 2
//Motor
sbit PH1 = P1^0; //定义管脚
sbit PH2 = P1^1;
sbit I01 = P1^2;
sbit I11 = P1^3;
sbit I02 = P1^4;
sbit I12 = P1^5;

void delay(int time);

/***************************************
函数功能:产生单相四拍脉冲控制步进机
**************************************/
void Go()
{ //A
PH1 = 0; //PH1为0 则A线圈为反向电流
I01 = 0;
I11 = 0; //以最大电流输出

PH2 = 0; //PH2为0 则B线圈为反向电流
I02 = 1;
I12 = 1; //输出0

delay(speed);
//0
PH1 = 0; //PH1为0 则A线圈为反向电流
I01 = 1; //输出0
I11 = 1;

PH2 = 1; //PH2为1 则B线圈为正电流
I02 = 0; //以最大电流输出
I12 = 0;

delay(speed);
//B
PH1 = 1; //PH1为1 则A线圈为正向电流
I01 = 0; //以最大电流输出
I11 = 0;

PH2 = 1; //PH2为1 则B线圈为正向电流
I02 = 1; //输出0
I12 = 1;
////
delay(speed);
//0
PH1 = 1; //PH1为1 则A线圈为正向电流
I01 = 1;
I11 = 1;

PH2 = 0; //PH2为0 则B线圈为反向电流
I02 = 0;
I12 = 0;

delay(speed);

}
/*******************延时函数****************************/
void delay(int time)
{
int i,j;

for(j=0; j <= time; j++)
for(i =0 ; i <= 120; i++);
}

void main()
{

while(1)
{

Go(); //步进电机运行

}

}
标题: 步进电机试验二(双四拍方式) *
* *
* 通过本例程了解步进马达使用及驱动程序编写 *
*; 双四拍工作方式: *
*; 正转:A/B AB AB/ A/B/ *
* 反转:A/B/ AB/ AB A/B
*
* UDN2916电流控制真值表:
* I0 I1 输出电流
* L L 最大
* H L 最大*2/3
* L H 最大*1/3
* H H 0 *
* 请学员一定要消化掉本例程 *
J14短路冒需断开 *
**************************************************************************************/
#include "reg52.h"

#define speed 2
//Motor
sbit PH1 = P1^0; //定义管脚
sbit PH2 = P1^1;
sbit I01 = P1^2;
sbit I11 = P1^3;
sbit I02 = P1^4;
sbit I12 = P1^5;

void delay(int time);

/***************************************
函数功能:产生脉冲控制步进机
正转:A/B AB AB/ A/B/
I0 I1 为低电平时,均以最大电流输出
**************************************/
void Go()
{ //A
PH1 = 0; //PH1为0 则A线圈为反向电流
I01 = 0;
I11 = 0;

PH2 = 1; //PH2为1 则B线圈为正向电流
I02 = 0;
I12 = 0;

delay(speed);
//0
PH1 = 1; //PH1为1 则A线圈为正向电流
I01 = 0;
I11 = 0;

PH2 = 1;
I02 = 0;
I12 = 0;

delay(speed);
//B
PH1 = 1; //PH1为1 则A线圈为正向电流
I01 = 0;
I11 = 0;

PH2 = 0; //PH2为0 则B线圈为反向电流
I02 = 0;
I12 = 0;
////
delay(speed);
//0
PH1 = 0;
I01 = 0;
I11 = 0;

PH2 = 0;
I02 = 0;
I12 = 0;

delay(speed);

}
/*******************延时函数****************************/
void delay(int time)
{
int i,j;

for(j=0; j <= time; j++)
for(i =0 ; i <= 120; i++);
}

void main()
{

while(1)
{

Go(); //步进电机运行

}

}
温馨提示:内容为网友见解,仅供参考
第1个回答  2014-08-20
用PWM可以驱动,定时器启动PWM追问

搜到的也看不懂。。。。

追答

http://www.stepmotordriver.com/cn/product-17.html ,看下你驱动器的资料
其中的脉冲控制就是PWM,
高电平有效,就是高电平的时候,开关是打开的
反之事关闭的,
PWM是周期开关的控制,
比如100秒,你关50秒,开50秒,则功率则是满功率的一搬,
这个用C语言实现是很容易的,建议自己思考先,你会掌握得更牢固些

第2个回答  2014-08-20
不要给这种人程序!
第3个回答  2014-08-20
你这种驱动器没听说过啊
第4个回答  2014-08-20
自己去百度搜索
相似回答