DSP2833x實驗_步進電機
步進電機介紹:
步進電機是將電脈衝訊號轉變為角位移或線位移的開環控制元件。在非超載情況下,電機的轉速、停止的位置只取決於脈衝訊號的頻率和脈衝數,而不受負載變化的影響,即給電機加一個脈衝訊號,電機則轉過一個步距角。這一線性關係的存在,加上步進電機只有週期性的誤差而無累積誤差等特點,使得步進電機在速度、位置等控制領域的控制操作非常簡單。雖然步進電機應用廣泛,但它並不像普通的直流和交流電機那樣在常規狀態下使用, 它必須由雙環形脈衝訊號、 功率驅動電路等組成控制系統方可使用。因此用好步進電機也非易事,它涉及機械、電機、電子及計算機等許多專業知識。
步進電機主要分為以下幾類:
(1)永磁式(PM)
(2)反應式(VR)
(3)混合式(HB)
步進電機主要技術指標如下:
(1)相數
(2)步距角
(3)拍數
(4)保持轉矩
(1)工作原理
步進電機有三線式、 四線式、 五線式和六線式, 但其控制方式均相同, 都要以脈衝訊號電流來驅動。 假設每旋轉一圈需要 200 個脈衝訊號來勵磁, 可以計算出每個勵磁訊號能使步進電機前進 1.8° 。 其旋轉角度與脈衝的個數成正比。 步進電動機的正、 反轉由勵磁脈衝產生的順序來控制。 六線式四相步進電機是比較常見的, 它的控制等效電路如下圖所示:
(2)勵磁方式
步進電機的勵磁方式分為全步勵磁和半步勵磁兩種。
其中全步勵磁又有一相勵磁和二相勵磁之分, 半步勵磁又稱一二相勵磁。 假設每旋轉一圈需要 200 個脈衝訊號來勵磁, 可以計算出每個勵磁訊號能使步進電動機前進 1.8°。
簡要介紹如下:(6線式)
①一相勵磁:在每一瞬間, 步進電機只有一個線圈導通.每送一個勵磁訊號, 步進電機旋轉 1.8, 這是三種勵磁方式中最簡單的一種。
其特點是:精確度好、 消耗電力小,但輸出轉矩最小, 振動較大。
②二相勵磁:在每一瞬間,步進電動機有兩個線圈同時導通。每送一個勵磁訊號, 步進電機旋轉 1.8。
其特點是: 輸出轉矩大, 振動小, 因而成為目前使用最多的勵磁方式。 如果以該方式控制步進電機正轉, 對應的勵磁順序見下表。 若勵磁訊號反向傳送, 則步進電機反轉。
③一二相勵磁:為一相勵磁與二相勵磁交替導通的方式。 每送一個勵磁訊號, 步進電機旋轉 0.9。
其特點是:解析度高, 運轉平滑, 故應用也很廣泛。 如果以該方式控制步進電機正轉,對應的勵磁順序見下表。 若勵磁訊號反向傳送, 則步進電機反轉
五線4相式:四相五線步進電機_qq5132834的專欄-CSDN部落格_五線四相步進電機
ULN2003晶片簡介:
ULN2003是一個單片高電壓、高電流的達林頓電晶體陣列積體電路。它是由7對NPN達林頓管組成的,它的高電壓輸出特性和陰極箝位二極體可以轉換感應負載。單個達林頓對的集電極電流是500mA。達林頓管並聯可以承受更大的電流。此電路主要應用於繼電器驅動器,字錘驅動器,燈驅動器,顯示驅動器(LED氣體放電),線路驅動器和邏輯緩衝器。ULN2003的每對達林頓管都有一個2.7k串聯電阻,可以直接和TTL或5V CMOS裝置。輸入輸出反向。
步進電機驅動電路:
1 | 藍 | GPIO5 |
2 | 粉 | GPIO4 |
3 | 黃 | GPIO3 |
4 | 橙 | GPIO2 |
5 | 紅 | 電源 |
#include "DSP2833x_Device.h" // DSP2823x Headerfile Include File #include "DSP2833x_examples.h" // DSP2823x Examples Include File #include "leds.h" #include "beep.h" #include "key.h" #include "dc_motor.h" #include "steep_motor.h" ////////////////////////////////////// unsigned char Step_table[]={0x0004,0x0008,0x0010,0x0020};//對應相位拉低使能;0b0000 0000 0000 0100 = 0x0040.ULN2003取反 unsigned char Step_table1[]={0x0020,0x0010,0x0008,0x0004}; void main(void) { int i=0; char key=0; short cnt=0; char j=0; InitSysCtrl(); // 步驟 1. 初始化系統控制: LED_Init(); KEY_Init(); DC_Motor_Init(); Steep_Motor_Init(); while(1) { key=KEY_Scan(0); if(key==KEY1_PRESS) { cnt=1024; while(cnt--) { for(j=0;j<4;j++) { GpioDataRegs.GPADAT.all=Step_table[j]; DELAY_US(5000); } } } else if(key==KEY2_PRESS) { cnt=1024; while(cnt--) { for(j=0;j<4;j++) { GpioDataRegs.GPADAT.all=Step_table1[j]; DELAY_US(5000); } } } i++; if(i%2000==0) { LED1_TOGGLE; } DELAY_US(100); } }
/* * steep_motor.c * * Created on: 2021年7月7日 * Author: Administrator */ #include "steep_motor.h" void Steep_Motor_Init(void) { EALLOW; SysCtrlRegs.PCLKCR3.bit.GPIOINENCLK = 1;// 開啟GPIO時鐘 //Step_MOTOR埠配置 GpioCtrlRegs.GPAMUX1.bit.GPIO2=0; GpioCtrlRegs.GPADIR.bit.GPIO2=1; GpioCtrlRegs.GPAMUX1.bit.GPIO3=0; GpioCtrlRegs.GPADIR.bit.GPIO3=1; GpioCtrlRegs.GPAMUX1.bit.GPIO4=0; GpioCtrlRegs.GPADIR.bit.GPIO4=1; GpioCtrlRegs.GPAMUX1.bit.GPIO5=0; GpioCtrlRegs.GPADIR.bit.GPIO5=1; EDIS; GpioDataRegs.GPACLEAR.bit.GPIO2=1; GpioDataRegs.GPACLEAR.bit.GPIO3=1; GpioDataRegs.GPACLEAR.bit.GPIO4=1; GpioDataRegs.GPACLEAR.bit.GPIO5=1; }
/* * steep_motor.h * * Created on: 2021年7月7日 * Author: Administrator */ #ifndef STEEP_MOTOR_H_ #define STEEP_MOTOR_H_ #include "DSP2833x_Device.h" // DSP2833x 標頭檔案 #include "DSP2833x_Examples.h" // DSP2833x 例子相關標頭檔案 #define MOTO_OUTA_SETH (GpioDataRegs.GPASET.bit.GPIO2=1) #define MOTO_OUTA_SETL (GpioDataRegs.GPACLEAR.bit.GPIO2=1) #define MOTO_OUTB_SETH (GpioDataRegs.GPASET.bit.GPIO3=1) #define MOTO_OUTB_SETL (GpioDataRegs.GPACLEAR.bit.GPIO3=1) #define MOTO_OUTC_SETH (GpioDataRegs.GPASET.bit.GPIO4=1) #define MOTO_OUTC_SETL (GpioDataRegs.GPACLEAR.bit.GPIO4=1) #define MOTO_OUTD_SETH (GpioDataRegs.GPASET.bit.GPIO5=1) #define MOTO_OUTD_SETL (GpioDataRegs.GPACLEAR.bit.GPIO5=1) void Steep_Motor_Init(void); #endif /* STEEP_MOTOR_H_ */