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

鍍金池/ 教程/ 數(shù)據(jù)庫(kù)/ 9.6 28BYJ-48 步進(jìn)電機(jī)轉(zhuǎn)動(dòng)精度與深入分析
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.6 28BYJ-48 步進(jìn)電機(jī)轉(zhuǎn)動(dòng)精度與深入分析

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

那么,是時(shí)候來(lái)了解“永磁式減速步進(jìn)電機(jī)”中這個(gè)“減速”的概念了。圖9-7是這個(gè) 28BYJ-48 步進(jìn)電機(jī)的拆解圖,從圖中可以看到,位于最中心的那個(gè)白色小齒輪才是步進(jìn)電機(jī)的轉(zhuǎn)子輸出,64個(gè)節(jié)拍只是讓這個(gè)小齒輪轉(zhuǎn)了一圈,然后它帶動(dòng)那個(gè)淺藍(lán)色的大齒輪,這就是一級(jí)減速。大家看一下右上方的白色齒輪的結(jié)構(gòu),除電機(jī)轉(zhuǎn)子和最終輸出軸外的3個(gè)傳動(dòng)齒輪都是這樣的結(jié)構(gòu),由一層多齒和一層少齒構(gòu)成,而每一個(gè)齒輪都用自己的少齒層去驅(qū)動(dòng)下一個(gè)齒輪的多齒層,這樣每2個(gè)齒輪都構(gòu)成一級(jí)減速,一共就有了4級(jí)減速,那么總的減速比是多少呢?即轉(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ù)表中的減速比這個(gè)參數(shù)吧——1:64,轉(zhuǎn)子轉(zhuǎn)64圈,最終輸出軸才會(huì)轉(zhuǎn)一圈,也就是需要6464=4096個(gè)節(jié)拍輸出軸才轉(zhuǎn)過(guò)一圈,2 ms4096=8192 ms,8秒多才轉(zhuǎn)一圈呢,是不是跟剛才的實(shí)驗(yàn)結(jié)果正好吻合了?4096個(gè)節(jié)拍轉(zhuǎn)動(dòng)一圈,那么一個(gè)節(jié)拍轉(zhuǎn)動(dòng)的角度——步進(jìn)角度就是360/4096,看一下表中的步進(jìn)角度參數(shù)5.625/64,算一下就知道這兩個(gè)值是相等的,一切都已吻合了。

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

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

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

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

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