活塞引擎 5:機件振動分析
前集說完了汽缸點火的順序影響引擎振動特性的部份,這集要來解說零件運動所造成的振動。
關於活塞發動機的振動特性,我並不是第一個提及的, 只是在瀏覽了網路上的其他中文資料和節目後,覺得看到的解說都有些抽像而不夠具體具現。 因此我就想,何不自己寫個小程式畫一下圖表, 自己實際看看活塞、連桿這些東西的運動到底是如何推動引擎的呢? 於是就有了這個小程式。
機件振動原理
實際的機器並不是像物理教科書上存在理想的完全剛體、或存在一個完全不會動的基點, 當我們使一部份的結構動起來時,同樣也會導致連結這個零件的基坐本身發生位移。 這就是牛頓反作用力的真實體現, 就如同一個人在小船上起身往一個方向移動時,船本身會被推動往另一個方向飄走一樣。 那如果船上的這個人他不是往一個方向一直走,而是來回走的話, 那麼同樣也會導致他腳下的小船來回移動,而這可不就是振動嗎? 回到活塞引擎裡面,活塞、活塞連桿、曲柄曲軸這麼來來回回的動來動去,這便是引擎振動的來源大宗, 至於像凸輪軸這一類體量比例微幅的東西我們則一般忽略不計!
不過如果再進階一步想,其實「人往這移動、船往那裡飄」是說給小朋友容易理解用的, 而實際產生振動的源頭其實是「力」的作用而不是「位移」, 這會導致船隻的本體受力方向有時候會和一般讀者的直覺方向相反。 比方說一個人雖然往船頭方向移動,可是他正在減速, 這時候腳下的船受到的反作用力其實是向前的,與他的行進方向相同; 而如果他在等速移動的話,船隻其實不受力。 因此我們雖然可以透過機件運動的現象去計算振動的趨勢, 但是注意我們關注的重點其實不是零件運動的位置,而是它移動的「加速度」!
最終整理一下,活塞引擎的機件運動導致振動是什麼意思呢? 就是即便引擎不上汽油,不壓縮、不點火,僅僅只是用一個馬達插在引擎軸上旋轉起來,引擎也會產生振動; 而這個振動的源頭不是來自壓縮、點火、或膨脹,僅僅只是因為零件運動之間的配平不平衡所導致的振動!
幾何和參數定義
現在要來介紹我所做的小分析程式 [1] 的用法。 也許對於很多讀者來說可能並沒有時間精力去使用這隻程式, 但是至少也絕對需要先了解一下我對它所做的座標定義, 否則可能會不明白它跑出來的多張分析圖所表示的意義。
單一汽缸參數定義
為了化簡理解難度,這裡會將單一汽缸的參數定義、以及多汽缸聯合時的相關參數分開來講述, 首先先來看看單一一個汽缸的情況(配置示意如 Figure 2):
-
座標原點即為引擎的整體質量中心, 無論是在單一汽缸的設定、或是在多汽缸的聯合設定中皆為如此,在自行修改使用時請注意這點。
-
零件運動的計算以曲軸軸心為中心,曲軸本身平行於 Z 軸,Z 軸以朝向紙面的上方為正向。 而 Y 軸為紙面上方方向,X 軸為紙面右方方向。
-
由於曲軸可能並不在質心上,因此假定曲軸與質心(座標原點)之間存在一個距離為
Y-Offset的移位, 該值為正時表示曲軸在整體質心的上方,負值表示曲軸在質心下方。 -
汽缸中心線與 Y 軸具有一個夾角
Cylinder-Rad, 不過在只分析單一汽缸的時候設定此值為零即可,此時汽缸中心線與 Y 軸重疊,方向向上。 活塞只在汽缸中心線上移動,也就是說在汽缸夾角為零的情況下,活塞等於是在 Y 軸上移動。 在這裡我們並不關心汽缸的其他幾何參數,畢竟汽缸本身並不是移動件, 而我們只關心活塞在汽缸內的移動行程。 活塞在汽缸內的下死點位置與曲軸中心的距離為Cylinder-Base; 活塞上死點與下死點之間的距離為Cylinder-Len,即活塞行程長度。 -
由於在多汽缸聯合的情況下,多個汽缸是共用一根曲軸,而各組汽缸之間各有各自的行程錯落關係, 因此需要把曲軸的轉角和曲柄的轉角進行區分。 這裡假設在共同曲軸的轉角為零的狀態下,曲柄方向與汽缸方向之間存在一個
Arm-Rad0的角度偏轉; 也就是說若Arm-Rad0為零,則活塞初始位置即為上死點,而這是在單汽缸分析時的預設狀況。 這裡注意Arm-Rad0記錄的是曲柄與汽缸間的初始夾角,而非與 Y 軸的夾角! -
一般曲軸上的曲柄可能會被刻意製作調整,使得曲柄質心偏離曲軸中心, 而
Arm-Eccen即是用來設定曲柄的偏心距離,其正值表示偏心方向與曲軸方向相反。 -
這裡模擬計算的零件其實就是活塞、連桿、和曲柄這三樣, 因此
Piston-Mass、Rod-Mass、和Arm-Mass就是對應個別的質量。 -
此外還有
Arm-Len表示曲柄長度、Rod-Len表示活塞連桿長度、 和Rod-Moi表示連桿的轉動慣量, 只不過這些參數不能手動進行設定,而是由程式透過其它參數自行計算。
關於曲柄配重
一般曲軸上的曲柄都會在對向做配重(如圖 Figure 3)。 這個配重的基本目的是為了平衡曲柄凸出去的質量, 使得整個曲柄的質心仍在曲軸質心上,免除曲柄造成的振動問題。 但是有的時候我們如果野心再大以點, 除了把曲柄本身配重平衡之外還想要連帶對活塞和連桿的移動進行平衡的話, 便會給曲柄更多配重,使得曲柄的質心往曲柄的反方向偏離曲軸中心。
多汽缸參數定義
搞定了個別單一汽缸的參數,現在來看看多汽缸聯合相關的參數(配置示意如 Figure 4):
-
Z-Offset表示這組汽缸在曲軸上的位置(曲軸平行於 Z 軸) -
Cylinder-Rad表示汽缸與 Y 軸之間的偏轉角 -
在共同曲軸轉角為零的初始情況下,各組曲柄和汽缸之間存在一個
Arm-Rad0夾角。 -
最後一個
Label就是使用者隨意定義的文字, 用途是在多汽缸時畫出來的圖表上,可以讓你區分出哪一條線屬於哪一個汽缸產生的影響?
再看一些雜項的設定配置:
-
DATA_NUM為繪製圖表時所需要計算的點位數量,點數愈多則理論上畫出來的結果分佈線愈細緻, 不過若沒有特別想法的話建議保留預設值即可。 -
LAYOUT_ARM_DEG參數與計算完全無關,只對佈局檢視有作用。 這是因為這隻程式會產生一張引擎佈局圖,而在有些汽缸組態的情況下, 初始狀態可能是汽缸、活塞、連桿全部連成一條線,不利於檢閱。 因此設置了這個參數,用來在檢視佈局的時候給曲軸一個指定的旋轉角度。 -
SHAFT_RPM為曲軸轉速,單位為 RPM。 其實這個轉速隨便給就好,因為轉速的大小影響的是力量幅度,而非分佈特性。 除非想要做動態分析(不過本程式並沒有實現這一部份),否則只要隨意給一個轉速值, 讓跑出來的結果數值不會太大也不會太小,正好適於觀察即可。
程式使用方式
這隻程式寫的很單純直接,將程式[1]下載下來後, 直接將檔案以文字檔打開,就會看到參數設定都在檔案開頭。 將程式檔案開頭的參數修改好之後,直接執行這隻程式,正常的話稍過幾秒就會跑出結果了。 沒有讀取設定檔,也沒有額外的設定方式,就是直接修改檔頭設定的數組即可。 這邊我用一個設定範例作為說明,這個範例的設定內容如下:
|
Tip
|
這個小程式是以 Python 語言寫成的,所以相要拿來把玩的讀者需要先自行安裝 Python 執行環境, 至於 Python 如何安裝配置的部份就不在本文裡做敘述了,讀者需要自行搜索相關教程。 |
DATA_NUM = 360
LAYOUT_ARM_DEG = 40
SHAFT_RPM = 400
CYLINDER_LIST = [
[ "Piston", 1000, 0, 0, 1, 50, 56, 0, 0, 0, -40 ],
[ "Rod", 0, 1000, 0, 1, 50, 56, 0, 0, 0, -40 ],
[ "Eccentric", 0, 0, 1000, 1, 50, 56, 0, 0, 0, -40 ],
]
其它的設定多半是具名的,只有汽缸的條件採用陣列的型式進行設定,這樣才能更好的對汽缸的數量進行擴展。
汽缸組設定項目為 CYLINDER_LIST,其內每一個元素代表一個汽缸組態;
而每一個汽缸組態的內容同樣也是陣列,其內每一個項目的值與意義在程式碼內的註解已有描述,這裡就不再贅述。
這個範例我一共設定了三個汽缸,但其實觀看數值就會發現這三個汽缸是重疊在一起的,其實這是個單缸引擎。 這三組設定在實際意義上其實是同一個汽缸組件的不同零件, 而分開來設定的用意就是為了能更好的在結果圖表中觀察個別組件對整體的影響。 在曲柄設定的部份,若曲柄是完全平衡的而沒有偏心的話,它對整體結果的影響就是零。 於是為了更好的觀察曲柄偏心對整體的作用效果,範例裡給了一個很小的偏心值。
結果分析
執行完程式之後便會產生出 6 張圖表。 其中的 5 張 Profile 就是引擎在曲軸轉動一圈的時間內,五個不同方向的受力變化分佈圖; 其衡軸就是曲軸在一圈之內的旋轉角度,單位是徑度,而縱軸則是力或者力矩的大小。 兩張 Force Profile 分別表達引擎整體在 X 軸向和 Y 軸向的受力變化; 至於 Z 方向,我們所採用的分析設定結構並不可能會產生 Z 方向的力,因此就沒畫 Z 方向受力圖了。 三張 Torque Profile 則是引擎整體分別在 X、Y、Z 三個軸向上的轉動力矩變化, 不過因為本範例為單缸引擎置中,所以在 X 和 Y 方向上的力矩皆為零。
最後一張 Engine Layout 則與結果無關。 其作用為將所配置的組態用圖形的方式繪製出來,目的為讓使用者檢閱, 以確認在你所想像的引擎長相、和程式所理解的引擎長相之間是否存在落差或誤解?
曲柄
在曲柄有偏心配重的情況下,曲柄會在轉動中產生一股離心力, 並且由於假定了曲軸為勻速轉動,因此曲柄也只會產生這一股離心力,其分佈方向就是以曲軸為中心向外輻射。 如果引擎的整體質心正好在曲軸上(如軸向對稱的汽缸佈局如水平對臥、星型等), 那麼偏心的曲柄力便總是通過質心,只會產生 X 和 Y 方向的施力,而不會在 Z 軸上產生轉動力矩。 但是當引擎質心不在曲軸上時,例如本範例,就能在 Z 軸力矩分佈圖上看到偏心曲柄對著發動機軸產生的力矩變化。
一般來說曲柄都會有配重,如同前面所述,它的基本用處在於平衡掉曲柄凸出去的那一部份質量, 使曲柄整體質量中心仍在轉軸上,不會因為旋轉而產生振動。 但有的時候我們會想給曲柄設計更多的配重,使曲柄質心朝著反方向偏離軸心, 目的是為了利用曲柄的偏心去平衡掉活塞連桿所產生的力, 並且從結果圖的分析也給我們預示了這個想法的可行性。
當然有的時候也可以反過來操作,
當我們已經知道一根曲軸上的曲柄剛好可以互相抵消平衡彼此的偏心效應時,
也可以選擇不要設計配重,以節省重量。
如果要模擬這種情況,可以將前面的 Arm-Eccen 參數設定為一個負值即可!
活塞
因為活塞只沿汽缸方向運動(在本例中即為只在 Y 軸上運動),因此能看到它對 X 方向的振動影響為零, 因為汽缸的施力總是通過軸心,所以也不會對轉動方向產生影響,唯一只產生了與汽缸方向相同的力。 雖然說活塞只產生了一個方向的力,但是觀看數值範圍卻能發現, 其實它(及連桿)才是才是導致引擎振動的最大宗來源! 這就是為什麼很多其他的引擎振動分析文章只分析活塞好像就滿足了的原因, 只不過我的胃口更大,所以我還想分析曲軸和連桿的影響作用!
在給定了曲柄長度和連桿長度之下,在特定曲柄角度位置下的活塞位置可由下列計算式算得:
\[ P = R \left( cos(Rad) + \sqrt{ cos^2(Rad) + (\frac{L}{R})^2 - 1 } \right) \]
其中:
Rad為曲柄轉動的角度位置;
R為曲柄長度;
L為活塞連桿長度;
P為活塞與曲軸中心的距離。
對活塞的位置做二次微分可得活塞加速度,乘上活塞質量即是活塞受力; 不過這是活塞的受力,而引擎本體受到的反作用力方向相反,所以要對受力方向進行反向。
最後再來看看活塞運動施力的特性。 注意到力分佈圖,活塞的力分佈並不是上下對稱的,即便活塞的運動看上去很像是跟著圓周的簡諧運動! 造成這樣不對稱的原因主要是活塞並不是完全跟同曲柄運動,而是透過連桿的帶動, 是圓周簡諧運動疊加一個三角形變形影響之後的結果,使得在上死點附近移動速度較快、而在下死點附近移動較慢, 甚至若看加速度的話,還能在下死點附近看到反凹的現象。 這個不對稱的力分佈造成的影響,會在我們之後加入多汽缸的時候顯現出來。 主要的效果是即便有兩個活塞一上一下在運動,感覺上它們好像可以互相抵消,然而實際上卻不能; 振動幅度雖然是降下來了,但是綜合之後還是會有一些無法消除的力被餘下並產生振動。
連桿
相比於曲柄和活塞,連桿的運動是裡面最複雜的了,它不只上下移動,還同時左右移動、還伴同本身的旋轉, 也因此活塞連桿成為我們唯一需要考慮轉動慣量的零件! 不過對於解算的本身倒不是太困難, 因為我們已經能夠算得活塞位置和曲柄位置,而它們二者的連線便就是活塞連桿了!
在受力分佈圖上,活塞連桿對平面的兩個方向都會產生力。 觀察 Y 方向的力分佈,還能發現連桿產生的力幾乎與活塞產生的力趨勢重疊, 因此若將活塞與連桿直接視為一整個整體來做分析也是非常貼近現實了。 所以對於網路上的其他人只分析活塞的運動的情況,我一開始也是懷著點質疑的, 但實際做了更加複雜些的分析之後也發現這麼做也不是不可,且其與實際結果其實也是大差不差的。
在 X 方向的力分佈圖上,活塞連桿與預期相同的產生了力的作用。 只不過這個分佈狀態看起來非常的對稱,並且在趨勢上與曲柄偏心的趨勢是相反的, 這給我們用偏心曲柄去平衡連桿運動的做法提供了可行的道路 (並且實際上也真的可以用偏心曲柄去平衡掉連桿的橫向作用力)。
最後是 Z 軸力矩分佈,也就是在曲軸方向上的轉動力矩擾動圖。 活塞連桿除了因為本身的轉動而產生轉動力矩之外, 其在平面的兩個方向產生的作用力因為不通過曲軸中心,因此在存在力臂的情況下便也會產生力矩, 這三者疊加之後便是活塞連桿總體對引擎所產生的 Z 軸偏轉力矩。 觀察分佈圖同樣會發現,連桿產生的力矩趨勢和曲柄偏心所產生的力矩趨勢大致也是程相反狀, 因此其實也可以很好的透過曲柄偏心來很大程度的抵消掉; 只可惜在力矩方面的分佈圖上,二者圖形趨勢並不完全一致, 所以也只能一定程度的消減擾動,但並不能藉此完全消除!
條件與限制
經過這些解說和範例說明之後,相信讀者已經具備將這隻小程式自行修改參數並跑出各種花樣結果的能力了。 但是這畢竟也只是一隻很精簡的小程式,它最主要的目的其實是讓我們這些門外漢可以一窺活塞引擎的振動特性; 但若想要用它來分析一個具體新發動機的振動情況的話,那麼這樣的程度其實是遠遠不夠的。 因為這隻程式所忽略和簡化掉的東西其實也並不少,因此使用者必須要自己知道它的能耐和限制在哪裡, 好讓你在玩這隻程式的時候能夠擁有正確的認知。
首先,這程式並沒有去做過多的參數檢查和驗證等,除非會導致計算錯誤,否則它並不會過度干涉你的天馬行空。 畢竟它的目的在於讓我們觀察各種可能性所產生的結果,而非幫助你實際建造一臺發動機。 所以比方說你在這程式裡設定了一個曲柄比活塞連桿還長的引擎,或者四個汽缸的曲軸不在一條線上的引擎, 在這程式裡面去做分析都是沒有問題的,你也可以看見假定這種東西造出來的話會呈現的受力分佈; 至於這東西是否真的能夠被造出來?那就是你的問題了!
除了對於天馬行空的部份可能會導致與實際的落差之外, 這隻程式還有下面這些比較正經的限制,會導致計算的結果可能與現實產生比較大的誤差:
-
作用力趨勢分析並不等於動態振動分析
我們從頭到尾其實只分析了零件對引擎所產生的力分佈, 然而受力分佈卻並不相等於實際的振動表現,即便在大多情況下這力的分佈直接的影響了振動表現。 畢竟力的作用是為振動的根源發生原因,且通常來說受力的分佈情況能直接對應振動表現, 對於從結構性大方向了解一種配置情況的振動特性來說是很足夠了, 但是對於實際造出來的引擎到底實際振動表現為何?卻並不是單純的受力分析可以肯定的! 舉例來說,如果受力的頻率正好對上了引擎本體的自然振動頻率,就會發生共振, 這樣即便所產生的源頭推動可能很小,也足以導致引擎表現出很大幅度的振動反應; 於是:
本程式只計算分析了機件運動對引擎所產生的作用力分佈情況, 從大的方向上去窺探了解某種引擎配置的振動特性來說應該是很足夠使用的; 但若要用來作為造出一顆實際引擎的振動表現依據,則還需要再進行更多的動態響應分析才行!
-
假定曲軸恆速轉動
本分析程式所假定的一個重要的前提就是曲軸是「恆速轉動」的, 因此並不適用於正在加速運轉或正在減速運轉中的發動機,只能用來分析穩定運轉中的引擎。
不過在實際上,即便引擎是在額定的功率下穩定運轉,曲軸的轉速其實也不是定速不變的。 這原因是因為四行程的行程動作本身是不連貫的,會因為壓縮行程而減速、因為膨脹行程而加速, 這點在之前的主題裡面已經討論過,即便是在飛輪的作用下也只是讓曲軸的增速與減速範圍較為收斂而已。 當然,隨著汽缸的數量增多,曲軸的轉速就會愈趨向於穩定恆速,因此:
本程式在多缸引擎上的計算會與實際結果比較接近,而在汽缸數量愈少的情況下便會與實際結果誤差愈大!
-
假定引擎質心位置固定不變
本分析程式假定引擎的質量中心位置是固定的,然而實際上卻並不是! 因為引擎內部的機件不斷在移動,所以整體的質心位置其實也是變化的。 只不過在多缸引擎上,一方面是單一機件的質量與發動機整體的質量比例縮小了, 二方面是機件之間存在許多影響力互相抵消的互補移動, 因此會讓整體的質量中心更加趨向在固定的位置上不動。 最終:
本程式在多缸引擎上的計算會與實際結果較為接近, 而在汽缸數量愈少的情況下便會產生與實際結果愈大的誤差,特別是在單缸引擎的情況下!
下一篇:「活塞引擎 6:機件振動實例」