0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

如何將增量旋轉(zhuǎn)編碼器與Arduino連接

科技觀察員 ? 來(lái)源:electroschematics ? 作者:electroschematics ? 2024-02-11 10:00 ? 次閱讀

在本教程中,您將學(xué)習(xí)如何將增量旋轉(zhuǎn)編碼器Arduino連接,以讀取旋鈕的運(yùn)動(dòng)。這對(duì)于在機(jī)器人和其他應(yīng)用程序中創(chuàng)建用戶界面或讀取機(jī)械位置非常有用。

您需要的器件

Arduino開發(fā)板

1x 增量式旋轉(zhuǎn)編碼器(像這樣)

4個(gè)10 kΩ電阻(R1、R2)

2x 0.1uF 電容器 (C1, C2)

面包板

原理圖和試驗(yàn)板設(shè)置

請(qǐng)注意,在此原理圖中,我直接使用旋轉(zhuǎn)編碼器,因此它需要一些額外的元件。但您也可以購(gòu)買旋轉(zhuǎn)編碼器板,在板上包含這些額外的組件,以使連接更簡(jiǎn)單。

1.png

原理圖中的VDD僅指Arduino的5V電壓。

連接此旋轉(zhuǎn)編碼器所需的額外組件的連接取自旋轉(zhuǎn)編碼器數(shù)據(jù)表中的建議濾波電路。如果您使用的是不同的編碼器,請(qǐng)務(wù)必查看數(shù)據(jù)表中的“建議濾波電路”,因?yàn)樗赡懿煌?/p>

它是如何工作的

該電路的工作原理是查看旋轉(zhuǎn)編碼器的兩個(gè)引腳 A 和 B,并檢查它們中哪一個(gè)先于另一個(gè)引腳為高電平。如果 A 先于 B 走高,那就是一個(gè)方向。如果 B
先于 A 走高,則方向相反。

連接Arduino旋轉(zhuǎn)編碼器電路

在下圖中,您可以看到如何將完整的示例電路連接到面包板上,以及將其連接到Arduino所需的接線。

2.png

分步說(shuō)明

將旋轉(zhuǎn)編碼器連接到面包板。

將兩個(gè)10 kΩ電阻R1和R2從A和B置于5V。

將兩個(gè) 10 kΩ 電阻 R3 和 R4 分別從 A 和 B 連接到 Arduino 數(shù)字引腳 10 和 11。

如圖所示放置0.1uF電容(C1和C2),使編碼器信號(hào)去抖動(dòng)。

將 C 點(diǎn)接地。

使用 USB 數(shù)據(jù)線將 Arduino 連接到您的計(jì)算機(jī)。

將以下代碼上傳到您的 Arduino。此代碼初始化旋轉(zhuǎn)編碼器,并在每次轉(zhuǎn)動(dòng)編碼器時(shí)使用中斷來(lái)更新位置計(jì)數(shù)。

結(jié)果將打印到串行端口,以便您可以從串行監(jiān)視器中讀取結(jié)果。

// Define the pins used for the encoder
const int encoderPinA = 10;
const int encoderPinB = 11;

// Variables to keep the current and last state
volatile int encoderPosCount = 0;
int lastEncoded = 0;

void setup() {
  Serial.begin(9600);

  // Set encoder pins as input with pull-up resistors
  pinMode(encoderPinA, INPUT_PULLUP); 
  pinMode(encoderPinB, INPUT_PULLUP);

  // Attach interrupts to the encoder pins
  attachInterrupt(digitalPinToInterrupt(encoderPinA), updateEncoder, CHANGE);
  attachInterrupt(digitalPinToInterrupt(encoderPinB), updateEncoder, CHANGE);
}

void loop() {
  static int lastReportedPos = -1; // Store the last reported position
  if (encoderPosCount != lastReportedPos) {
    Serial.print("Encoder Position: ");
    Serial.println(encoderPosCount);
    lastReportedPos = encoderPosCount;
  }
}

void updateEncoder() {
  int MSB = digitalRead(encoderPinA); // MSB = most significant bit
  int LSB = digitalRead(encoderPinB); // LSB = least significant bit

  int encoded = (MSB < < 1) | LSB; // Converting the 2 pin value to single number
  int sum  = (lastEncoded < < 2) | encoded; // Adding it to the previous encoded value

  if(sum == 0b1101 || sum == 0b0100 || sum == 0b0010 || sum == 0b1011) encoderPosCount++;
  if(sum == 0b1110 || sum == 0b0111 || sum == 0b0001 || sum == 0b1000) encoderPosCount--;

  lastEncoded = encoded; // Store this value for next time
}

上傳此代碼后,您可以以 9600 的波特率打開串行監(jiān)視器,以查看編碼器的移動(dòng)在旋轉(zhuǎn)時(shí)的變化。

如果編碼器值不穩(wěn)定或未按預(yù)期變化,請(qǐng)根據(jù)原理圖仔細(xì)檢查接線,并確保電阻器和電容器正確放置以進(jìn)行去抖動(dòng)。
審核編輯:陳陳

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 旋轉(zhuǎn)編碼器
    +關(guān)注

    關(guān)注

    5

    文章

    159

    瀏覽量

    25957
  • Arduino
    +關(guān)注

    關(guān)注

    188

    文章

    6469

    瀏覽量

    187091
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    Arduino開發(fā)板的旋轉(zhuǎn)編碼器如何使用

    在本篇文章中,我們學(xué)習(xí)如何在Arduino開發(fā)板上使用旋轉(zhuǎn)編碼器。我們將以帶符號(hào)的數(shù)字同時(shí)顯示順時(shí)針和逆時(shí)針?lè)较虻?b class='flag-5'>編碼值。 所需的組件 ●
    的頭像 發(fā)表于 10-26 15:47 ?8071次閱讀
    <b class='flag-5'>Arduino</b>開發(fā)板的<b class='flag-5'>旋轉(zhuǎn)</b><b class='flag-5'>編碼器</b>如何使用

    增量旋轉(zhuǎn)編碼器

    請(qǐng)問(wèn)有沒(méi)有了解增量旋轉(zhuǎn)編碼器的高手,幫我解決一下一直困擾我問(wèn)題:1.關(guān)于編碼器內(nèi)部的內(nèi)插細(xì)分 有的碼的內(nèi)插細(xì)分值有1,2,4,6,10,
    發(fā)表于 10-16 14:30

    關(guān)于增量旋轉(zhuǎn)編碼器

    5腳增量旋轉(zhuǎn)編碼器,想測(cè)轉(zhuǎn)角和轉(zhuǎn)數(shù),完全沒(méi)有頭緒,接線也有疑問(wèn),知道怎么弄的快來(lái)??!
    發(fā)表于 08-28 11:53

    利用Arduino增量式光電編碼器測(cè)量速度

    利用Arduino、增量式光電編碼器測(cè)量速度、方向、位移。材料:Arduino mega 2560分辨率256ABZ相增量
    發(fā)表于 09-03 06:02

    增量旋轉(zhuǎn)編碼器設(shè)計(jì)

    閱讀目錄一、增量旋轉(zhuǎn)編碼器二、硬件設(shè)計(jì)三、軟件設(shè)計(jì)Development kit:MDK5.14IDE:UV4MCU:STM32F103C8T6回到頂部一、增量
    發(fā)表于 12-01 07:57

    RHI 74 增量旋轉(zhuǎn)編碼器

    如果要在增量編碼器后方安裝額外的部件,就可以使用RHI 74產(chǎn)品線系列的增量編碼器.為此,該旋轉(zhuǎn)編碼
    發(fā)表于 10-08 07:49 ?45次下載

    增量編碼器簡(jiǎn)介

      增量編碼器是一種旋轉(zhuǎn)位移轉(zhuǎn)換為一連串?dāng)?shù)字脈沖信號(hào)的旋轉(zhuǎn)式傳感。這些脈沖用來(lái)控制角位移,如
    發(fā)表于 10-19 16:54 ?27次下載

    如何使用增量編碼器

    如何使用增量編碼器 1,增量旋轉(zhuǎn)編碼器有分辨率的差異,使用每圈產(chǎn)生的脈沖數(shù)來(lái)計(jì)量,數(shù)目從6到5400或更高,脈沖數(shù)越多,分辨
    發(fā)表于 09-26 17:35 ?4317次閱讀

    增量編碼器與絕對(duì)型編碼器的區(qū)別

    增量編碼器與絕對(duì)型編碼器的區(qū)別 編碼器如以信號(hào)原理來(lái)分,有增量編碼器,絕對(duì)型
    發(fā)表于 09-26 17:36 ?2610次閱讀

    Arduino旋轉(zhuǎn)編碼器的教程

    上面草圖的第10行用于啟用Arduino Uno的2號(hào)插針的中斷。在“ doEncoder”功能中,由旋轉(zhuǎn)編碼器計(jì)算得出。如果DT和CLK(Arduino Uno的引腳中斷)的值相同,
    的頭像 發(fā)表于 10-31 08:59 ?1w次閱讀
    <b class='flag-5'>Arduino</b><b class='flag-5'>旋轉(zhuǎn)</b><b class='flag-5'>編碼器</b>的教程

    增量旋轉(zhuǎn)編碼器工作原理及安裝步驟

    增量旋轉(zhuǎn)編碼器沒(méi)有固定的起始零點(diǎn),輸出的是與轉(zhuǎn)角的增量成正比的脈沖,需要用計(jì)數(shù)來(lái)計(jì)脈沖數(shù)。
    的頭像 發(fā)表于 03-21 11:43 ?1.1w次閱讀

    如何將光學(xué)旋轉(zhuǎn)編碼器Arduino連接

    光學(xué)旋轉(zhuǎn)編碼器是一種機(jī)械設(shè)備,在圓柱形外殼的內(nèi)部有一個(gè)旋轉(zhuǎn)軸,其結(jié)構(gòu)與電機(jī)相同。一個(gè)圓形的平盤,上面有兩組插槽。光學(xué)傳感安裝在此光盤的兩側(cè),發(fā)射
    的頭像 發(fā)表于 05-07 14:42 ?6751次閱讀

    基于Sensor API如何添加增量旋轉(zhuǎn)編碼器的驅(qū)動(dòng)

    增量旋轉(zhuǎn)編碼器作為輸入器件廣泛用于各種設(shè)備,例如汽車音響的音量調(diào)節(jié),收音機(jī)頻率調(diào)節(jié),示波器上的旋鈕。但遺憾的是在Zephyr中并沒(méi)有增量旋轉(zhuǎn)
    的頭像 發(fā)表于 07-28 09:55 ?2316次閱讀

    STM32-增量旋轉(zhuǎn)編碼器測(cè)量

    閱讀目錄一、增量旋轉(zhuǎn)編碼器二、硬件設(shè)計(jì)三、軟件設(shè)計(jì)Development kit:MDK5.14IDE:UV4MCU:STM32F103C8T6回到頂部一、增量
    發(fā)表于 11-22 20:06 ?47次下載
    STM32-<b class='flag-5'>增量</b>式<b class='flag-5'>旋轉(zhuǎn)</b><b class='flag-5'>編碼器</b>測(cè)量

    增量旋轉(zhuǎn)編碼器

    電子發(fā)燒友網(wǎng)站提供《增量旋轉(zhuǎn)編碼器.pdf》資料免費(fèi)下載
    發(fā)表于 09-03 11:51 ?0次下載
    <b class='flag-5'>增量</b><b class='flag-5'>旋轉(zhuǎn)</b><b class='flag-5'>編碼器</b>