步進電機的使用一定要選擇一個比較好的機型,最起碼能在網上搜到它的相關資料。這樣會給電機的參數的確定提供相關信息。我最近學了一個EM--462步進電機。這家伙可是把我氣炸了,一點信息也沒有,上網查都查不到。盲目的試探之后,終于能驅動它了。
對EM--462的描述:有四根線,其他信息沒了。
相數:可能是四相,也可能是兩相;
我開始用的驅動電路是L297搭配L298n使用,但是沒搞明白,于是直接用L298N驅動了。我用L298n是這樣用的:信號輸入端分別從5、 7 、10 、12 腳輸入,對應單片機管腳P2^0---P2^3
298的6 、11腳連接單片機的P2^4 、P2^5腳。把他們都置高,就可以工作了。
對于其他腳的連線
4--12v電源、整流橋正極;(整流橋要用兩個,現在接與2、3腳一組的那個)
2、3---分別接整流橋 交流 的兩個腳(不分順序)
9--5V電源
1、8、15接地
13、14----分別接另一個整流橋的 交流的兩腳 (不分順序)
整流橋的正負極都要分別接在12V的正負極上。
請務必上網查看L298的用法。(我不會上傳,如果需要的話,給我說一聲,我發郵件給你,這個我會傳上文件的)
2、3、13、14接在步進電機的四個腳上。關于順序就得自己摸索了。一般來說按順序從左至右一些依次對應2、3、13、14腳。從右至左也行,就是轉的反向不同而已。可以調節的。
來看看程序:
//單八拍運作模式
#include<reg51.h>#define uchar unsigned char#define uint unsigned int
sbit a=P^0;sbit b=P2^1;sbit c=P2^2;sbit d=P2^3;sbit m=P2^4;sbit n=P2^5;
uint i=0;
//---------延時函數------------void delay(uchar z){uint i,j;for (i=0;i<=z;i++) for(j=0;j<=100;j++);}
//----------主函數---------------void main(){ m=n=1;//使能端???好像吧置零就不轉了i=5;//調節速度while(1){ a=1;b=0;c=0;d=0; delay(i); a=1;b=0;c=0;d=0; delay(i);
a=1;b=1;c=0;d=0; delay(i); a=0;b=1;c=0;d=0; delay(i);
a=0;b=1;c=1;d=0; delay(i); a=0;b=0;c=1;d=0; delay(i);
a=0;b=0;c=1;d=1; delay(i); a=0;b=0;c=0;d=1; delay(i); a=1;b=0;c=0;d=1; delay(i);
} }
調延時的時間就可以控制速度了。這里是i的值
再看看單四拍
#include<reg51.h>#define uchar unsigned char#define uint unsigned int
sbit a=P2^0;sbit b=P2^1;sbit c=P2^2;sbit d=P2^3;sbit m=P2^4;sbit n=P2^5;
uint i=0;
//---------延時函數------------void delay(uchar z){uint i,j;for (i=0;i<=z;i++) for(j=0;j<=50;j++);}
//----------主函數---------------void main(){ m=n=1;i=5;while(1){ a=1;b=0;c=0;d=0; delay(i); a=0;b=1;c=0;d=0; delay(i); a=0;b=0;c=1;d=0; delay(i); a=0;b=0;c=0;d=1; delay(i);}}
雙四拍
#include<reg51.h>#define uchar unsigned char#define uint unsigned int
sbit a=P2^0;sbit b=P2^1;sbit c=P2^2;sbit d=P2^3;sbit m=P2^4;sbit n=P2^5;
uint i=0;
//---------延時函數------------void delay(uchar z){uint i,j;for (i=0;i<=z;i++) for(j=0;j<=100;j++);}
//----------主函數---------------void main(){ m=n=1;i=5;while(1){ a=1;b=0;c=0;d=0; delay(i); a=1;b=1;c=0;d=0; delay(i); a=0;b=1;c=1;d=0; delay(i); a=0;b=0;c=1;d=1; delay(i); a=1;b=0;c=0;d=1; delay(i);}}
還可以控制直流電機的速度。
改改連接方式:
4腳接6V,整流橋的正負極也對應接6V的正負極
2、3一組控制一個電機,13、14一組控制一個電機
看程序
#include<reg51.h>#define uchar unsigned char#define uint unsigned int
sbit a=P2^0;//電機一sbit b=P2^1;//電機一sbit c=P2^2;//電機二sbit d=P2^3;//電機二sbit m=P2^4;//電機一使能端sbit n=P2^5;//電機二使能端
uint i=0;
//---------延時函數------------void delay(uchar z){uint i,j;for (i=0;i<=z;i++) for(j=0;j<=100;j++);}
//----------主函數---------------void main(){ m=n=1;i=500;while(1){ a=1;b=0;c=0;d=0;//電機一正轉 delay(i); a=0;b=1;c=0;d=0;//電機一反轉 delay(i); a=0;b=0;c=1;d=0;//電機二正轉 delay(i); a=0;b=0;c=0;d=1;//電機二反轉 delay(i); }}
這個i要大點
這個不能控制速度。控制占空比來控制速度。
以電機一為例
#include<reg51.h>#define uchar unsigned char#define uint unsigned int
sbit a=P2^0;sbit b=P2^1;
sbit m=P2^4;
//---------延時函數------------void delay(uchar z){uint i,j;for (i=0;i<=z;i++) for(j=0;j<=100;j++);}
//----------主函數---------------void main(){ m=1; i=5;while(1){ b=0; //只控制正轉
a=1; //占空比,我的理解就是轉的時間和不轉的時間的比值
delay(5);//轉一會時間(1)
a=0; //不轉
delay(10);//停一會(2)
}//循環}
由于單片機執行的時間很短,所以,電機轉的結果是你看不出有停頓,但速度變化了。
調節(1)、(2)的值就能調速度了。
以后的事情自己總結經驗。
|