㈠ 51單片機 編碼器 程序問題
把你想實現的功能,或者出現的問題,描述清楚,
你這個不清晰
「
本來是想中斷0 1角變高電平 中斷1觸發1角變低電平
結果是 通電以後 中斷0觸發後 只有一段時間會變高電平
然後再不管觸發哪個中斷都不會有反應。
」
㈡ 51單片機怎麼寫編碼器的程序
可以用T0或T1的計數器模式來處理編碼器的脈沖信號。
㈢ 有關編碼器與51單片機連接的問題
E6A2-CW3C旋轉編碼器輸出兩路正交(相位相差90°)脈沖信號。解析度200意味著編碼器每旋轉一周輸出200個周期脈沖。如果把每一路脈沖的上沿和下沿都利用起來,相當於四倍頻,解析度可以達到200×4=800。
編碼器輸出通常為5v的TTL電平,可以直接連接到單片機。能否利用單片機直接讀取編碼器並計數,則取決於你的應用中,編碼器軸旋轉的速度有多大?因為,單片機對兩路脈沖的計數只能基於對脈沖的上跳(或者下跳,下同)的處理。而單片機對隨機上跳處理的較好的方案是上跳引起一個中斷,在中斷程序中實施判斷後再進行加1或減1的計數。中斷處理是需要時間的。當編碼器旋轉足夠快,輸出脈沖周期少於中斷處理時間時,將導致脈沖丟失,這會引起計數誤差。
所以,你要准確估計你的編碼器旋轉速度,得到最小的脈沖周期;然後估算你的中斷處理程序的執行時間(在AT89S52最大系統時鍾下)。兩者比較後才能確定你的設計是否可行。
㈣ 51單片機利用外部中斷INT0和INT1實現編碼器雙向計數功能
分數給的太少了。我只能給你提供一個思路,然後你自已寫程序:
int0和int1分別對應單片機兩個不同的引腳,你要先在單片機復位時在特殊功能寄存器中來配置這兩個引腳的功能,int0和int1的中斷都分別有兩個功能,一個是計數器工作方式,一個是外部中斷工作方式。
你的這個要求是不能用int0和int1兩個引腳的計數器功能的,你只能用外部中斷功能。
然後定義好int0和int1分別在中斷時的跳轉地址,在程序進入中斷之後,分別在不同的中斷程序中對一個寄存器表示的計數器進行加1或者減1操作。
一定記得在處理中斷的時候,要把中斷使能的寄存器標置位關掉,以避免中斷重復執行和錯誤。
㈤ 編碼器如何連接到51單片機上
直接連接到IO口就行了,一般的8051單片機有4*8=32個IO口足夠你用的了。5個編碼器才佔用10個IO口。
㈥ 51單片機ec11編碼器中斷法
配置一個1ms定時器,並設置為自動清零模式,配置好後記得打開定時器中斷。首先要開啟定時器TIM3,我們使用這個 HAL_TIM_IC_Start_IT(htim, Channel);啟動定時器。
使用定時器回調函數
void HAL_TIM_IC_CaptureCallback(TIM_HandleTypeDef *htim)
在裡面編寫上面的程序,因為我們將B相接在PA7引腳,所以我們使用switch case語句進行判斷引腳電平,如果單片機檢測到A相為高電平就會進入這個中斷判斷B相電平,低電平為反轉,高電平極為正轉(程序中的cnt為計數作用)。
㈦ 51單片機與編碼器怎麼相連呀
通過51單片機的I/O口連接編碼器的地址輸入端,即可
㈧ 問下增量式旋轉編碼器與51單片機的接線問題。
1、如果需要高速(速度比較快)計數,在單片機外面加一個判向電路。做硬體判向。
輸出一般有兩種,一種是輸出一個方向信號和一個計數信號。
用單片機的一個計數器(如用T0),這樣就能實現正反兩方向的加減計數了。
另一種是輸出兩個正反計數的脈沖串。
用兩個計數器做減法運算。兩種都可以。
Z信號一般不用接計數器。看你用途和用法了。
2、編碼器直接接單片機。
如你用5V單片機那編碼器輸出信號的幅值也應該是TTL電平的。
做軟體判向,可能會影響計數速度。
㈨ 求教51單片機讀編碼器脈沖問題
編碼器有分辯率,看你的編碼器是多少,比如是360,就是說編碼器轉一圈輸出360個脈沖,那麼1個脈沖就是1度,解析度越高,測的越准