您好,登錄后才能下訂單哦!
再從新看一下下面的步進電機外不雅圖和外部構造圖:步進電機一共有 5 根引線,個中白色的是公共端,銜接到 5V 電源,接下來的橙、黃、粉、藍就對應了 A、B、C、D 相;那么假如要導通 A 相繞組,就只需將橙色線接地即可,B 相則×××接地,依此類推;再依據上述單四拍和八拍任務進程的解說,可以得出下面的繞組掌握次序表,如表 9-1 所示:
表 9-1 八拍形式繞組掌握次序表
1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | |
P1-紅 | VCC | VCC | VCC | VCC | VCC | VCC | VCC | VCC |
P2-橙 | GND | GND | GND | |||||
P3-黃 | GND | GND | GND | |||||
P4-粉 | GND | GND | GND | |||||
P5-藍 | GND | GND | GND |
我們板子上掌握步進電機局部是和板子上的顯示掌握的 74HC138 譯碼器局部復用的P1.0~P1.3,關于跳線我們在第 3 章曾經講過了,經過調劑跳線帽的地位可以讓 P1.0~P1.3掌握步進電機的四個繞組,如圖 9-5 所示。
圖 9-5 顯示譯碼與步進電機的選擇跳線
假如要運用電機的話,需求把 4 個跳線帽都調到跳線組的左側(開辟板上的實踐地位),即左側針和兩頭針連通(對應道理圖中的兩頭和下邊的針),就可以運用 P1.0 到 P1.3 掌握步進電機了,如要再運用顯示局部的話,就要再換回到右側了。那假如人人既想讓顯示局部正常任務,又想讓電機任務該怎樣辦呢?跳線帽堅持在右側,用杜邦線把步進電機的掌握引腳(即左側的排針)銜接到其它的暫不運用的單片機 IO 上即可。
再來看一下我們步進電機的道理圖,步進電機的掌握電路如圖 9-6 所示。
圖 9-6 步進電機掌握電路
固然,單片機的 IO 口可以直接輸入 0V 和 5V 的電壓,然則電流驅動才能,也就是帶載才能十分無限,所以我們在每相的掌握線上都添加一個三極管來進步驅動才能。由圖中可以看出,若要使 A 相導通,則必需是 Q2 導通,此時 A 相也就是橙色線就相當于接地了,于是A 相繞組導通,此時單片機 P1 口低 4 位應輸入 0b1110,即 0xE;如要 A、B 相反時導通,那么就是 Q2、Q3 導通,P1 口低 4 位應輸入 0b1100,即 0xC,依此類推,我們可以失掉下面的八拍節奏的 IO 掌握代碼數組:
unsigned char code BeatCode[8] = { 0xE, 0xC, 0xD, 0x9, 0xB, 0x3, 0x7, 0x6 };
到這里,似乎一切的邏輯成績都處理了,輪回將這個數組內的值送到 P1 口就行了。然則,只需再深化想一下就會發現還有個成績:多長工夫送一次數據,也就是說一個節奏要繼續多長工夫適宜呢?是隨便的嗎?當然不是了,這個工夫是由步進電機的啟動頻率決議的。啟動頻率,就是步進電機在空載狀況下可以正常啟動的最高脈沖頻率,假如脈沖頻率高于該值,電機就不克不及正常啟動。表 9-2 就是由廠家供給的步進電機參數表,我們來看一下。
表 9-2 28BYJ-48 步進電機參數表
供電 電壓 | 相數 | 相電阻 Ω | 步進角度 | 加速比 | 啟動頻率 P.P.S | 轉矩 g.cm | 噪聲 dB | 絕緣介 電強度 |
5V | 4 | 50±10% | 5.625/64 | 1:64 | ≥550 | ≥300 | ≤35 | 600VAC |
表中給出的參數是≥550,單元是 P.P.S,即每秒脈沖數,這里的意思就是說:電機包管在你每秒給出 550 個步進脈沖的狀況下,可以正常啟動。那么換算成單節奏繼續工夫就是1s/550=1.8ms,為了讓電機可以啟動,我們掌握節奏刷新工夫大于 1.8ms 就可以了。有了這個參數,我們就可以入手寫出最復雜的電機遷移轉變程序了,如下:
#include <reg52.h> unsigned char code BeatCode[8] = { //步進電機節奏對應的 IO 掌握代碼 0xE, 0xC, 0xD, 0x9, 0xB, 0x3, 0x7, 0x6 }; void delay(); void main(){ unsigned char tmp; //界說一個暫時變量 unsigned char index = 0; //界說節奏輸入索引 while (1){ tmp = P1; //用 tmp 把 P1 口以后值暫存 tmp = tmp & 0xF0; //用&操作清零低 4 位 //用|操作把節奏代碼寫到低 4 位 tmp = tmp | BeatCode[index]; //把低 4 位的節奏代碼和高 4 位的原值送回 P1 P1 = tmp; index++; //節奏輸入索引遞增 index = index & 0x07; //用&操作完成到 8 歸零 delay(); //延時 2ms,即 2ms 履行一拍 } } /* 軟件延時函數,延時約 2ms */ void delay(){ unsigned int i = 200; while (i--); }
把程序編譯下載到板子上嘗嘗吧!看看電機轉了沒有?要記得換跳線哦!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。