在當今的自動化世界中,步進電機和伺服電機是嵌入式系統中最常用的兩種電機。兩者都用于各種自動化機器,如機械臂、CNC 機器、相機等。在本教程中,我們將了解如何將步進電機與 ARM7-LPC2148 連接以及如何控制它的速度。
步進電機
步進電機是無刷直流電機,可以小角度旋轉,這些角度稱為步進。我們可以通過向其引腳提供數字脈沖來逐步旋轉步進電機。步進電機價格便宜且設計堅固。電機的速度可以通過改變數字脈沖的頻率來控制。
根據定子繞組的類型,有兩種類型的步進電機可用: 單極 和 雙極。這里我們使用的是最常用的步進電機UNIPOLAR步進電機。要旋轉步進電機,我們需要按順序為步進電機的線圈通電。根據旋轉操作,它們分為兩種模式:
全步模式:(4步序列)
單相步進(WAVE STEPPING)
兩相步進
半步模式(8 步序列)
要了解有關步進電機及其操作的更多信息,請點擊鏈接。
使用 ARM7-LPC2148 旋轉步進電機
在這里,我們將使用FULL STEP: ONE PHASE ON 或 WAVE STEPPING模式使用 ARM7-LPC2148 旋轉步進電機
在這種方法中,我們一次只能為一個線圈(LPC2148 的一個引腳)通電。也就是說,如果第一個線圈A通電一小段時間,軸將改變其位置,然后線圈B同樣通電,軸將再次改變其位置。與此相同,線圈 C 和線圈 D 通電以進一步移動軸。這使得步進電機的軸通過一次激勵一個線圈來逐步旋轉。
通過這種方法,我們通過依次為線圈通電來逐步旋轉軸。這被稱為四步序列,因為它需要四個步驟。
您可以根據下面給出的值使用半步法(8 序列法)旋轉步進電機。
所需組件
硬件:
ARM7-LPC2148
ULN2003電機驅動IC
LED – 4
步進電機 (28BYJ-48)
面包板
連接線
軟件:
凱爾uVision5
Flasic 魔法工具
步進電機 (28BYJ-48)
28BYJ-48步進電機已如上圖所示。它是一個 單極步進 電機,需要 5V 電源。該電機采用 4 線圈單極排列,每個線圈的額定電壓為 +5V,因此使用任何微控制器(如 Arduino、Raspberry Pi、STM32、ARM 等)都相對容易控制。
但是我們需要一個像 ULN2003 這樣的電機驅動 IC 來驅動它,因為步進電機消耗大電流并且可能會損壞微控制器。
28BYJ-48 的規格在以下數據表中提供:
ULN2003步進電機驅動器
大多數 步進電機 只能在驅動模塊的幫助下運行。這是因為控制器模塊(在我們的例子中為 LPC2148)將無法從其 I/O 引腳提供足夠的電流以供電機運行。所以我們將使用像 ULN2003 模塊這樣的外部模塊作為 步進電機驅動器。
在這個項目中,我們將使用 ULN2003 電機驅動器 IC。IC的管腳圖如下:
引腳(IN1 至 IN7)是用于連接微控制器輸出的輸入引腳,OUT1 至 OUT7 是用于連接步進電機輸入的相應輸出引腳。COM 提供輸出設備和外部電源輸入源所需的正電源電壓。
電路原理圖
下面給出了將步進電機與 ARM-7 LPC2148 連接的電路圖
帶有 ULN2003 電機驅動器 IC 的 ARM7-LPC2148
LPC2148 的 GPIO 引腳(P0.7 至 P0.10)被視為與 ULN2003 IC 的輸入引腳(IN1-IN4)相連的輸出引腳。
ULN2003 IC與步進電機的連接(28BYJ-48)
ULN2003 IC 的輸出引腳 (OUT1-OUT4) 連接到步進電機引腳(藍色、粉色、黃色和橙色)。
ULN2003 的 IN1 到 IN4 的 LED
四個 LED(LED1、LED2、LED4、LED 4)陽極引腳分別與 ULN2003 的引腳 IN1、IN2、IN3 和 IN4 連接,LED 的陰極連接到 GND,用于指示來自 LPC2148 的脈沖。我們可以注意到所提供的脈沖模式。模式顯示在最后附上的演示視頻中。
為步進電機編程 ARM7-LPC2148
要對 ARM7-LPC2148 進行編程,我們需要 keil uVision 和 Flash Magic 工具。我們正在使用 USB 電纜通過微型 USB 端口對 ARM7 Stick 進行編程。我們使用 Keil 編寫代碼并創建一個 hex 文件,然后使用 Flash Magic 將 HEX 文件閃存到 ARM7 棒。
使用 ARM 7 控制步進電機的完整代碼 在本教程的末尾給出,這里我們解釋它的幾個部分。
1.為了使用完整的 STEP-ONE PHASE ON方法,我們需要包含以下命令。所以我們在程序中使用下面這行
無符號字符順時針[4] = {0x1,0x2,0x4,0x8};//順時針旋轉命令
unsigned char antilateral[4] = {0x8,0x4,0x2,0x1}; //逆時針旋轉命令
2.以下行用于將 PORT0 引腳初始化為輸出并將它們設置為 LOW
PINSEL0 = 0x00000000;//設置PORT0引腳
IO0DIR |= 0x00000780; //設置引腳P0.7、P0.8、P0.9、P0.10為OUTPUT
IO0CLR = 0x00000780; //設置P0.7、P0.8、P0.9、P0.10引腳輸出為低
3.通過使用此for循環延遲,根據順時針命令將 PORT 引腳(P0.7 至 P0.10)設置為高電平
for (int j=0; j
for(int i=0; i<4;i++)
{
IOPIN0 = 順時針[i]<<7; // 左移后將引腳值逐一設置為 HIGH
delay(0x10000); //改變這個值來改變旋轉速度
}
}
Anti-clock Wise 也一樣
for (int z=0;z
for(int i=0; i<4;i++)
{
IOPIN0 =逆時針[i]<<7;
延遲(0x10000);//改變這個值來改變旋轉速度
}
}
4.改變延遲時間改變步進電機的轉速
延遲(0x10000);//更改此值以更改旋轉速度
(0x10000)-全速
(0x50000)-變慢
(0x90000)-比以前變慢。因此,通過增加延遲,我們降低了旋轉速度。
5.一整圈的步數可以用下面的代碼改變
int no_of_steps = 550; //將此值更改為所需的旋轉步數(550 為一個完整的旋轉)
對于我的步進電機,完全旋轉有 550 步,半旋轉有 225 步。所以根據你的要求改變它。
6.此功能用于創建延遲時間。
void delay(unsigned int value) //產生延遲的函數
{
unsigned int z;
for(z=0;z<值;z++);
}
-
步進電機
+關注
關注
151文章
3115瀏覽量
147648 -
ARM7
+關注
關注
3文章
207瀏覽量
50382 -
LPC2148
+關注
關注
0文章
25瀏覽量
14940
發布評論請先 登錄
相關推薦
評論