轉是轉了,然則不是覺得有點不太對勁呢?太慢了?別急,我們持續。依據本章掃尾解說的道理,八拍形式時,步進馬達轉過一圈是需求64 個節奏,而我們程式中是每一個節奏繼續2ms,那麼轉一圈就應當是128ms,即1 秒轉7 圈多,可怎麼看上去它彷彿是7 秒多才轉了一圈呢?
那麼,是時分來理解「永磁式加速步進馬達」中這個「加速」的概念了。圖9-7 是這個28BYJ-48 步進馬達的拆解圖,從圖中可以看到,位於最中間的誰人白色小齒輪才是步進馬達的轉子輸入,64 個節奏只是讓這個小齒輪轉了一圈,然後它帶動誰人淺藍色的大齒輪,這就是一級加速。人人看一下右上方的白色齒輪的構造,除電機轉子和最終輸入軸外的3 個傳動齒輪多是如許的構造,由一層多齒和一層少齒組成,而每個齒輪都用本人的少齒層去驅動下一個齒輪的多齒層,如許每2 個齒輪都組成一級加速,一共就有了4 級加速,那麼總的加速比是若干呢?即轉子要轉若干圈最終輸入軸才轉一圈呢?
圖9-7 步進馬達外部齒輪表示圖
回頭看一下馬達參數表中的加速比這個參數吧-1:64 ,轉子轉64 圈,最終輸入軸才會轉一圈,也就是需求64*64=4096 個節奏輸入軸才轉過一圈,2ms*4096=8192ms,8 秒多才轉一圈呢,是不是跟方才的試驗後果剛好吻合了? 4096 個節奏遷移轉變一圈,那麼一個節奏遷移轉變的角度-步進角度就是360/4096,看一下表中的步進角度參數5.625/64,算一下就曉得這兩個值是相等的,一切都已吻合了。
關於根本的掌握道理本該到這裡就全體完畢了,然則,我們願望人人都能培育一種「理論是磨練真諦的獨一規範」的思想方法!回想一下,步進馬達最大的特色是什麼?準確掌握遷移轉變量!那我們是不是應當磨練一下它究竟是不是能準確呢?準確到什麼程度呢?怎樣來磨練呢?讓它轉過 90 度,然後量一下準禁絕?也行,然則假如它只差了 1 度乃至不到 1 度,你能精確丈量出來嗎?在沒有精細儀器的狀況很難。我們照樣讓它多轉幾個整圈,看看它原本停下來的地位照樣不是本來的地位。對應的,我們把程式修正一下,以便利掌握馬達轉過恣意的圈數。
#include <reg52.h> void TurnMotor(unsigned long angle); void main(){ TurnMotor(360*25); //360 度*25,即 25 圈 while (1); } /* 软件延时函数,延时约 2ms */ void delay(){ unsigned int i = 200; while (i--); } /* 步进电机迁移转变函数,angle-需转过的角度 */ void TurnMotor(unsigned long angle){ unsigned char tmp; //暂时变量 unsigned char index = 0; //节奏输入索引 unsigned long beats = 0; //所需节奏总数 //步进电机节奏对应的 IO 掌握代码 unsigned char code BeatCode[8] = { 0xE, 0xC, 0xD, 0x9, 0xB, 0x3, 0x7, 0x6 }; //盘算需求的节奏总数,4096 拍对应一圈 beats = (angle*4096) / 360; //判别 beats 不为 0 时履行轮回,然后自减 1 while (beats--){ tmp = P1; //用 tmp 把 P1 口以后值暂存 tmp = tmp & 0xF0; //用&操作清零低 4 位 tmp = tmp | BeatCode[index]; //用|操作把节奏代码写到低 4 位 P1 = tmp; //把低 4 位的节奏代码和高 4 位的原值送回 P1 index++; //节奏输入索引递增 index = index & 0x07; //用&操作完成到 8 归零 delay(); //延时 2ms,即 2ms 履行一拍 } P1 = P1 | 0x0F; //封闭电机一切的相 }
上述程式中,我們先編寫了一個掌握馬達轉過指定角度的函數,這個角度值由函數的方式參數給出,然後在主函數中就可以便利的經過更改挪用時的實踐參數來掌握馬達轉過愷的角度了。我們用了 360*25,也就是 25 圈,當然你也可以隨便改成它的值,看看是什麼後果。我們的程式會履行 25*8=200 秒的工夫,先記下輸入軸的初始地位,然後上電並耐煩等它履行終了,看一下,是不是有誤差?怎樣回事,哪裡出成績了,不是說能準確掌握遷移轉變量嗎?
這個成績其實是出在了加速比上,再來看一下,廠家給出的加速比是1:64,不論是哪個廠家消費的電機,只需型號是28BYJ-48,其標稱的加速比就多是1:64。但實踐上呢?經由我們的拆解盤算發現:真實精確的加速比並不是這個值 1:64,而是 1:63.684!得到這個數據的辦法也很複雜,實踐數一下每一個齒輪的齒數,然後將各級加速比相乘,就可以得出後果了,實測的加速比為(32/9)*(22/ 11)*(26/9)*(31/10)≈63.684,從而得出實踐誤差為0.0049,即約為百分之0.5,轉100 圈就會差出半圈,那麼我們方才轉了25 圈,是不是就差了八分之一圈了,也就是45 度,看一下方才的誤差是45 度吧。那麼依照 1:63.684 的實踐加速比,可以得到轉過一圈所需求節奏數是 64*63.684≈4076。那麼就把下面程式中馬達驅動函數裡的 4096 改成4076 再試一下。是不是看不出涓滴的誤差了呢?但實踐上誤差照樣存在的,由於下面的盤算後果多是約等得出的,實踐誤差大約是 0.000056,即萬分之 0.56,轉一萬圈才會差出半圈,曾經可以疏忽不計了。
那麼廠商的參數為什麼會有誤差呢?豈非廠商不曉得嗎?要說明這個成績,我們得回到實踐使用中,步進馬達最平日的目標是掌握目的轉過必定的角度,平日多是在360 度之內的,而這個28BYJ-48 最後的設計目標是用來掌握空調的扇葉的,扇葉的運動規模是不會超越180度的,所以在這種使用場所下,廠商給出一個近似的整數加速比1:64 曾經足夠準確了,這也是合情合理的。但是,正如我們的程式那樣,我們紛歧定是要用它來驅動空調扇葉,我們可以讓它遷移轉變許多圈來乾其餘,這個時分就需求更為準確的數據了,這也是我們願望同窗們都能理解並控制的,就是說我們要能本人「設計」零碎並處理個中發現的成績,而不要被所謂的「現成的計劃」限制住思緒。
以上是如何實現28BYJ-48步進馬達遷移轉變精度及深化剖析的詳細內容。更多資訊請關注PHP中文網其他相關文章!