標(biāo)題:
單片機IO如何檢測輸入信號是高/低電平還是連續(xù)方波?
[打印本頁]
作者:
hxdby
時間:
2023-8-16 20:27
標(biāo)題:
單片機IO如何檢測輸入信號是高/低電平還是連續(xù)方波?
大家好,
如標(biāo)題,現(xiàn)在需要根據(jù)單片機IO口輸入是高電平,低電平,還是方波,來決定另一個IO需要輸出什么。
舉例:
假設(shè)PA1口檢測到輸入高電平,則PA2輸出低電-----A
PA1輸入低電平,則PA2輸出高電平----------B
PA1輸入1Hz方波,則PA2輸出5Hz方波---------C
如果只是檢測PA1輸入高低電平,則比較簡單,現(xiàn)在加入了一個方波,感覺有點復(fù)雜了,不知道單片機代碼怎么寫了。
如果用外部中斷來檢測方波的上升沿或下降沿,好像也不行,因為上述由A變?yōu)锽時,也會產(chǎn)生下降沿,這樣就和C無法區(qū)分了。
如果來計數(shù)C中上升沿或下降沿的個數(shù)來確定是方波,如果計數(shù)兩個,則要延時2s,PA2才會輸出,延時太大了。
大家有沒有比較好的思路?
謝謝
作者:
wulin
時間:
2023-8-17 06:04
如果是占空比50%的方波,脈寬就是100ms。只要精度要求不太高,檢測高/低電平時間大于100ms,就判斷為持續(xù)高/低電平,小于或等于100ms 就判斷為5Hz方波。
作者:
IdeaMing
時間:
2023-8-17 09:15
這就要牽扯到分辨率了,1Hz切換頻率是500ms,PA2的反應(yīng)速度最快也就是500ms,加上一些誤差余量幾個ms。使用定時器檢測PA1的引腳電平,做個超時,如果當(dāng)前電平超過502ms就認(rèn)為是高電平或者低電平,控制PA2的輸出。如果502ms以內(nèi)切換了狀態(tài)就認(rèn)為是1Hz的信號,控制PA2輸出5Hz信號。
作者:
yzwzfyz
時間:
2023-8-17 09:55
1、給方波設(shè)個限(即定義一下),如頻率至少為多少才認(rèn)為是方波。比如高電平持續(xù)10秒是方波嗎?20秒呢?你說它不是,可它每間隔30秒反轉(zhuǎn)一次。40秒呢?……,這樣就真的無界了。
你總要定義一個時間T,并認(rèn)為IO持續(xù)時間T內(nèi)無變化就是電平(不是方波)。
2、測量到IO的H/L后,不要急于下結(jié)論,繼續(xù)測,當(dāng)連續(xù)T時間內(nèi),H/L無變化,就下結(jié)論是電平。
3、如果發(fā)生了變化也不是立即下結(jié)論是電平,再多等一個T,這樣在2T內(nèi),IO發(fā)生了H/L的重復(fù)變化,再下結(jié)論是方波。
當(dāng)然,如果方波頻率快,則用不了2T的時間,就可以依據(jù)H/L的周期變化下結(jié)論了。
總結(jié):
對于電平變化,可以立即下結(jié)論;對于方波確認(rèn),至少需要等待方波的一個周期時間,才能下結(jié)認(rèn)。
而且延遲(等待)時間越長,結(jié)論越準(zhǔn)確。
作者:
yzwzfyz
時間:
2023-8-17 09:57
如果需要立即知道是不是方波,就需要找個大仙,給它算一下命了。
作者:
柒里柒
時間:
2023-8-17 10:21
步驟1:設(shè)置IO口為輸入上拉模式,讀取IO口狀態(tài),假設(shè)用變量IO_State1記錄此時IO口狀態(tài)。
步驟2:設(shè)置IO口為輸入下拉模式,讀取IO口狀態(tài),假設(shè)用變量IO_State2記錄此時IO口狀態(tài)。
步驟3:根據(jù)IO_State1和IO_State2真值表判斷IO口狀態(tài)。
歡迎光臨 (http://www.torrancerestoration.com/bbs/)
Powered by Discuz! X3.1