第1步:材料
注意: 材料以星號(hào)列出的內(nèi)容可以替換,具體取決于您可能提供的內(nèi)容。本教程中用于該類(lèi)別的組件列在括號(hào)中。請(qǐng)注意,替換可能會(huì)使本指南的部分內(nèi)容無(wú)關(guān)(即如果使用不同的微控制器,則部分代碼可能無(wú)效)。
軟件:
MPLAB X IDE(免費(fèi)提供:http://www.microchip.com/pagehandler/zh-cn/family 。..
MPLAB XC8(免費(fèi)提供:http://www.microchip.com/pagehandler/en_us/devtoo 。..
硬件:
香蕉電纜
面包板
電線(xiàn)
PIC編程器/調(diào)試器* (MPLAB ICD 3)
USB 2.0電纜[包含在MPLAB ICD 3中]
PIC單片機(jī)*(PIC18F4520) - 務(wù)必使用 DIP 微控制器,以便它可以放入面包板。
帶旋轉(zhuǎn)編碼器的設(shè)備*(Pololu項(xiàng)目#2269)
10歐姆電阻器
RJ-11到面包板適配器(DigiKey#H11394-ND)
示波器探頭x 2(可選)
萬(wàn)用表(可選) - 有助于調(diào)試問(wèn)題
步驟2:電源設(shè)置
獲得必要的設(shè)備后,我們的下一個(gè)任務(wù)是設(shè)置面包板并為PIC微控制器(MCU)供電。這意味著是時(shí)候連接直流電源了。
電源: 正如您將在此步驟中所示的Acopian直流電源的圖片中看到的那樣每個(gè)電源通道都有三個(gè)彩色連接器,香蕉電纜可以連接到這些連接器上。就本教程而言,我們需要電源提供+ 5V和+ 0V(接地)。為了提供+ 5V和+ 0V,將電源的負(fù)極和接地端子連接在一起(圖中提供的綠色和黑色端子)。然后,將香蕉電纜連接到將要連接到面包板的正極(紅色)端子和接地(綠色)端子上。在面包板上找到的這些端子在步驟3中顯示為連接的香蕉電纜。
步驟3:面包板設(shè)置
面包板: 是時(shí)候設(shè)置面包板了。經(jīng)過(guò)我自己的許多布線(xiàn)災(zāi)難后,我建議你保持線(xiàn)顏色一致。在本教程中,您將看到紅色的+ 5V電線(xiàn)和綠色的+ 0V電線(xiàn),以及RJ-11到面包板連接器(已布線(xiàn))的電線(xiàn)的 exception 由一家公司)。另請(qǐng)注意,在面包板的端子排上設(shè)置+ 5V和+ 0V會(huì)很有幫助。
注意:上面提供的圖片顯示了下面提到的相同連接和幫助解釋下面的說(shuō)明。
引腳號(hào): 確定連接+ 5V和+ 0V(接地)的位置就像打開(kāi)此鏈接一樣簡(jiǎn)單(包含數(shù)據(jù)表)并向下滾動(dòng)到第四頁(yè):http://microchip.com/downloads/en/DeviceDoc/39631E 。..。在那里你會(huì)發(fā)現(xiàn)需要進(jìn)行以下連接:
Pin 11至+ 5V
Pin 12至+ 0V
Pin 31至+ 0V
Pin 32至+ 5V
Pin 1至 一側(cè) 100歐姆電阻(數(shù)據(jù)表中未提及)
此外,需要使用 RJ-11到面包板適配器(以下簡(jiǎn)稱(chēng)RJ-11)進(jìn)行以下連接適配器)。與該步驟相關(guān)的適配器的圖片還顯示了要連接的對(duì)象。
RJ-11適配器黃線(xiàn):至+ 5V
RJ-11適配器藍(lán)線(xiàn):至 10Ohm電阻器
RJ-11適配器:綠線(xiàn):到+ 0V
RJ-11適配器紅色線(xiàn):到插針40
RJ-11適配器黑線(xiàn):到插針39
RJ-11適配器白線(xiàn)是 不 已連接
作為經(jīng)驗(yàn)法則您可以記住,集成電路芯片始于引腳1位于左上角,然后向下移動(dòng)左側(cè),然后向上備份編號(hào)最高的引腳(右上角)。要從下往上看,通常在芯片的頂部有一個(gè)凹痕或圓點(diǎn)。
還要注意 VDD = + 5V 和 VSS = + 0V (地面)
第4步:編碼器設(shè)置
接下來(lái),將帶有編碼器的電動(dòng)機(jī)添加到電路中,并連接到微控制器。如果您訂購(gòu)了材料頁(yè)面上列出的電動(dòng)機(jī),則它帶有6針適配器,可用于將編碼器插入面包板(參見(jiàn)圖1)。
電路連接:電動(dòng)機(jī)&編碼器需要下面列出的連接。包括三張圖片,每張圖片在電路上都有不同的視圖,以幫助進(jìn)行編碼器連接過(guò)程。
紅線(xiàn):至+ 5V
黑線(xiàn):至+ 0V
綠線(xiàn):至+ 0V
藍(lán)線(xiàn):至+ 5V
黃線(xiàn):至Pin 33(微控制器上)
白線(xiàn):至Pin 34(微控制器上)
您可能希望連接紅線(xiàn) 僅在測(cè)試 電機(jī)時(shí),因?yàn)楫?dāng)前配置會(huì)使電機(jī)不斷運(yùn)轉(zhuǎn)。或者,可以使用電機(jī)驅(qū)動(dòng)器來(lái)打開(kāi)和關(guān)閉電機(jī)(本教程未介紹)。
步驟5:編程設(shè)置
在電路調(diào)試器中:要完成此項(xiàng)目的硬件設(shè)置,請(qǐng)使用RJ-11電纜將ICD3連接到電路。最后,使用USB 2.0電纜將ICD3連接到計(jì)算機(jī)。
MPLAB X配置:至此,我們準(zhǔn)備打開(kāi)MPLAB X并設(shè)置我們的項(xiàng)目。請(qǐng)參閱以下步驟:
文件》新建項(xiàng)目》獨(dú)立項(xiàng)目
選擇設(shè)備:PIC18F4520
選擇硬件工具:ICD3
選擇編譯器:XC8
名稱(chēng)并保存您的項(xiàng)目
注意: :如果您在使用這些說(shuō)明時(shí)遇到任何困難,請(qǐng)從起始頁(yè)中選擇“快速入門(mén)”,這將打開(kāi)一個(gè)網(wǎng)頁(yè),該網(wǎng)頁(yè)將指導(dǎo)您完成與圖像相同的步驟。為了本項(xiàng)目的目的,我們只關(guān)注該頁(yè)面上的前五個(gè)步驟。
第6步:編程

此時(shí),我們將專(zhuān)門(mén)使用MPLAB X IDE。要開(kāi)始使用,請(qǐng)注意MPLAB IDE窗口左側(cè)標(biāo)題為 Projects 的面板。在此面板中,創(chuàng)建代碼:
右鍵單擊 項(xiàng)目下方列出的“源文件”文件夾》新建》 C主文件
無(wú)需任何操作根據(jù)需要命名(‘Main’很好)現(xiàn)在您將看到MPLAB X創(chuàng)建了一個(gè) 主文件 ,在中心面板中可見(jiàn)。
代碼: 就本教程而言,我將提供必要的代碼,您可以將其復(fù)制并粘貼到該中心窗口中(刪除文件中的所有其他文本之后)。讓您了解代碼的作用,我在下面簡(jiǎn)要介紹了實(shí)際代碼本身的評(píng)論(粘貼在下面)
概述: 對(duì)PIC單片機(jī)進(jìn)行編程的代碼有幾個(gè)不同的部分,概述如下。
定義語(yǔ)句: 定義語(yǔ)句允許程序員使用可能對(duì)計(jì)算機(jī)有意義的單詞。例如,我們可以將單詞OFF定義為二進(jìn)制“0”。因此,當(dāng)我們看到“ off”一詞使代碼更易于理解時(shí),計(jì)算機(jī)將讀取二進(jìn)制“ 0”。
Include語(yǔ)句: Include語(yǔ)句告訴編譯器執(zhí)行以下操作:包括各種頭文件。這些外部文件可能包含定義輸入/輸出函數(shù)(stdlib.h)或各種標(biāo)準(zhǔn)C函數(shù)(stdio.h)等的文件。
編譯指示: Pragma用于設(shè)置微控制器上的配置位,用于控制振蕩器選擇,代碼保護(hù)等方面。請(qǐng)選擇窗口》 PIC存儲(chǔ)器視圖》配置位
《隨意檢查配置位。 strong》函數(shù):函數(shù)是執(zhí)行特定任務(wù)的程序部分。主要功能是程序開(kāi)始執(zhí)行。
程序:
/***************** ************************************************** *
如何編程PIC和讀取編碼器程序
最近修訂:1/3/14
作者:Carson Miller
撰寫(xiě):PIC18F4525(當(dāng)前版本)
**** ************************************************** ***************/
#define INPUT 1
#define OUTPUT 0
#define _XTAL_FREQ 4000000//由XC8使用delay_ms(x)宏
//PIC18F25K22配置位設(shè)置
#include //包括PIC硬件映射
#include“ GenericTypeDefs.h”//包括標(biāo)準(zhǔn)變量類(lèi)型
//#pragma config語(yǔ)句應(yīng)位于
//使用項(xiàng)目枚舉代替#define進(jìn)行ON和OFF。 CONFIG1H
#pragma config OSC = INTIO7//振蕩器選擇位(內(nèi)部振蕩器模塊,RA6的CLKOUT功能) ,RA7上的端口功能)
#pragma config FCMEN = OFF//故障保護(hù)時(shí)鐘監(jiān)視器使能位(故障保護(hù)時(shí)鐘監(jiān)視器禁用)
#pragma config IESO = OFF//內(nèi)部/外部振蕩器切換位(禁用振蕩器切換模式)
//CONFIG2L
#pragma config PWRT = OFF//上電定時(shí)器使能位(PWRT禁止)
#pragma config BOREN = SBORDIS//欠壓復(fù)位使能位(僅在硬件中使能欠壓復(fù)位(SBOREN禁用))
#pragma config BORV = 3//欠壓復(fù)位電壓位(最小設(shè)置)
//CONFIG2H
#pragma config WDT = OFF//看門(mén)狗定時(shí)器使能位(WDT使能)
#pragma config WDTPS = 32768//看門(mén)狗定時(shí)器后置選擇位(1:32768)
//CONFIG3H
#pragma config CCP2MX = PORTC//CCP2 MUX位(CCP2輸入/輸出與RC1復(fù)用)
#pragma config PBADEN = ON//PORTB A/D使能位(PORTB 《4:0》引腳在復(fù)位時(shí)配置為模擬輸入通道)
#pragma config LPT1OSC = OFF//低功耗Timer1振蕩器使能位(Timer1配置為更高功率運(yùn)行)
#pragma config MCLRE = ON//MCLR Pi n使能位(MCLR引腳使能; RE3輸入引腳已禁用)
//CONFIG4L
#pragma config STVREN = ON//堆棧滿(mǎn)/下溢復(fù)位使能位(堆棧滿(mǎn)/下溢將導(dǎo)致復(fù)位)
#pragma config LVP = OFF//單 - 供應(yīng)ICSP使能位(單電源ICSP使能)
#pragma config XINST = OFF//擴(kuò)展指令集使能位(指令集擴(kuò)展和索引尋址模式禁用(傳統(tǒng)模式))
//CONFIG5L
#pragma config CP0 = OFF//代碼保護(hù)位(塊0(000800-003FFFh)未受代碼保護(hù))
#pragma config CP1 = OFF//代碼保護(hù)位(塊1(004000-007FFFh)不代碼 -
#pragma config CP2 = OFF//代碼保護(hù)位(塊2(008000-00BFFFh)沒(méi)有代碼保護(hù))
//CONFIG5H
#pragma config CPB = OFF//引導(dǎo)塊代碼保護(hù)位(引導(dǎo)塊(000000-0007FFh)沒(méi)有代碼保護(hù))
#pragma config CPD = OFF//數(shù)據(jù)EEPROM代碼保護(hù)位(數(shù)據(jù)EEPROM沒(méi)有代碼保護(hù))
//CONFIG6L
#pragma config WRT0 = OFF//寫(xiě)保護(hù)位(塊0(000800) -003FFFh)沒(méi)有寫(xiě)保護(hù))
#pragma config WRT1 = OFF//寫(xiě)保護(hù)位(塊1(004000-007FFFh)沒(méi)有寫(xiě)保護(hù))
#pragma config WRT2 = OFF//寫(xiě)保護(hù)位(塊2(008000-00BFFFh)沒(méi)有寫(xiě)保護(hù))
//CONFIG6H
#pragma config WRTC = OFF//配置寄存器寫(xiě)保護(hù)位(配置寄存器(300000-3000FFh)沒(méi)有寫(xiě)保護(hù))
#pragma config WRTB = OFF//引導(dǎo)塊寫(xiě)保護(hù)位(引導(dǎo)塊(000000-0007FFh)未寫(xiě)保護(hù))
#pragma config WRTD = OFF//數(shù)據(jù)EEPROM寫(xiě)保護(hù)位(數(shù)據(jù)EEPROM未寫(xiě)保護(hù))
//CONFIG7L
#pragma config EBTR0 = OFF//表讀保護(hù)位(塊0(000800-003FFFh)不受其他塊中執(zhí)行的表讀操作的保護(hù))
#pragma config EBTR1 = OFF//表讀保護(hù)位(塊1(004000-007FFFh)不受其他塊中執(zhí)行的表讀操作的保護(hù))
#pragma config EBTR2 = OFF//表讀保護(hù)位(塊2(008000-00BFFFh)未受保護(hù)
//CONFIG7H
#pragma config EBTRB = OFF//引導(dǎo)塊表讀取保護(hù)位(引導(dǎo)塊(000000-0007FFh)不受其他塊中執(zhí)行的表讀取的保護(hù))
》//虛擬變量設(shè)置
UINT距離= 0;
CHAR方向= 0;
CHAR錯(cuò)誤= 0;
void configure(void)
{
//ADC Setup
ADCON1bits.PCFG = 1111;//關(guān)閉所有模擬輸入(參見(jiàn)數(shù)據(jù)表第224頁(yè))
//振蕩器設(shè)置
OSCCONbits.IRCF = 110;//將振蕩器設(shè)置為4MHz
//中斷設(shè)置
INTCONbits.GIE = 1;//啟用所有未屏蔽或高優(yōu)先級(jí)的中斷(取決于IPEN)
INTCONbits.PEIE = 1;//啟用所有未屏蔽的外設(shè)中斷或低優(yōu)先級(jí)中斷(取決于IPEN)
INTCONbits.INT0IF = 0;//清除中斷0標(biāo)志位(必須在啟用中斷之前發(fā)生)
INTCONbits.INT0IE = 1;//啟用INT0外部中斷
INTCON2bits.INTEDG0 = 1;//將外部中斷0設(shè)置為在上升沿中斷
RCONbits.IPEN = 0;//禁用中斷優(yōu)先級(jí)
TRISBbits.TRISB0 = INPUT;//將INT0設(shè)置為輸入
TRISBbits.TRISB1 = INPUT;//將INT1設(shè)置為輸入
}
void main()
{
configure();
while(1)
{
//Program Loop
}
}
//主中斷服務(wù)程序(ISR)
void中斷ISR()
{
//檢查它是否是中斷0
(INTCONbits.INT0IF = = 1)
{
distance ++;
INTCONbits.INT0IF = 0;//清除中斷標(biāo)志
錯(cuò)誤= 1;
}
步驟7:運(yùn)行程序和調(diào)試
使用MPLABX IDE的注意事項(xiàng): 添加該程序后,您可以按以下方式運(yùn)行該程序調(diào)試項(xiàng)目按鈕。調(diào)試項(xiàng)目按鈕看起來(lái)像一段破碎的代碼,旁邊有一個(gè)播放按鈕,位于上方工具欄(文件工具欄下方)。按下此按鈕后,您將可以使用上方工具欄中的按鈕暫停和播放程序。
檢查編碼器值: 要檢查編碼器值,必須在MPLAB IDE窗口左側(cè)的面板中添加變量“watch”。只需單擊“輸入新手表”的位置,然后鍵入方向或距離。然后,您將可以通過(guò)該窗口跟蹤這些變量。請(qǐng)注意,必須暫停程序才能看到變量監(jiān)視中的值發(fā)生變化。此外,如果變量監(jiān)視中的值以不正確的格式顯示,請(qǐng)右鍵單擊不正確的值并將鼠標(biāo)懸停在“顯示值列為”上,以便您可以選擇正確的格式。
項(xiàng)目完成!
如果你已經(jīng)到了最后并且沒(méi)有工作項(xiàng)目,請(qǐng)不要擔(dān)心。有許多事情要嘗試:
萬(wàn)用表:檢查以確保您的微控制器和電機(jī)/編碼器在適當(dāng)?shù)奈恢媒邮? 5V和+ 0V(接地)
示波器:檢查以確保編碼器正在發(fā)送與該步驟相關(guān)的示波器圖像中所示的信號(hào)。編碼器應(yīng)該從黃色和白色線(xiàn)中放出兩個(gè)90度異相的方波。
MPLAB X:檢查以確保您的微控制器設(shè)置正確,確保您的特殊功能寄存器具有適當(dāng)?shù)亩M(jìn)制值(在步驟6的代碼中設(shè)置)。要在調(diào)試會(huì)話(huà)期間暫停后,要查看特殊功能寄存器,請(qǐng)轉(zhuǎn)到窗口》 PIC內(nèi)存視圖》 SFR。從那里你可以檢查INT0(引腳33)的引腳是否設(shè)置為輸入,例如,將光標(biāo)懸停在TRISB寄存器上。
責(zé)任編輯:wv
-
單片機(jī)
+關(guān)注
關(guān)注
6077文章
45519瀏覽量
671876 -
編碼器
+關(guān)注
關(guān)注
45文章
3980瀏覽量
142971 -
編程
+關(guān)注
關(guān)注
90文章
3718瀏覽量
97284
發(fā)布評(píng)論請(qǐng)先 登錄
磁鐵在編碼器中的作用與應(yīng)用
學(xué)習(xí)單片機(jī)快速方法
單片機(jī)解密是什么?
為什么單片機(jī)還在用C語(yǔ)言編程?
Vishay USB編碼器接口技術(shù)解析與應(yīng)用指南
舵機(jī)伺服編碼器
Bourns發(fā)布全新增量式微型編碼器
絕對(duì)值編碼器與增量式編碼器相比有哪些優(yōu)勢(shì)?
怎樣對(duì)PIC單片機(jī)進(jìn)行編程和讀取編碼器
評(píng)論