標(biāo)題:
51單片機(jī)四線雙極性+五線四相步進(jìn)電機(jī)案例程序(細(xì)分+半步八拍方式+雙四拍+單四拍)
[打印本頁]
作者:
aaa12345678
時間:
2018-11-11 21:28
標(biāo)題:
51單片機(jī)四線雙極性+五線四相步進(jìn)電機(jī)案例程序(細(xì)分+半步八拍方式+雙四拍+單四拍)
1、現(xiàn)發(fā)布只配有4線雙極性步進(jìn)電機(jī)
2、四線雙極性步進(jìn)電機(jī)與五線四相步進(jìn)電機(jī)程序不通用
3、五線四相步進(jìn)電機(jī)若只是震動,可適當(dāng)增大延時即可
0.png
(40.89 KB, 下載次數(shù): 29)
下載附件
2018-11-15 17:00 上傳
電路原理圖如下:
0.png
(241.64 KB, 下載次數(shù): 30)
下載附件
2018-11-15 17:00 上傳
細(xì)分單片機(jī)源程序如下:
/*************************************************************************************
* 標(biāo)題: 步進(jìn)電機(jī)試驗四(采用2細(xì)分) *
* *
* 通過本例程了解步進(jìn)馬達(dá)使用及驅(qū)動程序編寫 *
*; 單相四拍通電驅(qū)動時序: *
*; 正轉(zhuǎn): A/ B A B/ *
* 反轉(zhuǎn): B/ A B A/ *
* *
* UDN2916電流控制真值表: *
* I0 I1 輸出電流 *
* L L 最大 *
* H L 最大*2/3 *
* L H 最大*1/3 *
* H H 0 *
* 請學(xué)員一定要消化掉本例程 *
* 注意: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線圈細(xì)分表
unsigned char TableB[] = { 0XeF,0XdF,0XcF}; //B線圈細(xì)分表
void delay(int time);
/***************************************
函數(shù)功能:產(chǎn)生單相四拍脈沖控制步進(jìn)機(jī) 2細(xì)分
**************************************/
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);
}
/*******************延時函數(shù)****************************/
void delay(int time)
{
int i,j;
for(j=0; j <= time; j++)
for(i =0 ; i <= 120; i++);
}
void main()
{
while(1)
{
Go(); //步進(jìn)電機(jī)運行
}
}
復(fù)制代碼
/*************************************************************************************
* 標(biāo)題: 步進(jìn)電機(jī)試驗二(雙四拍方式) *
* *
* 通過本例程了解步進(jìn)馬達(dá)使用及驅(qū)動程序編寫 *
*; 雙四拍工作方式: *
*; 正轉(zhuǎn):A/B AB AB/ A/B/ *
* 反轉(zhuǎn):A/B/ AB/ AB A/B
*
* UDN2916電流控制真值表:
* I0 I1 輸出電流
* L L 最大
* H L 最大*2/3
* L H 最大*1/3
* H H 0 *
* 請學(xué)員一定要消化掉本例程 *
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);
/***************************************
函數(shù)功能:產(chǎn)生脈沖控制步進(jìn)機(jī)
正轉(zhuǎn):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);
}
/*******************延時函數(shù)****************************/
void delay(int time)
{
int i,j;
for(j=0; j <= time; j++)
for(i =0 ; i <= 120; i++);
}
void main()
{
while(1)
{
Go(); //步進(jìn)電機(jī)運行
}
}
復(fù)制代碼
所有資料51hei提供下載:
51單片機(jī)步進(jìn)馬達(dá)案例.rar
(3.78 MB, 下載次數(shù): 118)
2018-11-11 21:26 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
作者:
admin
時間:
2018-11-15 17:02
好資料,51黑有你更精彩!!!
作者:
ar_fa
時間:
2019-12-13 08:58
資料很好,收下了。謝謝
歡迎光臨 (http://www.torrancerestoration.com/bbs/)
Powered by Discuz! X3.1