本帖最后由 jinglixixi 于 2020-7-14 00:25 編輯
步進(jìn)電機(jī)是一種常用的執(zhí)行器件,使用它能進(jìn)行精準(zhǔn)的定位及轉(zhuǎn)速調(diào)節(jié)等工作。一個(gè)簡(jiǎn)單的步進(jìn)電機(jī)驅(qū)動(dòng)要由步進(jìn)電機(jī)、驅(qū)動(dòng)電路及單片機(jī)構(gòu)成,見(jiàn)下圖所示。
步進(jìn)電機(jī)驅(qū)動(dòng)的構(gòu)成圖
為了驅(qū)動(dòng)步進(jìn)電機(jī),除了硬件方面的準(zhǔn)備,還需必要的軟件配合。在易碼魔盒中,就提供了步進(jìn)電機(jī)的外設(shè)驅(qū)動(dòng)。由于剛開(kāi)始學(xué)習(xí)用易碼魔盒來(lái)設(shè)計(jì)程序,便打算在這方面練練手。 起初試了許多次,都一直沒(méi)有成功,就打算用手工編程的方法先讓步進(jìn)電機(jī)轉(zhuǎn)起來(lái),然后再與易碼魔盒生成的程序進(jìn)行對(duì)比來(lái)發(fā)現(xiàn)問(wèn)題。 要手工編寫(xiě)步進(jìn)電機(jī)驅(qū)動(dòng)程序主要分為以下幾步: 1)分配引腳的使用 以步進(jìn)電機(jī)的MA~ MD引腳分別與P32~ P35相連接 sbit MA = P3^2; sbit MB = P3^3; sbit MC = P3^4; sbit MD = P3^5;
2)定義輸出高低電平的宏定義 #define MAL MA = 0; #define MAH MA = 1; #define MBL MB = 0; #define MBH MB = 1; #define MCL MC = 0; #define MCH MC = 1; #define MDL MD = 0; #define MDH MD = 1;
3)配置延時(shí)函數(shù) 配置延時(shí)函數(shù)的工作在步進(jìn)電機(jī)的驅(qū)動(dòng)中十分重要,它控制著步進(jìn)電機(jī)運(yùn)轉(zhuǎn)的快慢。 但問(wèn)題也正出在這里,對(duì)于步進(jìn)電機(jī)來(lái)說(shuō)其速度是與驅(qū)動(dòng)脈沖有關(guān),但也并非脈沖越快,電機(jī)的轉(zhuǎn)速越快。因?yàn)殡姍C(jī)電機(jī)屬于機(jī)械器件,要建立相應(yīng)的磁場(chǎng)及達(dá)到相應(yīng)的扭矩才能使電機(jī)轉(zhuǎn)動(dòng)。過(guò)快的脈沖只會(huì)使電機(jī)在原地震顫和抖動(dòng),并無(wú)法旋轉(zhuǎn)。 使電機(jī)轉(zhuǎn)動(dòng)的延時(shí)函數(shù)為: - void delay_ms(void)
- {
- unsigned char b,c;
- for(c=0;c<180;c++)
- {
- for(b=0;b<8;b++);
- }
- }
- 4)控制電機(jī)旋轉(zhuǎn)方向
- 對(duì)于4相5線(xiàn)式步進(jìn)電機(jī)來(lái)講,可通過(guò)8個(gè)節(jié)拍的脈沖序列來(lái)控制其正反轉(zhuǎn)。
- 正轉(zhuǎn)的驅(qū)動(dòng)函數(shù)為:
- void zx()
- {
- unsigned char X,Y;
- for(X=0;X<64;X++)
- {
- for(Y=0;Y<8;Y++)
- {
- MDL;
- MAH; //A
- delay_ms();
- MBH; //AB
- delay_ms();
- MAL; //B
- delay_ms();
- MCH; //BC
- delay_ms();
- MBL; //C
- delay_ms();
- MDH; //CD
- delay_ms();
- MCL; //D
- delay_ms();
- MAH; //DA
- delay_ms();
- }
- }
- }
復(fù)制代碼
反轉(zhuǎn)的單片機(jī)驅(qū)動(dòng)函數(shù)為: - void fx()
- {
- unsigned char X,Y;
- for(X=0;X<64;X++) // 控制節(jié)拍數(shù)
- {
- for(Y=0;Y<8;Y++) // 控制節(jié)拍
- {
- MDH;
- MAH; //A
- delay_ms();
- MAL; //AB
- delay_ms();
- MCH; //B
- delay_ms();
- MDL; //BC
- delay_ms();
- MBH; //C
- delay_ms();
- MCL; //CD
- delay_ms();
- MAH; //D
- delay_ms();
- MBL; //DA
- delay_ms();
- }
- }
- }
復(fù)制代碼
5)主程序控制電機(jī)運(yùn)行 - void main()
- {
- unsigned char rdata=9,f,c;
- delay_ms();
- //停止電機(jī)轉(zhuǎn)動(dòng)
- MAL;
- MBL;
- MCL;
- MDL;
- delay_ms();
- f=1;//控制轉(zhuǎn)向
- while(1)
- {
- for(c=0;c<rdata;c++) //控制轉(zhuǎn)動(dòng)的位置
- {
- if(f==0)
- fx();
- else
- {
- zx();
- }
- }
- }
- }
復(fù)制代碼
|