吴忠躺衫网络科技有限公司

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

旋轉編碼器如何工作?有哪些類型?

科技觀察員 ? 來源:circuitdigest ? 作者:阿斯文斯·拉吉 ? 2022-11-10 16:04 ? 次閱讀

旋轉編碼器是一種輸入設備,可幫助用戶與系統進行交互。它看起來更像是一個無線電電位計,但它輸出一系列脈沖,這使得它的應用獨一無二。當編碼器的旋鈕旋轉時,它以小步長的形式旋轉,這有助于它用于步進/伺服電機控制,瀏覽一系列菜單以及增加/減少數字的值等等。

在本文中,我們將了解不同類型的旋轉編碼器及其工作原理。我們還將它與 Arduino 連接,并通過旋轉編碼器來控制整數的值,并在 16*2 LCD 屏幕上顯示其值。在本教程結束時,您將習慣于為您的項目使用旋轉編碼器。所以讓我們開始吧...

所需材料

旋轉編碼器 (KY-040)

Arduino UNO

16*2字母數字液晶顯示器

電位器 10k

面包板

連接線

旋轉編碼器如何工作?

旋轉編碼器是一種機電換能器,這意味著它將機械運動轉換為電子脈沖。它由一個旋鈕組成,當旋轉時,旋鈕將逐步移動,并為每個步驟產生一系列具有預定義寬度的脈沖序列。有許多類型的編碼器,每種都有自己的工作機制,我們稍后將了解這些類型,但現在讓我們只關注KY040 增量編碼器,因為我們在教程中使用它。

編碼器的內部機械結構如下所示。它基本上由一個圓形圓盤(灰色)組成,導電墊(銅色)放置在該圓形圓盤的頂部。這些導電墊放置在相等的距離上,如下所示。輸出引腳固定在這個圓形圓盤的頂部,這樣當旋鈕旋轉時,導電墊與輸出引腳接觸。這里有兩個輸出引腳,輸出A和輸出B,如下圖所示。

poYBAGNssISADLKcAAANizcStK0928.png

輸出引腳A和輸出B產生的輸出波形分別以藍色和綠色顯示。當導電焊盤直接位于引腳下方時,它會變高,從而按時導通,當導電焊盤移開時,引腳變低,導致上面所示波形的關斷時間。現在,如果我們計算脈沖數,我們將能夠確定編碼器移動了多少步。

現在可能會出現一個問題,為什么我們需要兩個脈沖信號,而一個脈沖信號足以計算旋轉旋鈕時采取的步數。這是因為我們需要確定旋鈕的旋轉方向。如果你看一下這兩個脈沖,你會發現它們都是90°的異相。因此,當旋鈕順時針旋轉時,輸出 A 將首先變高,當旋鈕逆時針旋轉時,輸出 B 將首先變高。

旋轉編碼器的類型

市場上有許多類型的旋轉編碼器,設計人員可以根據自己的應用選擇一種。下面列出了最常見的類型

增量編碼器

絕對值編碼器

磁編碼器

光學編碼器

激光編碼器

這些編碼器根據輸出信號和傳感技術進行分類,增量編碼器和絕對編碼器根據輸出信號進行分類,磁性、光學和激光編碼器根據傳感技術進行分類。此處使用的編碼器是增量類型編碼器。

KY-040 旋轉編碼器引腳排列和說明

KY-040增量式旋轉編碼器的引腳排列如下所示

pYYBAGNssIaAIuaKAABKSdcTsnA127.jpg

前兩個引腳(接地和Vcc)用于為編碼器供電,通常使用+5V電源。除了順時針和逆時針方向旋轉旋鈕外,編碼器還有一個開關(低電平有效),可以通過按下內部旋鈕來按下。來自該開關的信號通過引腳 3(開關)獲得。最后,它具有兩個輸出引腳,可產生如上所述的波形。現在讓我們學習如何將其與Arduino接口

Arduino 旋轉編碼器電路圖

旋轉編碼器與Arduino接口的完整電路圖如下圖所示

pYYBAGNssIeAJnZnAADUyr7cRxs787.png

旋轉編碼器有 5 個引腳,順序如上標簽所示。前兩個引腳是接地和Vcc,連接到Arduino的接地和+5V引腳。編碼器的開關連接到數字引腳D10,并通過一個1k電阻被拉高。兩個輸出引腳分別連接到D9和D8。

為了顯示通過旋轉編碼器增加或減少的變量值,我們需要一個顯示模塊。這里使用的是一種常見的16 * 2字母數字LCD顯示器。我們已經連接了顯示器以4位模式運行,并使用Arduino的+5V引腳為其供電。電位計用于調整LCD顯示屏的對比度。如果您想了解有關使用Arduino接口LCD顯示器的更多信息,請點擊鏈接。完整的電路可以建在面包板的頂部,一旦所有連接完成,我的下面看起來像這樣。

poYBAGNssImAIzRhAADNNCcP_3U636.jpg

為旋轉編碼器編程 Arduino

如果您了解旋轉編碼器的工作原理,那么對Arduino板進行編程以將旋轉編碼器與其連接是相當容易和直接的。我們只需要讀取脈沖數來確定編碼器轉了多少圈,并檢查哪個脈沖先變高,以找到編碼器旋轉的方向。在本教程中,我們將在LCD的第一行顯示遞增或遞減的數字,在第二行顯示編碼器的方向。用于執行相同操作的完整程序可以在此頁面底部找到演示視頻,它不需要任何庫。現在,讓我們將程序分成小塊以了解工作原理。

由于我們使用了LCD顯示器,因此我們包含了默認情況下存在于Arduino IDE中的液晶庫。然后我們定義用于將LCD與Arduino連接的引腳。最后,我們初始化這些引腳上的LCD顯示。

#include //Default Arduino LCD Library is included

const int rs = 7, en = 6, d4 = 5, d5 = 4, d6 = 3, d7 = 2; //Mention the pin number for LCD connection

LiquidCrystal lcd(rs, en, d4, d5, d6, d7);

lcd.begin(16, 2); //Initialise 16*2 LCD

接下來在設置功能中,我們在LCD屏幕上顯示一條介紹性消息,然后等待2秒鐘,以便該消息可供用戶閱讀。這是為了確保液晶屏工作正常。

lcd.print(" Rotary Encoder "); //Intro Message line 1

lcd.setCursor(0, 1);

lcd.print(" With Arduino "); //Intro Message line 2

delay(2000);

lcd.clear();

旋轉編碼器有三個輸出引腳,它們將成為Arduino的輸入引腳。這三個引腳分別是開關、輸出 A 和輸出 B。這些使用pinMode函數聲明為輸入,如下所示。

//pin Mode declaration

pinMode (Encoder_OuputA, INPUT);

pinMode (Encoder_OuputB, INPUT);

pinMode (Encoder_Switch, INPUT);

在 void 設置功能中,我們讀取輸出 A 引腳的狀態以檢查引腳的最后狀態。然后,我們將使用此信息與新值進行比較,以檢查哪個引腳(輸出 A 或輸出 B)已變高。

Previous_Output = digitalRead(Encoder_OuputA); //Read the inital value of Output A

最后,在主循環函數中,我們必須將輸出 A 和輸出 B 的值與上一個輸出進行比較,以檢查哪個先變高。這可以通過簡單地將A和B的電流輸出值與先前的輸出進行比較來完成,如下所示。

if (digitalRead(Encoder_OuputA) != Previous_Output)

{

if (digitalRead(Encoder_OuputB) != Previous_Output)

{

Encoder_Count ++;

lcd.clear();

lcd.print(Encoder_Count);

lcd.setCursor(0, 1);

lcd.print("Clockwise");

}

在上面的代碼中,如果輸出 B 與上一個輸出相比發生了變化,則執行第二個 if 條件。在這種情況下,編碼器變量的值遞增,LCD顯示編碼器按順時針方向旋轉。類似地,如果條件失敗,在隨后的 else 條件中,我們遞減變量并顯示編碼器沿逆時針方向旋轉。相同的代碼如下所示。

else

{

Encoder_Count--;

lcd.clear();

lcd.print(Encoder_Count);

lcd.setCursor(0, 1);

lcd.print("Anti - Clockwise");

}

}

最后,在主循環結束時,我們必須使用當前輸出值更新以前的輸出值,以便可以使用相同的邏輯重復循環。以下代碼執行相同的操作

Previous_Output = digitalRead(Encoder_OuputA);

另一個可選的事情是檢查編碼器上的開關是否被按下。這可以通過檢查旋轉打碼機上的開關引腳來監控。此引腳是有效的低引腳,這意味著按下按鈕時它將變為低電平。如果不按下引腳保持高電平,我們還使用上拉電阻器來確保在未按下開關時保持高電平,從而避免浮點情況。

if (digitalRead(Encoder_Switch) == 0) { lcd.clear(); lcd.setCursor(0, 1); lcd.print("Switch pressed"); }

旋轉編碼器與Arduino的工作

硬件和代碼準備就緒后,只需將代碼上傳到Arduino板并啟動Arduino板即可。您可以通過 USB 電纜或使用 12V 適配器為其供電。通電后,液晶屏應顯示介紹消息,然后變為空白。現在旋轉旋轉編碼器,您應該會看到值開始根據旋轉方向遞增或遞減。第二行將顯示編碼器是順時針還是逆時針旋轉。下圖顯示相同

pYYBAGNssIyALCJPAADTrMhYYfk399.jpg

此外,當按下按鈕時,第二行將顯示按鈕已按下。完整的工作可以在下面的視頻中找到。這只是一個示例程序,用于將編碼器與Arduino連接并檢查其是否按預期工作。到達此處后,您應該能夠將編碼器用于任何項目和相應的程序。

/*

* Interfacing Rotary Encoder with Arduino

* Power LCD and Rotary encoder from the +5V pin of Arduino

* LCD RS -> pin 7

* LCD EN -> pin 6

* LCD D4 -> pin 5

* LCD D5 -> pin 4

* LCD D6 -> pin 3

* LCD D7 -> pin 2

* Encoder Switch -> pin 10

* Encoder Output A -> pin 9

* Encoder Output B -> pin 8

*/


int Encoder_OuputA = 9;

int Encoder_OuputB = 8;

int Encoder_Switch = 10;


int Previous_Output;

int Encoder_Count;





#include //Default Arduino LCD Librarey is included


const int rs = 7, en = 6, d4 = 5, d5 = 4, d6 = 3, d7 = 2; //Mention the pin number for LCD connection

LiquidCrystal lcd(rs, en, d4, d5, d6, d7);


void setup() {

lcd.begin(16, 2); //Initialise 16*2 LCD


lcd.print(" Rotary Encoder "); //Intro Message line 1

lcd.setCursor(0, 1);

lcd.print(" With Arduino "); //Intro Message line 2


delay(2000);

lcd.clear();


//pin Mode declaration

pinMode (Encoder_OuputA, INPUT);

pinMode (Encoder_OuputB, INPUT);

pinMode (Encoder_Switch, INPUT);


Previous_Output = digitalRead(Encoder_OuputA); //Read the inital value of Output A

}


void loop() {

//aVal = digitalRead(pinA);



if (digitalRead(Encoder_OuputA) != Previous_Output)

{

if (digitalRead(Encoder_OuputB) != Previous_Output)

{

Encoder_Count ++;

lcd.clear();

lcd.print(Encoder_Count);

lcd.setCursor(0, 1);

lcd.print("Clockwise");

}

else

{

Encoder_Count--;

lcd.clear();

lcd.print(Encoder_Count);

lcd.setCursor(0, 1);

lcd.print("Anti - Clockwise");

}

}


Previous_Output = digitalRead(Encoder_OuputA);


if (digitalRead(Encoder_Switch) == 0)

{

lcd.clear();

lcd.setCursor(0, 1);

lcd.print("Switch pressed");

}

}


聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • lcd
    lcd
    +關注

    關注

    34

    文章

    4438

    瀏覽量

    168376
  • 旋轉編碼器
    +關注

    關注

    5

    文章

    159

    瀏覽量

    26024
  • Arduino
    +關注

    關注

    188

    文章

    6477

    瀏覽量

    187815
收藏 人收藏

    評論

    相關推薦

    旋轉編碼器類型區別與應用選擇

    顧名思義,絕對編碼器會直接輸出正在測量的軸的確切位置。每個旋轉點都具有唯一的位置值或數據字,并在隨軸一起旋轉的碼盤上編碼。碼盤上唯一代碼的數量決定了位置的表示精度。
    的頭像 發表于 01-17 08:59 ?8725次閱讀

    旋轉編碼器是如何工作的?

    旋轉編碼器是一種經過驗證的流行解決方案,用于測量旋轉軸的速度,運動方向或位置。幾種不同的類型,主要的兩種是絕對
    發表于 01-01 07:46

    旋轉編碼器的作用及工作原理

    在數字時代,需要快速高效地測量電機或旋轉儀器旋鈕上的機械軸的旋轉。諸如電位計和旋轉開關之類的模擬方法正在被可將旋轉運動直接數字化的旋轉
    發表于 02-22 06:09

    旋轉編碼器的原理和特點哪些

    旋轉編碼器工作原理一、旋轉編碼器的原理和特點: 旋轉編碼器
    發表于 07-06 07:56

    旋轉編碼器類型及其工作原理

    , 但它輸出一系列脈沖, 這使得它的應用獨特。當編碼器的旋鈕旋轉時, 它以小步的形式旋轉, 這有助于它用于 stepper/servo 電機控制。在本文中,我們將了解不同類型
    發表于 07-16 08:17

    了解不同類型旋轉編碼器及其工作原理

    助于它用于步進/伺服電機控制、導航菜單序列和增加/減少數字的值等等。在本篇文章中,我們將了解不同類型旋轉編碼器及其工作原理。我們還將它連接到PIC單片機PIC16F877A,并通過
    發表于 11-24 06:23

    旋轉編碼器,旋轉編碼器是什么意思

    旋轉編碼器,旋轉編碼器是什么意思 旋轉編碼器概要
    發表于 03-03 15:27 ?2397次閱讀

    旋轉編碼器測量_旋轉編碼器安裝方式

    本文主要介紹了旋轉編碼器測量及安裝方法。旋轉編碼器檢測直線位移方法具體如下:使用“彈性連軸”將旋轉
    發表于 08-06 11:40 ?4013次閱讀
    <b class='flag-5'>旋轉</b><b class='flag-5'>編碼器</b>測量_<b class='flag-5'>旋轉</b><b class='flag-5'>編碼器</b>安裝方式

    旋轉編碼器拆卸方法_旋轉編碼器型號說明

    本文首先介紹了旋轉編碼器拆卸方法,其次闡述了旋轉編碼器更換步驟,最后介紹了旋轉編碼器型號說明。
    發表于 08-06 11:48 ?1.8w次閱讀

    旋轉編碼器能直接換嗎_旋轉編碼器更換注意事項

    本文首先介紹了旋轉編碼器更換步驟,其次介紹了旋轉編碼器更換注意事項,最后介紹了旋轉編碼器替換原則
    發表于 08-06 14:18 ?9808次閱讀

    旋轉編碼器是什么?淺讀旋轉編碼器工作原理與特點及應用

    旋轉編碼器是什么?淺讀旋轉編碼器工作原理與特點及應用:旋轉
    的頭像 發表于 05-29 09:21 ?3557次閱讀
    <b class='flag-5'>旋轉</b><b class='flag-5'>編碼器</b>是什么?淺讀<b class='flag-5'>旋轉</b><b class='flag-5'>編碼器</b><b class='flag-5'>工作</b>原理與特點及應用

    旋轉編碼器能直接換嗎_旋轉編碼器更換注意事項

    旋轉編碼器更換步驟第一步,卸開電機后蓋,編碼器的后蓋。第二步,松開編碼器安裝螺絲。第三步,旋轉電機轉子軸,使
    的頭像 發表于 11-12 08:07 ?1755次閱讀
    <b class='flag-5'>旋轉</b><b class='flag-5'>編碼器</b>能直接換嗎_<b class='flag-5'>旋轉</b><b class='flag-5'>編碼器</b>更換注意事項

    旋轉編碼器的常見類型

    詳細介紹旋轉編碼器的常見類型,包括增量式編碼器和絕對式編碼器兩大類,并對它們的特點、工作原理、應
    的頭像 發表于 05-29 15:59 ?1056次閱讀

    帶Arduino的旋轉編碼器設計 旋轉編碼器工作原理和特點

    旋轉編碼器(Rotary Encoder),也稱為軸編碼器,是一種將旋轉的機械位移量轉換為電氣信號的傳感。這些電氣信號經過處理后,可以用于
    的頭像 發表于 07-04 17:17 ?3116次閱讀
    帶Arduino的<b class='flag-5'>旋轉</b><b class='flag-5'>編碼器</b>設計 <b class='flag-5'>旋轉</b><b class='flag-5'>編碼器</b>的<b class='flag-5'>工作</b>原理和特點

    編碼器常見的類型哪些?

    不同的分類標準,可以以下幾種主要類型: 一、按工作原理分類 增量式編碼器 : 將位移轉換成周期性的電信號,再把這個電信號轉變成計數脈沖,用脈沖的個數表示位移的大小。 增量式
    的頭像 發表于 10-25 09:30 ?972次閱讀
    娱乐城送现金| 百家乐官网玩法说| 马鞍山市| 百家乐官网可以算牌么| 百家乐官网博彩桌出租| 苏尼特右旗| 大发扑克下载| 抚顺市| 澳门百家乐网上赌博| 女神百家乐的玩法技巧和规则| 全讯网财运| 威尼斯人娱乐的微博| 百家乐园能贷款吗| 大发888 博彩| 皇冠网代理| 涟源市| 9人百家乐官网桌布| 娱乐百家乐官网可以代理吗| 网上百家乐网站导航| 金彩百家乐的玩法技巧和规则| 大发888博彩论坛贴吧| 一二博国际| 百家乐官网1326投注| 路单百家乐官网的玩法技巧和规则| 黄金城百家乐游戏| 立即博百家乐的玩法技巧和规则| 大发888大发888娱乐游戏| 万载县| 百家乐官网在线娱乐网| 24山辅星水法分阴阳| 送彩金百家乐平台| 大发888真人娱乐场网址官网| 湘潭市| 百家乐官网合理的投注法| 罗浮宫百家乐官网的玩法技巧和规则| 百家乐已破解的书籍| 百家乐透视牌靴| bet365彩票| 蓝盾百家乐官网平台租用| 天天百家乐官网的玩法技巧和规则| 百家乐如何打轮盘|