步進電機是一種常用的執行器件,使用它能進行精準的定位及轉速調節等工作。一個簡單的步進電機驅動要由步進電機、驅動電路及微控制器構成,見圖1所示。
1.jpg (27.93 KB, 下載次數: 64)
下載附件
2020-10-4 19:34 上傳
圖1 步進電機驅動構成 在HC32F460開發板上,提供了電機驅動控制接口,見圖2所示。
2.jpg (34.81 KB, 下載次數: 67)
下載附件
2020-10-4 19:34 上傳
圖2 電機驅動控制接口 為了驅動步進電機,除了硬件方面的準備,還需必要的軟件配合。 要編寫步進電機驅動程序主要分為以下幾步: 1)分配引腳 使步進電機的MA~ MD引腳分別與PE8~ PE11相連接 MA---PE8 MB---PE9 MC---PE10 MD---PE11 2)定義輸出高低電平的語句 - #define MAL PORT_ResetBits(PortE, Pin08)
- #define MAH PORT_SetBits(PortE, Pin08)
- #define MBL PORT_ResetBits(PortE, Pin09)
- #define MBH PORT_SetBits(PortE, Pin09)
- #define MCL PORT_ResetBits(PortE, Pin10)
- #define MCH PORT_SetBits(PortE, Pin10)
- #define MDL PORT_ResetBits(PortE, Pin11)
- #define MDH PORT_SetBits(PortE, Pin11)
復制代碼 3)配置延時函數 配置延時函數的工作在步進電機的驅動中十分重要,它控制著步進電機運轉的快慢。 對于步進電機來說其速度是與驅動脈沖相有關的,但也并非脈沖越快,電機的轉速越快。因為電機電機屬于機械器件,要建立相應的磁場以達到相應的扭矩才能使電機轉動。過快的脈沖只會使電機在原地震顫和抖動,并無法旋轉。 4)控制電機旋轉方向 對于4相5線式步進電機來講,可通過8個節拍的脈沖序列來控制其正反轉。 正轉的驅動函數為: - void zx(void)
- {
- unsigned char X,Y;
- for(X=0;X<64;X++)
- {
- for(Y=0;Y<8;Y++)
- {
- MDL;
- MAH; //A
- Ddl_Delay1ms(n);
- MBH; //AB
- Ddl_Delay1ms(n);
- MAL; //B
- Ddl_Delay1ms(n);
- MCH; //BC
- Ddl_Delay1ms(n);
- MBL; //C
- Ddl_Delay1ms(n);
- MDH; //CD
- Ddl_Delay1ms(n);
- MCL; //D
- Ddl_Delay1ms(n);
- MAH; //DA
- Ddl_Delay1ms(n);
- }
- }
- }
復制代碼
反轉的驅動函數為: - void fx(void)
- {
- unsigned char X,Y;
- for(X=0;X<64;X++)
- {
- for(Y=0;Y<8;Y++)
- {
- MDH;
- MAH; //A
- Ddl_Delay1ms(n);
- MAL; //AB
- Ddl_Delay1ms(n);
- MCH; //B
- Ddl_Delay1ms(n);
- MDL; //BC
- Ddl_Delay1ms(n);
- MBH; //C
- Ddl_Delay1ms(n);
- MCL; //CD
- Ddl_Delay1ms(n);
- MAH; //D
- Ddl_Delay1ms(n);
- MBL; //DA
- Ddl_Delay1ms(n);
- }
- }
- }
復制代碼
5)控制電機運行 控制電機運行的關鍵程序 - OLED_Init();
- OLED_Clear();
- OLED_ShowString(0,0,"HC32F460 TEST",16);
- OLED_ShowString(0,2,"OLED & MOTOR:",16);
- MAL;
- MBL;
- MCL;
- MDL;
- Ddl_Delay1ms(500);
- f=1;
- rdata=5;
- n=3; // n>1
- OLED_ShowNum(112,2,0,2,16);
- for(c=0;c<rdata;c++)
- {
- if(f==0) fx();
- else zx();
- OLED_ShowNum(112,2,c,2,16);
- }
復制代碼
感興趣的話,還可以添加按鍵來設置轉速和轉動的圈數等,那會使應用價值更高!
|