找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 5774|回復(fù): 6
收起左側(cè)

單片機如何能高效讀取編碼器的AB相信號

[復(fù)制鏈接]
ID:28415 發(fā)表于 2021-6-4 22:37 | 顯示全部樓層 |閱讀模式
本帖最后由 mxlslf 于 2021-6-4 22:40 編輯

情況說明:在做單片讀取編碼器的AB相信號時,選用ATMEGA328P單片機,把A相信號接到單片機INT0外部中斷上,B相接到另一個引腳上。識別到A相發(fā)生中斷時計數(shù)器加1計數(shù),并判斷B相的電平高低得出是正轉(zhuǎn)還是反轉(zhuǎn)。同時,上位機會通過串口下發(fā)指令給單片機,讓單片機把相應(yīng)的管腳打開和關(guān)閉操作。實際PCB板做好后,發(fā)現(xiàn)上位機發(fā)送的串口指令有時候是沒有被執(zhí)行,這樣的情況在10次里面有4次的樣子。

情況分析:我分析是否是因為外部中斷打斷了單片機接收串口指令。
判斷過程:于是我把外部中斷脈沖線拔掉,程序正常,單片機100%接收到串口指令,并正確控制。
提出問題:單片機如何能高效讀取編碼器的AB相信號?是否有串口緩存的芯片,可以把上位機發(fā)送給單片機的串口指令緩存起來,單片機從緩存芯片處逐個取走指令?




回復(fù)

使用道具 舉報

ID:213173 發(fā)表于 2021-6-5 08:28 | 顯示全部樓層
只要主函數(shù)周期夠短,可以不用外部中斷,改用查詢方式。編碼器的AB信號隨便用2個IO口。
回復(fù)

使用道具 舉報

ID:752974 發(fā)表于 2021-6-5 08:29 | 顯示全部樓層
你的這種做法,像你說的中斷計數(shù)影響程序工作,B信號判向也很難。簡單的方法是AB信號經(jīng)D觸發(fā)器判向,判向后的信號給單片機,A或B給T計數(shù),這樣做,單片機負擔輕,不影響其他程序。
回復(fù)

使用道具 舉報

ID:883242 發(fā)表于 2021-6-5 20:02 | 顯示全部樓層
select microcontroller with quadrature encoder interface .
回復(fù)

使用道具 舉報

ID:28415 發(fā)表于 2021-6-8 09:02 | 顯示全部樓層
munuc_w 發(fā)表于 2021-6-5 08:29
你的這種做法,像你說的中斷計數(shù)影響程序工作,B信號判向也很難。簡單的方法是AB信號經(jīng)D觸發(fā)器判向,判向后 ...

我借鑒了網(wǎng)上別人寫的文檔,這樣改進:用雙D觸發(fā)器74HC74讀取A,B兩相,OUT1如果有輸出脈沖說明是正轉(zhuǎn),OUT2如果有輸出脈沖說明是反轉(zhuǎn)。您覺得這樣是否可行?我要對OUT1和OUT2進行計數(shù)的話,是直接在主循環(huán)程序里直接讀OUT1和OUT2端口的電平,還是用外部中斷計數(shù)的方式讀入 這樣您覺得哪個更優(yōu)?
51hei圖片_20210608085947.png
回復(fù)

使用道具 舉報

ID:450849 發(fā)表于 2021-6-8 10:07 | 顯示全部樓層
回復(fù)

使用道具 舉報

ID:47286 發(fā)表于 2021-6-8 10:54 | 顯示全部樓層
mxlslf 發(fā)表于 2021-6-8 09:02
我借鑒了網(wǎng)上別人寫的文檔,這樣改進:用雙D觸發(fā)器74HC74讀取A,B兩相,OUT1如果有輸出脈沖說明是正轉(zhuǎn),OU ...

如果在主循環(huán)里判斷次數(shù)和方向 除非你用一個片子專門去掃編碼器 否則 主循環(huán)時間不一定 有可能錯過 所以中斷是相對最可靠的 但中斷里不適于做防抖 即便是計時器防抖或者變量累加防抖 都有可能在第二個脈沖過來的時候沖突 如果處理沖突 又可能造成中斷內(nèi)程序太多 那么理想的狀態(tài)就是中斷中得到的是確定脈沖 所以我認為編碼器的消抖用硬件消抖 單片機中斷計數(shù) 可以在中斷函數(shù)里用兩個標記分別對比以確定方向

硬件消抖實際上也有點缺點 要么容錯低 要么體積大 要么成本高 硬件消抖簡單的就是用個0.1uf電容 這方法是假定抖動會在十幾毫秒內(nèi) 隨使用編碼器那東西會越來越接觸不良 到后期誤判很多 另一種是用門電路做消抖 我沒試過 但至少布線上要多一大坨東西 還有就是專門的消抖片子 有專門干這個的芯片 但那東西好貴啊 感覺很不值得

至于最終怎么弄 我認為主要是看速率 就是編碼器擰多快 如果1s擰一下 那無所謂什么方法了 最便宜最簡單的都不是問題 如果特別快 或者脈沖特別多的編碼器 講真 我覺得只能用專門的芯片 好象叫什么增量觸發(fā)之類的 專用芯片 也特別貴 當時就是看見價格直接就忽略了
回復(fù)

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

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

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

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