第一篇:SINET使用心得
SINET使用心得
艾曉欣
摘要
本文主要介紹工藝計算模擬軟件SINET的使用方法及心得體會 關鍵詞
SINET 工程模擬
工藝計算
2.2 工程相關信息的定義
點擊File下來菜單中的Project file選項可以彈出工程信息定義對話框,在這個對話框中主要可以定義“公司名稱、項目名稱、時間、版次校核、備注及安全系數”等信息,所定義的信息可以出現在打印輸出報告中的頂部。安全系數是系統工程師根據項目要求人為規定的,在設定時應充分考慮系統安全性與工程經濟性,該系數將參與計算并直接與系統阻力相乘從而得出最終的系統阻力。
1、概述
SINET是EPCON公司出版的工程計算模擬軟件之一。該公司在1985年完成了第一代一體化系統工程模擬軟件,1991年開發了視窗化的管道模擬軟件,1993年完成了視窗化物性數據界面,1994年開發了軟件的圖形交互界面,2005年完成了API Technical Data Book的計算機綜合交互應用系統。EPCON在工藝工程領域的造詣主要包括工藝模擬、工藝管道模擬、火炬系統管路模擬及安全閥分析等。
Engineer’s Aide SINET軟件可以提供流體流動系統管徑計算及管網分析,它可以通過模擬進行設備及管道系統的選型及計算,其中設備主要包括泵、風機、壓縮機、換熱器、流量計、調節閥、壓力容器、儲罐等。該軟件可以基于液體、氣體及氣-液兩相流流體進行有針對性的模擬計算,它的物性數據庫中有將近2000種物性數據,同時可以解決超臨界系統及非牛頓型流體系統的計算問題。
下面我將就軟件的應用進行簡單的介紹。在該介紹中系統的建立被分成有序的若干步驟,通過這些步驟的依次建立從而完成管路系統的創建。
2.3 系統流體類型
在化工工藝計算中,我們通常見到的流體有液體、氣體、兩相流等流體。對于計算來說不同流體的流型特點、適用條件、模擬方程都有所不同,所以在開始計算管路系統之前應首先定義體系中的流體類型。SINET軟件可以模擬液體、氣體、氣-液兩相流及非牛頓型流體。通過點擊Options選項可以出現以下菜單。
2、應用程序介紹
2.1 定義單位體系
SINET默認的單位是英制單位,通過File下拉菜單中的Change Units選項可以在英制和SI單位間進行切換,從而選擇適合自己項目的單位體系。同時該軟件還可以建立長輸管道的單位體系,關于這部分內容將在2.7章節中再做介紹。
2.3.6泥漿
適用于不銹鋼及PVC管道中《TAPPI Technical Information Sheet 408-4》所列寫的泥漿物流。
2.4系統等溫與否
在菜單欄中的Insulation選項中,可以選擇系統是否為等溫(Isothemal)系統,程序默認為等溫。如果系統為非等溫系統,則可以選擇相應的保溫材料或無保溫,同時需要在性質選項中輸入
2.3.1液體
菜單中前兩個選項是液體流體選項,所不同的是一個基于體積流率,另一個基于質量流率。當選擇體積流率選項時,等溫環境將被強制定義,以避免進出口物料平衡不匹配的情況。2.3.2非牛頓型流體
該流體同樣分為基于體積流率和質量流率兩個選項。冪定律型非牛頓型流體和賓漢塑性非牛頓型流體可以選擇此選項。2.3.3氣體
該選項應用的前提條件是系統壓力降小于40%進口壓力。在這種情況下,系統物流性質將選取系統進出口兩點物流平均溫度、壓力下的物性數據。2.3.4可壓縮氣體
這個選項可以替代2.3.3中的氣體選項,這個方法更為精確,但是如果選擇此選項,那么軟件將失去Automatic Sizing和Smart Fittings功能。2.3.5兩相流
選擇此選項后,軟件在計算過程中將進行閃蒸計算及平均條件下的氣體、液體比率計算。
同時菜單欄中的Correlation被激活。其包括兩選項:Beggs&Brill和Dukler。前者適用于有傾向性及立式管道,后者只適用于水平管道。當選擇Dukler時,菜單欄中的Map被激活,這里包含了最普通的流體流型選項。
如果在下拉菜單選項中找不到合適的項,可以通過最后的Global data數據選項定義管道的相關數據。但是要注意當輸入完相關數據點擊OK后會出現以下對話框,如果選擇Yes,流程中所有的管道參數均按此調整,如果選擇No,則當前要創建的管道和以后創建的管道參數按
環境溫度以便程序計算熱損失。
當系統中物流溫度存在變化,同時其密度、粘度隨溫度變化而變化時,系統應為非等溫系統,通常熱氣體及兩相流屬于非等溫系統。2.5定義管道材質及粗糙度
點擊菜單欄Pipe選項可以定義管道的材質及粗糙度,系統默認為CS/Wrought iron e=0.0018 in,其它選項可見插圖。
此調整。所以應用Global data選項需慎重。的溫度是一樣的。Press.&Temp.Dependent選項是針對高壓或超臨界流體而言,Peng-Robinson相平衡方程將用于確定超臨界流體的壓縮性,所有進口結點被假設為同樣的溫度。
2.6.2非牛頓型流體性質輸入
對于非牛頓型流體,Power Law Index n等四項參數需要用戶指定。2.6定義流體性質
在定義流體性質前,首先要保證2.1、2.2、2.3中的內容已經定義完畢,然后點擊性質定義按鈕打開輸入性質對話框。對于2.3中不同的流體類型,其輸入對話框的內容會略有不同,但是凡是橙色的部分均為輸入項,藍色的部分為輸出項。
2.6.1 液體性質輸入
流體類型為液體時,性質輸入對話框如下:
2.6.3氣體性質輸入
類似液體性質輸入對話框,只是增加了Avg.Press.選項
在K-Factor菜單中選擇熱力學方法,方法的正確選擇對于計算泡點、露點及等溫閃蒸非常重要。其中UNIFAC和Flory-Huggins法在保證物性適用的前提下可以估算出活度系數。而UNIFAC是利用UNIFAC計算液側、利用P-R E.O.S計算氣相側。另外兩種方法Peng Robinson和Raoult’s Law對于計算活度系數沒有貢獻的K值物系則是適用的。
在Property Variation菜單中有Temperature Dependent選項和Press.&Temp.Dependent選項。Temperature Dependent選項表示流體性質隨溫度的變化而變化,同時假設所有終端結點
2.6.4可壓縮氣體性質輸入
在可壓縮流體性質輸入選項中多了Cp/Cv值選項和Z-Factor選項。
Cp/Cv值可以通過下拉菜單選擇合適的值,如果沒有也可以通過用戶直接給定。Z-Factor用于計算壓縮系數,其中的Papay Correlation選項一般用于大分子模型,它可以提高收斂性但是計算精確性會差一些。
Convergence Options、Display Options、Unit Options、Miscellaneous Options、Computational Checks、Automatic Sizing Options、Smart Fittings等內容。下面就逐一進行介紹。
2.6.5兩相流性質輸入
兩相流流體性質輸入在前面各種流體輸入中都有說明,只是在輸出選項中略有增加,分為液相性質和氣相性質。
2.7.1 Convergence Options
在此選項中可分別設定最大迭代次數、收斂判別標準和數值微分步長。其中最大迭代次數默認為50,最大可設定到100。收斂判別標準默認為0.01,這適用于大部分的化工系統,對于兩相流系統建議設成0.1。數值微分步長默認值為0.01,建議不做改動。
2.6.6泥漿性質輸入
首先根據已知物流特點選擇Options中的泥漿類型,然后在填寫相關的五項參數值即可。
2.7.2 Display Options
這個選項主要影響在軟件工藝流程圖上的顯示設置。小數位數定義了顯示小數點后數字的位數,背景色定義了繪圖面板的顏色,結點間距為系統繪圖默認的兩結點間的距離,90度管道的復選框如果被選上那么流程中的結點之間的連接管線都為直角連接,不過這樣可能會出現管線的交叉,不推薦使用。2.7.3 Unit Options
定義系統的默認單位。長輸管道中長度的英
2.7 用戶參數選擇
點擊菜單欄中的File-User Preference選項可以彈出用戶參數對話框,該對話框包括
制和公制單位分別為miles和km,體積流率的英制和公制單位分別為million standard cubic feet per day和million standard cubic meters per day。另一個是以Standard Barrels per Day所表示的液體體積流率選項。
2.7.4 Computational Checks 可以幫助用戶發現潛在的問題,用戶可以設定最大流速、最大百米壓降、是否存在兩相流等內容,軟件可以檢查出計算過程中那些部分不滿足用戶設定要求。
2.7.5 Automatic Sizing Options 如果我們知道管徑或者僅是模擬已經存在的系統,那么該選項是不需要的。如果我們設計一個新的系統,那么就可以根據給定的流速或壓降讓軟件自動選擇合適的管道直徑(包括管道上諸如調節閥等管件),但是值得注意的是該選項只能應用在2.3.1和2.3.3兩種物流體系下。2.7.6 Miscellaneous Options 參考結點標高選項可以指定參考節點高度。在流程中所有比參考結點標高低的節點都顯示為灰色陰影/邊框,而所有比參考結點標高高的結點都顯示為白色陰影/邊框圍繞。這樣便于在流程中區分結點標高。2.7.7 Smart Fittings Smart Fittings擁有大量的選項可以有選擇性的打開或者關閉。當選擇了這些選項并點擊了“Apply to All Pipes”復選框,那么程序將按照定義好的規則在系統中自動增加管件。但是需注意的是一但選擇并運行計算后,之前在主界面中輸入的管件數量及定義就被Smart Fittings自動替換了,所以在應用該選項前最好做好備份工作。
2.8 繪制管道流程圖
在繪制流程圖的過程中,頻繁的刪除結點和管道是不被推薦的,這樣容易引起錯誤。同時需注意的是當刪除管道時,管道上面的管件等也一并被刪除。刪除結點時,與該結點連接的管道及管道上的附件均被刪除。
在復制已有管網時需注意的是,一個單獨的管道或設備是不能被復制的,至少應包括管道及其結點。2.9 定義結點信息
結點的信息包括標高,壓力或流率,其中壓力和流率只有一個被允許定義。當結點是常壓容器或壓力容器時,只有壓力項能被定義。2.10 設定管件、閥門和設備 2.10.1 設定管道參數
點擊管道使之高亮。在“Data Input”工具欄中會顯示管道輸入欄,在此可以輸入相關數據。或者也可以先點擊管道呈選中狀態,然后點擊“Pipeline”工具欄中“Pipe Data”工具,顯示“Pipe Data”窗口進行輸入。在管道定義了長度后,流程中的管道線會由細變粗。
程序還可以實現封閉管道功能,通過封閉通向管網其他部分的管道來分離網絡的各個部分。網絡中任何管道被封閉,被分離部分的所有終端節點必須設定壓力。分離部分的控制閥必須關閉
流量控制和壓力控制。
2.10.2 設定管件和手閥
選擇設定管件和手閥的管道,呈選中狀態。然后在管件定義界面上定義閥門、及大小頭等管件。當管道被定義后,管道終點的箭頭回由窄變寬。
如果有特殊管件和閥門需要定義,可以通過“Detailed Fittings”和“Detailed Hand Valves”窗口進行定義。
校正系數默認值為1.0
2.10.3.2 自定義設備
若系統中設備的流量與壓力降關系已知,用戶可以自己定義設備。在泵選項中選擇Custom Equipment Curve,輸入至少三組流量與壓力降對
應數據,然后通過計算擬核出曲線。定義后流程中的圖標為帶十字的圓圈標記。2.10.3.3 流量計
若管道尺寸由系統自動確定(在User Preferences 窗口選中管道規格自動計算選項),流量計也將自動確定。Flow Meters窗口頂部的Auto Size選項呈選中狀態。
孔板的計算分為已知孔徑尺寸計算壓降和已知壓降或控制流量要求計算孔徑。
2.10.3 設定設備
在管道上設定設備時,管道上的設備以具體的圖標顯示在管道的中間部分,但是程序計算默認任何管道上的設備通常被假定位于管道的開始端。同時在定義設備時,推薦一個管道上宜只定義一個設備。2.10.3.1 泵
用戶可以至少設定五組流量和揚程的關系數據來確定泵的工作曲線。也可以通過Auto Selection選項計算模擬泵的揚程,進行泵的選型。對于高粘度的流體需要進行修正,系統粘度
2.10.3.4 控制閥
若管道尺寸由系統自動確定(在User Preferences 窗口選中管道規格自動計算選項),控制閥尺寸也將自動確定。控制閥窗口頂部的Auto Size選項呈選中狀態。
若管道尺寸由用戶設定,窗口上部的自動計算尺寸以及壓力降選項將不能使用。用戶將選擇控制閥的尺寸,然后確定開度。用戶也可以定義控制流量或控制壓力選項。但是需注意當選擇了流量控制選項,管網終點下游出口必須要指定壓力,不能指定流量。同樣,當選擇了壓力控制選項,管網終點下游出口要指定流量,不能指定壓力。
2.10.3.6 其它設備
任何一個管件,閥門以及設備,只要已知流量系數或壓降,就可以設定在管道上,通過設備介質的溫度變化也可以被指定,正值代表溫度升高,負值代表溫度降低。模型計算中直接設定壓力降選項需要謹慎使用,此功能將可能會引起模型的不收斂。相反,定義K值不會影響模型的收斂,指定K值后壓力降會隨流量變化而變化。在該選項中最多可以添加五臺設備。
2.10.3.5 換熱器
在SINET中換熱器選項的作用是確定不同換熱器對管路壓力降的作用。其中額定流量和壓降在參數輸入中非常重要,需要在換熱器數據單中準確選擇。程序可以根據輸入計算出換熱器的流量系數K值。K值的確定可以使程序計算出換熱器在不同流量下的壓力降。
2.11 運行結果
當一個合理的系統模型建立之后,軟件可以通過運行擬和出結果。迭代次數和收斂比例會在窗口中顯示并可以保存打印。從收斂窗口可以了解到每一次迭代的運行過程。
管線上的調節閥被完全關閉,使得終端結點設定的流量不可能實現。可以通過在終端結點處設定壓力代替流量來解決問題。3)某段管線流量由一個調節閥或流量控制
裝置控制,而與該段管線相連的下游結點是一個終端結點,且在此結點處設定了流量。用戶可以設定終端結點壓力或者關掉流量控制。如果調節閥被用來控制某一流股的閥后壓力,并且終端結點已經設定了壓力值,這也可能產生錯誤。可以關閉調節閥壓力控制,或者在終端結點處輸入流量來解決問題。
4)管網中存在幾個相鄰的閉路循環,而在閉
路循環中的設備設定了壓降值。當用戶在一個循環中加入兩個或更多設定壓降的設備時,就間接的確定了流體流動的方向。兩個閉路循環共用管道方向的矛盾就
可能導致錯誤出現。
5)進口壓力值可能不足,達不到下游結點或
管道的邊界條件。
6)在同一個管路上既有調節閥又有孔板,并
且都被用來控制流量。即在同一管路上有不止一個設備用來控制流量。
7)如果管網中有多個設定了不同開度的調
節閥,就會導致某些時候不能達到所需要的流量分布。在這種情況下,運行程序前將所有調節閥的開度調為100%。可以使運算收斂。
8)當系統中只有一個調節閥并且該閥用來控
制流量,但運算依然不收斂。對于這種情況,關閉調節閥的流量調節功能,開度設為全開,然后運行模擬程序。注意有調節閥管線的流量。這一流量值是能夠通過的最大值。如果所設定的調節閥控制流量值大于這一數值,那么運算是不會收斂的。3.2物性輸入、計算有誤或物性不可查 2.12 輸出報告
運行結果以管網圖或工作表的形式瀏覽。設備的計算結果也可以在工作表中單獨瀏覽。如果有需要用戶也可以將輸出結果導出到Excel文件中。2.13 打印
無論是運行結果還是流程圖都可以通過點擊各自菜單中的File→Print選項,用于文件的打印。2.14 保存
保存后的文件格式為“*.SD3” 和“*.IDO”,它們位于同一目錄下,具有相同的文件名。
3、常見問題分析
3.1矩陣為奇異陣
1)某個終端結點的流量被設定為0:正常情況下終端結點的流量不能設定為0,可以用一個非常小的值0.01代替
2)到某個終端結點的管線被封閉,或者某段
3.3管道編號問題
軟件要求管道和節點編號從1開始且必須是連續的,之間不能有缺失。如果用戶刪除了某一管道或節點,那么它的編號會用于以后創建的管道或節點。新創建的管道或節點將自動使用缺失的管線或節點編號。查看節點數據表和管道數據表可以快速的確定缺失的管道和節點編號。黑色條即表明缺失的節點和管道號。3.4迭代不收斂
1)如果運行結果不收斂,首先可以看運行結果曲線圖。如果曲線圖中的曲線在最后的迭代次數中已經遞減但是因為迭代次數到了的原因,那么就可以通過增加迭代次數來解決問題。如果曲線最后沒有遞減,而是平著的,那么增加迭代次數的方法是無效的。2)通常情況下系統收斂判別標準默認值為0.01,對于一個擁有100個結點以上的大系統來說可以將系統收斂判別標準適當增大一些,比如設定為0.1。
3)設備的壓降特征最好用K值表現而不是直接設定壓力降。
4)孔板尺寸非常小或者管道縮徑非常小,使得管道里發生臨界流。
5)在設定管件數據時,擴徑和縮徑的輸入信息應該為管徑大小而非數量。
6)系統動力不足,比如泵的揚程不夠,不足以滿足系統要求。
7)系統管路產生臨界流。用戶可以通過擴大管徑來解決此問題。
2)可壓縮氣體及兩相流物系中每一個管
件宜單獨設置在一條管道上,管道長度可以規定成最短的0.01
3)User Preference中最大迭代次數、收斂
判別標準可以根據不同環境進行優化,但是數值微分步長不建議調整。4)在流程圖添加泵設備時不宜放在第一
段管道上。
5)在SINET中第一次計算出的換熱器流
量系數K值有時會不準確。可以多點擊計算幾次獲取終值。
6)管道管件擴徑和縮徑處輸入的是所在管道的管徑,不是個數。擴徑默認在管道的末端,縮徑默認在管道的起點。不過在計算過程中,最好不設定擴徑和縮徑,如果管道存在一定數量的擴徑/縮徑,計算容易算錯。
7)調節閥在軟件中分為快開、線性和等百
分比三種類型,快開閥門的精度較差,線性調節閥的正常開度在60%較為合理,而等百分比的正常開度在80%較為合理。調節閥在流程中宜單獨設置在一條管道上,管道長度可以規定成最短的0.01
8)在一般管道系統中除第一個結點流量
為正值外,其它末端結點皆為負值。9)系統中的結點:起點為紅色,終點為黑
色,中間的為白色。
10)計算復雜管網系統,宜分塊建立系統,算好一塊后再建下一塊,不宜都建立好后再計算。
參 考 文 獻
4、心得體會
1)氣體物系的管道長度如果較長,建議采用若干段較短管道代替長管。
《Engineer’s Aide Reference Guide—Pipeline Network Analysis》2007年 《化工流體流動與傳質》,化學工業出版社 2000年9月第一版
第二篇:EXCEL使用心得
一、讓格式自動添加固定的數字
例子:
大家知道,身份證號碼的前6位,是省、市、區(縣)的代號(如“340505”等),如果持證人是同一區(縣)的,輸入這樣的的身份證號碼,可以讓“數字”標簽幫你減輕輸入的工作量:選中需要輸入身份證號碼的單元格(區域),打開“單元格格式”對話框,進入“數字”標簽,在“分類”下面選中“自定義”選項,然后在右側“類型”下面的方框中輸入:“340505”@,確定退出。以后輸入身份證號碼7位及以后的數字(如“198903040611”)后,系統會自動在前面加上相應的代碼,形成完整的身份證號碼(如“***611”)。
二.教你使用Excel數組公式
Excel中數組公式非常有用,尤其在不能使用工作表函數直接得到結果時,數組公式顯得特別重要,它可建立產生多值或對一組值而不是單個值進行操作的公式。
輸入數組公式首先必須選擇用來存放結果的單元格區域(可以是一個單元格),在編輯欄輸入公式,然后按Ctrl+Shift+Enter組合鍵鎖定數組公式,Excel將在公式兩邊自動加上花括號“{}”。注意:不要自己鍵入花括號,否則,Excel認為輸入的是一個正文標簽。
選取數組公式所占有的全部區域先選中區域中任意一個單元格,然后按下Ctrl+/鍵即可。編輯或刪除數組公式編輯數組公式時,須選取數組區域并且激活編輯欄,公式兩邊的花括號將消失,然后編輯公式,最后按Ctrl+Shift+Enter鍵。選取數組公式所占有的全部區域后,按Delete鍵即可刪除數組公式。
數組常量的使用數組公式中還可使用數組常量,但必須自己鍵入花括號“{}”將數組常量括起來,并且用“,”和“;”分離元素。其中“,”分離不同列的值,“;”分離不同行的值。
使用不在工作表中的數組有時,公式僅占用一個單元格時也需要以數組的方式輸入。其具體原則是:一個公式使用了數組,并且這個數組不在工作表上,就應該使用數組的方式輸入這個公式。
下面介紹兩個使用數組公式的例子。
1.如需分別計算各商品的銷售額,可利用數組公式來實現。
單元格F2中的公式為:{=SUM(IF(A2:A11=″商品1″,B2:B11*C2:C11,0))}。這個數組公式創建了一個條件求和,若在A2:A11中出現值“商品1”,則數組公式將B2:B11和C2:C11中與其相對應的值相乘并累加,若是其他值則加零。同時,雖然數組B2:B11和C2:C11均在工作表中,但其相乘的數組B2:B11*C2:C11不在工作表中,因此必須使用數組公式。
2.假設要將A1:A50區域中的所有數值舍入到2位小數位,然后對舍入的數值求和。很自然地就會想到使用公式:=ROUND(A1,2)+ROUND(A2,2)+…+ROUND(A50,2)。
有沒有更簡捷的算法呢?有。因為數組ROUND(A1:A50,2)并不在工作表中,因此要使用數組的方式輸入公式,即:{=SUM(ROUND(A1:A50,2))}。
三、自動更正
1.從工具菜單中選擇“自動更正”,打開自動更正對話框。
2.在“替換”框中輸入數據,如:“4z”,在“替換為”框中輸入數據,如:“棗陽市第四中學”,單擊“添加”,再單擊 “確定”。
之后,只需在單元格中輸入“4z”兩字,即會自動更正為“棗陽市第四中學”。
四、在excel工作表中輸入計算公式時,如果想讓儲存格在顯示計算結果和計算公式本身之間切換,您會采取什么方式呢?
是不是每次都從“工具”>“選項”>“視圖”>“窗口選項”>“公式”來切換呢?有沒有更簡便的方法呢?
其實,我們可以利用“ Ctrl+` ”鍵來決定顯示或隱藏公式,每按一次就可讓儲存格在顯示計算的結果和計算公式本身之間自由切換。
五、快速錄入文本文件中的內容
現在您手邊假如有一些以純文本格式儲存的文件,如果此時您需要將這些數據制作成Excel XP的工作表,那該怎么辦呢?重新輸入一遍,太浪費時間;將菜單上的數據一個個復制到工作表中,同樣也費事。這時!您只要在Excel XP中巧妙使用其中的文本文件導入功能,就可以大大減輕需要重新輸入或者需要不斷復制、粘貼的巨大工作量了。使用該功能時,您只要在Excel XP編輯區中,選定菜單欄中的“數據/獲取外部數據/導入文本文件”命令,然后在導入文本會話窗口選擇要導入的文本文件,按下“導入”鈕以后,程序會彈出一個文本導入向導對話框,您只要按照向導的提示進行操作,就可以把以文本格式的數據轉換成工作表的格式了。
六、行列轉置
假如A1-A10單元格中有不同的內容,現在需要將這些內容分別排列在A1、B1、C1、D1...J1單元格中,即將原來在同一列中的內容重新排列在一行中。難道要一個一個單元格去復制粘貼嗎?完全不用。
首先,選中A1-A10單元格,單擊右鍵,在彈出的菜單中選擇“復制”命令;接著單擊B1單元格,再單擊右鍵,在彈出的菜單中選擇“選擇性粘貼”命令,彈出對話框,選擇其中的復選項“轉置”,點擊確定。這時你會看到B1、C1....K1單元格中已有了A1-A10單元格中的內容,將A列選中,在右鍵菜單中刪除,此時行列轉換工作就完成了。
七、在Excel2000中設計彩色數字
在你使用Excel2000對一張工作表中的數據進行處理時,有時是不是希望其中某些數據能夠有自己特殊的顯示格式?比如,現在你有如圖的一張Excel工作表,在“總成績”一欄中,你需要小于120的顯示為藍色,大于120的顯示為紅色。下述的方法,可以讓你的愿望變為現實。該方法是:
1.選中D25的單元格區域。
2.單擊“格式”菜單中的“單元格”命令,然后單擊“數字”選項卡。
3.單擊“分類”列表中的“自定義”選項,在“類型”框中鍵入“[藍色][<120];[紅色][>=120]”。
4.單擊“確定”按鈕。
怎么樣,Excel按你的要求顯示出不同顏色的數字了吧?
最后,對在“類型”框中鍵入的數字格式代碼進行簡單地說明,“[藍色]”是對數據顯示顏色的設置,除“紅色”、“藍色”外,還可使用六種顏色,它們是黑色、青色、綠色、洋紅、白色、黃色。“[>=120]”是條件設置,可用的條件運算符有:>、<、>=、<=、=、<>。當有多個條件設置時,各條件設置以分號“;”間隔。
八、減少修改EXCEL參數的秘籍
在此處設計好的公式,拿到彼處用時,大部分不會完全合適,往往要修改公式中的參數.特別是函數中引用的單元格區域,往往需要修改.所以這里就以單元格區域為例,介紹一種減少或者是避免參數修改的辦法.雖然說不上"萬能",但將公式任意粘貼而基本不用修改是確實能辦到的.
一個單元格、或者由許多單元格組成的單元格集合都可以作為一個區域,并可以命名一個名字。這許多朋友都知道。但對合理恰當地使用命名區域帶來的方便,許多朋友或者是不重視,或者是覺得麻煩而較少使用。不過要實現上面的目標,我建議大家還是盡可能使用命名的區域。其好處如下:
1、直觀易記,區域很多時,形式如(B2:M50)的名字既不好記憶,也難以一下子斷定意義,反之,使用區域名字,特別是用中文作為區域名字時,能見文知義,大大減輕了記憶負
擔。例如,將區域(B2:M50)命名為“三甲物理分”,一見名字就明白意思.
2、如果某一區域需要在多個公式中使用,采用區域命名會很方便。例如函數中需要引用“三甲物理分”這個區域時,可以直接拿它當參數.如果想得到那種一次設計,多次重用的“計算模板”,則更是非將區域命名不可。
3、如果區域的范圍需要擴大或縮小,只需要將原來的名字重新命名一下,而原來使用的函數參數不必改動。例如,要統計上面區域中有效數字的個數,用的公式是:=COUNT(三甲物理分)(注意函數括號內的區域名字不用加雙引號);當需要把該區域擴大或縮小時,可以先將原有的區域名字“三甲物理分”刪除,然后重新選定合適的范圍再次用這個名字命名,而所有以“三甲物理分”作參數的函數均不須修改而仍能使用。
乍一看這好像就不錯了,其實,這還不算完善.
前已述及,當函數移到別的地方使用時,其參數一般需要修改。比如要用上面的公式計算二乙班物理成績的有效數字個數時(這里假設你已經將相應區域命名為“二乙物理分”),則函數中用到區域參數又都要修改為“二乙物理分”。可以推知,即使是只修改這一處參數,在處理很多學科時(因為每個班級可能進行多個學科的考試),修改參數的工作量也很大,況且實際計算中往往同時使用多個公式,更導致參數修改的工作量成幾倍增加。以某中學三個年級24個教學班為例,假如每個年級考試5個學科,要求計算出每班各個學科的最高分、平均分、整個年級的前百強學生等項目.這些活兒就是讓你用上? 命名的法寶,手工修改參數也會磨壞你的手指!
怎樣才能減少修改的工作量、甚至做到不修改參數就能用呢?這就得需要在函數內間接引用參數。請往下看
A B C三甲物理分 三乙物理分 三甲語文分AVERAGE(三甲物理分)=AVERAGE(三甲物理分)=AVERAGE(三甲物理分)AVERAGE(INDIRECT(A1))AVERAGE(INDIRECT(B1))AVERAGE(INDIRECT(C1))假設先設計好EXCEL工作表,將準備處理的數據區域都進行命名,并把名字依次輸入到表中第一行的各個單元格,類似下表那樣.為了對兩種方法進行比較,我們先在A2單元格中輸入公式:=AVERAGE(三甲物理分),可得出三甲班的物理平均分,結果也正確,缺點就是像上面說的,將公式粘貼在B2、C2單元格中時,括號中的參數并不會自動取出第一行里對應的名字,還需要用手工一一修改!如何讓它能"自動"引用正確的參數、即能"自動"引用第一行對應單元格里的文字呢?可以使用函數INDIRECT().
在EXCEL中,函數INDIRECT()的作用比較特殊.其作用介紹如下:例如已知存放在A1單元格中的文字"三甲物理分"是一個區域名字,當用INDIRECT(A1)函數時,可以通過A1單元格獲得對"三甲物理分"區域的引用.好!下面我們驗證一下:請你在上表中的A3單元格中輸入:=AVERAGE(INDIRECT(A1)),從得出的結果看,與A2單元格中使用的公式結果相同.從公式的組成看,多了函數INDIRECT(A1),省去了區域名字!注意,這就是激動人心的關鍵點了:當你用鼠標拖拽的辦法向右邊單元格粘貼這個公式后,會發現這些單元格中的公式已經"自動"地引用了相應區域的名字,你連一個參數也不用修改就得出了正確結果!??這不正是實現了我們苦苦追求的目標嗎?怎么樣,很爽吧?
感謝你有耐心看到這里,下面我再送你一個"秘密武器"
上面介紹的那個有功勞的函數是INDIRECT(),它是解決名字引用的,當要引用的單元格中是數值時,它就不管用了.能引用單元格數值的是另一個函數VALUE()。它的用法是:如果在A2單元格中存放有數字85,那么在A3單元格輸入:=VALUE(A2),在A3中也能得到85這個數字。要只是這樣的代換顯然意義不大,但把它用在公式中后意義就大不一樣了。看下表:第二行中的數字是該學科達到“優秀”的分
A B C
三乙物理分 三乙物理分 三甲語文分
80
=COUNTIF(INDIRECT(A1,),“$#@62;=”&VALUE(A2))
DIRECT(B1,),“$#@62;=”&VALUE(B2))=COUNTIF(IN A
=COUNTIF(INDIRECT(C1,),“$#@62;=”&VALUE(C2))
數線,我們的目的是:在第三行中根據該學科的分數線求出該學科達到優秀成績的人數.由于不同學科劃定優秀的分數線一般也不同.要是直接了當的話,在A3中使用公式=COUNTIF((INDIRECT(A1,),“$#@62;=85”)就可以,但這樣用到B列又會遇到類似上面的修改參數問題。要也像上面那樣能"自動"引用第二行中的分數線該多好啊!別急,把VALUE()函數用上就成了!我們把A3中的公式改成:=COUNTIF(INDIRECT(A1,),“$#@62;=”&VALUE(A2)).請你把這個公式向右面粘貼,可以發現,不用修改任何參數就能"自動"地引用正確的單元格了.
如果你能夠熟練應用INDIRECT()和VALUE()這兩個函數,再加上區域命名的法寶,會給你帶來不小的方便!
至于制作能多次使用的計算"模板",我采用的是很懶也很容易的方法:將上一次用過的EXCEL文件用"另存為"作個備份,然后打開,只將原始數據清去,其他全部保留,就成了一個"模板".這樣,只需要輸入原始數據,立即會得到結果,免去了輸入公式,設計格式等一大堆麻煩.
九、技巧1:給別人看,但不給別人動
辛辛苦苦地設計了一個數據庫或者表格,卻被別人毛手毛腳地搞亂了,是不是很惱火?如果 是私人文件還好,只要設個密碼就可以了,偏偏這是要別人往里面填數據或者是要給大家參考的,往往由于他人的“不小心”,而導致自己要重做整個表格,這種事情不知道大家遇到沒有,我可是遇到過,辛苦加班加點用了7天才設計好的表格,因為沒做好防護措施,致使....哎,傷心往事,不說也罷!
現在,我教大家一個好辦法,讓別人只能看,不能動!
為了防止別人無意改動表格的內容(尤其是一些計算公式),我們必須把這些單元格設成“只讀”!
把不需要保護的的單元格選定,單擊右鍵,設置單元格,將保護標簽中的鎖定復選框清除,然后對該工作表設置保護。此時,鎖定的單元格是只讀的,剛才已被清除鎖定復選框的單元則可以正常輸入。當然,如果你連某些單元的內容也不想別人看到,在確定這些單元保護標簽中的鎖定復 選框是選中的情況下,再選擇隱藏即可,這樣將不顯示這些單元其中的內容。但是你必須對工作表或工作簿實施保護后,你的保護和隱藏才有效。要保護工作表,可按以下選擇:
[工具]→[保護]→[保護工作表]→選擇密碼,重復輸入相同密碼,這樣,以后要進入這個工作表,只要輸入密碼即可。
技巧2:得到偶數的單元格的相加值
因為工作需要,要得到偶數的單元格的值相加之和,以下是具體的要求和思路:
要求:得到A2+A4+A6+A8+A10+A12+A14......之和,假如是少還好辦,假如有數十個相加的話就不好辦了,怎樣才能用一個公式來搞定它呢???
思路:呵呵,我已得到答案了!先用一列來得到當前行的行號,你可在C1輸入1,然后向下拖得到每一行的行號,再用一列來判斷當前行是否為偶數行,輸入公式:"=IF(INT(C1/2)=C1/2,A1,0)",然后再累加C列即可。
函數解析:其中的INT函數為判斷C1/2是否為整數,如果C1是偶數C1/2當然是整數了,IF函數判斷INT(C1/2)是否為偶數,如是,則取A列值,如果不是,就取0值。
看懂以上公式后,再教你一個更簡單的方法:用ROW函數.ROW()可以得到當前行的行號,這樣,判斷當前行是否為偶數就不用再增加C列了,只要直接輸入公式:"=IF(INT(ROW(?)=ROW()/2,A1,0)",向下拖動,累加即可。
技巧3:如何使Excel中數字計算自動四舍五入
目的:要對一個單元格中的數據(利用函數計算得出的)在它本身所在的單元格內進行四舍五入。
//* 假設B1單元格內容為:=if(A1$#@62;5,6234*.05)*//
1.如果B1單元此后不再加入其他運算,只要:
右鍵單擊B1 → 設置單元格格式 → 小數位數調整到2位.或者單擊B1,選擇快捷菜單上的 "千分格式",再選擇快捷菜單上的 "退一位小數位" 即可。
2.如果B1單元此后還要再加入其他運算,只要:
在B1單元,將原有內容加入ROUND函數即可:=round(if(A1$#@62;5,6234*.05),2)
其中,最后一位數"2"代表你想要數據參與計算的結果截止到小數點后兩位,如果想要三位,直接改成"3"即可。
以上第一種方法只能達到顯示上的四舍五入,當數據再次參與計算時,將不會以四舍五入后的數值參與。第二種方法,當數據再次參與計算時,將以四舍五入后的數值(即其顯示在單元格中的數據)參與計算。
技巧4:將鍵入的阿拉伯數字自動轉換成人民幣大寫金額
在使用EXCEL過程中,在制作財務憑證時經常需要將數字表示為大寫的數字金額,可用設置單元格格式的方法來實現:
1.首先鼠標右鍵單擊需要用大寫金額顯示的單元格。
2.(*假設此單元格金額為123.50元*)→ 設置單元格格式 → 數字 → 自定義 → 在類型框中輸入 [DBNum2]0“百”0“拾”0“元”0“角”“整” 即可將選中的單元格中的數字顯示為大寫金額:(壹百貳拾叁元伍角整)。
(*假設此單元格金額為1234.51元*)→ 設置單元格格式 → 數字 → 自定義 → 在類型框中輸入 [DBNum2]0“千”0“百”0“拾”0“元”0“角”0“分”“整” 即可將選中的單元格中的數字顯示為大寫金額:(壹千貳百叁拾肆元伍角壹分整)。
第三篇:Excle使用心得
EXCEL使用技巧
01、如何在已有的單元格中批量加入一段固定字符?
例如:在單位的人事資料,在excel中輸入后,由于上級要求在原來的職稱證書的號碼全部再加兩位,即要在每個人的證書號碼前再添上兩位數13,如果一個一個改的話實在太麻煩了,那么我們可以用下面的辦法,省時又省力:
1)假設證書號在A列,在A列后點擊鼠標右鍵,插入一列,為B列;
2)在B2單元格寫入: =“13” & A2 后回車;
3)看到結果為 13xxxxxxxxxxxxx 了嗎?鼠標放到B2位置,單元格的下方不是有一個小方點嗎,按著鼠標左鍵往下拖動直到結束。當你放開鼠標左鍵時就全部都改好了。若是在原證書號后面加13 則在B2單元格中寫入:=A2 & “13” 后回車。
02 用IF函數清除EXCEL工作表中的計算出現的0
=IF(K14*M14=0,“",K14*M14)該式所表示的含義為:如果單元格K14與M14內數值的乘積為零,那么存放計算結果的單元格顯示為一個空白單元格;反之,單元格K14與M14內數值的乘機為不為零,這兩個單元格的數值將被進行乘積運算。
06、在Excel中如何設置加權平均?
加權平均在財務核算和統計工作中經常用到,并不是一項很復雜的計算,關鍵是要理解加權平均值其實就是總量值(如金額)除以總數量得出的單位平均值,而不是簡單的將各個單位值(如單價)平均后得到的那個單位值。在Excel中可設置公式解決(其實就是一個除法算式),分母是各個量值之和,分子是相應的各個數量之和,它的結果就是這些量值的加權平均值。
07、如果在一個Excel文件中含有多個工作表,如何將多個工作表一次設置成同樣的頁眉和頁腳?如何才能一次打印多個工作表?
把鼠標移到工作表的名稱處(若你沒有特別設置的話,Excel自動設置的名稱是“sheet1、sheet2、sheet3.......”),然后點右鍵,在彈出的菜單中選擇“選擇全部工作表”的菜單項,這時你的所有操作都是針對全部工作表了,不管是設置頁眉和頁腳還是打印你工作表。
15、如何快速選取工作表中所有包含公式的單元格?
有時,需要對工作表中所有包含公式的單元格加以保護,或填入與其他單元格不同的顏色,以提醒用戶注意不能在有此顏色的區域內輸入數據。以下方法可以幫助快速選取所有包含公式的單元格:選擇“編輯”“定位”(F5),單擊“定位條件”按鈕,在“定位條件”對話框中選擇“公式”項,按“確定”按鈕即可。
16、如何在不同單元格中快速輸入同一數內容?
選定單元格區域,輸入值,然后按 Ctrl+ Ener鍵,即可實現在選定的單元格區域中一次性輸入相同的值。
17、只記得函數的名稱,但記不清函數的參數了,怎么辦?
如果你知道所要使用函數的名字,但又記不清它的所有參數格式,那么可以用鍵盤快捷鍵把
參數粘貼到編輯欄內。
具體方法是:在編輯欄中輸入一個等號其后接函數名,然后按 Ctr+ A鍵,Excel則自動進入“函數指南——步驟 2之2”。當使用易于記憶的名字且具有很長一串參數的函數時,上述方法顯得特別有用。
27、如何快速地將數字作為文本輸入?
在輸入數字前加一個單引號“’”,可以強制地將數字作為文本輸入。
35、如何使單元格中的顏色和底紋不打印出來?
對那些加了保護的單元格,還可以設置顏色和底紋,以便讓用戶一目了然,從顏色上看出那些單元格加了保護不能修改,從而可增加數據輸入時的直觀感覺。但卻帶來了問題,即在黑白打印時如果連顏色和底紋都打出來,表格的可視性就大打折扣。解決辦法是:選擇“文件”“頁面設置”“工作表”,在“打印”欄內選擇“單元格單色打印”選項。之后,打印出來的表格就面目如初了。
37、“$”的功用
Excel一般使用相對地址來引用單元格的位置,當把一個含有單元格地址的公式拷貝到一個新的位置,公式中的單元格地址會隨著改變。你可以在列號或行號前添加符號 “$”來凍結單元格地址,使之在拷貝時保持固定不變。
38、如何用漢字名稱代替單元格地址?
如果你不想使用單元格地址,可以將其定義成一個名字。
定義名字的方法有兩種:一種是選定單元格區域后在“名字框”直接輸入名字,另一種是選定想要命名的單元格區域,再選擇“插入”“名字”“定義”,在“當前工作簿中名字”對話框內鍵人名字即可。使用名字的公式比使用單元格地址引用的公式更易于記憶和閱讀,比如公式“=SUM(實發工資)”顯然比用單元格地址簡單直觀,而且不易出錯。
39、如何在公式中快速輸入不連續的單元格地址?
在SUM函數中輸入比較長的單元格區域字符串很麻煩,尤其是當區域為許多不連續單元格區域組成時。這時可按住Ctrl鍵,進行不連續區域的選取。區域選定后選擇“插入”“名字”“定義”,將此區域命名,如Group1,然后在公式中使用這個區域名,如“=SUM(Group1)”。
42、工作表名稱中能含有空格嗎?
能。例如,你可以將某工作表命名為“Zhu Meng”。有一點結注意的是,當你在其他工作表中調用該工作表中的數據時,不能使用類似“= Zhu Meng!A2”的公式,否則 Excel將提示錯誤信息“找不到文件Meng”。解決的方法是,將調用公式改為“='Zhu Mg'!A2”就行了。當然,輸入公式時,你最好養成這樣的習慣,即在輸入“=”號以后,用鼠標單由 Zhu Meng工作表,再輸入余下的內容。
46、如何減少重復勞動?
我們在實際應用Excel時,經常遇到有些操作重復應用(如定義上下標等)。為了減少重復勞動,我們可以把一些常用到的操作定義成宏。其方法是:選取“工具”菜單中的“宏”命令,執行“記錄新宏”,記錄好后按“停止”按鈕即可。也可以用VBA編程定義宏。
47、如何快速地批量修改數據?
假如有一份 Excel工作簿,里面有所有職工工資表。現在想將所有職工的補貼增加50(元),當然你可以用公式進行計算,但除此之外還有更簡單的批量修改的方法,即使用“選擇性粘貼”功能: 首先在某個空白單元格中輸入50,選定此單元格,選擇“編輯”“復制”。選取想修改的單元格區域,例如從E2到E150。然后選擇“編輯”“選擇性粘貼”,在“選擇性粘貼”對話框“運算”欄中選中“加”運算,按“確定”健即可。最后,要刪除開始時在某個空白單元格中輸入的50。
48、如何快速刪除特定的數據?
假如有一份Excel工作薄,其中有大量的產品單價、數量和金額。如果想將所有數量為0的行刪除,首先選定區域(包括標題行),然后選擇“數據”“篩選”“自動篩選”。在“數量”列下拉列表中選擇“0”,那么將列出所有數量為0的行。此時在所有行都被選中的情況下,選擇“編輯”“刪除行”,然后按“確定”即可刪除所有數量為0的行。最后,取消自動篩選。
49、如何快速刪除工作表中的空行?
以下幾種方法可以快速刪除空行:
方法一:如果行的順序無關緊要,則可以根據某一列排序,然后可以方便地刪掉空行。方法二:如果行的順序不可改變,你可以先選擇“插入”“列”,插入新的一列入在A列中順序填入整數。然后根據其他任何一列將表中的行排序,使所有空行都集中到表的底部,刪去所有空行。最后以A列重新排序,再刪去A列,恢復工作表各行原來的順序。
方法三:使用上例“如何快速刪除特定的數據”的方法,只不過在所有列的下拉列表中都選擇“空白”。
50、如何使用數組公式?
Excel中數組公式非常有用,它可建立產生多值或對一組值而不是單個值進行操作的公式。要輸入數組公式,首先必須選擇用來存放結果的單元格區域,在編輯欄輸入公式,然后按ctrl+Shift+Enter組合鍵鎖定數組公式,Excel將在公式兩邊自動加上括號“{}”。不要自己鍵入花括號,否則,Excel認為輸入的是一個正文標簽。要編輯或清除數組公式.需選擇數組區域并且激活編輯欄,公式兩邊的括號將消失,然后編輯或清除公式,最后按Ctrl+shift+Enter鍵。
52、在Excel中用Average函數計算單元格的平均值的,值為0的單元格也包含在內。有沒有辦法在計算平均值時排除值為0的單元格?
方法一:如果單元格中的值為0,可用上例“0值不顯示的方法”將其內容置為空,此時空單元格處理成文本,這樣就可以直接用Average函數計算了。
方法二:巧用Countif函數 例如,下面的公式可計算出b2:B10區域中非0單元格的平均值: =sum(b2: b10)/countif(b2: b1o,”<>0")
三、讓不同類型數據用不同顏色顯示
在工資表中,如果想讓大于等于2000元的工資總額以“紅色”顯示,大于等于1500元的工資總額以“藍色”顯示,低于1000元的工資總額以“棕色”顯示,其它以“黑色”顯示,我們可以這樣設置。
1.在工作簿中,選中“工資總額”所在列,執行“格式→條件格式”命令,打開“條件
格式”對話框。單擊第二個方框右側的下拉按鈕,選中“大于或等于”選項,在后面的方框中輸入數值“2000”。單擊“格式”按鈕,打開“單元格格式”對話框,將“字體”的“顏色”設置為“紅色”。(在Excle07中 開始----樣式---條件格式 下面設置)
2.按“添加”按鈕,并仿照上面的操作設置好其它條件(大于等于1500,字體設置為“藍色”;小于1000,字體設置為“棕色”)。
3.設置完成后,按下“確定”按鈕。
第四篇:CAD使用心得之一
CAD使用心得之一--CAD使用的三個基本方面:清晰、準確、高效
(2012-07-02 10:49:16)
很多CAD的教材,如果對照著學習的話,確實都能夠在一定程度上掌握這個軟件,如果到工作崗位,也都能勉勉強強的開始畫圖。但是,這遠遠不夠,從書本到實戰,還有一大段距離。因此,將收集的有關于使用CAD的一系列心得體會發出來與大家分享。
CAD使用心得連載之一
——CAD使用的三個基本方面:清晰、準確、高效
目前,設計公司的設計文件,特別是圖紙,都是用CAD軟件繪制的,但是還有很多人對CAD并不是非常熟悉,或者說使用起來并非得心應手,以至于效率并不是很高,可以說,繪制同樣的一張圖紙,速度快的和慢的在耗時上可能會相差好幾倍。同時,每個人繪制出來的圖紙看上去感覺都不盡相同:有些圖紙看上去一目了然、清晰漂亮,而有些圖紙不但表達不清,甚至可以用慘不忍睹來形容。
不知大家認為,使用CAD畫圖最重要的是什么?對這個問題,每個人都有可能理解不同,但在我看來,最重要的是時時刻刻記住自己使用CAD畫圖的目的是什么。
我們進行工程設計,不管是什么專業、什么階段,實際上都是要將某些設計思想或者是設計內容,表達、反映到設計文件上。而圖紙,就是一種直觀、準確、醒目、易于交流的表達形式。所以我們完成的東西(不管是最終完成的設計成果,還是作為條件提交給其它專業的過程文件,一定需要能夠很好的幫助我們表達自己的設計思想、設計內容。
有了這個前提,我們就應該明白,好的CAD圖紙應該具有以下兩個特征:清晰、準確。清晰,就是需要表達的東西必須清楚明了。好的圖紙,看上去一目了然。構件表達、尺寸標注、文字說明清清楚楚,互不重疊??除了圖紙打印效果清晰以外,在屏幕上的顯示也必須清晰。圖面清晰除了能清楚表達設計思路和設計內容外,也是提高繪圖速度的基礎。準確,就是標注不能錯誤,指示不能模糊。制圖準確不僅是為了好看,更重要的是可以直觀的反映一些圖面問題,對于提高繪圖速度也有重要的影響,特別是在圖紙修改時。我們在使用CAD繪圖時,無時無刻都應該把以上兩點銘刻在心。只有做到這兩點,才能說在繪圖方面基本過關。
圖面表示要“清晰”、“準確”,而在繪圖過程中,還有同樣重要的一點,就是“高效”。能夠高效繪圖,好處不用多說。
清晰、準確、高效是CAD軟件使用的三個基本點。在CAD軟件中,除了一些最基本的繪圖命令外,其他的各種編輯命令、各種設置定義,可以說都是圍繞著清晰、準確、高效這三方面來編排的。我們在學習CAD中的各項命令、各種設置時,都要思考一下,它們能在這三個方面起到那些作用;在使用時應該注重什么;在什么情況和條件下,使用這些命令最為合適。
第五篇:STM32使用心得
stm32使用心得
第一次使用stm32,以前用過
51、avr、pic、2812,感覺stm32還真有點不一樣,呵呵。
因為是第一次使用,下面說的肯定有不少錯誤,誠心求大家指正。
這次做的是用stm32f103zd+lattice 的lc4256v做一個波形發生器。通過上位機可以控制生成波形的頻率,然后stm32根據頻率計算波形占空比數據,通過總線形式傳給cpld,然后cpld把這些數據轉換成相對應占空比的pwm輸出,外部接RC濾波電路,產生相對應的波形。由于頻率范圍較大,計算量也比較大,所以采用了stm32+cpld的結構。Stm32運行在72MHZ,通過mco腳給cpld 36M HZ的時鐘,stm32和cpld通過總線方式通信。
此系統中Stm32主要用到的資源是:一個UART,一個TIMER及其中斷,FSMC和DMA。
本人總結了下,Stm32初始化一個片內外設一般過程一般有以下幾部分:
1.InitStructure配置及初始化
2.時鐘使能
3.相對應的IOInitStructure配置及初始化
4.相對應的IO時鐘使能
5.外設使能
6.中斷配置及中斷程序編寫
下面介紹一下自己所用的UART、TIMER、FSMC、DMA的初始化。
UART初始化:
此系統中使用的是UART2,未用UART中斷。UART初始化主要有:IO初始化,UART InitSturcture初始化,UART時鐘使能,UART使能。程序如下: GPIO_InitTypeDef GPIO_InitStructure;
// Configure USART2_Tx as alternate push-pull
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_Init(GPIOA, &GPIO_InitStructure);
// Configure USART2_Rx as input floating
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
GPIO_Init(GPIOA, &GPIO_InitStructure);
//IO時鐘使能
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
USART_InitTypeDef USART_InitStructure;
/* USART2 configured as follow:
-BaudRate = 9600 baud
-Word Length = 8 Bits
-One Stop Bit
-No parity
-Hardware flow control disabled(RTS and CTS signals)
-Receive and transmit enabled
*/
USART_InitStructure.USART_BaudRate = 9600;
USART_InitStructure.USART_WordLength = USART_WordLength_8b;USART_InitStructure.USART_StopBits = USART_StopBits_1;
USART_InitStructure.USART_Parity = USART_Parity_No;
USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
/* Configure the USART2*/
USART_Init(USART2, &USART_InitStructure);
//UART時鐘使能
RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2, ENABLE);
/* Enable the USART2 */
USART_Cmd(USART2, ENABLE);
TIMER初始化
使用的是TIM2。初始化主要包括TIM2 InitSturcture初始化,時鐘使能,TIM2開啟,中斷配置,及中斷服務程序編寫。此TIM2作用主要是給DMA提供時鐘,DMA在TIM2 UP時啟動一次DMA發送過程。TIM2程序如下:
TIM_TimeBaseInitTypeDefTIM_TimeBaseStructure;
//定時器2
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);
TIM_TimeBaseStructure.TIM_Period = 33;
TIM_TimeBaseStructure.TIM_Prescaler = 71;
TIM_TimeBaseStructure.TIM_ClockDivision = 0;
TIM_TimeBaseStructure.TIM_RepetitionCounter = 0x0;
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure);
TIM_ClearFlag(TIM2,TIM_FLAG_Update);
TIM_ARRPreloadConfig(TIM2,ENABLE);
TIM_ITConfig(TIM2,TIM_IT_Update,ENABLE);
TIM_Cmd(TIM2, ENABLE);
//中斷配置
/* Enable the TIM2 gloabal Interrupt */
NVIC_InitStructure.NVIC_IRQChannel = TIM2_IRQChannel;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
//定時器2中斷服務程序
void TIM2_IRQHandler(void)//這個函數可以在文件stm32f10x.c文件中查找到 {
TIM_ClearITPendingBit(TIM2,TIM_IT_Update);
}
FSMC初始化
FSMC主要用來和CPLD進行總線通信,由DMA方式發送,在TIM2計時時間到后啟動一次DMA發送,發送的數據由已計算好的數組中的一個16位數據以16位方式發給FSMC的地址。由于此系統電路已固定,stm32與CPLD間數據線是8位,故在向FSMC地址寫16位數據時,FSMC會將數據拆成2部分發送。本人在實際編程時發現,如向*(volatile u16*)(Bank1_NOR4_ADDR+0x40)地址給CPLD寫16位數據時,會在40h接收到低8位數據,在41h接收到高8位數據。按道理來說這些數據應該與NBL0, NBL1信號有關,本人在CPLD編程時未理會這個,具體時序不是很清楚,有待考究。
FSMC初始化程序如下:
FSMC_NORSRAMInitTypeDefFSMC_NORSRAMInitStructure;
FSMC_NORSRAMTimingInitTypeDefp;
p.FSMC_AddressSetupTime = 3;//6
p.FSMC_AddressHoldTime = 0;//3
p.FSMC_DataSetupTime = 8;//25
p.FSMC_BusTurnAroundDuration = 0;
p.FSMC_CLKDivision = 0;
p.FSMC_DataLatency = 0;
p.FSMC_AccessMode = FSMC_AccessMode_A;
FSMC_NORSRAMInitStructure.FSMC_Bank = FSMC_Bank1_NORSRAM4;FSMC_NORSRAMInitStructure.FSMC_DataAddressMux = FSMC_DataAddressMux_Disable;
FSMC_NORSRAMInitStructure.FSMC_MemoryType = FSMC_MemoryType_SRAM;
FSMC_NORSRAMInitStructure.FSMC_MemoryDataWidth = FSMC_MemoryDataWidth_8b;
FSMC_NORSRAMInitStructure.FSMC_BurstAccessMode = FSMC_BurstAccessMode_Disable;
FSMC_NORSRAMInitStructure.FSMC_WaitSignalPolarity = FSMC_WaitSignalPolarity_Low;
FSMC_NORSRAMInitStructure.FSMC_WrapMode = FSMC_WrapMode_Disable;
FSMC_NORSRAMInitStructure.FSMC_WaitSignalActive = FSMC_WaitSignalActive_BeforeWaitState;
FSMC_NORSRAMInitStructure.FSMC_WriteOperation = FSMC_WriteOperation_Enable;
FSMC_NORSRAMInitStructure.FSMC_WaitSignal = FSMC_WaitSignal_Disable;
FSMC_NORSRAMInitStructure.FSMC_ExtendedMode = FSMC_ExtendedMode_Disable;
FSMC_NORSRAMInitStructure.FSMC_AsyncWait = FSMC_AsyncWait_Disable;
FSMC_NORSRAMInitStructure.FSMC_WriteBurst = FSMC_WriteBurst_Disable;
FSMC_NORSRAMInitStructure.FSMC_ReadWriteTimingStruct = &p;FSMC_NORSRAMInitStructure.FSMC_WriteTimingStruct = &p;
FSMC_NORSRAMInit(&FSMC_NORSRAMInitStructure);
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_FSMC, ENABLE);
FSMC_NORSRAMCmd(FSMC_Bank1_NORSRAM4, ENABLE);
//IO初始化
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD | RCC_APB2Periph_GPIOG | RCC_APB2Periph_GPIOE |
RCC_APB2Periph_GPIOF, ENABLE);
/*--GPIO Configuration-----------------------*/
/* SRAM Data lines configuration */
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_8 | GPIO_Pin_9 |
GPIO_Pin_10 | GPIO_Pin_14 | GPIO_Pin_15;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOD, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7 | GPIO_Pin_8 | GPIO_Pin_9 | GPIO_Pin_10 |
GPIO_Pin_11 | GPIO_Pin_12 | GPIO_Pin_13 | GPIO_Pin_14 |
GPIO_Pin_15;
GPIO_Init(GPIOE, &GPIO_InitStructure);
/* SRAM Address lines configuration */
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3 |
GPIO_Pin_4 | GPIO_Pin_5 | GPIO_Pin_12 | GPIO_Pin_13 |GPIO_Pin_14 | GPIO_Pin_15;
GPIO_Init(GPIOF, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3 |
GPIO_Pin_4 | GPIO_Pin_5;
GPIO_Init(GPIOG, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11 | GPIO_Pin_12 | GPIO_Pin_13;GPIO_Init(GPIOD, &GPIO_InitStructure);
/* NOE and NWE configuration */
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4 |GPIO_Pin_5;
GPIO_Init(GPIOD, &GPIO_InitStructure);
/* NE4 configuration */
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12;
GPIO_Init(GPIOG, &GPIO_InitStructure);
/* NBL0, NBL1 configuration */
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1;
GPIO_Init(GPIOE, &GPIO_InitStructure);
此處簡單介紹一下FSMC總線方式的使用。
FSMC初始化完了之后,進行如下定義,#define Bank1_NOR4_ADDR((u32)0x6c000000)
#define cs_sin*(volatile u16*)(Bank1_NOR4_ADDR+0x40)
然后cs_sin=1000就是往這個地址寫數字1000=0x03e8,則cpld 40h地址收到數據為0xe8,41h收到的數據為0x03
i=cs_sin,就是讀這個地址的數據,由于定義的是16位的數據地址,故讀到的數據是40h為低8位數據,41h為高8位數據
DMA初始化:
DMA在TIM2 UP時觸發,將已經計算好放在數組dat_tocpld的16位數據發送到fsmc地址為(Bank1_NOR4_ADDR+0x40)的空間。
初始化程序如下:
DMA_InitTypeDef DMA_InitStructure;
DMA_DeInit(DMA1_Channel2);
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1, ENABLE);
/* Enable TIM2 DMA interface */
TIM_DMACmd(TIM2, TIM_DMA_Update, ENABLE);
DMA_InitStructure.DMA_PeripheralBaseAddr =(u32)(Bank1_NOR4_ADDR+0x
40);
DMA_InitStructure.DMA_MemoryBaseAddr =(u32)dat_tocpld;
DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralDST;
DMA_InitStructure.DMA_BufferSize = 1152;
DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;
DMA_InitStructure.DMA_PeripheralDataSize =DMA_PeripheralDataSize_HalfWord;
DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_HalfWord;DMA_InitStructure.DMA_Mode = DMA_Mode_Circular;
DMA_InitStructure.DMA_Priority = DMA_Priority_High;
DMA_InitStructure.DMA_M2M = DMA_M2M_Disable;
DMA_Init(DMA1_Channel2, &DMA_InitStructure);
/* Enable DMA1 Channel2 */
DMA_Cmd(DMA1_Channel2, ENABLE);
最后附上源自http://sxqstudy.blog.163.com/blog/static/***03148709/介紹的關于PWM電壓轉換電路。
在PWM用于DA轉換的場合,阻容濾波電路是關系轉換效果的重要環節。
由RC充放電常數我們可以大致計算出阻容環節的充放電頻率,一般為了得到理想的濾波效果,這個頻率要遠小于PWM的輸出頻率(小于四分之一)。
一般情況下,當C較小R較大時,DA轉換出的電壓損耗很小,但是紋波卻很大;當C較大R較小時,DA轉換出的電壓損耗很大,但紋波相對較小。
所以當需要進行線形度很高的精確DA轉換時必須使用較小的濾波電容,且盡量避免使用電解類電容。而為了得到較強的信號輸出,RC慣性環節之后還必須加一級高性能的電壓跟隨,然后在跟隨器輸出的地方加上一個濾波用的電解電容,用于平滑RC慣性環節的紋波。但是這還不夠,因為這時的輸出電壓里可能含有較多的交流諧波成分,如果處理不當,跟隨器有可能自激。解決的辦法就是使用一個小的去藕電容。而且這里電容的放置順序必須是電解電容在前,去藕電容在后!
如果輸出電壓精度和線形度要求不高,但是對紋波要求卻很高,或者這個電壓比較固定時,可以使用電容較大的濾波組合。因為,雖然大電容的直流損耗較大,但是我們可以通過調節PWM占空比來達到要求的輸出電壓,或者通過一級AD轉換的反饋來實現精確的固定電壓輸出。只是這里仍然要加一級電壓跟隨器,以便于后級采集電路使用,且AD采集點放置在跟隨器輸出處。