讀寫計數器,即先寫出計數器上面的數,然後再分別把它們讀出來。把這個數按從小到大順序進行排列。
基本介紹
- 中文名:讀寫計數器
- 外文名:read-write counter
- 套用:機械
無鎖存功能脈衝計數器的改進讀取方法,四倍頻與計數,問題的產生,問題的處理,PLC動態並行執行的定時和計數控制模組設計,定時和計數控制模組的結構設計,連線埠讀寫控制器結構及讀寫時序設計,
無鎖存功能脈衝計數器的改進讀取方法
在電機伺服控制系統中,需要一個脈衝計數器對電機碼盤輸出的脈衝進行計數。單片機根據脈衝的個數和電機旋轉方向計算出電機的轉角,進而實現對電機的伺服控制。如果脈衝計數器沒有數據鎖存功能,且單片機讀取數值時,脈衝計數器恰好發生了進位或者借位,則讀取的數值可能不準確,進而影響伺服控制系統的性能。針對沒有鎖存功能的脈衝計數器,提出了一種改進的讀取方法,有效地避免了在讀取過程中由於計數器進位或借位造成的讀數偏差。
四倍頻與計數
對於增量式碼盤,通常採用四倍頻的方法提高光電碼盤的測量精度,即在每個時鐘信號周期內記錄A相和B相的狀態,如果AB相狀態的變化順序是10->11->01->00->10,則表示電機正轉,計數器的值加1;如果AB相狀態的變化順序是11->10->00->01->11,則表示電機反轉,計數器的值減1。其中計數器的時鐘信號的頻率至少是A相脈衝頻率的4倍。
四倍頻後的碼盤信號需經計數器計數後,才能轉化為相對位置。計數的功能可以由單片機內部定時器實現,也可以由專用電路實現。第一種方法硬體結構簡單,但是增加了單片機的資源消耗,尤其在電機碼盤的精度較高,電機轉速較快的場合,計數器需要頻率很高的時鐘信號。例如電機碼盤的精度為1000線,電機的額定轉速是9000r/min,則A相或B相每ms產生的脈衝的個數是1000×9000/60/1000=150,四倍頻後的脈衝個數是600個/ms,計數器的時鐘信號的頻率至少要達到0.6MHz,若時鐘信號的頻率達不到要求,則會產生檢測誤差。因此在實際套用中通常採用專用硬體電路實現四倍頻和計數的功能,這種專用電路通常稱為脈衝計數器。採用專用的硬體電路完成四倍頻和計數的功能,可以提高單片機的運行效率,保證計數的正確性。
問題的產生
在實際套用中通常採用專用硬 件電路實現四倍頻和計數的功能。但是在有些套用場合,出於節約成本的考慮,電路中並沒有配置鎖存器。如果單片機讀取脈衝計數器的計數值不能一次讀取完畢,就可能產生這樣的情況: 在單片機讀取脈衝計數器的計數值的過程中,脈衝計數器中恰好發生了計數值的進位或者借位,則單片機得到的計數值就不是正確的值。
例如脈衝計數器的計數值有12位,計數範圍從0到4095。單片機與脈衝計數器之間的數據匯流排寬度為8位,即單片機每次讀取計數值的過程要分為2個步驟(高4位和低8位分別讀取) ,然後合成為12位的數據。
如果在讀取計數 值的高4位之後和讀取低8位之前的這段時間裡,發生了進位或者借位,則單片機讀取的數據就會出現偏差。例如電機正轉,當計數值為255(0x0FF) 時,單片機讀取計數值,讀取計數值的高4位得到0x0,此時發生了8位的進位,即脈衝計數器的計數值由0x0FF變成0x100,再讀取計數值的低8位得到0x00,則最後合成的12位的計數值是0x000,而此時正確的計數值應該是0x0FF或0x100,得 到的計數值比真實的計數值小了256。依此類推,0x1FF、0x2FF,直到0xEFF的進位都會發生這樣的問題。當電機反轉時,計數值發生借位,與電機正 轉的情況相反,得到的計數值比真實的計數值大256。
問題的處理
處理的辦法是在獲取一個計數值的過程中進行3次讀取: 先讀取計數值的高4位,然後讀 取計數值的低8位,然後讀取計數值的高4位。判斷前後2次讀取的高4位是否相同,如果相同則認為在讀取的過程中沒有發生進位或借位,可以把高4位和低8位直接合成一個12位的數據;如果不相同,則認為在讀取的過程中發生了進位或借位,需要進行相應的處理得到12位的正確數據。
從正轉時計數值進位情況中可知,如果讀取計數值的過程中發生了進位,則前後兩次讀取的高4位相差1或-15(第2次的值減第1次的值);反轉時前後兩次讀取的高4位相差-1或15。通過前後兩次讀取的高4位的差,可以判斷是否發生進位或借位,進而得到正確的計數值。
PLC動態並行執行的定時和計數控制模組設計
定時器、計數器和高速計數器是PLC用戶程式設計中常用的軟元件,運用FPGA並行執行的特點,針對ARM+FPGA架構的PLC系統,分析PLC對定時器、計數器和高速計數器的功能需求,設計了可以動態並行執行的定時和計數控制模組的體系結構。該定時和計數控制模組能夠並行地實現PLC定時、計數和高速計數的功能,同時定時器控制模組和計數器控制模組是可重構的,可以根據具體工程套用來更改其內部的定時器或計數器的總數,實現對FPGA資源的靈活配置。
定時和計數控制模組的結構設計
為了使所設計的定時和計數控制模組實現PLC的定時、計數與高速計數的功能,在此將定時和計數控制模組分成三個模組,分別是定時器控制模組、計數器控制模組和高速計數器控制模組。
由定時和計數控制模組結構可知,定時器控制模組、計數器控制模組和高速計數器控制模組通過匯流排的形式與中央控制器進行數據的互動,它們的工作是相互獨立的,能並行地工作。它們使用相同結構和功能的連線埠讀寫控制器與中央控制器進行數據互動,在相同的時刻只能有一個模組占用匯流排與中央控制器進行通信。
連線埠讀寫控制器結構及讀寫時序設計
連線埠讀寫控制器主要實現與中央控制器的接口,定時器控制模組、計數器控制模組和高速計數器控制模組根據讀寫時序,通過各自的連線埠讀寫控制器實現與中央控制器的數據交換。
RST復位線使用低電平復位,低電平的保持時間要大於40ns;ADDRC是模組地址線;RDC和WRC為低電平使能;ASK(1/2/3)與ANS(1/2/3)線均為低電平有效。讀寫控制模組通過判斷RDC和WRC以及ADDRC的狀態,控制組合邏輯三態門構成的32位雙向I/O口DATAC進行數據的輸入或輸出。連線埠讀寫控制器的32位指令快取可以存儲一條指令,由29位data_in線輸出對D28~D0即指令數據,由3位code_in線輸出D31~D29即指令類型。CE指令執行標誌線,只有定時器控制模組和計數器控制模組使用CE線,高速計數器控制模組未使用CE線。當存儲有指令時,置BUSY(1/2/3)線和CE線為低電平,若通過clear線從指令執行器處接收到指令執行結束信息時,清除32位指令快取記憶體儲的指令數據,置BUSY(1/2/3)線和CE線為高電平。
BUSY(1/2/3)線為忙信號輸出線,當中央控制器檢測到BUSY(1/2/3)線為高電平時才可以對定時和計數器控制模組進行寫操作,寫入數據DATAC、寫入地址ADDRC以及寫信號線WRC的低電平保持時間不少於一個半時鐘周期即30ns。當定時和計數器控制模組需要中央控制器對其進行讀操作時,先通過定時和計數器控制模組讀請求信號線ASK(1/2/3)傳送一個時鐘周期即20ns的請求脈衝,然後等待中央控制器讀應答信號線ANS(1/2/3)上的應答脈衝,中央控制器傳送應答脈衝20ns之後,通過置低讀信號線 RDC 同時選中定時和計數器控制模組地址即可從DATAC讀取三個時鐘周期即60ns的數據。