娇小w搡bbbb搡bbb,《第一次の人妻》,中国成熟妇女毛茸茸,边啃奶头边躁狠狠躁视频免费观看

歷史上的今天

今天是:2025年01月31日(星期五)

2020年01月31日 | 旋轉(zhuǎn)編碼器與PIC單片機(jī)接口

發(fā)布者:滁州魚(yú)兒 來(lái)源: eefocus關(guān)鍵字:旋轉(zhuǎn)編碼器  PIC  單片機(jī)接口 手機(jī)看文章 掃描二維碼
隨時(shí)隨地手機(jī)看文章

在這里插入圖片描述

旋轉(zhuǎn)編碼器 是一種輸入裝置,其幫助用戶與系統(tǒng)進(jìn)行交互。它看起來(lái)更像是一個(gè)無(wú)線電電位器旋轉(zhuǎn)編碼器是一種輸入設(shè)備, 可幫助用戶與系統(tǒng)交互。它看起來(lái)更像是一個(gè)無(wú)線電電位器, 但它輸出一系列脈沖, 這使得它的應(yīng)用獨(dú)特。當(dāng)編碼器的旋鈕旋轉(zhuǎn)時(shí), 它以小步的形式旋轉(zhuǎn), 這有助于它用于 stepper/servo 電機(jī)控制。


在本文中,我們將了解不同類(lèi)型的旋轉(zhuǎn)編碼器及其工作原理。我們還將它與PIC單片機(jī)PIC16F877A連接,并通過(guò)旋轉(zhuǎn)編碼器控制整數(shù)值,并在16 * 2 LCD屏幕上顯示其值。在本教程的最后, 您將會(huì)很樂(lè)意為您的項(xiàng)目使用旋轉(zhuǎn)編碼器。所以讓我們開(kāi)始吧…。


旋轉(zhuǎn)編碼器及其類(lèi)型


旋轉(zhuǎn)編碼器通常稱(chēng)為軸編碼器。它是一個(gè)機(jī)電傳感器, 這意味著它將機(jī)械運(yùn)動(dòng)轉(zhuǎn)換為電子脈沖, 或者換句話說(shuō), 它將角度位置或運(yùn)動(dòng)或軸位置轉(zhuǎn)換為數(shù)字或模擬信號(hào)。它由一個(gè)旋鈕組成, 當(dāng)旋轉(zhuǎn)時(shí), 它將逐步移動(dòng), 并產(chǎn)生每個(gè)步驟具有預(yù)定寬度的脈沖列車(chē)序列。


市場(chǎng)上有很多種類(lèi)型的旋轉(zhuǎn)編碼器, 設(shè)計(jì)師可以根據(jù)自己的應(yīng)用選擇一種。下面列出了最常見(jiàn)的類(lèi)型


增量編碼器


絕對(duì)編碼器


磁性編碼器


光學(xué)編碼器


激光編碼器


這些編碼器是基于輸出信號(hào)和傳感技術(shù)進(jìn)行分類(lèi)的, 增量編碼器和絕對(duì)編碼器是根據(jù)輸出信號(hào)進(jìn)行分類(lèi)的, 磁編碼器和激光編碼器是基于傳感技術(shù)進(jìn)行分類(lèi)的。此處使用的編碼器是增量類(lèi)型的編碼器。


絕對(duì)編碼器即使在斷電后也會(huì)存儲(chǔ)位置信息, 當(dāng)我們?cè)俅螌?duì)其通電時(shí), 位置信息也會(huì)可用。


另一種基本類(lèi)型, 增量編碼器提供數(shù)據(jù)時(shí), 編碼器更改它的位置。它無(wú)法存儲(chǔ)倉(cāng)位信息。


ky-040 旋轉(zhuǎn)編碼器夾頭及說(shuō)明


ky-040 增量型旋轉(zhuǎn)編碼器的針腳如下所示。在這個(gè)項(xiàng)目中, 我們將與來(lái)自微芯片的流行微控制器 pic16f877a 接口這個(gè)旋轉(zhuǎn)編碼器。

在這里插入圖片描述

前兩個(gè)引腳 (接地和 vcc) 用于為編碼器供電, 通常使用 + 5v 電源。除了以順時(shí)針和逆時(shí)針?lè)较蛐D(zhuǎn)旋鈕外, 編碼器還具有一個(gè)開(kāi)關(guān) (活動(dòng)低), 可通過(guò)按內(nèi)旋鈕進(jìn)行按壓。此開(kāi)關(guān)的信號(hào)是通過(guò)引腳 3 (sw) 獲得的。最后, 它有兩個(gè)輸出引腳 (dt 和 clk), 產(chǎn)生波形, 如下所述。我們以前把這個(gè)旋轉(zhuǎn)編碼器與 arduino 接口過(guò)。


旋轉(zhuǎn)編碼器的工作原理


輸出完全取決于內(nèi)部銅墊, 提供與 gnd 和 vcc 與軸的連接。

在這里插入圖片描述

旋轉(zhuǎn)編碼器有兩個(gè)部分。軸輪, 它與軸連接, 并根據(jù)軸的旋轉(zhuǎn)和完成電氣連接的底座順時(shí)針或逆時(shí)針旋轉(zhuǎn)。基座具有連接到 dt 或 clk 的端口或點(diǎn), 這樣當(dāng)軸輪旋轉(zhuǎn)時(shí), 它將連接基點(diǎn), 并在 dt 和 clk 端口上提供方波。


輸出將像軸旋轉(zhuǎn)時(shí)

在這里插入圖片描述

兩個(gè)端口提供方波,但時(shí)序略有不同。因此,如果我們接受輸出為1和0,則只能有四個(gè)狀態(tài),0 0,1 0,1 1,0 1.二進(jìn)制輸出的序列決定順時(shí)針轉(zhuǎn)動(dòng)或逆時(shí)針轉(zhuǎn)動(dòng)。例如,如果旋轉(zhuǎn)編碼器在空閑狀態(tài)下提供1 0并在此之后提供1 1,則意味著編碼器將其位置向順時(shí)針?lè)较蚋淖円徊剑绻诳臻e1 0之后提供0 0,則意味著軸一步一步地沿逆時(shí)針?lè)较蜣D(zhuǎn)動(dòng)其位置。

所需組件


現(xiàn)在是確定我們需要什么接口旋轉(zhuǎn)編碼器與 pic 微控制器的時(shí)候了,


PIC16F877A


電阻器


1k電阻器


10k


4.7k電容器33pF陶瓷圓盤(pán)電容器 - 2個(gè)


20Mhz晶體


16x2顯示


旋轉(zhuǎn)編碼器


5V適配器。


面包板


連接線。


PIC16F877A旋轉(zhuǎn)編碼器接口電路圖

在這里插入圖片描述

下面是根據(jù)電路圖連接組件后的最終設(shè)置圖:

在這里插入圖片描述

在這里插入圖片描述

我們使用單個(gè)1K電阻來(lái)代替LCD的對(duì)比度,而不是使用電位計(jì)。


代碼說(shuō)明


完整的PIC代碼 在本項(xiàng)目的最后給出了 演示視頻,這里我們將解釋代碼的一些重要部分。如果您是PIC微控制器的就遵循我們的 新手,請(qǐng)PIC教程 從一開(kāi)始。


正如我們之前討論的那樣,我們需要 檢查輸出并區(qū)分DT和CLK的二進(jìn)制輸出,因此我們創(chuàng)建了一個(gè) if-else為操作部分。


if (Encoder_CLK != position){


            if (Encoder_DT != position){


           // lcd_com (0x01);


            counter++; // Increase the counter which will be printed on the lcd


            lcd_com (0xC0);


            lcd_puts("            ");


            lcd_com (0xC0);


            lcd_bcd(1,counter);


            }




            else{


          // lcd_com (0x01);


            lcd_com (0xC0);


            counter--; // decrease the counter


            lcd_puts("            ");


            lcd_com (0xC0);


            lcd_bcd(1,counter);


            //lcd_puts("Left");


            }       


        }


我們還需要在每一步上存儲(chǔ)位置。為此, 我們使用了一個(gè)存儲(chǔ)當(dāng)前位置的變量 “position”。


position = Encoder_CLK; // It is to store the encoder clock position on the variable. Can be 0 or 1 


除此之外,還提供了一個(gè)選項(xiàng),用于 通知開(kāi)關(guān)按壓LCD上的。


if (Encoder_SW == 0)


{             


    sw_delayms(20); //debounce delay            


    if (Encoder_SW == 0)


          {                //lcd_com(1);                


                          //lcd_com(0xC0);                


                         lcd_puts ("switch pressed");


//                itoa(counter, value, 10);


//                lcd_puts(value);


            }


}


系統(tǒng) _ init 函數(shù)用于初始化引腳 ito 操作、lcd 和存儲(chǔ)旋轉(zhuǎn)編碼器位置。


void system_init() 


    {    


        TRISB = 0x00; // PORT B as output, This port is used for LCD        


        TRISDbits.TRISD2 = 1;    


        TRISDbits.TRISD3 = 1;    


        TRISCbits.TRISC4 = 1;    


        lcd_init(); // This will Initialize the LCD    


       position = Encoder_CLK;// Sotred the CLK position on system init, before the while loop start.


}


lcd 功能寫(xiě)在 lcd. h 庫(kù)上, 其中聲明了 lcd _ put ()、lcd _ cmd ()。


完整代碼:



/*


 * File:   main.c


 * Author: Sourav Gupta


 *


 * Created on 18 Dec 2018, 18:57


 */




/*


 * Configuration Related settings. Specific for microcontroller unit.


 */


#pragma config FOSC = HS        // Oscillator Selection bits (HS oscillator)


#pragma config WDTE = OFF       // Watchdog Timer Enable bit (WDT disabled)


#pragma config PWRTE = OFF      // Power-up Timer Enable bit (PWRT disabled)


#pragma config BOREN = ON       // Brown-out Reset Enable bit (BOR enabled)


#pragma config LVP = OFF         // Low-Voltage (Single-Supply) In-Circuit Serial Programming Enable bit (RB3/PGM pin has PGM function; low-voltage programming enabled)


#pragma config CPD = OFF        // Data EEPROM Memory Code Protection bit (Data EEPROM code protection off)


#pragma config WRT = OFF        // Flash Program Memory Write Enable bits (Write protection off; all program memory may be written to by EECON control)


#pragma config CP = OFF         // Flash Program Memory Code Protection bit (Code protection off)


#define _XTAL_FREQ 20000000


/*


 * System Header files inclusions


 */




#include


//#include


#include


#include "supporting c files/lcd.h"




#define Encoder_SW PORTDbits.RD2


#define Encoder_DT PORTDbits.RD3


#define Encoder_CLK PORTCbits.RC4




/*


 * Program flow related functions


 */


int counter; // It will hold the count of rotary encoder.


int position; // It will store the rotary encoder position.


void sw_delayms(unsigned int d);


int value[7];




/*


 * System Init Function


 */




void system_init ();




/* Main function single Thread*/


void main(void) {


    system_init();


    lcd_puts ("Circuit Digest");


    lcd_com(0xC0);


    counter = 0;


    while(1){


        lcd_com(0xC0);


        if (Encoder_SW == 0){


            sw_delayms(20);


            if (Encoder_SW == 0){


                //lcd_com(1);


                //lcd_com(0xC0);


                lcd_puts ("switch pressed");


//                itoa(counter, value, 10);


//                lcd_puts(value);


            }


        }                       


       if (Encoder_CLK != position){


            if (Encoder_DT != position){


               // lcd_com (0x01);


                counter++;


                lcd_com (0xC0);


                lcd_puts("                ");


                lcd_com (0xC0);


                lcd_bcd(1,counter);


            }


            else{


               // lcd_com (0x01);


                lcd_com (0xC0);


                counter--;


                lcd_puts("                ");


                lcd_com (0xC0);


                lcd_bcd(1,counter);


                //lcd_puts("Left");


            }           


        }


        position = Encoder_CLK;                




}




    return;


}




void sw_delayms(unsigned int d){


int x, y;


for(x=0;x

for(y=0;y<=1275;y++);


}




void system_init(){


    TRISB = 0x00; // PORT B as output, This port is used for LCD    


    TRISDbits.TRISD2 = 1;


    TRISDbits.TRISD3 = 1;


    TRISCbits.TRISC4 = 1;


    lcd_init(); // This will Initialize the LCD


    position = Encoder_CLK;// Sotred the CLK position on system init, before the while loop start.


}

關(guān)鍵字:旋轉(zhuǎn)編碼器  PIC  單片機(jī)接口 引用地址:旋轉(zhuǎn)編碼器與PIC單片機(jī)接口

上一篇:PIC單片機(jī)之定時(shí)器(TMR0)
下一篇:PIC單片機(jī)調(diào)試總結(jié)

推薦閱讀

上海,2018年1月29日 – 三重富士通半導(dǎo)體股份有限公司(以下簡(jiǎn)稱(chēng)“三重富士通半導(dǎo)體”)與富士通研究所(注2)針對(duì)車(chē)載雷達(dá)及第5代移動(dòng)通信系統(tǒng)等毫米波市場(chǎng),共同研發(fā)出可實(shí)現(xiàn)高精度電路設(shè)計(jì)的55nm CMOS 制程設(shè)計(jì)套件(Process Design kit,簡(jiǎn)稱(chēng)PDK)。通過(guò)此PDK的運(yùn)用,用戶能夠?qū)Π糯笃骷白冾l電路等毫米波設(shè)計(jì)的大規(guī)模電路進(jìn)行精確的設(shè)計(jì)。...
由于各種原因,我們?cè)谟瓮嬉欢翁摂M現(xiàn)實(shí)體驗(yàn)時(shí)間后可能需要重新校準(zhǔn)頭顯和控制器的視圖。盡管現(xiàn)在大多數(shù)系統(tǒng)的重新定位操作已經(jīng)相當(dāng)簡(jiǎn)便,但根據(jù)美國(guó)專(zhuān)利及商標(biāo)局日前公布的一份專(zhuān)利,F(xiàn)acebook認(rèn)為這可以進(jìn)一步簡(jiǎn)化。Facebook在名為“Aligning coordinate systems of two devices by tapping(通過(guò)輕觸校準(zhǔn)兩臺(tái)設(shè)備的坐標(biāo)系統(tǒng))”的發(fā)明中描述了一種...
一、請(qǐng)問(wèn)帶寬和采樣頻率之間有什么固定關(guān)系?采樣率理論上需要滿足農(nóng)效香采樣定律,即被測(cè)信號(hào)的最高頻率信號(hào)的每個(gè)周期理論上至少需要采2個(gè)點(diǎn),否則會(huì)造成混疊。但是在實(shí)際上還取決于很多其它的因素,比如波形的重構(gòu)算法等,Siglent系列示波器采用先進(jìn)的波形重構(gòu)算法,同時(shí)配備有插值算法,精確重構(gòu)波形。一般來(lái)說(shuō)采樣率是帶寬的4-5倍就可以比較準(zhǔn)確地再...
據(jù)外媒 appleinsider 報(bào)道,蘋(píng)果正在研究如何使 Apple Watch 的電池移動(dòng),以便向佩戴者提供觸覺(jué)反饋。  蘋(píng)果最新公布了一份 “帶有移動(dòng)電池元件的觸覺(jué)設(shè)備的便攜式電子設(shè)備”專(zhuān)利,專(zhuān)利申請(qǐng)說(shuō):  一般來(lái)說(shuō),電子設(shè)備包括一個(gè)或多個(gè)用于提供輸入的按鈕或機(jī)電開(kāi)關(guān)。某些設(shè)備包括用于接收輸入的觸摸傳感器或觸摸屏。但是,觸摸傳感器通常缺乏機(jī)械反...

史海拾趣

問(wèn)答坊 | AI 解惑

求助,關(guān)于MAX1898的應(yīng)用電路的問(wèn)題

有兩種電路,圖一我用面包板實(shí)驗(yàn)了,好使,但是圖二加了光耦后,典型電路的LED指示燈就不亮了. 此電路圖1用的是PDF上的經(jīng)典電路,基本原理就是單片機(jī)連接CHG,CHG發(fā)出充滿信息后單片機(jī)控制EN口停止充電,圖二的原理CHG是一樣的,不同的是利用光耦控制停止 ...…

查看全部問(wèn)答∨

8086數(shù)據(jù)寄存器都有哪些?各自的具體作用是什么?

8086數(shù)據(jù)寄存器都有哪些?各自的具體作用是什么?…

查看全部問(wèn)答∨

嵌入高手請(qǐng)進(jìn)!

嵌入高手交流的Q群:76276758;非高手請(qǐng)勿進(jìn)!…

查看全部問(wèn)答∨

給我們的嵌入式瀏覽器起個(gè)名字

我們公司剛開(kāi)發(fā)完一款嵌入式瀏覽器,要發(fā)布,現(xiàn)在讓公司每個(gè)人取三個(gè)名字,思來(lái)想去,也沒(méi)想出什么好名字,我知道網(wǎng)絡(luò)上有很多非常有才華的人,所以現(xiàn)在在網(wǎng)上發(fā)一下,集思廣益!謝謝!…

查看全部問(wèn)答∨

急需wince人才

專(zhuān)業(yè)經(jīng)驗(yàn)要求:   ·        5年以上編程工作經(jīng)驗(yàn)    3年以上C++ 編程經(jīng)驗(yàn) ·        1年以上WinCe的經(jīng)驗(yàn) (熟悉Linux系統(tǒng)/handheld手持更好); ·   & ...…

查看全部問(wèn)答∨

micro2440跑wince6.0

micro2440跑wince6.0,用(images\\wince6提供的)下的nboot_A70.bin,和NK_A70.bin,能跑 然后用(images\\wince6提供的)下的nboot_A70.bin,再用自己編譯的提供的mini2440的BSP生成的nk.bin(D:\\WINCE600\\OSDesigns\\Mini2440\\Mini2440\\RelDi ...…

查看全部問(wèn)答∨

windows 編程 關(guān)于無(wú)線上網(wǎng) 端口號(hào)的 問(wèn)題?

我們現(xiàn)在需要建立一個(gè) 100個(gè)節(jié)點(diǎn)的無(wú)線網(wǎng)絡(luò), 這 100 個(gè)節(jié)點(diǎn)中有97個(gè)是現(xiàn)場(chǎng)的 無(wú)線數(shù)據(jù)模塊,通過(guò)手機(jī)卡實(shí)現(xiàn) 無(wú)線上網(wǎng),3個(gè)節(jié)點(diǎn) 是數(shù)據(jù)中心,分別接有一臺(tái) PC機(jī)(此PC機(jī)為固定IP), 然后 這97個(gè) 無(wú)線模塊 分別 向一臺(tái) PC機(jī)發(fā)送數(shù)據(jù). ...…

查看全部問(wèn)答∨

關(guān)于windows mobile驅(qū)動(dòng)

我是做windows mobile應(yīng)用開(kāi)發(fā)的,對(duì)驅(qū)動(dòng)程序不是很了解。想問(wèn)問(wèn)關(guān)于驅(qū)動(dòng)的問(wèn)題。 在網(wǎng)上看了下關(guān)于流驅(qū)動(dòng)的介紹,想寫(xiě)一個(gè)驅(qū)動(dòng)在ppc手機(jī)開(kāi)機(jī)的時(shí)候自動(dòng)被加載。 我按照介紹用vs2008,WM5.0 SDK寫(xiě)了一個(gè)dll,實(shí)現(xiàn)了下面幾個(gè)函數(shù): DWORD TTT_Ini ...…

查看全部問(wèn)答∨

keil C 的變態(tài)輸出!

                     printf(\"bef1 temp:x%x humi:x%x \\n\",temp_val.i,humi_val.i);           humi_val.f=(float)humi_val.i;   &nb ...…

查看全部問(wèn)答∨

我改動(dòng)了RTC中的內(nèi)容系統(tǒng)就起不來(lái)了?

我目前用的是6410+wince6的平臺(tái),我改動(dòng)了RTC中的內(nèi)容,之前用的是CPU的RTC,目前我們加了一個(gè)外部的RTC,我通過(guò)iic對(duì)它進(jìn)行讀和寫(xiě)。 問(wèn)題1:如果采用我在驅(qū)動(dòng)中的iic驅(qū)動(dòng),通過(guò)deviceiocontrol的時(shí)候單獨(dú)編譯RTC的時(shí)候可以編譯的過(guò)去。但是如果使用 ...…

查看全部問(wèn)答∨
小廣播
設(shè)計(jì)資源 培訓(xùn) 開(kāi)發(fā)板 精華推薦

最新單片機(jī)文章

 
EEWorld訂閱號(hào)

 
EEWorld服務(wù)號(hào)

 
汽車(chē)開(kāi)發(fā)圈

 
機(jī)器人開(kāi)發(fā)圈

電子工程世界版權(quán)所有 京ICP證060456號(hào) 京ICP備10001474號(hào)-1 電信業(yè)務(wù)審批[2006]字第258號(hào)函 京公網(wǎng)安備 11010802033920號(hào) Copyright ? 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
主站蜘蛛池模板: 三门峡市| 图片| 民权县| 海城市| 双鸭山市| 德阳市| 甘洛县| 中方县| 舟山市| 英山县| 安平县| 宁陵县| 金秀| 正阳县| 聊城市| 佛冈县| 西吉县| 阳高县| 胶州市| 长寿区| 新晃| 噶尔县| 缙云县| 卢湾区| 莆田市| 锡林郭勒盟| 井陉县| 雷州市| 广东省| 武平县| 旬邑县| 沁阳市| 自治县| 扶绥县| 鹿邑县| 穆棱市| 香河县| 紫云| 桂林市| 武宁县| 镶黄旗|