Rotor Synnchronization 轉子同步法:
1.感測器法; Hall sensor
2.無感測器法:反電勢,分析未驅動相的反電勢訊號,證實交換點(換相點)
轉子速度調整
1.閉迴路控制:可針對'最終的負載變動做速度補償
2.開迴路控制:在BLDC同步驅動器不需要做到速度控制,轉子最終速度會受負載變動影響
匯流排電壓'調整
1.電流模式:透過'PWM信號設定電流準位以及使用外部RC濾波器設定比較門檻,控制變數是每相電流
2.電壓模式:控制變數是每相電壓,經由固定PWM訊號的DUTY CYCLE,以達到電壓調整.電流限制的級別可由外部電阻分壓決定或經由PWM訊號濾波器(RC電路)
轉子速度測量:
依據公式RPM=(反電勢頻率*60*2)/轉子極數
藉由兩個連續的反電勢零交越以計算]時間的延遲稱為單位時間量測STEP TIME
通訊延遲和消磁時間:
通訊延遲約為一半的step time區間約落在zero crossing 以及step time commution之間
BEMF 只能在未驅動的那一像電流為流才可量測
零交越偵測:
在切換PWM過程中(未驅動相那一相)
T-ON :上臂有效時, 中性點為1/2 BUS電壓
T-OFF:下臂有效時,中性點為零 .
動態反電勢取樣:
這方法針對在低速的低duty cycle以及高速的100% duty cycle最小的反電勢分割
標準BLDC啟動程序有兩種組成:
1.The Alignment phase (校準相):再此模式時,驅動馬達前轉子需移動至指定位置,而要進行此動作.六相開關需設某一組態,令轉子先至某一固定位置,例如:step 6->step 1,下一個要換相的動作是step時,需先移至step 6位置.
2.The ramp-up phase (爬升相):主要功能是執行加速馬達到可以判斷反電勢的速度.當轉速達到的速度可察覺反電勢時,這同步機制視為有效.此機制也稱為自動變換模式.
2013年12月12日 星期四
MAX232 通訊異常現象
在以轉接版的方式與外部進行溝通發現個問題.
如果V+ 與V- 電位不足時,在與外部溝通的DOUT(TX)會有無訊號現象產生.
下圖是正常可通訊下,V+ & V-的電位,都可達到正或負7v左右.
下圖是無法通訊時,V+ &V- 電位,大概都與電源準位差不多等級.
如下圖是MAX232(or max3232)的第13腳所量到的波形.針對此種情況如果以同一台PC做通訊測試,記錄到的波形是完整的方波
但是如果用不同設備做溝通時,第13腳所量到的波形.
一開始認為是電容匹配問題,一直修改都沒改善,之後又去試著另外加一顆LDO以及在電源回路上加BEAD甚至在第13PIN並聯電阻以及電容.
到最後發現到問題是共地沒處理好!後來在溝通用的線材中把沒使用的線多拿一路來做地線.才解決問題!!
2013年12月3日 星期二
Labview 基本認識
啥叫vi??
虛擬儀表 (virtual instrument): 簡稱 VI,是以 LabVIEW 語言撰寫之程式,其儲存的副檔名為 .vi。其格式如同是右上圖,是由使用者使用的人機介面 (front panel) 與程式設計者使用的程式方塊 (block diagram) 兩個視窗所組成
sub vi??
次程式 (sub-virtual instrument): 簡稱 sub-VI,每一個 VI 內還可以包含許多次程式,這種次程式就叫做 sub-VI。更正確的說法是 sub-VI 是將 VI 設計成許多通用程式 (universal program),在撰寫 VI 時可利用這些 sub-VI 來組裝成一個適合個人的 VI 來使用,而不需要一再地重複的撰寫程式,是程式中的程式。
請參考http://www.pt.ntu.edu.tw/hmchai/hLabVIEW/LVintroduction.htm
Labview 建立DLL檔或執行檔的方法:
當專案已建立完,請在 project explorer視窗中在Build Specification按右鍵選New,之後會有一堆可產生的檔案類型供選擇
虛擬儀表 (virtual instrument): 簡稱 VI,是以 LabVIEW 語言撰寫之程式,其儲存的副檔名為 .vi。其格式如同是右上圖,是由使用者使用的人機介面 (front panel) 與程式設計者使用的程式方塊 (block diagram) 兩個視窗所組成
sub vi??
次程式 (sub-virtual instrument): 簡稱 sub-VI,每一個 VI 內還可以包含許多次程式,這種次程式就叫做 sub-VI。更正確的說法是 sub-VI 是將 VI 設計成許多通用程式 (universal program),在撰寫 VI 時可利用這些 sub-VI 來組裝成一個適合個人的 VI 來使用,而不需要一再地重複的撰寫程式,是程式中的程式。
請參考http://www.pt.ntu.edu.tw/hmchai/hLabVIEW/LVintroduction.htm
Labview 建立DLL檔或執行檔的方法:
當專案已建立完,請在 project explorer視窗中在Build Specification按右鍵選New,之後會有一堆可產生的檔案類型供選擇
變壓器漏感對Vds的影響
一般我們常常聽說變壓器漏感要小ㄧ點,要不然MOSFET上的voltage spike會很高,但會多高呢?我們希望透過計算的方式來了解。這邊我們以flyback converter為例子。
首先我們先針對沒有緩衝線路來做計算,這時候對於voltage spike的影響,除了漏感外就只有MOSFET的Coss,在MOSFET turn off的時候,儲存於漏感上的能量為1/2LI^2,此時由於MOSFET已經open了,所以這能量會透過MOSFET的Coss做放電,所以儲存的能量=1/2(Coss)V^2,V即為我們看到的voltage spike,所以Coss越大則會得到較小的voltage spike。
我們以實例來做說明,當我們設計一個變壓器感量為450uH而漏感是10uH時且透過計算後I peak=5A,MOSFET turn off 時漏感儲存的能量是1.25*10^-4=0.5*C*V^2
如果使用的MOSFET的Coss為1000pF,則voltage spike=500V,所以我們需要另外使用緩衝電路來降低voltage spike,同樣的道理,緩衝電路的C越大則voltage spike越小。
但我們常看緩衝電路會有併聯一個電阻,這個電組主要作用是要確定C有放完電,這樣再下一個週期C才能發揮其作用,所以當R大到一定程度C會失去作用。
這裡放電時間可以用T=RC來計算。
switch power supply snubber circuit 學習經驗
之前主管開發的電源板,出現了個小問題.也就是有些版子在240V以上的供電電壓無法正常輸出.
經過快兩個月的電路了解,發現了幾個可改善的點,不外乎是更動變壓器以及mos fet 或者snubber 要更改.
以下就針對snubber的部分記錄.
電源板中可稱為snubber的,有三個部分.變壓器一次側,變壓器二次側,以及與MOS FET 並聯的電容.
首先說明MOSFET並聯電容,因為選用的電源IC是使用諧振技術,所以會和變壓器的電感,一次漏感以及MOS FET的Coss有關.漏感一般來說小會比較好,在變壓器方面可用三明治繞組方式降低漏感.
而當功能都正常以後,就要來看是否會有EMI的問題產生.
例如:在mosfet 旁並電容,emi可能會過但是供電電壓超過某個數值後,電路就不正常.
但是不並電容在高電壓也許可正常輸出電壓,可是emi又超標.
再來說明變壓器一,二次側的snubber
建議可以參考http://www.deyisupport.com/cfs-file.ashx/__key/telligent-evolution-components-attachments/00-24-01-00-00-06-00-97/snubber-design.pdf
二次側snubber的部分
我一開始先看看沒有snubber時的波形周期,然後在依建議事項加電容讓波形變成兩倍周期.
下圖是未加snuber的二次測波形,周期約42nS
下圖設計是使用2.2nF未加電阻的波形, 周期約101nS
而如果用1nF未加電阻,周期看來是90nF.所以不管哪個都和建議的兩倍周期差不多,那容值還是用2.2nF.
在來嘗試去更動電阻,下圖波形為一開始設計使用33 ohm配2.2nF.
後來依公式算出以10 ohm去測試,高電壓還是不工作.
一直測到以33k ohm高電壓才可正常工作.可是波形有明顯震盪看來會影響EMI.
下圖是1K ohm下的波形
PS:高壓和低壓的波形 二次測的波形都是一樣.所以在低壓下解就可以了.
經過快兩個月的電路了解,發現了幾個可改善的點,不外乎是更動變壓器以及mos fet 或者snubber 要更改.
以下就針對snubber的部分記錄.
電源板中可稱為snubber的,有三個部分.變壓器一次側,變壓器二次側,以及與MOS FET 並聯的電容.
首先說明MOSFET並聯電容,因為選用的電源IC是使用諧振技術,所以會和變壓器的電感,一次漏感以及MOS FET的Coss有關.漏感一般來說小會比較好,在變壓器方面可用三明治繞組方式降低漏感.
而當功能都正常以後,就要來看是否會有EMI的問題產生.
例如:在mosfet 旁並電容,emi可能會過但是供電電壓超過某個數值後,電路就不正常.
但是不並電容在高電壓也許可正常輸出電壓,可是emi又超標.
再來說明變壓器一,二次側的snubber
建議可以參考http://www.deyisupport.com/cfs-file.ashx/__key/telligent-evolution-components-attachments/00-24-01-00-00-06-00-97/snubber-design.pdf
二次側snubber的部分
我一開始先看看沒有snubber時的波形周期,然後在依建議事項加電容讓波形變成兩倍周期.
下圖是未加snuber的二次測波形,周期約42nS
下圖設計是使用2.2nF未加電阻的波形, 周期約101nS
而如果用1nF未加電阻,周期看來是90nF.所以不管哪個都和建議的兩倍周期差不多,那容值還是用2.2nF.
在來嘗試去更動電阻,下圖波形為一開始設計使用33 ohm配2.2nF.
後來依公式算出以10 ohm去測試,高電壓還是不工作.
一直測到以33k ohm高電壓才可正常工作.可是波形有明顯震盪看來會影響EMI.
下圖是1K ohm下的波形
PS:高壓和低壓的波形 二次測的波形都是一樣.所以在低壓下解就可以了.
2013年9月24日 星期二
Orcad 編輯模板(TitleBlock)
打開他人的文件, 在根目錄下的 Design Cache 找到你想要的 TitleBlock , 點選 TitleBlock 之後並且複製, 然後先開啟一個OLB檔案, 將剛剛的 TitleBlock 貼上去並且儲存OLB文件. 這樣你就有了 TitleBlock 模板. 最後開啟工作中的文件, 打開想要編輯的頁面, Place -> Title Block -> 開啟剛剛的OLB文件 -> 選取 Title Block -> 放置上去編輯文字 , 這樣就完成了.
如果想要增加logo 進去,請再tool bar中的place picture即可
如果想要增加logo 進去,請再tool bar中的place picture即可
2013年8月29日 星期四
可程式儀器標準命令 SCPI 初略使用 KIKUSUI PLZ-30F 範例
附註: 下列是使用於SCPI 指令中的符號通則。三角括弧(<>) 中是使用者指定的值。中括弧([]) 中的參數通常是可省略的。大括弧 ({}) 中則是指令參數。直線 (|) 用來分隔選項
如下所示
MEASure :VOLTage:DC? {|MIN|MAX|DEF},{|MIN|MAX|DEF}
請參閱M3500A儀器中文手冊中 有關SCPI指令部分,內容很詳細
http://www.docin.com/p-390481262.html
在試著控制PLZ-30F,要令儀器單獨只LOAD ON 一個Chanel.
以NI MAX軟體進行測試透過GPIB interface test,確認儀器有連接到.
在儀器視窗中點選communicate with Instrument,跳出視窗communicator
key in : INST:COUP? 然後按下Query或者按下Write 再Read
確認現在有幾個Chanel可接受指令控制,
或者直接INST:COUP NONE
將每個Chanel設為獨立狀態,這時顯示各個chneal面板的indep燈號會亮起.
如果你要令 x chanel輸出有兩個方法可達成
1.下 INST:FOC CHx 這時Chanel X面板上 ENTRY 燈號會閃爍
再下INP ON 該Chanel 的LOAD 燈號就會亮
2.下 INST CHx,再下INP ON 該Chanel 的LOAD 燈號就會亮
PS:如果使用*RST指令,以 INST:COUP? 查詢這時是全部的通道都有效
如下所示
MEASure :VOLTage:DC? {
以NI MAX軟體進行測試透過GPIB interface test,確認儀器有連接到.
在儀器視窗中點選communicate with Instrument,跳出視窗communicator
key in : INST:COUP? 然後按下Query或者按下Write 再Read
確認現在有幾個Chanel可接受指令控制,
或者直接INST:COUP NONE
將每個Chanel設為獨立狀態,這時顯示各個chneal面板的indep燈號會亮起.
如果你要令 x chanel輸出有兩個方法可達成
1.下 INST:FOC CHx 這時Chanel X面板上 ENTRY 燈號會閃爍
再下INP ON 該Chanel 的LOAD 燈號就會亮
2.下 INST CHx,再下INP ON 該Chanel 的LOAD 燈號就會亮
PS:如果使用*RST指令,以 INST:COUP? 查詢這時是全部的通道都有效
2013年8月27日 星期二
PADS LAYOUT 鋪銅後只顯示邊框 ,怎樣讓鋪銅區域顯示
使用PADS鋪銅後,存檔以後.下次再打開pcb檔案,當你再次Pour manager想要顯示鋪銅區域,發現只有鋪銅邊框出來,鋪銅區域沒有出來.出gerber也顯示不出來
特別是當你有多層板時,可能會發現有幾層有有幾層沒有.這是因為你有幾層屬性是設定Split/Mix層,所以還需要選擇Tool->Pour manager->Plane Connect,然後選擇那些層再按Start.這樣就會出現鋪銅區域了.出gerber也會顯示了.
強調一點,如果做了以上動作後,想要再修改回來現階段筆者還沒測試出如何改回來.
但是這個情況應該不需要再改回來.
特別是當你有多層板時,可能會發現有幾層有有幾層沒有.這是因為你有幾層屬性是設定Split/Mix層,所以還需要選擇Tool->Pour manager->Plane Connect,然後選擇那些層再按Start.這樣就會出現鋪銅區域了.出gerber也會顯示了.
強調一點,如果做了以上動作後,想要再修改回來現階段筆者還沒測試出如何改回來.
但是這個情況應該不需要再改回來.
2013年8月25日 星期日
All power APG-1005N labview GPIB控制
APG-1005N 一旦切換到RMT模式,就剩上下鍵可以使用,其他按鍵無效.
而且要脫離RMT模式只能重新斷電開機.
在學習過程中知道,GPIB最一般的指令是WRITE & READ.
而APG1005N中READ->READ 回傳的資訊是無效的,只有第一次回傳的是有用的.
另外你要得知現在機器狀態需先WRITE -> READ.而且如果嘗試用將指令用陣列方式WRITE,則只有第一個指令會有效,其他指令無效.
和APG1005N的溝通方式labview中可以使用VISA or GPIB or GPIB 488.2
下圖為VISA
下圖為GPIB 488.2
以下附上 可使用的labview 程式圖
APG-1005N POWER- ON/OFF
而且要脫離RMT模式只能重新斷電開機.
在學習過程中知道,GPIB最一般的指令是WRITE & READ.
而APG1005N中READ->READ 回傳的資訊是無效的,只有第一次回傳的是有用的.
另外你要得知現在機器狀態需先WRITE -> READ.而且如果嘗試用將指令用陣列方式WRITE,則只有第一個指令會有效,其他指令無效.
和APG1005N的溝通方式labview中可以使用VISA or GPIB or GPIB 488.2
下圖為VISA
以下附上 可使用的labview 程式圖
APG-1005N POWER- ON/OFF
APG-1005N SETING
APG-1005N display value
2013年8月15日 星期四
labview開發的.exe 出現Run-Time Engine error
當你使用別人開發的labview .exe檔 ,如果出現Run-Time Engine的警告.
都是沒裝labview 的Run-Time Engine 的工具.Run-Time Engine 有版本之分,所以要下載安裝時要注意版本
不然就是要找已經有包Run-Time Engine的安裝檔(Installe)但是有包Run-Time Engine 檔案會很大,所以自己再用的話不用每個都包成安裝檔,做成.exe就可以了
都是沒裝labview 的Run-Time Engine 的工具.Run-Time Engine 有版本之分,所以要下載安裝時要注意版本
不然就是要找已經有包Run-Time Engine的安裝檔(Installe)但是有包Run-Time Engine 檔案會很大,所以自己再用的話不用每個都包成安裝檔,做成.exe就可以了
2013年7月30日 星期二
EMC 實驗室743 & 966 差異
無論是EN55022還是ANSI63.4均規定test site的最小尺寸為2R X 1.73R(R是測量距離也就是我们说得3m或是10m),由這個公式我們不難看出一個被CE或FCC認可的實驗室一定是長和寬大於6m,高由於天線1~4m升降的原因同樣也要至少大於4m。故7x4x3的實驗室是一个非標準的實驗室。無法準確測量產品的EMI。
由於測試場地的對稱性和轉桌設計的最小尺寸的關係以及天線的高度的問题我们不難看出9X6X6是一个標準的3m測量實驗室。
那你可能會問为什麼測量長度是9m啊?法規不是規定6m就可以了吗?
根據圖片中的D的定義他是d(產品旋轉的離開轉桌中心點最大位置,通常我们以轉桌的半徑產品所能旋轉的最大位置1m)+2m,也就是说旋轉中心點距離金屬接地平板邊缘通常3m,旋轉中心距離接收天線3m(我们常说的3m測試),由於測試設置的對稱性接收天線距離金屬接地平板的另一邊缘也為3m。這樣算出了測試距離的長度為3+3+3=9m。
法規規定了測量場地的寬度基本上是接近6m,高度由於天線的原因,當天線升至4m时由於天線本身還有一個高度,故選擇6m
743是作為給廠商的產品一個EMI的輻射參考,可以大體的了解下產品的特性,例如電源都在30-300M左右,可以做產品的預測,OK後才拿到實驗室去做,順便出報告的,這樣可以减少測試费用。
而966是为標準的3M場地,其特性是符合標準要求
在實際使用中.743與966的區别,就是743不是法規認可的測試暗室.但是它可以作为客户在節约成本的方面提供很好的選擇.,并且743較966的造價還是要低很多的.有些刚刚起步的EMC實驗室大都選擇743.投入成本少,風險小(對於没有實力的)而2者的測試结果其實相差不大.法规中说測試數據要在966或OPEN SITE中測試出来才準確,但是很多實驗室一樣拿743的場地出報告
由於測試場地的對稱性和轉桌設計的最小尺寸的關係以及天線的高度的問题我们不難看出9X6X6是一个標準的3m測量實驗室。
那你可能會問为什麼測量長度是9m啊?法規不是規定6m就可以了吗?
根據圖片中的D的定義他是d(產品旋轉的離開轉桌中心點最大位置,通常我们以轉桌的半徑產品所能旋轉的最大位置1m)+2m,也就是说旋轉中心點距離金屬接地平板邊缘通常3m,旋轉中心距離接收天線3m(我们常说的3m測試),由於測試設置的對稱性接收天線距離金屬接地平板的另一邊缘也為3m。這樣算出了測試距離的長度為3+3+3=9m。
法規規定了測量場地的寬度基本上是接近6m,高度由於天線的原因,當天線升至4m时由於天線本身還有一個高度,故選擇6m
743是作為給廠商的產品一個EMI的輻射參考,可以大體的了解下產品的特性,例如電源都在30-300M左右,可以做產品的預測,OK後才拿到實驗室去做,順便出報告的,這樣可以减少測試费用。
而966是为標準的3M場地,其特性是符合標準要求
在實際使用中.743與966的區别,就是743不是法規認可的測試暗室.但是它可以作为客户在節约成本的方面提供很好的選擇.,并且743較966的造價還是要低很多的.有些刚刚起步的EMC實驗室大都選擇743.投入成本少,風險小(對於没有實力的)而2者的測試结果其實相差不大.法规中说測試數據要在966或OPEN SITE中測試出来才準確,但是很多實驗室一樣拿743的場地出報告
EMC 基礎知識
引用http://www.quatek.com.tw/service/application/EMC/EMC.htm
EMC(電磁相容)包含 EMI (電磁干擾) & EMS(電池耐受)
其中EMI又包含CE(傳導放射) 以及 RE(輻射放射),HARMONIC(電源諧波測試),FLICKER(電壓變動測試).
EMS(電磁耐受性)包含CS(傳導耐受) & RS(輻射耐受).測試項目有
EMC(電磁相容)包含 EMI (電磁干擾) & EMS(電池耐受)
其中EMI又包含CE(傳導放射) 以及 RE(輻射放射),HARMONIC(電源諧波測試),FLICKER(電壓變動測試).
EMS(電磁耐受性)包含CS(傳導耐受) & RS(輻射耐受).測試項目有
1.對電場、磁場之輻射耐受性測試
2.對電源線、控制線、訊號線、地線等注入干擾之傳導耐受性測試
3.對靜電放電和各種暫態電磁波(突波或電性快速暫態)之耐受性測試
IEC 1000-4-2 ESD靜電放電
IEC 1000-4-3輻射耐受性
IEC1000-4-4快速暫態與叢訊
IEC1000-4-5雷擊突波耐受性
IEC 1000-4-6傳導耐受性
IEC 1000-4-8電源頻率磁場
IEC 1000-4-11瞬降瞬斷電壓
2013年7月28日 星期日
bead(磁珠) & inductance(電感) 差異
引用 http://bbs.21dianyuan.com/30698.html,
http://www.52rd.com/Blog/Detail_RD.Blog_dell_13197.html
磁珠有很高的電阻率和磁導率,他等效於電阻和電感串聯,但電阻值和電感值都隨頻率變化。他比普通的電感有更好的高頻濾波特性,在高頻時呈現阻性,所以能在相當寬的頻率範圍內保持較高的阻抗,從而提高調頻濾波效果。
作為電源濾波,可以使用電感。磁珠的電路符號就是電感,但是型號上可以看出使用的是磁珠。在電路功能上,磁珠和電感是原理相同的,只是頻率特性不同罷了。
磁珠由氧磁體組成,電感由磁心和線圈組成,磁珠把交流信號轉化為熱能,電感把交流存儲起來,緩慢的釋放出去。
磁珠對高頻信號才有較大阻礙作用,一般規格有100歐/100mMHZ,它在低頻時電阻比電感小得多。
鐵氧體磁珠(FerriteBead)是目前應用發展很快的一種抗干擾元件,廉價、易用,濾除高頻雜訊效果顯著。
在電路中只要導線穿過它即可(我用的都是象普通電阻模樣的,導線已穿過並膠合,也有表面貼裝的形式,但很少見到賣的)。當導線中電流穿過時,鐵氧體對低頻電流幾乎沒有什麼阻抗,而對較高頻率的電流會產生較大衰減作用。高頻電流在其中以熱量形式散發,其等效電路為一個電感和一個電阻串聯,兩個元件的值都與磁珠的長度成比例。磁珠種類很多,製造商應提供技術指標說明,特別是磁珠的阻抗與頻率關係的曲線。
鐵氧體是磁性材料,會因通過電流過大而產生磁飽和,導磁率急劇下降。大電流濾波應採用結構上專門設計的磁珠,還要注意其散熱措施。
鐵氧體磁珠不僅可用於電源電路中濾除高頻雜訊(可用於直流和交流輸出),還可廣泛應用於其他電路,其體積可以做得很小。特別是在數位電路中,由於脈衝信號含有頻率很高的高次諧波,也是電路高頻輻射的主要根源,所以可在這種場合發揮磁珠的作用。
鐵氧體磁珠還廣泛應用於信號電纜的雜訊濾除。
磁珠的原理
磁珠的主要原料為鐵氧體。鐵氧體是一種立方晶格結構的亞鐵磁性材料。鐵氧體材料為鐵鎂合金或鐵鎳合金,它的製造工藝和機械性能與陶瓷相似,顏色為灰黑色。電磁干擾濾波器中經常使用的一類磁芯就是鐵氧體材料,許多廠商都提供專門用於電磁干擾抑制的鐵氧體材料。這種材料的特點是高頻損耗非常大,具有很高的導磁率,他可以是電感的線圈繞組之間在高頻高阻的情況下產生的電容最小。對於抑制電磁干擾用的鐵氧體,最重要的性能參數為磁導率μ和飽和磁通密度Bs。磁導率μ可以表示為複數,實數部分構成電感,虛數部分代表損耗,隨著頻率的增加而增加。因此,它的等效電路為由電感L和電阻R組成的串聯電路,L和R都是頻率的函數。當導線穿過這種鐵氧體磁芯時,所構成的電感阻抗在形式上是隨著頻率的升高而增加,但是在不同頻率時其機理是完全不同的。
在低頻段,阻抗由電感的感抗構成,低頻時R很小,磁芯的磁導率較高,因此電感量較大,L起主要作用,電磁干擾被反射而受到抑制,並且這時磁芯的損耗較小,整個器件是一個低損耗、高Q特性的電感,這種電感容易造成諧振因此在低頻段,有時可能出現使用鐵氧體磁珠後干擾增強的現象。
在高頻段,阻抗由電阻成分構成,隨著頻率升高,磁芯的磁導率降低,導致電感的電感量減小,感抗成分減小但是,這時磁芯的損耗增加,電阻成分增加,導致總的阻抗增加,當高頻信號通過鐵氧體時,電磁干擾被吸收並轉換成熱能的形式耗散掉。
鐵氧體抑制元件廣泛應用於印製電路板、電源線和資料線上。如在印製板的電源線入口端加上鐵氧體抑制元件,就可以濾除高頻干擾。鐵氧體磁環或磁珠專用於抑制信號線、電源線上的高頻干擾和尖峰干擾,它也具有吸收靜電放電脈衝干擾的能力。
磁珠的選用
1.磁珠的單位是歐姆,而不是亨特,這一點要特別注意。因為磁珠的單位是按照它在某一頻率產生的阻抗來標稱的,阻抗的單位也是歐姆。磁珠的DATASHEET上一般會提供頻率和阻抗的特性曲線圖,一般以100MHz為標準,比如1000R@100MHz,意思就是在100MHz頻率的時候磁珠的阻抗相當於600歐姆。
2.普通濾波器是由無損耗的電抗元件構成的,它在線路中的作用是將阻帶頻率反射回信號源,所以這類濾波器又叫反射濾波器。當反射濾波器與信號源阻抗不匹配時,就會有一部分能量被反射回信號源,造成干擾電平的增強。為解決這一弊病,可在濾波器的進線上使用鐵氧體磁環或磁珠套,利用滋環或磁珠對高頻信號的渦流損耗,把高頻成分轉化為熱損耗。因此磁環和磁珠實際上對高頻成分起吸收作用,所以有時也稱之為吸收濾波器。
不同的鐵氧體抑制元件,有不同的最佳抑制頻率範圍。通常磁導率越高,抑制的頻率就越低。此外,鐵氧體的體積越大,抑制效果越好。在體積一定時,長而細的形狀比短而粗的抑制效果好,內徑越小抑制效果也越好。但在有直流或交流偏流的情況下,還存在鐵氧體飽和的問題,抑制元件橫截面越大,越不易飽和,可承受的偏流越大。
EMI吸收磁環/磁珠抑制差模干擾時,通過它的電流值正比於其體積,兩者失調造成飽和,降低了元件性能;抑制共模干擾時,將電源的兩根線(正負)同時穿過一個磁環,有效信號為差模信號,EMI吸收磁環/磁珠對其沒有任何影響,而對於共模信號則會表現出較大的電感量。磁環的使用中還有一個較好的方法是讓穿過的磁環的導線反復繞幾下,以增加電感量。可以根據它對電磁干擾的抑制原理,合理使用它的抑制作用。
鐵氧體抑制元件應當安裝在靠近干擾源的地方。對於輸入/輸出電路,應儘量靠近遮罩殼的進、出口處。對鐵氧體磁環和磁珠構成的吸收濾波器,除了應選用高磁導率的有耗材料外,還要注意它的應用場合。它們在線路中對高頻成分所
呈現的電阻大約是十至幾百Ω,因此它在高阻抗電路中的作用並不明顯,相反,在低阻抗電路(如功率分配、電源或射頻電路)中使用將非常有效。
結論
由於鐵氧體可以衰減較高頻同時讓較低頻幾乎無阻礙地通過,故在EMI控制中得到了廣泛地應用。用於EMI吸收的磁環/磁珠可製成各種的形狀,廣泛應用於各種場合。如在PCB板上,可加在DC/DC模組、資料線、電源線等處。它吸收所在線路上高頻干擾信號,但卻不會在系統中產生新的零極點,不會破壞系統的穩定性。它與電源濾波器配合使用,可很好的補充濾波器高頻端性能的不足,改善系統中濾波特性。
http://www.52rd.com/Blog/Detail_RD.Blog_dell_13197.html
磁珠有很高的電阻率和磁導率,他等效於電阻和電感串聯,但電阻值和電感值都隨頻率變化。他比普通的電感有更好的高頻濾波特性,在高頻時呈現阻性,所以能在相當寬的頻率範圍內保持較高的阻抗,從而提高調頻濾波效果。
作為電源濾波,可以使用電感。磁珠的電路符號就是電感,但是型號上可以看出使用的是磁珠。在電路功能上,磁珠和電感是原理相同的,只是頻率特性不同罷了。
磁珠由氧磁體組成,電感由磁心和線圈組成,磁珠把交流信號轉化為熱能,電感把交流存儲起來,緩慢的釋放出去。
磁珠對高頻信號才有較大阻礙作用,一般規格有100歐/100mMHZ,它在低頻時電阻比電感小得多。
鐵氧體磁珠(FerriteBead)是目前應用發展很快的一種抗干擾元件,廉價、易用,濾除高頻雜訊效果顯著。
在電路中只要導線穿過它即可(我用的都是象普通電阻模樣的,導線已穿過並膠合,也有表面貼裝的形式,但很少見到賣的)。當導線中電流穿過時,鐵氧體對低頻電流幾乎沒有什麼阻抗,而對較高頻率的電流會產生較大衰減作用。高頻電流在其中以熱量形式散發,其等效電路為一個電感和一個電阻串聯,兩個元件的值都與磁珠的長度成比例。磁珠種類很多,製造商應提供技術指標說明,特別是磁珠的阻抗與頻率關係的曲線。
鐵氧體是磁性材料,會因通過電流過大而產生磁飽和,導磁率急劇下降。大電流濾波應採用結構上專門設計的磁珠,還要注意其散熱措施。
鐵氧體磁珠不僅可用於電源電路中濾除高頻雜訊(可用於直流和交流輸出),還可廣泛應用於其他電路,其體積可以做得很小。特別是在數位電路中,由於脈衝信號含有頻率很高的高次諧波,也是電路高頻輻射的主要根源,所以可在這種場合發揮磁珠的作用。
鐵氧體磁珠還廣泛應用於信號電纜的雜訊濾除。
磁珠的原理
磁珠的主要原料為鐵氧體。鐵氧體是一種立方晶格結構的亞鐵磁性材料。鐵氧體材料為鐵鎂合金或鐵鎳合金,它的製造工藝和機械性能與陶瓷相似,顏色為灰黑色。電磁干擾濾波器中經常使用的一類磁芯就是鐵氧體材料,許多廠商都提供專門用於電磁干擾抑制的鐵氧體材料。這種材料的特點是高頻損耗非常大,具有很高的導磁率,他可以是電感的線圈繞組之間在高頻高阻的情況下產生的電容最小。對於抑制電磁干擾用的鐵氧體,最重要的性能參數為磁導率μ和飽和磁通密度Bs。磁導率μ可以表示為複數,實數部分構成電感,虛數部分代表損耗,隨著頻率的增加而增加。因此,它的等效電路為由電感L和電阻R組成的串聯電路,L和R都是頻率的函數。當導線穿過這種鐵氧體磁芯時,所構成的電感阻抗在形式上是隨著頻率的升高而增加,但是在不同頻率時其機理是完全不同的。
在低頻段,阻抗由電感的感抗構成,低頻時R很小,磁芯的磁導率較高,因此電感量較大,L起主要作用,電磁干擾被反射而受到抑制,並且這時磁芯的損耗較小,整個器件是一個低損耗、高Q特性的電感,這種電感容易造成諧振因此在低頻段,有時可能出現使用鐵氧體磁珠後干擾增強的現象。
在高頻段,阻抗由電阻成分構成,隨著頻率升高,磁芯的磁導率降低,導致電感的電感量減小,感抗成分減小但是,這時磁芯的損耗增加,電阻成分增加,導致總的阻抗增加,當高頻信號通過鐵氧體時,電磁干擾被吸收並轉換成熱能的形式耗散掉。
鐵氧體抑制元件廣泛應用於印製電路板、電源線和資料線上。如在印製板的電源線入口端加上鐵氧體抑制元件,就可以濾除高頻干擾。鐵氧體磁環或磁珠專用於抑制信號線、電源線上的高頻干擾和尖峰干擾,它也具有吸收靜電放電脈衝干擾的能力。
磁珠的選用
1.磁珠的單位是歐姆,而不是亨特,這一點要特別注意。因為磁珠的單位是按照它在某一頻率產生的阻抗來標稱的,阻抗的單位也是歐姆。磁珠的DATASHEET上一般會提供頻率和阻抗的特性曲線圖,一般以100MHz為標準,比如1000R@100MHz,意思就是在100MHz頻率的時候磁珠的阻抗相當於600歐姆。
2.普通濾波器是由無損耗的電抗元件構成的,它在線路中的作用是將阻帶頻率反射回信號源,所以這類濾波器又叫反射濾波器。當反射濾波器與信號源阻抗不匹配時,就會有一部分能量被反射回信號源,造成干擾電平的增強。為解決這一弊病,可在濾波器的進線上使用鐵氧體磁環或磁珠套,利用滋環或磁珠對高頻信號的渦流損耗,把高頻成分轉化為熱損耗。因此磁環和磁珠實際上對高頻成分起吸收作用,所以有時也稱之為吸收濾波器。
不同的鐵氧體抑制元件,有不同的最佳抑制頻率範圍。通常磁導率越高,抑制的頻率就越低。此外,鐵氧體的體積越大,抑制效果越好。在體積一定時,長而細的形狀比短而粗的抑制效果好,內徑越小抑制效果也越好。但在有直流或交流偏流的情況下,還存在鐵氧體飽和的問題,抑制元件橫截面越大,越不易飽和,可承受的偏流越大。
EMI吸收磁環/磁珠抑制差模干擾時,通過它的電流值正比於其體積,兩者失調造成飽和,降低了元件性能;抑制共模干擾時,將電源的兩根線(正負)同時穿過一個磁環,有效信號為差模信號,EMI吸收磁環/磁珠對其沒有任何影響,而對於共模信號則會表現出較大的電感量。磁環的使用中還有一個較好的方法是讓穿過的磁環的導線反復繞幾下,以增加電感量。可以根據它對電磁干擾的抑制原理,合理使用它的抑制作用。
鐵氧體抑制元件應當安裝在靠近干擾源的地方。對於輸入/輸出電路,應儘量靠近遮罩殼的進、出口處。對鐵氧體磁環和磁珠構成的吸收濾波器,除了應選用高磁導率的有耗材料外,還要注意它的應用場合。它們在線路中對高頻成分所
呈現的電阻大約是十至幾百Ω,因此它在高阻抗電路中的作用並不明顯,相反,在低阻抗電路(如功率分配、電源或射頻電路)中使用將非常有效。
結論
由於鐵氧體可以衰減較高頻同時讓較低頻幾乎無阻礙地通過,故在EMI控制中得到了廣泛地應用。用於EMI吸收的磁環/磁珠可製成各種的形狀,廣泛應用於各種場合。如在PCB板上,可加在DC/DC模組、資料線、電源線等處。它吸收所在線路上高頻干擾信號,但卻不會在系統中產生新的零極點,不會破壞系統的穩定性。它與電源濾波器配合使用,可很好的補充濾波器高頻端性能的不足,改善系統中濾波特性。
2013年7月11日 星期四
單晶片中使用C標準函式庫 printf & scanf 用uart 輸入輸出
請參考http://www.cnblogs.com/liu_xf/archive/2011/04/14/2015726.html
c標準式庫中 的printf & sscanf 是標準輸出入 指的是PC monitor & keyboard
所以在單晶片使用時,就要修改PRINTF & SCANF 的底層 ,以 keil 操作stm32為例
比較簡單的做法是修改fputc & fgetc 兩個函數,因為這兩個分別是printf & scanf的底層實作.
只要在main.c OR uart.c 加入以下兩個函數,就可使用printf & scanf
/*******************************************************************************
* Function Name : int fputc(int ch, FILE *f)
* Description :
* Input : int ch, FILE *f
* Output :
* Return : int ch
*******************************************************************************/
int fputc(int ch, FILE *f)
{
USART1->DR = (u8) ch;
/* Loop until the end of transmission */
while(USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET)
{
}
return ch;
}
/*******************************************************************************
Function Name : fputc
Description : redefine getc function,use scanf with uart input
Input : FILE *f
Output :
* Return : int ch
********************************************************************************/
int fgetc(FILE *f)
{
while (USART_GetFlagStatus(USART1, USART_FLAG_RXNE) == RESET)
{}
return (int)USART_ReceiveData(USART1);
}
另外一種方法就是
2、添加Retarget.c,实现在KEIL下使用printf函数,以LPC2478为例
c標準式庫中 的printf & sscanf 是標準輸出入 指的是PC monitor & keyboard
所以在單晶片使用時,就要修改PRINTF & SCANF 的底層 ,以 keil 操作stm32為例
比較簡單的做法是修改fputc & fgetc 兩個函數,因為這兩個分別是printf & scanf的底層實作.
只要在main.c OR uart.c 加入以下兩個函數,就可使用printf & scanf
/*******************************************************************************
* Function Name : int fputc(int ch, FILE *f)
* Description :
* Input : int ch, FILE *f
* Output :
* Return : int ch
*******************************************************************************/
int fputc(int ch, FILE *f)
{
USART1->DR = (u8) ch;
/* Loop until the end of transmission */
while(USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET)
{
}
return ch;
}
/*******************************************************************************
Function Name : fputc
Description : redefine getc function,use scanf with uart input
Input : FILE *f
Output :
* Return : int ch
********************************************************************************/
int fgetc(FILE *f)
{
while (USART_GetFlagStatus(USART1, USART_FLAG_RXNE) == RESET)
{}
return (int)USART_ReceiveData(USART1);
}
另外一種方法就是
2、添加Retarget.c,实现在KEIL下使用printf函数,以LPC2478为例
首先在Keil安装目录下面ARM/Startup/Retarget.c找到Retarget.c文件将其复制到你的工程文件夹下面;并将其加入到工程中
在uart.c中添加如下代码
// Implementation of sendchar (also used by printf function to output data)
int sendchar (int ch) { // Write character to Serial Port
while (!(U0LSR & 0x20));
return (U0THR = ch);
} int getkey (void) { // Read character from Serial Port
while (!(U0LSR & 0x01));
return (U0RBR);
}
int sendchar (int ch) { // Write character to Serial Port
while (!(U0LSR & 0x20));
return (U0THR = ch);
} int getkey (void) { // Read character from Serial Port
while (!(U0LSR & 0x01));
return (U0RBR);
}
这样,只要在需要用printf的文件里#include 就可以了,printf会通过Retarget中的fputc函数调用sendchar来实现串口数据的输出。
事实上,和第一种的方式是一样的。
3、自定义printf函数,以AVR为例
前面介绍的是在KEIL编译器上使用printf函数,但不是所有的编译器平台都能适用,因此有时候我们需要自定义printf函数,下面以AVR在GCC下为例
在usart.c中添加如下代码
#include <stdio.h>
#include <stdarg.h>
/*********************************************************/
//向串口usart0发送一个字节函数
void Uart0_putchar( unsigned char sdbyte)
{
UDR0=sdbyte;
while(!(UCSR0A&0x40));
UCSR0A|=0x40;
}////////////////////////////////////////////////////////
void Uart0_printf(char *str,...)
{
char buf[128];
unsigned char i = 0;
va_list ptr;
va_start(ptr,str);
vsprintf(buf,str,ptr);
while(buf[i])
{
Uart0_putchar(buf[i]);
i++;
}
}
#include <stdarg.h>
/*********************************************************/
//向串口usart0发送一个字节函数
void Uart0_putchar( unsigned char sdbyte)
{
UDR0=sdbyte;
while(!(UCSR0A&0x40));
UCSR0A|=0x40;
}////////////////////////////////////////////////////////
void Uart0_printf(char *str,...)
{
char buf[128];
unsigned char i = 0;
va_list ptr;
va_start(ptr,str);
vsprintf(buf,str,ptr);
while(buf[i])
{
Uart0_putchar(buf[i]);
i++;
}
}
有了printf格式化输出函数,调试起来就方便多了。
說個題外話,當你使用stm32的uart 中斷時.中斷函式請將USART_ClearITPendingBit(USART1,USART_IT_RXNE);
加在scanf的函式後面,不然的話第一次接收的第一個字元都會接收不到.
說個題外話,當你使用stm32的uart 中斷時.中斷函式請將USART_ClearITPendingBit(USART1,USART_IT_RXNE);
加在scanf的函式後面,不然的話第一次接收的第一個字元都會接收不到.
2013年7月3日 星期三
Sony xperia acro S 充電座維修
拆開充電座後,裡面有一片電路板.
先敘述狀況,在未更新系統前.其實充電座充電情況就有些問題.
當初是使用行動電源的usb轉接線,發現有時會充電 有時則會斷電
後來換了一條線 情況是有改善,所以那時齁應該是現本身有問題
但是更新系統之後,接上線一直都沒辦法充電.
拆開內部後,不管機構.
在usb 的D-的電位 一直都是low 所以之後的電源開關電路的電位一直都是low所以電源開關ic的觸發pin都保持在high沒辦法啟動
另外D+的電位也是一直都是low,板子上接到D+的電路是經過分壓電路後再接到D+ PIN
所以是否因為分壓電路的電壓關係 令D+的電壓不足.導致D-的電壓也不足
先敘述狀況,在未更新系統前.其實充電座充電情況就有些問題.
當初是使用行動電源的usb轉接線,發現有時會充電 有時則會斷電
後來換了一條線 情況是有改善,所以那時齁應該是現本身有問題
但是更新系統之後,接上線一直都沒辦法充電.
拆開內部後,不管機構.
在usb 的D-的電位 一直都是low 所以之後的電源開關電路的電位一直都是low所以電源開關ic的觸發pin都保持在high沒辦法啟動
另外D+的電位也是一直都是low,板子上接到D+的電路是經過分壓電路後再接到D+ PIN
所以是否因為分壓電路的電壓關係 令D+的電壓不足.導致D-的電壓也不足
2013年5月27日 星期一
嵌入式c 數字轉字串 字串轉數字
數字轉字串:
網路上查到數字轉字串的方法,可以使用C的標準函式庫stdlib.h函式 char * itoa ( int value, char * str, int base );
強調一點這個函式算是window系統下特例的函式 無法跨平台使用.
所以使用stdio.h 另外兩個函式 printf () & sprintf() or snprintf()
1. int printf ( const char * format, ... );
對 標準輸出裝置stdout (如螢幕) 的格式化輸出,在x86 的PC平台上 標準輸出(stdout)都是Monitor.
而在嵌入式平台則要看complier設定,一般都要動到很底層的code 工程浩大.
2 .int sprintf ( char * str, const char * format, ... );.
將格式化的輸出結果存入 字串變數(如 str ),也就是說字串結果存到自訂 buffer 中,
之後再用自訂函數 putuart() 之類的,把buffer的data,看要傳到uart 或其他週邊使用.
3. int snprintf ( char * s, size_t n, const char * format, ... );
snprintf() 類似 sprintf(),只是多了一個size參數;這個參數的用處,就是用來限制最大的寫入資料量,可以用來避免 buffer overflow。
字串轉數字
C標準函式庫中stdlib.h中
1. double atof (const char* str); 將數字字串轉後成 double 型態的數字
2.int atoi (const char * str); 將數字字串轉後成 int 型態的數字
3.long int atol ( const char * str );
4.long long int atoll ( const char * str );
5.double strtod (const char* str, char** endptr);將字串中的數字轉換成 double 型態的數字,非數字部份以另一字串儲存
6.long int strtol (const char* str, char** endptr, int base);將字串中的數字轉換成 long 型態的數字,非數字部份以另一字串儲存
網路上查到數字轉字串的方法,可以使用C的標準函式庫stdlib.h函式 char * itoa ( int value, char * str, int base );
強調一點這個函式算是window系統下特例的函式 無法跨平台使用.
所以使用stdio.h 另外兩個函式 printf () & sprintf() or snprintf()
1. int printf ( const char * format, ... );
對 標準輸出裝置stdout (如螢幕) 的格式化輸出,在x86 的PC平台上 標準輸出(stdout)都是Monitor.
而在嵌入式平台則要看complier設定,一般都要動到很底層的code 工程浩大.
2 .int sprintf ( char * str, const char * format, ... );.
將格式化的輸出結果存入 字串變數(如 str ),也就是說字串結果存到自訂 buffer 中,
之後再用自訂函數 putuart() 之類的,把buffer的data,看要傳到uart 或其他週邊使用.
3. int snprintf ( char * s, size_t n, const char * format, ... );
snprintf() 類似 sprintf(),只是多了一個size參數;這個參數的用處,就是用來限制最大的寫入資料量,可以用來避免 buffer overflow。
字串轉數字
C標準函式庫中stdlib.h中
1. double atof (const char* str); 將數字字串轉後成 double 型態的數字
2.int atoi (const char * str); 將數字字串轉後成 int 型態的數字
3.long int atol ( const char * str );
4.long long int atoll ( const char * str );
5.double strtod (const char* str, char** endptr);將字串中的數字轉換成 double 型態的數字,非數字部份以另一字串儲存
6.long int strtol (const char* str, char** endptr, int base);將字串中的數字轉換成 long 型態的數字,非數字部份以另一字串儲存
2013年5月6日 星期一
STM8 I2C溝通 MASTER MODE READ
void I2C_Config(void)
{
I2C_DeInit();
// I2C_Init(400000, 0x92,I2C_DUTYCYCLE_2, I2C_ACK_CURR, I2C_ADDMODE_10BIT, (uint8_t)16 ); //flow sensor
I2C_Init(400000,0x92,I2C_DUTYCYCLE_2, I2C_ACK_CURR, I2C_ADDMODE_7BIT, (uint8_t)16 ); //pressure sensor
}
void I2C_Read_Honeywell(u8* pBuffer,u8 ReadAddr,u8 NumByteToRead)
{
I2C_Cmd(ENABLE);
I2C_GenerateSTART(ENABLE);
/* Test on EV5 and clear it */
while(!I2C_CheckEvent(I2C_EVENT_MASTER_MODE_SELECT));
{
}
/* Send address for read */
I2C_Send7bitAddress(ReadAddr,I2C_DIRECTION_RX);
/* Test on EV6 and clear it */
while(!I2C_CheckEvent(I2C_EVENT_MASTER_RECEIVER_MODE_SELECTED));
{
}
/* While there is data to be read */
while(NumByteToRead)
{
if(NumByteToRead == 1)
{
I2C_AcknowledgeConfig(I2C_ACK_NONE);
I2C_GenerateSTOP(ENABLE);
}
if(I2C_CheckEvent(I2C_EVENT_MASTER_BYTE_RECEIVED))
{
/* Read a byte from the EEPROM */
*pBuffer = I2C_ReceiveData();
pBuffer++;
}
NumByteToRead--;
}
/* Enable Acknowledgement to be ready for another reception */
I2C_AcknowledgeConfig(I2C_ACK_CURR);
}
簡單的絕對值轉換 c
#include
int main (void)
{
int a;
//puts("請輸入整數:");
printf("請輸入整數:"); scanf("%d",&a);
//printf("整數b:"); scanf("%f",&b);
if(a>0)
{
printf("其絕對值為: %d \n",a);
return (1);
}
else
{
printf("其絕對值為: %d \n",-a);
return (2);
}
return (0);
}
或者使用c的標準函式庫 math.h中的cabs函式
C 取值到小數點第二位,並將各數字存到個別變數
#include
#include
int main(void)
{
int i,j,k,l,a;
float y=123.5223454;
/*取到小數點後二位*/
a=(double)(int)(y*100)/100;
/*個別存數字至變數*/
i=(int)y/10;
j=(int)y%10;
k=(int)(y*10)%10;
l=(int)(y*100)%10;
printf("W=%d\n",i);
printf("X=%d\n",j);
printf("Y=%d\n",k);
printf("Z=%d\n",l);
return(0);
}
2013年4月21日 星期日
STM8 Uart接收的問題
中斷過程中,最好等資料都收集完成,在監控
如果在中斷中監控,資料會有遺失的問題
****stm8 uart 字串接收副程式****
uint8_t IncrementVar_RxCounter1(void) { return RxCounter1++; }
u8 uart1_sync=0; //要設定全域變數,不然case1 進不去.
INTERRUPT_HANDLER(UART1_RX_IRQHandler, 18)
{
u8 data,;
//RxBuffer[IncrementVar_RxCounter1()]
UART1_ClearITPendingBit(UART1_IT_RXNE_OR);
data=UART1_ReceiveData8();
switch(uart1_sync)
{
case 1:
RxBuffer[IncrementVar_RxCounter1()]= data;
//uart1_in_temp_index %= UART1_BUF_SIZE;
if(data==0x0d)
{
RxBuffer[IncrementVar_RxCounter1()] =data;
//uart1_in_temp_index %= UART1_BUF_SIZE;
RxCounter1 = 0x00;
uart1_sync = 0;
}
break;
default:
switch(data)
case '%':
uart1_sync = 1;
RxBuffer[IncrementVar_RxCounter1()] = data;
//uart1_in_temp_index %= UART1_BUF_SIZE;
break;
break;
}
}
****stm8 uart 字串傳輸副程式****
void UART1_SendByte(u8 Data)
{
UART1_SendData8((unsigned char)Data);
while (UART1_GetFlagStatus(UART1_FLAG_TXE)==RESET);
{
}
}
void UART1_SendString(u8* Data,u16 len)
{
u16 i=0;
for(;i {
UART1_SendByte(Data[i]);
}
}
如果在中斷中監控,資料會有遺失的問題
****stm8 uart 字串接收副程式****
uint8_t IncrementVar_RxCounter1(void) { return RxCounter1++; }
u8 uart1_sync=0; //要設定全域變數,不然case1 進不去.
INTERRUPT_HANDLER(UART1_RX_IRQHandler, 18)
{
u8 data,;
//RxBuffer[IncrementVar_RxCounter1()]
UART1_ClearITPendingBit(UART1_IT_RXNE_OR);
data=UART1_ReceiveData8();
switch(uart1_sync)
{
case 1:
RxBuffer[IncrementVar_RxCounter1()]= data;
//uart1_in_temp_index %= UART1_BUF_SIZE;
if(data==0x0d)
{
RxBuffer[IncrementVar_RxCounter1()] =data;
//uart1_in_temp_index %= UART1_BUF_SIZE;
RxCounter1 = 0x00;
uart1_sync = 0;
}
break;
default:
switch(data)
case '%':
uart1_sync = 1;
RxBuffer[IncrementVar_RxCounter1()] = data;
//uart1_in_temp_index %= UART1_BUF_SIZE;
break;
break;
}
}
****stm8 uart 字串傳輸副程式****
void UART1_SendByte(u8 Data)
{
UART1_SendData8((unsigned char)Data);
while (UART1_GetFlagStatus(UART1_FLAG_TXE)==RESET);
{
}
}
void UART1_SendString(u8* Data,u16 len)
{
u16 i=0;
for(;i
UART1_SendByte(Data[i]);
}
}
2013年4月18日 星期四
C 字串比較程式 ,可使用陣列去比較
STM8的範例 擷取出來的
/**
* @brief Compares two buffers.
* @param[in] pBuffer1 First buffer to be compared.
* @param[in] pBuffer2 Second buffer to be compared.
* @param[in] BufferLength Buffer's length
* @retval TestStatus Status of buffer comparison
* - PASSED: pBuffer1 identical to pBuffer2
* - FAILED: pBuffer1 differs from pBuffer2
* @par Required preconditions:
* None
*/
TestStatus Buffercmp(uint8_t* pBuffer1, uint8_t* pBuffer2, uint16_t BufferLength)
{
while (BufferLength--)
{
if (*pBuffer1 != *pBuffer2)
{
return FAILED;
}
pBuffer1++;
pBuffer2++;
}
return PASSED;
}
/**
* @brief Compares two buffers.
* @param[in] pBuffer1 First buffer to be compared.
* @param[in] pBuffer2 Second buffer to be compared.
* @param[in] BufferLength Buffer's length
* @retval TestStatus Status of buffer comparison
* - PASSED: pBuffer1 identical to pBuffer2
* - FAILED: pBuffer1 differs from pBuffer2
* @par Required preconditions:
* None
*/
TestStatus Buffercmp(uint8_t* pBuffer1, uint8_t* pBuffer2, uint16_t BufferLength)
{
while (BufferLength--)
{
if (*pBuffer1 != *pBuffer2)
{
return FAILED;
}
pBuffer1++;
pBuffer2++;
}
return PASSED;
}
2013年4月15日 星期一
2013年4月1日 星期一
PLC FX 如何連接 MCU
打算要透過FX上面一個8PIN的介面和透過MCU的UART做溝通
但是去查了相關資訊 那個8PIN的介面是屬於RS422,這一般工業控制上常會用到
比如阿坤做的模擬器 以及書宏後來眼身的機器 都是使用一條8轉25PIN,再搭配一個RS422轉RS232的硬體介面(25PIN 轉25PIN),就個人猜測可能是MAX485 以及MAX232
先將PLC的訊號介面RS422 轉換成TTL的類型,然後再轉換成RS232,來讓PC可以溝通.
所以這時候如果PLC要接到MCU,只要可以將RS422轉換成TTL的類型,就可透過內部的UART 溝通了.
另外這一條RS422轉RS232的硬體介面也太好賺了吧.我算一算成本價也才200而已吧!!
竟然可以賣到一千多塊還真是坑人!!
2013年1月13日 星期日
關鍵對話 重點
我們面臨前所未有的十字路口,一條通往絕望,一條通往徹底的毀滅.讓我們祈禱自己有足夠的智慧做出正確的抉擇. 伍迪 艾倫
從心開始 專注你想要的
從我開始---記住,你可以控制的人只有你自己一人
專注於你真正想要的--當你發現自己逐漸沉默,或有訴諸語言暴力的衝動時,停下來將注意力放在你的動機上
從我的行為上顯示,我的動機是什麼??
釐清你真正想要的 我要我自己做什麼?要他人做什麼?要這段關係做什麼??
最後問問自己:如果這是我想要的 我應該如何表現??
拒絕非A即B的選擇
當你考慮清楚自己想要的事物後,千萬不要掉入非A即B的選擇
觀察自己,是否有告訴自己要在和平與誠實之間做選擇,在贏或輸之間做選擇
尋找兩全其美的A與B同時存在,打破所有非A即B的選擇
釐清你不想要的有哪些,將他加入你的清單中,接著要求你的大腦開始尋找健康的方式來開啟對話
學習觀察-如何注意何時安全出現危機
學習發現關鍵對話的開端
學習尋找出安全問題的警訊
如果是安全的情況你可以暢所欲言但是不要讓安全的問題將你帶離軌道
對話需要語意的流動
沉默與語言暴力
沉默型式包含掩飾,避免,撤退
語言暴力包含控制,貼標籤,攻擊
學習注意內容與狀況
尋找事情變的關鍵的時點
學習尋找安全亮起紅燈的警訊
觀察其他人是否有往沉默以及語言暴力的傾向
尋找你壓力風格的爆發點
保持安全---如何創造暢所欲言的安全氛圍
後退一步
決定出在哪些狀況中,安全瀕臨危險邊緣
共同目的:其他人是否相信你在乎他們在這場對話中的目的??他們是否信任你的動機
共同尊重:其他人是否相信你是尊重他們的
適時道歉
如果你明顯違反了尊重原則,記得道歉
運用對比法
當其他人誤會你的目的或意圖時,使用對比法由你[ 不想 ]或 [ 沒有...........的意思]開始
,接著在解釋你真正想要的或實際的意圖
以CRIB法獲取共同目的
承諾(Commit)尋找目的
確認(Recognize)尋找共同目的
發明(Invent)出共同目的
腦力激盪(Brainstorm)構思新策略
主導我的故事-
如果強烈的情緒將你困在[沉默]或[語言暴力]之中,試試以下方法
追朔你的行為路徑
注意你的行為.如果你發現自己從對話中離開,問問你自己到底在做什麼
我現在是不是處在某種形式的沉默或語言暴力之中??
與你現在的感覺保持聯繫.學習準確的找出你故事背後所隱含的的情緒.
什麼樣的情緒促使我有這樣的行為表現??
分析你的故事.質疑你自己的結論,並且尋找故事背後其他可能的解釋.
是什麼樣的故事讓我產生這些情緒??
回到現實.將事實與你編造的故事區分開來,放棄你對自己故事的絕對堅持
我有什麼證據可以支持我的故事?
尋找巧妙的故事.受害者,壞人以及無助者故事事最常見的故事類型
說出故事的其餘部分
問問自己:我是不是假裝沒有注意到自己在問題中所扮演的角色
為什麼一個講理明理而正派的人會這樣?
我真正要的是什麼?
如果我真的想要這些結果,我此刻應該做些什麼??
用STATE法陳述路徑--如何以有說服力而非惱人的方式說話
分享(Share)你的事實.由你的行為路徑中,最不具異議,最有說服力的部分開始說起
說出(Tell)你的故事.解釋你開始做了什麼樣的推論.
邀請(Ask)他人表達他們的行為路徑.鼓勵其他人分享他們的故事以及事實.
嘗試性的進行談論(Talk).將你的故事當作一個[故事]來陳述,不要將它假裝為事實.
鼓勵(Encourage)他人嘗試分享.保持安全氛圍,讓其他人也能夠表達不同,甚至相反的意見.
追溯他人的路徑
為了鼓勵語意的自由流動,避免他們掉入[沉默]或事[暴力語言],必須追溯他們的行為路徑.從好奇且耐煩的態度開始,這將可以協助你重建安全氛圍.
接著使用具有威力的傾聽技巧來探索他人通往行動的路徑.
邀請(Ask)他人分享.首先,表達出對其他人觀點的興趣.
反射(Mirror).尊重地接收他人嘗試表達的情緒,藉此增加安全氛圍.
釋義(Paraphrase).當其他人開始分享他或他的故事時,將你聽到的話重述整理,向對方顯示你的了解,而且讓他們感覺到與你分享他們的想法是安全的.
猜測語意(Prime).如果對方持續有所保留.你可以猜測語意.盡你所能的去猜測他們可能有的想法及感受.
當你開始分享你的觀點,記得做到:
同意(Agree).當你同意時,適時將你的同意表達出來.
補充(Build):如果對方故是中有所遺漏,對你同意的部分表示同意,並且進行補充.
比較(Compare):當你們的看法有顯著的不同時,不要暗示別人是錯的,必須比較雙方的觀點與想法
開始行動
將你的成功的關鍵對話轉變為絕佳的的決策以及一致的行動,切記要避免[違反期望]與[無所作為]兩種陷阱
決定[如何]決定
命令:決策的行程沒有其他人參與
諮詢:遊團體收集資訊,並由其中一小部分的人做決定
投票:有團體中某比例的人數同意來決定決策
共識:每位成員都同意,並且支持最後的決策
清楚地結束
決定誰在什麼時候做哪些事,講上述事項清楚傳遞.訂出一個後續追蹤的時間,記錄大家承諾的事項,並且持續追蹤.最後,讓人們對自己做出的承諾負責.
好記性比不是爛筆頭
從心開始 專注你想要的
從我開始---記住,你可以控制的人只有你自己一人
專注於你真正想要的--當你發現自己逐漸沉默,或有訴諸語言暴力的衝動時,停下來將注意力放在你的動機上
從我的行為上顯示,我的動機是什麼??
釐清你真正想要的 我要我自己做什麼?要他人做什麼?要這段關係做什麼??
最後問問自己:如果這是我想要的 我應該如何表現??
拒絕非A即B的選擇
當你考慮清楚自己想要的事物後,千萬不要掉入非A即B的選擇
觀察自己,是否有告訴自己要在和平與誠實之間做選擇,在贏或輸之間做選擇
尋找兩全其美的A與B同時存在,打破所有非A即B的選擇
釐清你不想要的有哪些,將他加入你的清單中,接著要求你的大腦開始尋找健康的方式來開啟對話
學習觀察-如何注意何時安全出現危機
學習發現關鍵對話的開端
學習尋找出安全問題的警訊
如果是安全的情況你可以暢所欲言但是不要讓安全的問題將你帶離軌道
對話需要語意的流動
沉默與語言暴力
沉默型式包含掩飾,避免,撤退
語言暴力包含控制,貼標籤,攻擊
學習注意內容與狀況
尋找事情變的關鍵的時點
學習尋找安全亮起紅燈的警訊
觀察其他人是否有往沉默以及語言暴力的傾向
尋找你壓力風格的爆發點
保持安全---如何創造暢所欲言的安全氛圍
後退一步
決定出在哪些狀況中,安全瀕臨危險邊緣
共同目的:其他人是否相信你在乎他們在這場對話中的目的??他們是否信任你的動機
共同尊重:其他人是否相信你是尊重他們的
適時道歉
如果你明顯違反了尊重原則,記得道歉
運用對比法
當其他人誤會你的目的或意圖時,使用對比法由你[ 不想 ]或 [ 沒有...........的意思]開始
,接著在解釋你真正想要的或實際的意圖
以CRIB法獲取共同目的
承諾(Commit)尋找目的
確認(Recognize)尋找共同目的
發明(Invent)出共同目的
腦力激盪(Brainstorm)構思新策略
主導我的故事-
如果強烈的情緒將你困在[沉默]或[語言暴力]之中,試試以下方法
追朔你的行為路徑
注意你的行為.如果你發現自己從對話中離開,問問你自己到底在做什麼
我現在是不是處在某種形式的沉默或語言暴力之中??
與你現在的感覺保持聯繫.學習準確的找出你故事背後所隱含的的情緒.
什麼樣的情緒促使我有這樣的行為表現??
分析你的故事.質疑你自己的結論,並且尋找故事背後其他可能的解釋.
是什麼樣的故事讓我產生這些情緒??
回到現實.將事實與你編造的故事區分開來,放棄你對自己故事的絕對堅持
我有什麼證據可以支持我的故事?
尋找巧妙的故事.受害者,壞人以及無助者故事事最常見的故事類型
說出故事的其餘部分
問問自己:我是不是假裝沒有注意到自己在問題中所扮演的角色
為什麼一個講理明理而正派的人會這樣?
我真正要的是什麼?
如果我真的想要這些結果,我此刻應該做些什麼??
用STATE法陳述路徑--如何以有說服力而非惱人的方式說話
分享(Share)你的事實.由你的行為路徑中,最不具異議,最有說服力的部分開始說起
說出(Tell)你的故事.解釋你開始做了什麼樣的推論.
邀請(Ask)他人表達他們的行為路徑.鼓勵其他人分享他們的故事以及事實.
嘗試性的進行談論(Talk).將你的故事當作一個[故事]來陳述,不要將它假裝為事實.
鼓勵(Encourage)他人嘗試分享.保持安全氛圍,讓其他人也能夠表達不同,甚至相反的意見.
追溯他人的路徑
為了鼓勵語意的自由流動,避免他們掉入[沉默]或事[暴力語言],必須追溯他們的行為路徑.從好奇且耐煩的態度開始,這將可以協助你重建安全氛圍.
接著使用具有威力的傾聽技巧來探索他人通往行動的路徑.
邀請(Ask)他人分享.首先,表達出對其他人觀點的興趣.
反射(Mirror).尊重地接收他人嘗試表達的情緒,藉此增加安全氛圍.
釋義(Paraphrase).當其他人開始分享他或他的故事時,將你聽到的話重述整理,向對方顯示你的了解,而且讓他們感覺到與你分享他們的想法是安全的.
猜測語意(Prime).如果對方持續有所保留.你可以猜測語意.盡你所能的去猜測他們可能有的想法及感受.
當你開始分享你的觀點,記得做到:
同意(Agree).當你同意時,適時將你的同意表達出來.
補充(Build):如果對方故是中有所遺漏,對你同意的部分表示同意,並且進行補充.
比較(Compare):當你們的看法有顯著的不同時,不要暗示別人是錯的,必須比較雙方的觀點與想法
開始行動
將你的成功的關鍵對話轉變為絕佳的的決策以及一致的行動,切記要避免[違反期望]與[無所作為]兩種陷阱
決定[如何]決定
命令:決策的行程沒有其他人參與
諮詢:遊團體收集資訊,並由其中一小部分的人做決定
投票:有團體中某比例的人數同意來決定決策
共識:每位成員都同意,並且支持最後的決策
清楚地結束
決定誰在什麼時候做哪些事,講上述事項清楚傳遞.訂出一個後續追蹤的時間,記錄大家承諾的事項,並且持續追蹤.最後,讓人們對自己做出的承諾負責.
好記性比不是爛筆頭
訂閱:
文章 (Atom)