标题:
51单片机四线双极性+五线四相步进电机案例程序(细分+半步八拍方式+双四拍+单四拍)
[打印本页]
作者:
aaa12345678
时间:
2018-11-11 21:28
标题:
51单片机四线双极性+五线四相步进电机案例程序(细分+半步八拍方式+双四拍+单四拍)
1、现发布只配有4线双极性步进电机
2、四线双极性步进电机与五线四相步进电机程序不通用
3、五线四相步进电机若只是震动,可适当增大延时即可
0.png
(40.89 KB, 下载次数: 29)
下载附件
2018-11-15 17:00 上传
电路原理图如下:
0.png
(241.64 KB, 下载次数: 30)
下载附件
2018-11-15 17:00 上传
细分单片机源程序如下:
/*************************************************************************************
* 标题: 步进电机试验四(采用2细分) *
* *
* 通过本例程了解步进马达使用及驱动程序编写 *
*; 单相四拍通电驱动时序: *
*; 正转: A/ B A B/ *
* 反转: B/ A B A/ *
* *
* UDN2916电流控制真值表: *
* I0 I1 输出电流 *
* L L 最大 *
* H L 最大*2/3 *
* L H 最大*1/3 *
* H H 0 *
* 请学员一定要消化掉本例程 *
* 注意:J14短路冒需断开 *
**************************************************************************************/
#include "reg52.h"
#define speed 38
//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;
unsigned char TableA[] = { 0XF7,0XFB,0XF3}; //A线圈细分表
unsigned char TableB[] = { 0XeF,0XdF,0XcF}; //B线圈细分表
void delay(int time);
/***************************************
函数功能:产生单相四拍脉冲控制步进机 2细分
**************************************/
void Go()
{ char i ,temp;
//A
PH1 = 0; //PH1为0 则A线圈为反向电流
for(i = 0; i<3; i++)
{ temp = P1;
P1 = TableA[i];
P1 = P1&temp;
delay(1);
}
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线圈为正电流
for(i = 0; i<3; i++)
{ temp = P1;
P1 = TableB[i];
P1 = P1&temp;
delay(1);
}
delay(speed);
//B
PH1 = 1; //PH1为1 则A线圈为正向电流
for(i = 0; i<3; i++)
{ temp = P1;
P1 = TableA[i];
P1 = P1&temp;
delay(1);
}
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线圈为反向电流
for(i = 0; i<3; i++)
{ temp = P1;
P1 = TableB[i];
P1 = P1&temp;
delay(1);
}
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(); //步进电机运行
}
}
复制代码
所有资料51hei提供下载:
51单片机步进马达案例.rar
(3.78 MB, 下载次数: 118)
2018-11-11 21:26 上传
点击文件名下载附件
下载积分: 黑币 -5
作者:
admin
时间:
2018-11-15 17:02
好资料,51黑有你更精彩!!!
作者:
ar_fa
时间:
2019-12-13 08:58
资料很好,收下了。谢谢
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1