在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 教程/ 數(shù)據(jù)庫(kù)/ 9.5 讓 28BYJ-48 步進(jìn)電機(jī)轉(zhuǎn)起來(lái)
8.3 C 語(yǔ)言函數(shù)的形參和實(shí)參
12.2 C 語(yǔ)言指針變量的聲明
12.5 ?C 語(yǔ)言字符數(shù)組和字符指針
7.3 單片機(jī) LED 點(diǎn)陣的介紹
11.5 UART 串口通信的基本應(yīng)用
9.9 單片機(jī)蜂鳴器控制程序和驅(qū)動(dòng)電路
10. 單片機(jī)實(shí)例練習(xí)與經(jīng)驗(yàn)積累
10.3 單片機(jī)交通燈控制程序和設(shè)計(jì)原理
9.8 實(shí)用的 28BYJ-48 步進(jìn)電機(jī)控制程序
8.2 C 語(yǔ)言函數(shù)的調(diào)用
12.4 C 語(yǔ)言指向數(shù)組元素的指針
7.1 C 語(yǔ)言變量的作用域
11.2 RS232 通信接口
12.7 1602 液晶的讀寫(xiě)時(shí)序介紹
7.2 C 語(yǔ)言變量的存儲(chǔ)類(lèi)別
8. C 語(yǔ)言函數(shù)進(jìn)階與單片機(jī)按鍵
10.4 51單片機(jī) RAM 區(qū)域的劃分
12.1 C 語(yǔ)言變量的地址
11. UART 串口通信
7. 變量進(jìn)階與點(diǎn)陣 LED
8.4 單片機(jī)按鍵介紹
9.3 電機(jī)的分類(lèi)
9.1 單片機(jī) IO 口的結(jié)構(gòu)
單片機(jī)通信實(shí)例與 ASCII 碼
8.1 單片機(jī)最小系統(tǒng)解析(電源、晶振和復(fù)位電路)
9.2 單片機(jī)上下拉電阻
11.4 單片機(jī) IO 口模擬 UART 串口通信
9.5 讓 28BYJ-48 步進(jìn)電機(jī)轉(zhuǎn)起來(lái)
9.7 28BYJ-48 步進(jìn)電機(jī)控制程序基礎(chǔ)
12.8 1602 液晶指令介紹
12.3 C 語(yǔ)言指針的簡(jiǎn)單示例
8.7 單片機(jī)矩陣按鍵的掃描
7.4 單片機(jī) LED 點(diǎn)陣的圖形顯示
8.6 單片機(jī)按鍵消抖程序
10.2 單片機(jī)中 PWM 的原理與控制程序
7.6 單片機(jī) LED 點(diǎn)陣的橫向移動(dòng)(動(dòng)態(tài)顯示)
11.3 USB 轉(zhuǎn)串口通信
12.9 1602 液晶簡(jiǎn)單顯示程序
9.4 28BYJ-48 步進(jìn)電機(jī)原理
8.5 ?單片機(jī)獨(dú)立按鍵掃描程序
12. C 語(yǔ)言指針基礎(chǔ)與1602液晶的初步認(rèn)識(shí)
9. 單片機(jī)中的步進(jìn)電機(jī)與蜂鳴器
10.1 單片機(jī)數(shù)字秒表程序
7.5 單片機(jī) LED 點(diǎn)陣的縱向移動(dòng)(動(dòng)態(tài)顯示)
8.8 單片機(jī)簡(jiǎn)易加法計(jì)算器程序
11.1 單片機(jī)串行通信介紹
10.5 單片機(jī)長(zhǎng)短按鍵的應(yīng)用
12.6 1602 液晶介紹(電路和引腳圖)
9.6 28BYJ-48 步進(jìn)電機(jī)轉(zhuǎn)動(dòng)精度與深入分析

9.5 讓 28BYJ-48 步進(jìn)電機(jī)轉(zhuǎn)起來(lái)

再重新看一下上面的步進(jìn)電機(jī)外觀圖和內(nèi)部結(jié)構(gòu)圖:步進(jìn)電機(jī)一共有5根引線(xiàn),其中紅色的是公共端,連接到 5 V 電源,接下來(lái)的橙、黃、粉、藍(lán)就對(duì)應(yīng)了 A、B、C、D 相;那么如果要導(dǎo)通 A 相繞組,就只需將橙色線(xiàn)接地即可,B 相則黃色接地,依此類(lèi)推;再根據(jù)上述單四拍和八拍工作過(guò)程的講解,可以得出下面的繞組控制順序表,如表9-1所示:

http://wiki.jikexueyuan.com/project/mcu-tutorial-two/images/28.png" alt="" />

我們板子上控制步進(jìn)電機(jī)部分是和板子上的顯示控制的 74HC138 譯碼器部分復(fù)用的 P1.0~P1.3,關(guān)于跳線(xiàn)我們?cè)诘?章已經(jīng)講過(guò)了,通過(guò)調(diào)整跳線(xiàn)帽的位置可以讓 P1.0~P1.3控制步進(jìn)電機(jī)的四個(gè)繞組,如圖9-5所示。

http://wiki.jikexueyuan.com/project/mcu-tutorial-two/images/29.png" alt="" />

圖9-5 顯示譯碼與步進(jìn)電機(jī)的選擇跳線(xiàn)

如果要使用電機(jī)的話(huà),需要把4個(gè)跳線(xiàn)帽都調(diào)到跳線(xiàn)組的左側(cè)(開(kāi)發(fā)板上的實(shí)際位置),即左側(cè)針和中間針連通(對(duì)應(yīng)原理圖中的中間和下邊的針),就可以使用 P1.0 到 P1.3 控制步進(jìn)電機(jī)了,如要再使用顯示部分的話(huà),就要再換回到右側(cè)了。那如果大家既想讓顯示部分正常工作,又想讓電機(jī)工作該怎么辦呢?跳線(xiàn)帽保持在右側(cè),用杜邦線(xiàn)把步進(jìn)電機(jī)的控制引腳(即左側(cè)的排針)連接到其它的暫不使用的單片機(jī) IO 上即可。

再來(lái)看一下我們步進(jìn)電機(jī)的原理圖,步進(jìn)電機(jī)的控制電路如圖9-6所示。

http://wiki.jikexueyuan.com/project/mcu-tutorial-two/images/30.png" alt="" />

圖9-6 步進(jìn)電機(jī)控制電路

誠(chéng)然,單片機(jī)的 IO 口可以直接輸出 0 V 和 5 V 的電壓,但是電流驅(qū)動(dòng)能力,也就是帶載能力非常有限,所以我們?cè)诿肯嗟目刂凭€(xiàn)上都增加一個(gè)三極管來(lái)提高驅(qū)動(dòng)能力。由圖中可以看出,若要使 A 相導(dǎo)通,則必須是 Q2 導(dǎo)通,此時(shí) A 相也就是橙色線(xiàn)就相當(dāng)于接地了,于是A 相繞組導(dǎo)通,此時(shí)單片機(jī) P1 口低4位應(yīng)輸出 0b1110,即 0xE;如要 A、B 相同時(shí)導(dǎo)通,那么就是 Q2、Q3 導(dǎo)通,P1 口低4位應(yīng)輸出 0b1100,即 0xC,依此類(lèi)推,我們可以得到下面的八拍節(jié)拍的 IO 控制代碼數(shù)組:

    unsigned char code BeatCode[8] = { 0xE, 0xC, 0xD, 0x9, 0xB, 0x3, 0x7, 0x6 };

到這里,似乎所有的邏輯問(wèn)題都解決了,循環(huán)將這個(gè)數(shù)組內(nèi)的值送到 P1 口就行了。但是,只要再深入想一下就會(huì)發(fā)現(xiàn)還有個(gè)問(wèn)題:多長(zhǎng)時(shí)間送一次數(shù)據(jù),也就是說(shuō)一個(gè)節(jié)拍要持續(xù)多長(zhǎng)時(shí)間合適呢?是隨意的嗎?當(dāng)然不是了,這個(gè)時(shí)間是由步進(jìn)電機(jī)的啟動(dòng)頻率決定的。啟動(dòng)頻率,就是步進(jìn)電機(jī)在空載情況下能夠正常啟動(dòng)的最高脈沖頻率,如果脈沖頻率高于該值,電機(jī)就不能正常啟動(dòng)。表9-2就是由廠家提供的步進(jìn)電機(jī)參數(shù)表,我們來(lái)看一下。

表9-2 28BYJ-48 步進(jìn)電機(jī)參數(shù)表

供電電壓 相數(shù) 相電阻Ω 步進(jìn)角度 減速比 啟動(dòng)頻率P.P.S 轉(zhuǎn)矩g.cm 噪聲dB 絕緣介電強(qiáng)度
5V 4 50±10% 5.625/64 1:64 ≥550 ≥300 ≤35 600VAC

表中給出的參數(shù)是≥550,單位是 P.P.S,即每秒脈沖數(shù),這里的意思就是說(shuō):電機(jī)保證在你每秒給出550個(gè)步進(jìn)脈沖的情況下,可以正常啟動(dòng)。那么換算成單節(jié)拍持續(xù)時(shí)間就是 1 s/550=1.8 ms,為了讓電機(jī)能夠啟動(dòng),我們控制節(jié)拍刷新時(shí)間大于 1.8 ms 就可以了。有了這個(gè)參數(shù),我們就可以動(dòng)手寫(xiě)出最簡(jiǎn)單的電機(jī)轉(zhuǎn)動(dòng)程序了,如下:

#include <reg52.h>

unsigned char code BeatCode[8] = { //步進(jìn)電機(jī)節(jié)拍對(duì)應(yīng)的 IO 控制代碼
    0xE, 0xC, 0xD, 0x9, 0xB, 0x3, 0x7, 0x6
};
void delay();

void main(){
    unsigned char tmp;  //定義一個(gè)臨時(shí)變量
    unsigned char index = 0;  //定義節(jié)拍輸出索引
    while (1){
        tmp = P1; //用 tmp 把 P1 口當(dāng)前值暫存
        tmp = tmp & 0xF0; //用&操作清零低4位
        //用|操作把節(jié)拍代碼寫(xiě)到低4位
        tmp = tmp | BeatCode[index];
        //把低4位的節(jié)拍代碼和高4位的原值送回 P1
        P1 = tmp;
        index++;  //節(jié)拍輸出索引遞增
        index = index & 0x07;  //用&操作實(shí)現(xiàn)到8歸零
        delay();  //延時(shí) 2 ms,即 2 ms 執(zhí)行一拍
    }
}
/* 軟件延時(shí)函數(shù),延時(shí)約 2ms */
void delay(){
    unsigned int i = 200;
    while (i--);
}

把程序編譯下載到板子上試試吧!看看電機(jī)轉(zhuǎn)了沒(méi)有?要記得換跳線(xiàn)哦!