高速讀取正交編碼器信號(例如,1MHz,或1m/s,分辨率為1μm)通常需要專用硬件。本設計方案展示了一個簡單的方案,僅使用ATtiny2313A AVR微控制器即可實現此功能。當然,微控制器也可以通過串行接口連接到其他設備,或者測量位置可以顯示在本地LCD上,可以連接到端口PB。此外,可以添加一個或多個LED來指示錯誤情況。
圖1用ATtiny2313A讀取正交信號; Z索引信號是可選的。
在這個實現中,中斷處理程序非常重要。它在不到1μs的時間內讀取輸入信號A和B.差分信號AP/N和BP/N由SN75157接收器處理,如果編碼器輸出邏輯電平信號,則不需要。
處理器配置為端口PD引腳的任何更改產生中斷。該中斷是中斷向量表中的最后一個,因此
可以省去跳轉指令,從而減少2-3個時鐘(100-150ns)的中斷服務時間。
先前和當前信號之間的異或操作( A 舊 ? B new或 A new ? B old )確定當前位置是否從前一個增加或減少。 old 和 B old 是改變狀態前的A和B信號, A new 和 B new 是中斷后的值。中斷處理程序位于 PCIsubroutine1.txt 文件中。
中斷處理程序的執行時間為800-850ns(16-17個時鐘)。為了最大限度地縮短ISR的執行時間,一些寄存器專門用于它,主程序不能使用它:
R10保存SREG并測試激活新的中斷
R11和R12用于新舊狀態
R24和R25用于位置傳感器
要計算當前位置,需要只有一個時鐘周期。缺點是該位置只能有65536個值。您可以使用3或4個字節確定位置,在這種情況下,子程序執行時間從添加必要指令后增加到18-19個周期(使用寄存器對R24,R26,R28或R30)。
中斷處理程序在退出當前ISR之前檢查新中斷。通過在SREG中設置位T來指示該情況。執行此檢查,執行時間增加3個周期。我們使用RB6029(每轉4,000個脈沖)以最大速度測試子程序的操作,沒有檢測到錯誤。
在激活中斷之前,PCIE2值必須放在寄存器R12中(讀取PIND寄存器)在啟用PCINT2中斷并設置SREG -I標志之前。
如果要使用Z索引信號,該位置將存儲在三個寄存器中,為1,024,000個值? (4,000次計數/旋轉; 256次旋轉)。讀取數據的中斷處理程序更復雜,如 PCIsubroutine2.txt 中所示。長度為19個周期,或當Z激活時當前位置遞增時為20個周期。
如果Z索引處于激活狀態,我們清除角度位置,增加轉數,并檢查先前的角度價值是3,999。在該子程序中,檢測到三個錯誤:一個用于重疊的新中斷(如前一種情況),另外兩個與Z索引相關(檢查先前角位置的正確性)。錯誤計數器寄存器rerr1,rerr2和rerr3應由用戶定義。要初始化系統,請運行 InitIndexZ.txt ,等待Z處于活動狀態。
-
微控制器
+關注
關注
48文章
7572瀏覽量
151645 -
PCB打樣
+關注
關注
17文章
2968瀏覽量
21747 -
華強PCB
+關注
關注
8文章
1831瀏覽量
27819 -
華強pcb線路板打樣
+關注
關注
5文章
14629瀏覽量
43091
發布評論請先 登錄
相關推薦
評論