双极性两相步进电机的疑问
时间:10-02
整理:3721RD
点击:
求高手能给出双极性两相步进电机的原理图,或者解释下,下面一段程序表面意思看的懂,但是疑问很大
/*************************************************************************************
*; 单相四拍通电驱动时序: *
*; 正转: A/ B A B/
* UDN2916电流控制真值表:
* I0 I1 输出电流
* L L 最大
* H L 最大*2/3
* L H 最大*1/3
* H H 0 *
#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(); //步进电机运行
}
}
在运行程序时电机会正常运转,但是如果我把第一个PH2=0改成PH2=1的话电机就不转了,这是为什么啊!我的修改原因是既然B线圈输出的电流为零,那无论是正向还是反向都应该不会有影响啊(PH2的值就是控制B线圈的方向,为1时是正向,0代表反向),看了半天没理解,希望有高手能解答下
/*************************************************************************************
*; 单相四拍通电驱动时序: *
*; 正转: A/ B A B/
* UDN2916电流控制真值表:
* I0 I1 输出电流
* L L 最大
* H L 最大*2/3
* L H 最大*1/3
* H H 0 *
#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(); //步进电机运行
}
}
在运行程序时电机会正常运转,但是如果我把第一个PH2=0改成PH2=1的话电机就不转了,这是为什么啊!我的修改原因是既然B线圈输出的电流为零,那无论是正向还是反向都应该不会有影响啊(PH2的值就是控制B线圈的方向,为1时是正向,0代表反向),看了半天没理解,希望有高手能解答下