在網(wǎng)上找了很久資料,都沒有直接的源代碼去驅(qū)動二相四線步進電機。本人編寫了一些基本的代碼,再加上L298N模塊,就可以輕松驅(qū)動啦。
0.png (420.03 KB, 下載次數(shù): 119)
下載附件
2017-7-18 15:58 上傳
0.png (84.31 KB, 下載次數(shù): 94)
下載附件
2017-7-18 15:59 上傳
0.png (98.16 KB, 下載次數(shù): 91)
下載附件
2017-7-18 15:59 上傳
0.png (425.68 KB, 下載次數(shù): 87)
下載附件
2017-7-18 16:00 上傳
單片機源程序如下:
- #include "reg52.h"
- //電機IO
- #define GPIO_MOTOR P1
- //sbit F1 = P1^0;
- //sbit F2 = P1^1;
- //sbit F3 = P1^2;
- //sbit F4 = P1^3;
- //按鍵IO
- sbit K1=P3^0;
- sbit K2=P3^1;
- sbit K3=P3^2;
- sbit K4=P3^3;
-
- sbit a0=P1^0;
- sbit a1=P1^1;
- sbit b0=P1^3;
- sbit b1=P1^4;
- void right(unsigned int y);
- void left(unsigned int x);
- void Delay(unsigned int t);
- unsigned char Direction,Speed;
- void motor();
- /*******************************************************************************
- * 函 數(shù) 名 : main
- * 函數(shù)功能 : 主函數(shù)
- * 輸 入 : 無
- * 輸 出 : 無
- *******************************************************************************/
-
- void main(void)
- {
- unsigned char i;
- Speed=10;
-
- while(1)
- {
-
- if(K1==0) //檢測按鍵K1是否按下
- {
- Delay(50); //消除抖動
- if(K1==0)
- {
- Direction=1;
- }
- while((i<200)&&(K1==0)) //檢測按鍵是否松開
- {
- Delay(50);
- i++;
- }
- i=0;
- }
- if(K2==0) //檢測按鍵K1是否按下
- {
- Delay(50); //消除抖動
- if(K2==0)
- {
- Direction=2;
- }
- while((i<200)&&(K2==0)) //檢測按鍵是否松開
- {
- Delay(50);
- i++;
- }
- i=0;
- }
- if(K3==0) //檢測按鍵K1是否按下
- {
- Delay(100); //消除抖動
- if(K3==0)
- {
- Speed--;
- if(Speed<=3)
- Speed=4;
- }
- while((i<200)&&(K2==0)) //檢測按鍵是否松開
- {
- Delay(1);
- i++;
- }
- i=0;
- }
-
- if(K4==0) //檢測按鍵K1是否按下
- {
- Delay(100); //消除抖動
- if(K4==0)
- {
- Speed++;
- }
- while((i<200)&&(K4==0)) //檢測按鍵是否松開
- {
- Delay(100);
- i++;
- }
- i=0;
- }
- motor();
-
- }
- }
-
- void motor()
- {
- if(Direction==1)
- {
- a0=0;
- a1=1;
- b0=1;
- b1=1;
- Delay(Speed);
- a0=1;
- a1=0;
- b0=1;
- b1=1;
- Delay(Speed);
- a0=1;
- a1=1;
- b0=0;
- b1=1;
- Delay(Speed);
- a0=1;
- a1=1;
- b0=1;
- b1=0;
- Delay(Speed);
- }
- if(Direction==2)
-
- {
- a0=1;
- a1=1;
- b0=1;
- b1=0;
- Delay(Speed);
- a0=1;
- a1=1;
- b0=0;
- b1=1;
- Delay(Speed);
- a0=1;
- a1=0;
- b0=1;
- b1=1;
- Delay(Speed);
- a0=0;
- a1=1;
- b0=1;
- b1=1;
- Delay(Speed);
- }
- }
-
- void Delay(unsigned int t)
- {
- unsigned int k;
- while(t--)
- {
- for(k=0; k<70; k++)
- { }
- }
- }
- /*void left(unsigned int x)
- {
- a0=0;
- a1=1;
- b0=1;
- b1=1;
- Delay(x);
- a0=1;
- a1=0;
- b0=1;
- b1=1;
- Delay(x);
- a0=1;
- a1=1;
- b0=0;
- b1=1;
- Delay(x);
- a0=1;
- a1=1;
- b0=1;
- b1=0;
- Delay(x);
- }
- void right(unsigned int y)
- {
- a0=1;
- a1=1;
- b0=1;
- b1=0;
- Delay(y);
- a0=1;
- a1=1;
- b0=0;
- b1=1;
- Delay(y);
- a0=1;
- a1=0;
- b0=1;
- b1=1;
- Delay(y);
- a0=0;
- a1=1;
- b0=1;
- b1=1;
- Delay(y);
-
-
- }*/
- /*
- #include<reg52.h>
-
- sbit a0=P1^0;
- sbit a1=P1^1;
- sbit b0=P1^3;
- sbit b1=P1^4;
-
-
- void Delay(unsigned int t)
-
- void main()
- {
- en0=1;
- en1=1;
- while(1)
- {
- a0=0;
- a1=1;
- b0=1;
- b1=1;
- Delay(500);
- a0=1;
- a1=0;
- b0=1;
- b1=1;
- Delay(500);
- a0=1;
- a1=1;
- b0=0;
- b1=1;
- Delay(500);
- a0=1;
- a1=1;
- b0=1;
- b1=0;
- Delay(500);
- }
- }
- void Delay(unsigned int t)
- {
- unsigned int k;
- while(t--)
- {
- for(k=0; k<80; k++)
- { }
- }
- }
- #include<reg52.h>
- #define uint unsigned int
- #define uchar unsigned char
- sbit a0=P1^0;
- sbit a1=P1^1;
- sbit en0=P1^2;
- //1
- sbit b0=P1^3;
- sbit b1=P1^4;
-
- sbit en1=P1^5;
- //2
- void zheng(uchar k,uchar j);
- void yanshi(uint z);
- void xifen(uchar k1,uchar j1);
- uchar b,num,n,num1,n1,h;
- void main()
- {
- en0=1;
- en1=1;
- while(1)
- {
- xifen(10,100); //1/210mS100 果步 1.890
- yanshi(400);
- zheng(15,50); //15mS 50 1.890
- yanshi(400);
- }
- }
- void zheng(uchar k,uchar j)
- {
-
- b=j/4;
- b=b+1;
- num=0;
- for(b;b>0;b--)
- {
- if(num<j&n==0)//A-B+
- {
- a0=0;
- a1=1;
- b0=1;
- b1=0;
- yanshi(k);
- num++;
- n=1;
- }
- if(num<j&n==1) //A- B-
- {
- a0=0;
- a1=1;
- b0=0;
- b1=1;
- yanshi(k);
- num++;
- n=2;
- }
- if(num<j&n==2)//A+ B-
- {
- a0=1; a1=0; b0=0; b1=1;
- yanshi(k);
- num++;
- n=3;
- }
- if(num<j&n==3)//A+ B+
- {
- a0=1;
- a1=0;
- b0=1;
- b1=0;
- yanshi(k);
- num++;
-
- n=0;
- }
- }
- }
- void xifen(uchar k1,uchar j1)
- {
- h=j1/8;
- h=h+1;
- num1=0;
- for(h;h>0;h--)
- {
- if(num1<j1&n1==0)//A- B+
- {
- a0=0;
- a1=1;
- b0=1;
- b1=0;
- yanshi(k1);
- num1++;
- n1=1;
- }
- if(num1<j1&n1==1) //A-
- {
- a0=0;
- a1=1;
- b0=0;
- b1=0;
- yanshi(k1);
- num1++;
- n1=2;
- }
- if(num1<j1&n1==2) //A- B-
- {
- a0=0;
- a1=1;
- b0=0;
- b1=1;
- yanshi(k1);
- num1++;
- n1=3;
- }
- if(num1<j1&n1==3)// B-
- {
- a0=0;
- a1=0;
- b0=0;
- b1=1;
- yanshi(k1);
- num1++;
- n1=4;
- }
- if(num1<j1&n1==4) //A+B-
- ……………………
- …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼
0.png (35.56 KB, 下載次數(shù): 104)
下載附件
2017-7-18 16:00 上傳
所有資料51hei提供下載:
二相四線步進電機(可調(diào)速度)1.zip
(1.04 MB, 下載次數(shù): 350)
2017-7-18 09:04 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|