28BYJ-48 步進(jìn)電機(jī)轉(zhuǎn)動(dòng)精度與深入分析
掃描二維碼
隨時(shí)隨地手機(jī)看文章
轉(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)一圈呢?
圖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ù)。
#includevoidTurnMotor(unsignedlongangle);voidmain(){TurnMotor(360*25);//360度*25,即25圈while(1);}/*軟件延時(shí)函數(shù),延時(shí)約2ms*/voiddelay(){unsignedinti=200;while(i--);}/*步進(jìn)電機(jī)轉(zhuǎn)動(dòng)函數(shù),angle-需轉(zhuǎn)過(guò)的角度*/voidTurnMotor(unsignedlongangle){unsignedchartmp;//臨時(shí)變量unsignedcharindex=0;//節(jié)拍輸出索引unsignedlongbeats=0;//所需節(jié)拍總數(shù)//步進(jìn)電機(jī)節(jié)拍對(duì)應(yīng)的IO控制代碼unsignedcharcodeBeatCode[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),然后自減1while(beats--){tmp=P1;//用tmp把P1口當(dāng)前值暫存tmp=tmp&0xF0;//用&操作清零低4位tmp=tmp"BeatCode[index];//用|操作把節(jié)拍代碼寫(xiě)到低4位P1=tmp;//把低4位的節(jié)拍代碼和高4位的原值送回P1index++;//節(jié)拍輸出索引遞增index=index&0x07;//用&操作實(shí)現(xiàn)到8歸零delay();//延時(shí)2ms,即2ms執(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)看一下,廠(chǎng)家給出的減速比是1:64,不管是哪個(gè)廠(chǎng)家生產(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ì)了。
那么廠(chǎng)家的參數(shù)為什么會(huì)有誤差呢?難道廠(chǎng)家不知道嗎?要解釋這個(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)合下,廠(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)成的方案”限制住思路。