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

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

9.6 28BYJ-48 步進(jìn)電機(jī)轉(zhuǎn)動精度與深入分析

轉(zhuǎn)是轉(zhuǎn)了,但是不是感覺有點不太對勁呢?太慢了?別急,咱們繼續(xù)。根據(jù)本章開頭講解的原理,八拍模式時,步進(jìn)電機(jī)轉(zhuǎn)過一圈是需要64個節(jié)拍,而我們程序中是每個節(jié)拍持續(xù) 2 ms,那么轉(zhuǎn)一圈就應(yīng)該是 128 ms,即1秒鐘轉(zhuǎn)7圈多,可怎么看上去它好像是7秒多才轉(zhuǎn)了一圈呢?

那么,是時候來了解“永磁式減速步進(jìn)電機(jī)”中這個“減速”的概念了。圖9-7是這個 28BYJ-48 步進(jìn)電機(jī)的拆解圖,從圖中可以看到,位于最中心的那個白色小齒輪才是步進(jìn)電機(jī)的轉(zhuǎn)子輸出,64個節(jié)拍只是讓這個小齒輪轉(zhuǎn)了一圈,然后它帶動那個淺藍(lán)色的大齒輪,這就是一級減速。大家看一下右上方的白色齒輪的結(jié)構(gòu),除電機(jī)轉(zhuǎn)子和最終輸出軸外的3個傳動齒輪都是這樣的結(jié)構(gòu),由一層多齒和一層少齒構(gòu)成,而每一個齒輪都用自己的少齒層去驅(qū)動下一個齒輪的多齒層,這樣每2個齒輪都構(gòu)成一級減速,一共就有了4級減速,那么總的減速比是多少呢?即轉(zhuǎn)子要轉(zhuǎn)多少圈最終輸出軸才轉(zhuǎn)一圈呢?

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

圖9-7 步進(jìn)電機(jī)內(nèi)部齒輪示意圖

回頭看一下電機(jī)參數(shù)表中的減速比這個參數(shù)吧——1:64,轉(zhuǎn)子轉(zhuǎn)64圈,最終輸出軸才會轉(zhuǎn)一圈,也就是需要6464=4096個節(jié)拍輸出軸才轉(zhuǎn)過一圈,2 ms4096=8192 ms,8秒多才轉(zhuǎn)一圈呢,是不是跟剛才的實驗結(jié)果正好吻合了?4096個節(jié)拍轉(zhuǎn)動一圈,那么一個節(jié)拍轉(zhuǎn)動的角度——步進(jìn)角度就是360/4096,看一下表中的步進(jìn)角度參數(shù)5.625/64,算一下就知道這兩個值是相等的,一切都已吻合了。

關(guān)于基本的控制原理本該到這里就全部結(jié)束了,但是,我們希望大家都能培養(yǎng)一種“實踐是檢驗真理的唯一標(biāo)準(zhǔn)”的思維方式!回想一下,步進(jìn)電機(jī)最大的特點是什么?精確控制轉(zhuǎn)動量!那么我們是不是應(yīng)該檢驗一下它到底是不是能精確呢?精確到什么程度呢?怎么來檢驗?zāi)??讓它轉(zhuǎn)過90度,然后量一下準(zhǔn)不準(zhǔn)?也行,但是如果它只差了1度甚至不到1度,你能準(zhǔn)確測量出來嗎?在沒有精密儀器的情況很難。我們還是讓它多轉(zhuǎn)幾個整圈,看看它最后停下的位置還是不是原來的位置。對應(yīng)的,我們把程序修改一下,以方便控制電機(jī)轉(zhuǎn)過任意的圈數(shù)。

#include <reg52.h>
void TurnMotor(unsigned long angle);
void main(){
    TurnMotor(360*25);  //360度*25,即25圈
    while (1);
}
/* 軟件延時函數(shù),延時約 2 ms */
void delay(){
    unsigned int i = 200;
    while (i--);
}
/* 步進(jìn)電機(jī)轉(zhuǎn)動函數(shù),angle-需轉(zhuǎn)過的角度 */
void TurnMotor(unsigned long angle){
    unsigned char tmp;  //臨時變量
    unsigned char index = 0;  //節(jié)拍輸出索引
    unsigned long beats = 0;  //所需節(jié)拍總數(shù)
    //步進(jìn)電機(jī)節(jié)拍對應(yīng)的 IO 控制代碼
    unsigned char code BeatCode[8] = {
        0xE, 0xC, 0xD, 0x9, 0xB, 0x3, 0x7, 0x6
    };
    //計算需要的節(jié)拍總數(shù),4096拍對應(yīng)一圈
    beats = (angle*4096) / 360;
    //判斷 beats 不為0時執(zhí)行循環(huán),然后自減1
    while (beats--){
        tmp = P1;  //用 tmp 把 P1 口當(dāng)前值暫存
        tmp = tmp & 0xF0;  //用&操作清零低4位
        tmp = tmp | BeatCode[index]; //用|操作把節(jié)拍代碼寫到低4位
        P1 = tmp;  //把低4位的節(jié)拍代碼和高4位的原值送回 P1
        index++;  //節(jié)拍輸出索引遞增
        index = index & 0x07;  //用&操作實現(xiàn)到8歸零
        delay();  //延時 2 ms,即 2 ms 執(zhí)行一拍
    }
    P1 = P1 | 0x0F; //關(guān)閉電機(jī)所有的相
}

上述程序中,我們先編寫了一個控制電機(jī)轉(zhuǎn)過指定角度的函數(shù),這個角度值由函數(shù)的形式參數(shù)給出,然后在主函數(shù)中就可以方便的通過更改調(diào)用時的實際參數(shù)來控制電機(jī)轉(zhuǎn)過任意的角度了。我們用了36025,也就是25圈,當(dāng)然你也可以隨意改為其它的值,看看是什么結(jié)果。我們的程序會執(zhí)行258=200秒的時間,先記下輸出軸的初始位置,然后上電并耐心等它執(zhí)行完畢,看一下,是不是??有誤差?怎么回事,哪兒出問題了,不是說能精確控制轉(zhuǎn)動量嗎?

這個問題其實是出在了減速比上,再來看一下,廠家給出的減速比是1:64,不管是哪個廠家生產(chǎn)的電機(jī),只要型號是 28BYJ-48,其標(biāo)稱的減速比就都是1:64。但實際上呢?經(jīng)過我們的拆解計算發(fā)現(xiàn):真實準(zhǔn)確的減速比并不是這個值1:64,而是1:63.684!得出這個數(shù)據(jù)的方法也很簡單,實際數(shù)一下每個齒輪的齒數(shù),然后將各級減速比相乘,就可以得出結(jié)果了,實測的減速比為(32/9)(22/11)(26/9)(31/10)≈63.684,從而得出實際誤差為0.0049,即約為百分之0.5,轉(zhuǎn)100圈就會差出半圈,那么我們剛才轉(zhuǎn)了25圈,是不是就差了八分之一圈了,也就是45度,看一下剛才的誤差是45度吧。那么按照1:63.684 的實際減速比,可以得出轉(zhuǎn)過一圈所需要節(jié)拍數(shù)是6463.684≈4076。那么就把上面程序中電機(jī)驅(qū)動函數(shù)里的4096改成4076再試一下吧。是不是看不出絲毫的誤差了?但實際上誤差還是存在的,因為上面的計算結(jié)果都是約等得出的,實際誤差大約是0.000056,即萬分之0.56,轉(zhuǎn)一萬圈才會差出半圈,已經(jīng)可以忽略不計了。

那么廠家的參數(shù)為什么會有誤差呢?難道廠家不知道嗎?要解釋這個問題,我們得回到實際應(yīng)用中,步進(jìn)電機(jī)最通常的目的是控制目標(biāo)轉(zhuǎn)過一定的角度,通常都是在360度以內(nèi)的,而這個 28BYJ-48 最初的設(shè)計目的是用來控制空調(diào)的扇葉的,扇葉的活動范圍是不會超過180度的,所以在這種應(yīng)用場合下,廠商給出一個近似的整數(shù)減速比1:64已經(jīng)足夠精確了,這也是合情合理的。然而,正如我們的程序那樣,我們不一定是要用它來驅(qū)動空調(diào)扇葉,我們可以讓它轉(zhuǎn)動很多圈來干別的,這個時候就需要更為精確的數(shù)據(jù)了,這也是我們希望同學(xué)們都能了解并掌握的,就是說我們要能自己“設(shè)計”系統(tǒng)并解決其中發(fā)現(xiàn)的問題,而不要被所謂的“現(xiàn)成的方案”限制住思路。