嵌入式分享合集140
一、PLC控制-編碼器的定位功能
嚴格來講,編碼器只會告訴你改如何定位,要如何執行,是需要靠數控系統(或者PLC之類控制器)控制伺服或者步進電機來實現定位的,編碼器好比人的眼睛,知道電機軸或者負載處于當前某個位置,工業上用的一般是光電類型編碼器,下邊簡單說明一下
01?編碼原理和位置測量
光電編碼器是在一個很薄很輕的圓盤子上,通過緊密儀器來腐蝕雕刻了很多條細小的縫,相當于把一個360度,細分成很多等分,比如成1024組,這樣每組之間的角度差是360/1024度=0.3515625度。
然后有個精密的發光源,安裝在碼盤的一面,碼盤的另外一面,會有個接收器之類的,使用了光敏電阻這些元件加放大和整形電路組成,這樣碼盤轉動時候,有縫隙的地方會透光過去,接收器會瞬間收到光脈沖,經過電路處理后,輸出一個電脈沖信號,這樣碼盤旋轉了一周,會對應輸出1024個脈沖,第一個脈沖位置如果是0,第二個脈沖位置就是0.3515625°,第三個脈沖位置是0.3515625°*2,以此類推,這樣只要有儀器能讀到脈沖個數,就可以知道碼盤對應在什么位置了,如果把編碼器安裝到電機的軸上,電機軸和碼盤是剛性連接,兩者的位置關系會一一對應,通過讀編碼器脈沖,就可以知道電機的軸位置。
而電機軸,比如會通過同步帶,齒輪,鏈條等帶動一些負載,比如控制絲桿,這樣會有個所謂電子齒輪比的關系,電機轉一圈,絲桿會前進多少毫米,這樣讀到了對應編碼器上輸出多少給脈沖,通過脈沖數就可以反推出當前絲桿的位置。?但是編碼器是圓的,如果無限制旋轉下去,角度會無窮大,所以設計了一種增量型的編碼器,轉一圈,會輸出三組信號ABZ,其中AB是一樣的脈沖,比如上邊說的一圈有1024個脈沖,AB相脈沖對應一圈內的圓周角度,而且兩種脈沖是處于正交狀態的,如果是正反轉,通過判斷AB相脈沖的上升沿和下降沿的先后順序,就可以知道編碼器當前是順時針還是逆時針方向旋轉的,?
另外有個Z相脈沖,是因為圓周雖然會不停轉下去,角度會無窮無盡,但是都是一周一周的重復而已,零相脈沖固定在圓周某個位置,編碼器每轉一圈,只輸出一個零相脈沖,這樣如果以Z相脈沖為基準點,這樣每次讀到這個脈沖時候,系統就清零一次,就可以讓角度最大值控制在360°以內,相當于一個零基準點了。這樣即使系統斷掉了,重新上電,只要能找到這個基準點,就可以知道絲桿的初始位置在什么地方了。?
以上這種定位叫增量坐標系,所以編碼器就是增量型編碼器,應用比較廣泛,因為靈活而且價格便宜。
如果只設備只需要轉一圈的,也就是角度在360°內的,編碼器可以細分精密一點,比如有13位,相當于2^13次方個脈沖一圈,對應著360°,這種脈沖數和角度一一對應,不怕系統斷電需要重新調整零位,這種編碼器叫單圈絕對值編碼器。如果負載需要轉多圈的,但是這個圈數也不能非常多,比如5圈,相當于5*360°=1800°,這樣脈沖和1800°一一對應,這些在一些高檔的數控機床上應用比較多,可以知道絲桿或者一些旋轉工作的當前精密位置,而且不用擔心系統斷電歸零問題。
此外,編碼器還有磁電方式的,比如在碼盤上加工了很多個南北間隔的小磁鐵,通過霍爾去讀小磁鐵信號,輸出信號,同樣經過放大和整形變成了電脈沖,這點和光電編碼器是類似的,而且價格會便宜點,可靠性會高,但是精度就比光電要差點。
02?PLC如何通過編碼器判斷位置
PLC能輸入開關量,也就是一高一低的電平電壓,而編碼器脈沖信號,可以理解一定時間內,用極快的速度完成的一組開關量。但是因為這種開關量的頻率太高了,所以PLC的普通I/O口是無法準確讀到這些脈沖的個數的,因為PLC工作過程中存在掃描周期,需要每個一段時間才去刷新一下普通I/O口的數據,而編碼器的精度太高了,單位時間內輸出的脈沖個數太多,普通I/O是無法勝任的。
?一般PLC會設計有高速計數端口,本質是利用了底層單片機的硬件邏輯來完成這些編碼器計數的,避開了掃描周期問題,PLC都設計有專門的高速計數指令,使用的時候,直接調用這些指令就可以讀到當前的脈沖值了。
但是脈沖的計算和輸出上,由于掃描周期存在,往往也會存在著滯后影響,如果用來控制一些執行機構,比如氣缸來動作裁切動作,這樣要考慮提前量的補償問題。
提醒一下,如果想用PLC來控制伺服或者步進系統,往往并不需要通過編碼器反饋來判斷位置,通過一些PLS指令之類的來發出位置脈沖給伺服驅動器,位置環在伺服驅動器內部構成就好,而PLC這邊只是一個指令機構,并沒有構成位置閉環,當然如果是專門定位模塊控制,使用了NC之類的控制方式,是可以在里邊構建位置閉環的。?
二、電工膠帶(絕緣膠帶)使用方法
電工膠帶全名為聚氯乙烯電氣絕緣膠粘帶,又有人稱之為電工絕緣膠帶或絕緣膠帶。是一種性能優良、經濟實用的聚氯乙烯絕緣膠帶。它具有良好的耐磨性、防潮性、耐酸堿性及抗環境變化能力(包括紫外線)。適用于電線纏繞,變壓器、馬達、電容器、穩壓器等各類電機、電子零件的絕緣固定用。有紅、黃、藍、白、綠、黑、透明等顏色。聚氯乙烯帶具有很高的介電強度,從形性好,較少用量即可獲得較好的機械保護。
主要用途
適用于各種電阻零件的絕緣。如電線接頭纏繞,絕緣破損修復,變壓器、馬達、電容器、穩壓器等各類電機、電子零件的絕緣防護。也可用于工業過程中捆綁、固定、搭接、修補、密封、保護。
用于綁扎電線和電纜適用于室內或室外用于電壓等級600V以下的所有電線和電纜接頭的主絕緣用于修補高壓電纜接頭的護套用于600V及以下電氣絕緣電線電纜相識標色。
使用方法
首先電線接頭在用膠布纏之前一定要按照接線標準要求把兩根電線完美的扭在一起,不同材料、不同橫截面、不同應用場景下都有不同的接線標準,這個一定要按照規范要求去做。
導線連接處的絕緣處理通常采用絕緣膠帶進行纏裹包扎。一般電工常用的絕緣帶有黃蠟帶、滌綸薄膜帶、黑膠布帶、塑料膠帶、橡膠膠帶等。絕緣膠帶的寬度常用20mm的,使用較為方便。
電線接頭用膠布纏的最簡單方法是,二分之一壓纏,也就是簡單的把電工膠布從交叉的一端向另一端纏過去,記住在纏的過程當中,一定要用一點力氣,不要隨手一纏,用點力氣將電工膠布纏得死死的,牢牢的。如果隨便一纏一綁的話,隨時間的加長,很有可能膠布自己會慢慢松動,松開散掉,這是很危險的,一定要綁死纏緊。
但是這個簡單的方法只適合在普通暫時絕緣的場景下,要知道在不同應用場景下,膠布纏法也是有區別的。
1、一般導線接頭的電線接頭用膠布的纏法 一字形連接的導線接頭先進行絕緣處理,先包纏一層黃蠟帶,再包纏一層黑膠布帶。將黃蠟帶從接頭左邊絕緣完好的絕緣層上開始包纏,包纏兩圈后進入剝除了絕緣層的芯線部分。包纏時黃蠟帶應與導線成55°左右傾斜角,每圈壓疊帶寬的1/2,直至包纏到接頭右邊兩圈距離的完好絕緣層處。然后將黑膠布帶接在黃蠟帶的尾端,按另一斜疊方向從右向左包纏,仍每圈壓疊 帶寬的1/2,直至將黃蠟帶完全包纏住。包纏處理中應用力拉緊膠帶,注意不可稀疏,更不能露出芯線,以確保絕緣質量和用電安全。對于220V線路,也可不用黃蠟帶,只用黑膠布帶或塑料膠帶包纏兩層。在潮濕場所應使用聚氯乙烯絕緣膠帶或滌綸絕緣膠帶。
2、T字分支接頭的電線接頭用膠布的纏法 導線分支接頭的絕緣處理基本方法同上,T字分支接頭的包纏方向走一個T字形的來回,使每根導線上都包纏兩層絕緣膠帶,每根導線都應包纏到完好絕緣層的兩倍膠帶寬度處。
3、十字分支接頭的電線接頭用膠布的纏法 對導線的十字分支接頭進行絕緣處理時,包纏方向走一個十字形的來回,使每根導線上都包纏兩層絕緣膠帶,每根導線也都應包纏到完好絕緣層的兩倍膠帶寬度處。
絕緣膠帶耐多少度高溫
1、普通電工使用的絕緣膠帶,耐高溫能夠達到80度。從這個溫度上來說,是不怎么耐高溫的絕緣膠帶,又稱之為電工絕緣膠帶,它主要材質就是聚氯乙烯薄膜,后期通過涂了橡膠型的樣品膠制作而成,起到了一定的防止漏電絕緣的作用。主要的性能就是耐壓,而且具有阻燃的特點,適合運用在電氣絕緣防護等方面。
2、還有一種是高溫的膠帶,代表它能夠在高溫作用環境下使用,耐溫性能能夠達到120度,甚至能夠達到260度之間,這 種高溫的膠帶就比較耐高溫。
貯存
在常溫、通風條件下,電工膠布性能保持穩定。
whaosoft aiot?http://143ai.com
三、?USB 接口電路設計常見問題
????USB是一種快速、雙向、同步傳輸、廉價、方便使用的可熱拔插的串行接口。由于數據傳輸快,接口方便,支持熱插拔等優點使USB設備得到廣泛應用。目前,市場上以USB2.0為接口的產品居多,但很多硬件新手在USB應用中遇到很多困擾,往往PCB裝配完之后USB接口出現各種問題。
????比如通訊不穩定或是無法通訊,檢查原理圖和焊接都無問題,或許這個時候就該懷疑PCB設計不合理。繪制滿足USB2.0數據傳輸要求的PCB對產品的性能及可靠性有著極為重要的作用。
????USB協議定義由兩根差分信號線(D+、D-)傳輸數字信號,若要USB設備工作穩定差分信號線就必須嚴格按照差分信號的規則來布局布線。根據筆者多年USB相關產品設計與調試經驗,總結以下注意要點:
????1.在元件布局時,盡量使差分線路最短,以縮短差分線走線距離(√為合理的方式,×為不合理方式);
???2.優先繪制差分線,一對差分線上盡量不要超過兩對過孔(過孔會增加線路的寄生電感,從而影響線路的信號完整性),且需對稱放置(√為合理的方式,×為不合理方式);?
?3.對稱平行走線,這樣能保證兩根線緊耦合,避免90°走線,弧形或45°均是較好的走線方式(√為合理的方式,×為不合理方式);?
??4.差分串接阻容,測試點,上下拉電阻的擺放(√為合理的方式,×為不合理方式);?
?5.由于管腳分布、過孔、以及走線空間等因素存在使得差分線長易不匹配,而線長一旦不匹配,時序會發生偏移,還會引入共模干擾,降低信號質量。所以,相應的要對差分對不匹配的情況作出補償,使其線長匹配,長度差通??刂圃?mil以內,補償原則是哪里出現長度差補償哪里;?
??6.為了減少串擾,在空間允許的情況下,其他信號網絡及地離差分線的間距至少20mil(20mil是經驗值),覆地與差分線的距離過近將對差分線的阻抗產生影響;
??? 7.USB的輸出電流是500mA,需注意VBUS及GND的線寬,若采用的1Oz的銅箔,線寬大于20mil即可滿足載流要求,當然線寬越寬電源的完整性越好。
??普通USB設備差分線信號線寬及線間距與整板信號線寬及線間距一致即可。然而當USB設備工作速度是480 Mbits/s,只做到以上幾點是不夠的,我們還需對差分信號進行阻抗控制,控制差分信號線的阻抗對高速數字信號的完整性是非常重要的。
????因為差分阻抗影響差分信號的眼圖、信號帶寬、信號抖動和信號線上的干擾電壓。差分線阻抗一般控制在90(±10%)歐姆(具體值參照芯片手冊指導),差分線阻抗與線寬W1、W2、T1成反比,與介電常數Er1成反比,與線間距S1成正比,與參考層的距離H1正比,如下圖是差分線的截面圖。
????下圖為四層板的參考疊層,其中中間兩層為參考層,參考層通常為GND或Power,并且差分線所對應的參考層必須完整,不能被分割,否則會導致差分線阻抗不連續。若是以圖 2疊層設計四層板,通常設計時差分線采用4.5mil的線寬及5.5mil的線間距既可以滿足差分阻抗90Ω。
????然而4.5mil線寬及5.5mil線間距只是我們理論設計值,最終電路板廠依據要求的阻抗值并結合生產的實際情況和板材會對線寬線間距及到參考層的距離做適當的調整。
????以上所描述的布線規則是基于USB2.0設備,在USB布線過程中把握差分線路最短、緊耦合、等長、阻抗一致且注意好USB電源線的載流能力,掌握好以上原則USB設備運行基本沒問題。?
四、ARM Cortex-M內核復位啟動過程
?ARM Cortex-M內核的復位啟動過程也被稱為復位序列(Reset sequence),下面就來簡要總結分析下這一過程。
????ARM Cortex-M內核的復位啟動過程與其他大部分CPU不同,也與之前的ARM架構(ARM920T、ARM7TDMI等)不相同。大部分CPU復位后都是從0x0000_0000處取得第一條指令開始運行的,然而在ARM Cortex-M內核中并不是這樣的。其復位序列為:
1.?從地址0x0000_0000處取出MSP的初始值;
2.?從地址0x0000_0004處取出PC的初始值,然后從這個值對應的地址處取指。
????即下圖所示過程:事實上,地址0x0000_0004開始存放的就是默認中斷向量表(有些資料中將地址0x0000_0000處的MSP指針初始值也算作中斷向量表的一部分,這個說法似乎不太妥當),ARM Cortex-M內核的中斷向量表布局情況如下圖所示:?
注意:中斷向量表的位置可以改變,此處是默認情況下的設置。
????值得注意的是,在ARM Cortex-M內核中,發生異常后,并不是去執行中斷向量表中對應位置處的代碼,而是將對應位置處的數據存入PC中,然后去此地址處進行取指。簡而言之,在ARM Cortex-M的中斷向量表中不應該放置跳轉指令,而是該放置ISR程序的入口地址。
????有了上面的分析就很好理解復位序列了,復位其實就相當于發生了一次Reset異常,而從圖中可以看到,地址0x0000_0004處存放的正是Reset異常對應的中斷處理函數入口地址。
????另外還有兩個細節問題需要注意:
1. 0x0000_0000處存放的MSP初始值最低三位需要是0;
2.?0x0000_0004處存放的地址最低位必須是1。
????第一個問題是因為ARM AAPCS中對棧使用的約定是這樣的:
5.2.1.1
Universal stack constraints
At all times the following basic constraints must hold:
Stack-limit < SP <= stack-base. The stack pointer must lie within the extent of the stack.
SP mod 4 = 0. The stack must at all times be aligned to a word boundary.
5.2.1.2
Stack constraints at a public interface
The stack must also conform to the following constraint at a public interface:
SP mod 8 = 0. The stack must be double-word aligned.
????簡而言之,規約規定,棧任何時候都必須4字節對齊,在調用入口需8字節對齊,而且SP的最低兩位在硬件上就被置為0了。
????第二個問題與ARM模式與Thumb模式有關。ARM中PC中的地址必須是32位對齊的,其最低兩位也被硬件上置0了,故寫入PC中的數據最低兩位并不代表真實的取址地址。ARM中使用最低一位來判斷這條指令是ARM指令還是Thumb指令,若最低位為0,代表ARM指令;若最低位為1,代表Thumb指令。在Cortex-M內核中,并不支持ARM模式,若強行切換到ARM模式會引發一個Hard Fault。
????最后寫一段小程序來驗證下以上分析。這段程序基于STM32F4系列單片機,作用是讓PA0管腳輸出高電平。這應該也是實現這一目的最精簡的寫法了。
rAHB1ENR EQU 0x40023830AHB1ENRValue EQU 0x00000001 rMODER EQU 0x40020000MODERValue EQU 0xA8000001 rODR EQU 0x40020014ODRVaule EQU 0x00000001 AREA RESET, DATA, READONLY DCD 0x00000400 DCD Start AREA |.text|, CODE, READONLY ENTRY Start LDR R0, =rAHB1ENR LDR R1, =AHB1ENRValue STR R1, [R0] LDR R0, =rMODER LDR R1, =MODERValue STR R1, [R0] LDR R0, =rODR LDR R1, =ODRVaule STR R1, [R0] B . END????第11行使用DCD偽指令分配了4個字節的存儲空間,并將其值設置為0x0000_0400;第12行同理,將Start標號處的地址放置在偏移量為4字節的位置處;第17行Start標號之后的部分就是程序主體,依次完成了GPIOA端口RCC時鐘使能、PA0設置為輸出模式、PA0置高這三個步驟。
????程序在鏈接時會將RESET段放置在目標文件開頭,故相當于在地址0x0000_0000處的數據為0x0000_0400,在地址0x0000_0004處的數據為Start部分的入口地址。
????不過需要指出的是,實際上在STM32F4芯片中,內部Flash的地址是從0x0800_0000處開始的,在BOOT管腳設置為Flash啟動的時候,芯片內部會自動將0x0000_00000 0x000F_FFFF區域映射至0x0800_0000 0x080F_FFFF處,此時可以視為二者是等價的。
????使用Debug模式進行調試,復位后CPU寄存器的值如下所示:
?
???Flash中的數據如圖:
?可以看到,編譯器很智能的將0x0800_0004處的數據設置為了0x0800_0009,而不是Start標號真實的地址值,這說明了這是一條Thumb-2指令。復位后PC中的值是0x0800_0008,SP中的值是0x0000_0400,與預期結果完全相同。
????最后順便提一下,上面那段簡單的程序有個問題,實際上Start部分的程序是占用了中斷向量表的空間,這在沒有異常發生的時候是沒有問題的,不過一旦有異常發生,顯然程序執行是會出錯的。
總結
以上是生活随笔為你收集整理的嵌入式分享合集140的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 淘宝网店装修技巧 (技巧颜色分类)
- 下一篇: 编码器测速原理与实现