一種線型組網的三線制數據測量方法
1.2 工作原理
主機啟動一次數據采集時,首先閉合開關J1,總線VCC 得電,所有單元同時上電,單元內的單片機開始工作。單元的工作分為待機、工作、透傳3種模式。上電后,所有單元進入待機模式,主機先向距離最近的1#單元發(fā)出啟動脈沖,1#單元由“待機”轉為“工作”模式,它會啟動傳感器,點亮指示燈L1,表示本單元是活動的,這時,主機可以與1#單元進行直接的通信,命令1#單元的進行測量并讀取數據,完畢后,主機發(fā)送結束脈沖,命令1#單元結束活動態(tài)。1#單元在向2#單元發(fā)送啟動脈沖后進入透傳模式。于是,收到1#發(fā)出的啟動脈沖,2#單元成為活動單元,點亮指示燈L1,進入工作模式。由于1#單元的透傳作用,主機可以直接跟2#單元通信,直到2#單元收到結束指令后,它啟動下個單元,然后自己變成透傳,這樣依次類推,各個單元逐個變成活動單元,主機總是透過已經變成透傳模式的單元,直接與活動單元進行通信,獲取數據,直到全部單元都完成數據采集。
因此,在整個三線制網絡中,只有一個是活動單元,活動單元前面,是完成了數據采集變成透傳模式的單元;在活動單元后面,是等待啟動的待機單元。主機能夠直接與活動單元聯系,使用靈活約定的協議和速率,是本文提出三線制線狀組網的一大優(yōu)勢。
主機與活動單元通信時,可以直接使用單片機的串口通信模式,在數據量小的時候,約定使用較低的波特率可以獲得較遠的傳送距離。用來啟動和停止單元工作的脈沖命令,可以有2種形式:
?。?)直接使用串行通信來改變單元的工作模式,只要約定主機下發(fā)給單元的串行數據命令字即可,例如約定0X55為啟動命令,0XAA為停止命令;(2)使用脈沖寬度控制,只要命令脈沖與通信波特率通信脈沖有明顯區(qū)別不產生混淆就可以,例如波特率使用1 200,啟動和停止脈沖使用寬度為30 ms的低電平。
1.3 特點分析
總結上述闡述,本文提出的三線制線狀組網具有如下特點:
(1)自帶電源:三線中有一根電源線,所有單元可以直接授電;(2)功耗低:工作過程中,只有一個單元是活動的,處于待機和透傳模式的單元,可以關閉所轄傳感器的供電,只讓單片機帶電,如果使用MSP433 超低功耗單片機,100個單元的功耗也不會超過1 mA.
(3)協議靈活:主機是通過透傳單元直接與活動單元通信,允許系統(tǒng)搭建者使用自己約定的通信協議;(4)傳送距離遠:主機是通過接力與每個單元通信的,只要每個單元之間能有效傳送,多個單元構成的整個系統(tǒng)就能正常工作。
?。?)擴展方便:當需要模式量傳送時,只要再增加一條總線,每個單元增加模擬開關,活動單元把模擬開關閉合,該單元的模擬量就可以上傳到總線上,送給主機。
(6)無需單元編號:主機是順序與各個單元建立聯系的,所有單元完全一樣,沒有地址編號環(huán)節(jié),適合批量生產制作。
2 程序編制
下面是主機和單元的程序編制流程與說明。
主機程序流程如下:
?、偕想姟诘却杉瘯r間到→③啟動供電開關J1→④發(fā)出啟動命令→⑤等待單元發(fā)回應答→⑥與單元通信完成采集→⑦發(fā)出結束命令→⑧判斷單元是否全部完成采集→⑨關閉J1供電→回到②等待下次采集。
其中,在⑤如果等不到單元發(fā)回的確認,要回到斷開J1 回到③重新開始,如果多次重復均不成功,要做出錯處理;在第⑧步,如果單元采集沒有完成,則回到第⑤等待下個單元的回復確認。
對于每天只有幾次采集的低頻度情形,可使用低功耗定時振蕩器,用硬件電路控制主機的CPU供電,達到采集時刻主機才上電工作1次,大大降低功耗,適合在野外現場做數據采集。
單元程序流程如下:
?、偕想姟诘却龁用睢蹎觽鞲衅鞑杉瘮祿?點亮L1/與主機通信/完成數據采集→④等待結束命令→⑤向下個單元發(fā)送啟動命令→⑥進入透傳模式。
其中透傳模式的編程框圖見圖3,思路如下:
?。?)透傳的含義是既可以從接收主機方向數據傳給后面的單元,也可以從后面單元接收數據傳給主機(2)認為常態(tài)是高電平,不停檢測左右兩邊的電平,為高時表示沒有數據傳遞。
?。?)無論在哪個方向檢測到低電平,都立即把低電平傳輸到另一個方向,直到這個低電平消失,便取消另一個方向的低電平。
3 傳送距離
傳送距離受透傳單元引入的脈沖寬度失真和單元電壓跌落兩個因素影響,下面分別討論。
3.1 透傳單元對脈沖的寬度的失真
單元之間傳輸延遲如圖4 所示,命令由第N - 1 單元傳向第N 單元,在t1 時刻發(fā)出,t2 時刻結束,寬度為T1.線路電容等帶來脈沖的下降和上升時間,第N 單元認定的翻轉時刻,由該單元的輸入端閾值決定,它認定的寬度為T2.同樣道理,這個寬度傳送到N + 1 單元時被認定為T3.T1,T2 ,T3 會有差異,造成脈寬逐級失真,超過一定限度就無法正確通信(串口專用11.059M 晶體用12M代替就無法工作,這時誤差僅為8%)。解決逐級失真的辦法有兩個:
(1)加快脈沖上升下降時間,可在單元的信號線加上拉電阻。上拉電阻的最小值,要保證它灌入的電流小于單片機能吸入電流的最大值;上拉電阻的最大值,要考慮它與信號線電容的時間常數小于通信脈寬的10%.例如,100 m的單元距離,按照普通絞線100 pF/m的分布電容,C = 100 pF×100=0.01 μF,如果使用1 200波特率,信號脈寬800 μs,則時間常數應小于80 μs,用τ = RC 計算,上拉電阻R = τ C = 80 μs /0.01μF =8 kΩ。按照經驗這個數值是可以用于單片機上拉的。
評論