arduino+旋转编码器
材料清單
arduino nano(其他型號也可以)、旋轉(zhuǎn)編碼器、arduino下載數(shù)據(jù)線、杜邦線若干。
主要原理
旋轉(zhuǎn)編碼器是一種位置傳感器,用于確定旋轉(zhuǎn)軸的角度位置。它根據(jù)旋轉(zhuǎn)運動產(chǎn)生模擬或數(shù)字電信號。
在本篇文章中,我們使用的特定旋轉(zhuǎn)編碼器是增量式旋轉(zhuǎn)編碼器,它是測量旋轉(zhuǎn)的最簡單的位置傳感器。該旋轉(zhuǎn)編碼器也稱為正交編碼器或相對旋轉(zhuǎn)編碼器,其輸出是一系列方波脈沖。(如下圖)
前兩個引腳(接地和Vcc)用于為編碼器供電,通常使用+ 5V電源。除了以順時針方向和逆時針方向旋轉(zhuǎn)旋鈕外,編碼器還有一個開關(guān)(低電平有效)編碼器的按鈕在未按下時為高電平,按下時則為低電平,對SW引腳進行電平檢測即可判斷按鈕是否按下。最后它有兩個輸出引腳,產(chǎn)生脈沖波形。
要詳細了解編碼器,我們先看看它的工作原理。以下是方波脈沖的產(chǎn)生方式:編碼器有一個帶有均勻間隔的接觸區(qū)的磁盤,它們連接到公共引腳C和另外兩個獨立的接觸引腳A和B,如下圖所示。
當(dāng)磁盤逐步開始旋轉(zhuǎn)時,引腳A和B將開始與公共引腳接觸,并相應(yīng)地產(chǎn)生兩個方波輸出信號。
如果我們只計算信號的脈沖,則可以使用兩個輸出中的任何一個來確定旋轉(zhuǎn)位置。但是,如果我們想要確定旋轉(zhuǎn)方向,我們需要同時考慮兩個信號。
我們可以注意到,兩個輸出信號相位彼此之間相差90度。如果編碼器順時針旋轉(zhuǎn),則輸出A將在輸出B之前;如果編碼器逆時針旋轉(zhuǎn),則輸出A將在輸出B之后。
進一步地,A信號從高到低或從低到高變化的時刻,我們注意到如果編碼器順時針旋轉(zhuǎn),那么兩個輸出信號的值相反;如果編碼器逆時針旋轉(zhuǎn),則輸出信號具有相等的值。因此,我們可以輕松地對控制器進行編程以讀取編碼器的位置和旋轉(zhuǎn)方向。
Let’s get started
電路連接
程序代碼
* 電路連接:* GND-G* + --5V* SW-D3:按鈕檢測* DT-D4:B信號序列* CLK-D5:A信號序列* 參考:https://blog.csdn.net/weixin_42268054/article/details/104415067 */ #define CLK 5 #define DT 4 #define SW 3 int counter = 0; int aState; int aLastState; int bState; int bLastState; int SWState; int SWLastState; void setup() { pinMode(CLK,INPUT);pinMode(DT,INPUT);pinMode(SW,INPUT_PULLUP);Serial.begin (9600);// Reads the initial state of the CLKaLastState = digitalRead(CLK);bLastState = digitalRead(DT);SWLastState = digitalRead(SW); } void loop() { SWState = digitalRead(SW); // 按鈕輸出狀態(tài)aState = digitalRead(CLK); // CLK的輸出狀態(tài)0/1bState = digitalRead(DT); // DT的輸出狀態(tài)0/1if (aState != aLastState){ //變化檢測delay(50);//消抖if (aState != bState) { // 如果A!=B,則表示編碼器正在順時針旋轉(zhuǎn)counter ++;} else{ // 如果A=B,則表示編碼器正在逆時針旋轉(zhuǎn)counter --;}Serial.print("num: ");Serial.println(counter);}if (SWState == 0 and SWLastState == 1){delay(50);//消抖Serial.println("num: 0");counter = 0;while (digitalRead(SW) == 0);//等待按鈕抬起delay(200);} // Serial.print("nowSW: "); // Serial.println(SWState);aLastState = aState;SWLastState = SWState; }程序運行效果
總結(jié)
以上是生活随笔為你收集整理的arduino+旋转编码器的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 旋钮编码器c代码_旋转编码器EC11驱动
- 下一篇: 电桥参数