版主沒(méi)來(lái)的急回答你,先讓俺看到,俺就充當一回高手。
你說(shuō)的增量編碼器是否就是要做的計數器?
如果是外部計數器需要通過(guò)其他方式讀取其值,這要看那計數器的說(shuō)明書(shū)如何讀取,應該不在討論之列。
如果是要做的計數器,比如使用HSC1高速計數器,就需要把外部脈沖信號連接到I0.6
首先在
SM0.1的控制下,初始化HSC1工作于模式0(內部復位和改變方向),然后讓其使能。 此時(shí)HC1已經(jīng)開(kāi)始工作,程序中任何時(shí)刻都可讀取HSC1計數器的當前值,例如MOVD HC1, VD0,即可得到當前值,是不是總脈沖數那需要你來(lái)判定什么時(shí)候讀的是
總脈沖數。
獲得頻率就有點(diǎn)兒麻煩了,這要根據你的脈沖頻率的大致數量級,而選擇不同的方法和測試時(shí)間。
如果脈沖頻率在1HZ以下下,就需要測試兩個(gè)脈沖之間的時(shí)間長(cháng)度來(lái)測試頻率,不用使用高速計數器,應該也不在討論之列 。
脈沖脈沖頻率在10HZ以上,就需要用一定時(shí)間來(lái)獲取脈沖數然后轉換成頻率,而這個(gè)一定時(shí)間是根據脈沖頻率的大致數量級而定,這個(gè)時(shí)間內獲得的脈沖數越多算出來(lái)的就越準確,比如一小時(shí),而時(shí)間越長(cháng),系統的遲滯也越長(cháng),多長(cháng)時(shí)間應該是你能夠忍受的最大遲滯時(shí)間和這段時(shí)間能夠獲取相當數量的脈沖,
例如3秒內,脈沖數不低于10。
.實(shí)現方法是:建立一個(gè)毫秒記時(shí)器使其反復工作在3秒,然后記錄并計算,下面的程序,VD10是每一個(gè)3秒始時(shí)的累計
脈沖總數,VD18中是3秒內獲得的脈沖數,運行中觀(guān)察VD18,如果數量很大則可縮短測試時(shí)間,如果很少,就需要加大測試時(shí)間,VD14中是
脈沖頻率 LD SM0.0
LPS
AN T37
LPS
EU
MOVD HC1, VD10
LPP
TON T37, 30
LPP
A T37
EU
MOVD HC1, VD18
-D VD10, VD18
MOVD VD18, VD14
/D +3, VD14
程序實(shí)際使用中還要有HC1的清零指令,啥時(shí)清零是你來(lái)定的,如何清零參看HC1幫助。
[ 此帖被醉湮邃虞在2009-04-01 12:50重新編輯 ]