步驟1:旋轉(zhuǎn)編碼器的脈沖流
以下旋轉(zhuǎn)編碼器產(chǎn)生的脈沖流與上圖類似。
步驟2:旋轉(zhuǎn)編碼器的引腳排列
說明:
GND-》 GND
+-》 + 5V
SW -》按下時旋轉(zhuǎn)編碼器的按鈕
DT-》數(shù)據(jù)
CLK-》數(shù)據(jù)2
DT之一或CLK引腳必須連接到Arduino Uno的中斷腳,或者DT和CLK都連接到中斷引腳。
步驟3:示意圖
GNDàGND Arduino Uno
+à+ 5V Arduino Uno
SWàPIN 4 Arduino Uno
DT àPIN 3 Arduino Uno
CLKàPIN2 Arduino Uno
第4步:代碼
在以下教程中,PI將用作中斷Arduino Uno的N 2,而PIN 3僅用作常規(guī)輸入。
#define encoder0PinA 2
#define encoder0PinB 3
#define encoder0Btn 4
int encoder0Pos = 0;
void setup() {
Serial.begin(9600);
pinMode(encoder0PinA, INPUT_PULLUP);
pinMode(encoder0PinB, INPUT_PULLUP);
pinMode(encoder0Btn, INPUT_PULLUP);
attachInterrupt(0, doEncoder, CHANGE);
}
int valRotary,lastValRotary;
void loop() {
int btn = digitalRead(encoder0Btn);
Serial.print(btn);
Serial.print(“ ”);
Serial.print(valRotary);
if(valRotary》lastValRotary)
{
Serial.print(“ CW”);
}
if(valRotary {
Serial.print(“ CCW”);
}
lastValRotary = valRotary;
Serial.println(“ ”);
delay(250);
}
void doEncoder()
{
if (digitalRead(encoder0PinA) == digitalRead(encoder0PinB))
{
encoder0Pos++;
}
else
{
encoder0Pos--;
}
valRotary = encoder0Pos/2.5;
}
上面草圖的第10行用于啟用Arduino Uno的2號插針的中斷。在“ doEncoder”功能中,由旋轉(zhuǎn)編碼器計算得出。如果DT和CLK(Arduino Uno的引腳中斷)的值相同,則“ encoder0Pos”變量將增加/添加,除此條件外,“ encoder0Pos”變量將減少。
步驟5:說明
ValRotary值是已運行的步驟數(shù)的值。 ValRotary值由旋轉(zhuǎn)傳感器編碼器讀數(shù)值除以2.5獲得。從測試中獲得的值為2.5,因為旋轉(zhuǎn)編碼器的一個步驟可能會超過1,因此請根據(jù)每個步長以及讀取延遲的增加將其值除以2.5。
第19-25行是確定旋轉(zhuǎn)旋轉(zhuǎn)編碼器是CW還是CCW的程序。第19-25行的解釋是當(dāng)前的旋轉(zhuǎn)編碼器讀數(shù)大于先前的旋轉(zhuǎn)數(shù)據(jù),然后表示為CW。
步驟6:輸出
責(zé)任編輯:wv
-
編碼器
+關(guān)注
關(guān)注
45文章
3776瀏覽量
137199 -
Arduino
+關(guān)注
關(guān)注
189文章
6492瀏覽量
190145
發(fā)布評論請先 登錄
磁旋轉(zhuǎn)編碼器在永磁同步電機位置測量中的應(yīng)用(可下載)
軸編碼器與無軸承編碼器,到底如何選擇?

磁環(huán)編碼器:精準(zhǔn)定位與高效旋轉(zhuǎn)控制的創(chuàng)新解決方案
DISCOAA編碼器類型功能
用于 SPI 絕對編碼器的 Arduino 示例代碼

編碼器種類大觀:探索技術(shù)前沿與應(yīng)用創(chuàng)新
二進制編碼器與絕對編碼器的區(qū)別
增量式編碼器單圈和多圈怎么知道,如何分辯?

旋轉(zhuǎn)編碼器的類型以及選擇與設(shè)計注意要點

旋轉(zhuǎn)編碼器可以收集并發(fā)出什么信號,旋轉(zhuǎn)編碼器信號異常怎么處理
帶Arduino的旋轉(zhuǎn)編碼器設(shè)計 旋轉(zhuǎn)編碼器的工作原理和特點

評論