找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 2628|回復(fù): 5
打印 上一主題 下一主題
收起左側(cè)

單片機(jī)IO如何檢測(cè)輸入信號(hào)是高/低電平還是連續(xù)方波?

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:997026 發(fā)表于 2023-8-16 20:27 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
大家好,


如標(biāo)題,現(xiàn)在需要根據(jù)單片機(jī)IO口輸入是高電平,低電平,還是方波,來決定另一個(gè)IO需要輸出什么。

舉例:
假設(shè)PA1口檢測(cè)到輸入高電平,則PA2輸出低電-----A
PA1輸入低電平,則PA2輸出高電平----------B
PA1輸入1Hz方波,則PA2輸出5Hz方波---------C

如果只是檢測(cè)PA1輸入高低電平,則比較簡單,現(xiàn)在加入了一個(gè)方波,感覺有點(diǎn)復(fù)雜了,不知道單片機(jī)代碼怎么寫了。
如果用外部中斷來檢測(cè)方波的上升沿或下降沿,好像也不行,因?yàn)樯鲜鲇葾變?yōu)锽時(shí),也會(huì)產(chǎn)生下降沿,這樣就和C無法區(qū)分了。
如果來計(jì)數(shù)C中上升沿或下降沿的個(gè)數(shù)來確定是方波,如果計(jì)數(shù)兩個(gè),則要延時(shí)2s,PA2才會(huì)輸出,延時(shí)太大了。

大家有沒有比較好的思路?

謝謝


分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:213173 發(fā)表于 2023-8-17 06:04 | 只看該作者
如果是占空比50%的方波,脈寬就是100ms。只要精度要求不太高,檢測(cè)高/低電平時(shí)間大于100ms,就判斷為持續(xù)高/低電平,小于或等于100ms 就判斷為5Hz方波。
回復(fù)

使用道具 舉報(bào)

板凳
ID:276663 發(fā)表于 2023-8-17 09:15 | 只看該作者
這就要牽扯到分辨率了,1Hz切換頻率是500ms,PA2的反應(yīng)速度最快也就是500ms,加上一些誤差余量幾個(gè)ms。使用定時(shí)器檢測(cè)PA1的引腳電平,做個(gè)超時(shí),如果當(dāng)前電平超過502ms就認(rèn)為是高電平或者低電平,控制PA2的輸出。如果502ms以內(nèi)切換了狀態(tài)就認(rèn)為是1Hz的信號(hào),控制PA2輸出5Hz信號(hào)。
回復(fù)

使用道具 舉報(bào)

地板
ID:123289 發(fā)表于 2023-8-17 09:55 | 只看該作者
1、給方波設(shè)個(gè)限(即定義一下),如頻率至少為多少才認(rèn)為是方波。比如高電平持續(xù)10秒是方波嗎?20秒呢?你說它不是,可它每間隔30秒反轉(zhuǎn)一次。40秒呢?……,這樣就真的無界了。
你總要定義一個(gè)時(shí)間T,并認(rèn)為IO持續(xù)時(shí)間T內(nèi)無變化就是電平(不是方波)。
2、測(cè)量到IO的H/L后,不要急于下結(jié)論,繼續(xù)測(cè),當(dāng)連續(xù)T時(shí)間內(nèi),H/L無變化,就下結(jié)論是電平。
3、如果發(fā)生了變化也不是立即下結(jié)論是電平,再多等一個(gè)T,這樣在2T內(nèi),IO發(fā)生了H/L的重復(fù)變化,再下結(jié)論是方波。
當(dāng)然,如果方波頻率快,則用不了2T的時(shí)間,就可以依據(jù)H/L的周期變化下結(jié)論了。
總結(jié):
對(duì)于電平變化,可以立即下結(jié)論;對(duì)于方波確認(rèn),至少需要等待方波的一個(gè)周期時(shí)間,才能下結(jié)認(rèn)。
而且延遲(等待)時(shí)間越長,結(jié)論越準(zhǔn)確。
回復(fù)

使用道具 舉報(bào)

5#
ID:123289 發(fā)表于 2023-8-17 09:57 | 只看該作者
如果需要立即知道是不是方波,就需要找個(gè)大仙,給它算一下命了。
回復(fù)

使用道具 舉報(bào)

6#
ID:1091455 發(fā)表于 2023-8-17 10:21 | 只看該作者
步驟1:設(shè)置IO口為輸入上拉模式,讀取IO口狀態(tài),假設(shè)用變量IO_State1記錄此時(shí)IO口狀態(tài)。
步驟2:設(shè)置IO口為輸入下拉模式,讀取IO口狀態(tài),假設(shè)用變量IO_State2記錄此時(shí)IO口狀態(tài)。
步驟3:根據(jù)IO_State1和IO_State2真值表判斷IO口狀態(tài)。
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表