0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

怎样对PIC单片机进行编程和读取编码器

454398 来源:网络整理 作者:佚名 2019-11-05 17:30 次阅读

第1步:材料

注意: 材料以星号列出的内容可以替换,具体取决于您可能提供的内容。本教程中用于该类别的组件列在括号中。请注意,替换可能会使本指南的部分内容无关(即如果使用不同的微控制器,则部分代码可能无效)。

软件:

MPLAB X IDE(免费提供:http://www.microchip.com/pagehandler/zh-cn/family 。..

MPLAB XC8(免费提供:http://www.microchip.com/pagehandler/en_us/devtoo 。..

硬件

DC电源

香蕉电缆

面包板

电线

PIC编程器/调试器* (MPLAB ICD 3)

RJ11连接器[包含在MPLAB ICD 3中]

USB 2.0电缆[包含在MPLAB ICD 3中]

PIC单片机*(PIC18F4520) - 务必使用 DIP 微控制器,以便它可以放入面包板。

带旋转编码器的设备*(Pololu项目#2269)

10欧姆电阻器

RJ-11到面包板适配器(DigiKey#H11394-ND)

示波器(可选) - 允许您查看编码器信号

示波器探头x 2(可选)

万用表(可选) - 有助于调试问题

步骤2:电源设置

获得必要的设备后,我们的下一个任务是设置面包板并为PIC微控制器MCU供电。这意味着是时候连接直流电源了。

电源: 正如您将在此步骤中所示的Acopian直流电源的图片中看到的那样每个电源通道都有三个彩色连接器,香蕉电缆可以连接到这些连接器上。就本教程而言,我们需要电源提供+ 5V和+ 0V(接地)。为了提供+ 5V和+ 0V,将电源的负极和接地端子连接在一起(图中提供的绿色和黑色端子)。然后,将香蕉电缆连接到将要连接到面包板的正极(红色)端子和接地(绿色)端子上。在面包板上找到的这些端子在步骤3中显示为连接的香蕉电缆。

步骤3:面包板设置

面包板: 是时候设置面包板了。经过我自己的许多布线灾难后,我建议你保持线颜色一致。在本教程中,您将看到红色的+ 5V电线和绿色的+ 0V电线,以及RJ-11到面包板连接器(已布线)的电线的 exception 由一家公司)。另请注意,在面包板的端子排上设置+ 5V和+ 0V会很有帮助。

注意:上面提供的图片显示了下面提到的相同连接和帮助解释下面的说明。

引脚号: 确定连接+ 5V和+ 0V(接地)的位置就像打开此链接一样简单(包含数据表)并向下滚动到第四页:http://microchip.com/downloads/en/DeviceDoc/39631E 。..。在那里你会发现需要进行以下连接:

Pin 11至+ 5V

Pin 12至+ 0V

Pin 31至+ 0V

Pin 32至+ 5V

Pin 1至 一侧 100欧姆电阻(数据表中未提及)

此外,需要使用 RJ-11到面包板适配器(以下简称RJ-11)进行以下连接适配器)。与该步骤相关的适配器的图片还显示了要连接的对象。

RJ-11适配器黄线:至+ 5V

RJ-11适配器蓝线:至 10Ohm电阻器

RJ-11适配器:绿线:到+ 0V

RJ-11适配器红色线:到插针40

RJ-11适配器黑线:到插针39

RJ-11适配器白线是 不 已连接

作为经验法则您可以记住,集成电路芯片始于引脚1位于左上角,然后向下移动左侧,然后向上备份编号最高的引脚(右上角)。要从下往上看,通常在芯片的顶部有一个凹痕或圆点。

还要注意 VDD = + 5V 和 VSS = + 0V (地面)

第4步:编码器设置

接下来,将带有编码器的电动机添加到电路中,并连接到微控制器。如果您订购了材料页面上列出的电动机,则它带有6针适配器,可用于将编码器插入面包板(参见图1)。

电路连接:电动机&编码器需要下面列出的连接。包括三张图片,每张图片在电路上都有不同的视图,以帮助进行编码器连接过程。

红线:至+ 5V

黑线:至+ 0V

绿线:至+ 0V

蓝线:至+ 5V

黄线:至Pin 33(微控制器上)

白线:至Pin 34(微控制器上)

您可能希望连接红线 仅在测试 电机时,因为当前配置会使电机不断运转。或者,可以使用电机驱动器来打开和关闭电机(本教程未介绍)。

步骤5:编程设置

在电路调试器中:要完成此项目的硬件设置,请使用RJ-11电缆将ICD3连接到电路。最后,使用USB 2.0电缆将ICD3连接到计算机。

MPLAB X配置:至此,我们准备打开MPLAB X并设置我们的项目。请参阅以下步骤:

文件》新建项目》独立项目

选择设备:PIC18F4520

选择硬件工具:ICD3

选择编译器:XC8

名称并保存您的项目

注意: :如果您在使用这些说明时遇到任何困难,请从起始页中选择“快速入门”,这将打开一个网页,该网页将指导您完成与图像相同的步骤。为了本项目的目的,我们只关注该页面上的前五个步骤。

第6步:编程

此时,我们将专门使用MPLAB X IDE。要开始使用,请注意MPLAB IDE窗口左侧标题为 Projects 的面板。在此面板中,创建代码:

右键单击 项目下方列出的“源文件”文件夹》新建》 C主文件

无需任何操作根据需要命名(‘Main’很好)现在您将看到MPLAB X创建了一个 主文件 ,在中心面板中可见。

代码: 就本教程而言,我将提供必要的代码,您可以将其复制并粘贴到该中心窗口中(删除文件中的所有其他文本之后)。让您了解代码的作用,我在下面简要介绍了实际代码本身的评论(粘贴在下面)

概述: 对PIC单片机进行编程的代码有几个不同的部分,概述如下。

定义语句: 定义语句允许程序员使用可能对计算机有意义的单词。例如,我们可以将单词OFF定义为二进制“0”。因此,当我们看到“ off”一词使代码更易于理解时,计算机将读取二进制“ 0”。

Include语句: Include语句告诉编译器执行以下操作:包括各种头文件。这些外部文件可能包含定义输入/输出函数(stdlib.h)或各种标准C函数(stdio.h)等的文件。

编译指示: Pragma用于设置微控制器上的配置位,用于控制振荡器选择,代码保护等方面。请选择窗口》 PIC存储器视图》配置位

《随意检查配置位。 strong》函数:函数是执行特定任务的程序部分。主要功能是程序开始执行。

程序:

/***************** ************************************************** *

如何编程PIC和读取编码器程序

最近修订:1/3/14

作者:Carson Miller

撰写:PIC18F4525(当前版本)

**** ************************************************** ***************/

#define INPUT 1

#define OUTPUT 0

#define _XTAL_FREQ 4000000//由XC8使用delay_ms(x)宏

//PIC18F25K22配置位设置

#include //包括PIC硬件映射

#include“ GenericTypeDefs.h”//包括标准变量类型

//#pragma config语句应位于

//使用项目枚举代替#define进行ON和OFF。 CONFIG1H

#pragma config OSC = INTIO7//振荡器选择位(内部振荡器模块,RA6的CLKOUT功能) ,RA7上的端口功能)

#pragma config FCMEN = OFF//故障保护时钟监视器使能位(故障保护时钟监视器禁用)

#pragma config IESO = OFF//内部/外部振荡器切换位(禁用振荡器切换模式)

//CONFIG2L

#pragma config PWRT = OFF//上电定时器使能位(PWRT禁止)

#pragma config BOREN = SBORDIS//欠压复位使能位(仅在硬件中使能欠压复位(SBOREN禁用))

#pragma config BORV = 3//欠压复位电压位(最小设置)

//CONFIG2H

#pragma config WDT = OFF//看门狗定时器使能位(WDT使能)

#pragma config WDTPS = 32768//看门狗定时器后置选择位(1:32768)

//CONFIG3H

#pragma config CCP2MX = PORTC//CCP2 MUX位(CCP2输入/输出与RC1复用)

#pragma config PBADEN = ON//PORTB A/D使能位(PORTB 《4:0》引脚在复位时配置为模拟输入通道)

#pragma config LPT1OSC = OFF//低功耗Timer1振荡器使能位(Timer1配置为更高功率运行)

#pragma config MCLRE = ON//MCLR Pi n使能位(MCLR引脚使能; RE3输入引脚已禁用)

//CONFIG4L

#pragma config STVREN = ON//堆栈满/下溢复位使能位(堆栈满/下溢将导致复位)

#pragma config LVP = OFF//单 - 供应ICSP使能位(单电源ICSP使能)

#pragma config XINST = OFF//扩展指令集使能位(指令集扩展和索引寻址模式禁用(传统模式))

//CONFIG5L

#pragma config CP0 = OFF//代码保护位(块0(000800-003FFFh)未受代码保护)

#pragma config CP1 = OFF//代码保护位(块1(004000-007FFFh)不代码 -

#pragma config CP2 = OFF//代码保护位(块2(008000-00BFFFh)没有代码保护)

//CONFIG5H

#pragma config CPB = OFF//引导块代码保护位(引导块(000000-0007FFh)没有代码保护)

#pragma config CPD = OFF//数据EEPROM代码保护位(数据EEPROM没有代码保护)

//CONFIG6L

#pragma config WRT0 = OFF//写保护位(块0(000800) -003FFFh)没有写保护)

#pragma config WRT1 = OFF//写保护位(块1(004000-007FFFh)没有写保护)

#pragma config WRT2 = OFF//写保护位(块2(008000-00BFFFh)没有写保护)

//CONFIG6H

#pragma config WRTC = OFF//配置寄存器写保护位(配置寄存器(300000-3000FFh)没有写保护)

#pragma config WRTB = OFF//引导块写保护位(引导块(000000-0007FFh)未写保护)

#pragma config WRTD = OFF//数据EEPROM写保护位(数据EEPROM未写保护)

//CONFIG7L

#pragma config EBTR0 = OFF//表读保护位(块0(000800-003FFFh)不受其他块中执行的表读操作的保护)

#pragma config EBTR1 = OFF//表读保护位(块1(004000-007FFFh)不受其他块中执行的表读操作的保护)

#pragma config EBTR2 = OFF//表读保护位(块2(008000-00BFFFh)未受保护

//CONFIG7H

#pragma config EBTRB = OFF//引导块表读取保护位(引导块(000000-0007FFh)不受其他块中执行的表读取的保护)

》//虚拟变量设置

UINT距离= 0;

CHAR方向= 0;

CHAR错误= 0;

void configure(void)

{

//ADC Setup

ADCON1bits.PCFG = 1111;//关闭所有模拟输入(参见数据表第224页)

//振荡器设置

OSCCONbits.IRCF = 110;//将振荡器设置为4MHz

//中断设置

INTCONbits.GIE = 1;//启用所有未屏蔽或高优先级的中断(取决于IPEN)

INTCONbits.PEIE = 1;//启用所有未屏蔽的外设中断或低优先级中断(取决于IPEN)

INTCONbits.INT0IF = 0;//清除中断0标志位(必须在启用中断之前发生)

INTCONbits.INT0IE = 1;//启用INT0外部中断

INTCON2bits.INTEDG0 = 1;//将外部中断0设置为在上升沿中断

RCONbits.IPEN = 0;//禁用中断优先级

TRISBbits.TRISB0 = INPUT;//将INT0设置为输入

TRISBbits.TRISB1 = INPUT;//将INT1设置为输入

}

void main()

{

configure();

while(1)

{

//Program Loop

}

}

//主中断服务程序(ISR)

void中断ISR()

{

//检查它是否是中断0

(INTCONbits.INT0IF = = 1)

{

distance ++;

INTCONbits.INT0IF = 0;//清除中断标志

错误= 1;

}

步骤7:运行程序和调试

使用MPLABX IDE的注意事项: 添加该程序后,您可以按以下方式运行该程序调试项目按钮。调试项目按钮看起来像一段破碎的代码,旁边有一个播放按钮,位于上方工具栏(文件工具栏下方)。按下此按钮后,您将可以使用上方工具栏中的按钮暂停和播放程序。

检查编码器值: 要检查编码器值,必须在MPLAB IDE窗口左侧的面板中添加变量“watch”。只需单击“输入新手表”的位置,然后键入方向或距离。然后,您将可以通过该窗口跟踪这些变量。请注意,必须暂停程序才能看到变量监视中的值发生变化。此外,如果变量监视中的值以不正确的格式显示,请右键单击不正确的值并将鼠标悬停在“显示值列为”上,以便您可以选择正确的格式。

项目完成!

如果你已经到了最后并且没有工作项目,请不要担心。有许多事情要尝试:

万用表:检查以确保您的微控制器和电机/编码器在适当的位置接收+ 5V和+ 0V(接地)

示波器:检查以确保编码器正在发送与该步骤相关的示波器图像中所示的信号。编码器应该从黄色和白色线中放出两个90度异相的方波。

MPLAB X:检查以确保您的微控制器设置正确,确保您的特殊功能寄存器具有适当的二进制值(在步骤6的代码中设置)。要在调试会话期间暂停后,要查看特殊功能寄存器,请转到窗口》 PIC内存视图》 SFR。从那里你可以检查INT0(引脚33)的引脚是否设置为输入,例如,将光标悬停在TRISB寄存器上。

责任编辑:wv

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 单片机
    +关注

    关注

    6001

    文章

    43970

    浏览量

    620778
  • 编码器
    +关注

    关注

    41

    文章

    3360

    浏览量

    131481
  • 编程
    +关注

    关注

    88

    文章

    3439

    浏览量

    92375
收藏 人收藏

    评论

    相关推荐

    为什么串口通过RS485读的编码器数据值不正确?

    请教下为什么串口通过RS485读的编码器数据值不正确,能够接收到数据。编码器的波形一直到单片机的串口引脚都没问题,就是串口接收数据不对。
    发表于 03-29 09:08

    差分编码器信号如何接plc?

    差分编码器信号通常用于测量旋转运动或线性位置,接收差分编码器信号的PLC(可编程逻辑控制器)需要进行相应的信号处理才能正确读取并理解
    的头像 发表于 03-05 08:42 307次阅读
    差分<b class='flag-5'>编码器</b>信号如何接plc?

    差分编码器信号如何接plc

    差分编码器信号通常用于测量旋转运动或线性位置,接收差分编码器信号的PLC(可编程逻辑控制器)需要进行相应的信号处理才能正确读取并理解
    的头像 发表于 02-26 14:43 761次阅读

    编码器零点位置怎么看 | 编码器零位怎样确定

    编码器零点位置怎么看 要确定编码器的零点位置,可以通过以下几种方式进行观察: 1. 物理标记点:一些编码器在其旋转轴上具有专门的物理标记点,例如凹槽或凸起。通过观察轴上的标记点,可以确
    的头像 发表于 02-18 18:28 954次阅读
    <b class='flag-5'>编码器</b>零点位置怎么看 | <b class='flag-5'>编码器</b>零位<b class='flag-5'>怎样</b>确定

    编码器好坏怎么判断,编码器原理

    编码器(Encoder)是将输入数据转化为特定编码表示的一种技术。对于不同类型的编码器,评判其好坏可以从多个方面进行考量,包括编码质量、速度
    的头像 发表于 01-23 10:58 627次阅读

    编码器零点位置怎么看 编码器零位怎样确定

    一些编码器会在其旋转轴上标记一个特殊的标记点,例如一个凹槽或凸起。通过在编码器旋转到特定位置时对标记点进行检测,可以确定零位。
    发表于 01-18 14:49 460次阅读

    pic单片机编程序实例

    以下是一个简单的PIC单片机编程序示例,这个程序将实现一个LED闪烁的功能。 首先,我们需要了解PIC单片机的结构和指令集。
    的头像 发表于 12-14 11:01 677次阅读

    单片机怎样对电路进行控制的?

    单片机怎样对电路进行控制的?
    发表于 10-27 07:29

    51单片机如何控制磁编码器

    51单片机如何控制磁编码器
    发表于 10-27 06:32

    怎么用PIC单片机中的USB模块和PC进行通信?

    怎么用PIC单片机中的USB模块和PC进行通信
    发表于 10-18 08:17

    可以直接通过编码器读取原点的位置吗?

    可以直接通过编码器读取原点的位置吗
    发表于 10-13 06:33

    请问单片机如何模拟编码器ABZ脉冲?

    我想用单片机模拟发送 正交编码器的ABZ脉冲,用于测试
    发表于 09-26 06:42

    编码器种类及型号

    编码器种类及型号:最常见的编码器类型是旋转编码器和线性编码器。旋转编码器通常用于测量机器人的关节位置,以及测量车辆和船只的转向角度。线性
    的头像 发表于 05-18 11:15 3776次阅读
    <b class='flag-5'>编码器</b>种类及型号

    编码器是什么?编码器有哪些分类及应用

    编码器,广泛应用于工业自动化、精密机械、卫星、导航设备等领域。编码器的分类可以按照其使用的原理、输入信号类型、数据率、电源电压等多方面进行
    的头像 发表于 05-18 11:08 3527次阅读
    <b class='flag-5'>编码器</b>是什么?<b class='flag-5'>编码器</b>有哪些分类及应用

    增量型编码器与绝对值编码器

    增量型编码器与绝对值型编码器怎么选择?在进行编码器选择时,增量型编码器和绝对值型编码器是两种常见
    的头像 发表于 05-08 11:28 1490次阅读
    增量型<b class='flag-5'>编码器</b>与绝对值<b class='flag-5'>编码器</b>