文档库 最新最全的文档下载
当前位置:文档库 › 基于51单片机的光电编码器测速报告

基于51单片机的光电编码器测速报告

基于51单片机的光电编码器测速报告
基于51单片机的光电编码器测速报告

课程设计报告

课程名称:微机原理课程设计

题目:基于51单片机的光电编码器测速

光电编码器是高精度位置控制系统常用的一种位移检测传感器。在位置控制系统中,由于电机既可能正转,也可能反转,所以要对与其相连的编码器输出的脉冲进行计数,要求相应的计数器既能实现加计数,又能实现减计数,即进行可逆计数。其计数的方法有多种,包括纯粹的软件计数和硬件计数。文中分别对这两种常用的计数方法进行了分析,对其优缺点进行了对比,最后提出了一种新的计数方法,利用80C51单片机内部的计数器实现对光电编码器输出脉冲的加减可逆计数,既节省了硬件资源,又能得到较高的计数频率。本设计就是由单片机STC89C52RC芯片,光电编码器和1602液晶为核心,辅以必要的电路,构成了一个基于51单片机的光电编码器测速器。该系统有两个控制按键,分别用于控制每秒的转速和每分钟的转速,并将速度用1602液晶显示出来。该测速器测速精准,具有实时检测的功能,操作简单。

关键词:光电编码器,51单片机,C语言,1602液晶

一、设计任务与要求 (4)

1.1 设计任务 (4)

1.2 设计要求 (4)

二、方案总体设计 (5)

2.1 方案一 (5)

2.2 方案二 (5)

2.3 系统采用方案 (5)

三、硬件设计 (7)

3.1 单片机最小系统 (7)

3.2 液晶显示模块 (7)

3.3 系统电源 (8)

3.4光电编码器电路 (8)

3.5 整体电路 (9)

四、软件设计 (10)

4.1 keil软件介绍 (10)

4.2 系统程序流程 (10)

五、仿真与实现 (12)

5.1 proteus软件介绍 (12)

5.2 仿真过程 (12)

5.3 实物制作与调试 (13)

5.4 使用说明 (14)

六、总结 (15)

6.1 设计总结 (15)

6.2 经验总结 (15)

七、参考文献 (16)

一、设计任务与要求

1.1 设计任务

1).对更多小器件的了解

2).巩固51单片机和C语言的知识,熟悉单片机和C语言的实际操作运用

3).掌握仿真软件的运用和原理图的绘制

4).加深焊接的技巧,提高焊接的能力

5).熟悉调试方法和技巧,提高解决实际问题的能力

6).熟悉设计报告的编写过程

1.2 设计要求

1).两个按键控制显示每分钟和每秒钟的功能

2).74LS74辅助光电编码器测转向

3).光电编码器输出脉冲计数

4).1602液晶显示转速

二、方案总体设计

设计一个基于51单片机的光电编码器测测速。设计一个电路来实现光电编码器测量;利用单片机内部精确到微妙的定时计数器来实现一个周期的时间来统计脉冲数;74LS74作为辅助芯片来完善光电编码器测转向的功能;P0和P2口控制1602液晶显示转速;利用P1^1和P1^2来实现液晶显示每秒钟和每分钟转速的功能;利用复位按键功能来实现复位操作。调节蓝白滑动变阻器来调节液晶亮度。

2.1 方案一

51单片机的定时/计数器工作在模式2时是一个可以自动重装载的8位定时/计数器。工作时高八位和低八位装入相同的初值,当低八位装满时,高八位的值自动装入到第八位中,从而可以省去用户软件中重装初值常数的语句,可产生相当精确的定时时间。由于只有八位参与计数,所以其计数周期最大为256微妙。采用初值装入0x38,每个200微妙进入一次中断,5000次中断为100毫秒,即实现周期为1秒的脉冲计数。光电编码器的A相接在单片机的外部中断,光电编码器的B相接在单片机的P1^0。A相发出的脉冲每触发一次中断就就计数一个脉冲,并且再对P1^0的高低电平进行检测,如果为高电平则为反转,如果是低电平则为正转。反向器中的两个作为放大作用。再接两个三极管作为开关作用,组成一个直流电机的驱动电路。P1^1和P1^2分别控制液晶显示每分钟的转速和每秒钟的转速。P2口控制1602液晶的数据口,P0的三个引脚控制1602液晶的数据/命令选择端、读/写选择端、使能端来显示速度。

2.2 方案二

51单片机的定时/计数器工作在模式0时是一个16位位定时/计数器。工作时高八位和低八位各装入初值,当低八位装满时,高八位加1。由于是16位参与计数,所以其计数周期最大为65536微妙。采用初值高八位装入0xfc,初值低八位装入0x18,每个1000微妙进入一次中断,1000次中断为1秒,即形成周期为1秒的脉冲计数。本方案在方案1的基础上外接一个74LS74的芯片。光电编码器的A相接在单片机的P3^4的引脚,利用单片机的计数器1进行脉冲计数,同时接在74LS74的时钟信号接口。光电编码器的B相接在74LS74的D接口。Q端接在P3^2引脚,Q非端接在P3^3引脚。利用两个外部中断来判断正反转。P1^1和P1^2分别控制液晶显示每分钟的转速和每秒钟的转速。P2口控制1602液晶的数据口,P0的三个引脚控制1602液晶的数据/命令选择端、读/写选择端、使能端来显示速度。

2.3 系统采用方案

1)总体设计

图1为设计总体框架图,通过该图大致的介绍了一下整个光电编码器测速系统的各个主要部分。

图1 系统总体框架

2)总体工作原理

由于定时器工作模式2是八位,可装入的值太小,每进行一个周期的脉冲统计需要进入5000次定时器中断,由于进入中断的次数太多,所以很容易出现在低八位装满本应触发而程序还在中断子程序中运行,而无法触发中断的情况,所以不采用工作模式2。工作模式0只需要进入定时中断1000次就可以进行一个周期的脉冲统计,所以选择功能模式0。方案一中用,用纯软件计数虽然电路简单,但是计数速度慢,难以满足实时性要求,而且容易出错。我们可以用单片机内部的计数器来实现加减计数。单片机片内有两个16位定时计数器都可以用来脉冲计数,用两个外部中断来检测正反转,避免了每一个脉冲都要进行高低电平检测的步骤。控制按键,液晶和复位方面的设计在方案一和方案二中一样。综上考虑,最终方案确定为方案二。

三、硬件设计

3.1 单片机最小系统

单片机要正常工作,首先要产生片内时钟信号。在单片机内部的振荡器的输入端XTAL1和输出端XTAL2之间接一个石英晶振就可以够成一个自激振荡器。再在两端之间串联接个电容并且在两个电容之间接地以便于稳定频率还对振荡频率有微调作用。电容通常选30PF 左右,振荡脉冲频率范围为0~24MHZ。该电路中选用12MHZ晶振。时钟电路图如下:

图2 时钟电路图

单片机在启动时与其他微处理器一样,要让CPU及系统各部件处于确定的初始状态,并从初始开始工作。这就需要复位操作。复位电路有两种方式:上电自动复位和按键自动复位。上电自动复位只是在开始接通电源瞬间复位,接下来想要再次复位就需要断电重启,不方便。按键自动复位不仅可以在开始接通电源瞬间复位还可以通过按下按键复位随时复位。所以选择按键复位方式。复位电路如下:

图3 复位电路图

3.2 液晶显示模块

该可调直流电机最大速度为每分钟1200转,采用1602液晶显示。控制1602液晶亮度的是蓝白滑动变阻器。1602液晶有16个管脚。编号为1,2管脚为电源正负极管脚,15,16为背光源正负极管脚;7~14为dataI/O管脚与单片机的P0口相连,负责液晶与芯片之间的信息传送;4,5,6分别为数据/命令选择端、读/写选择端、使能端,与单片机的, P2^0、P2^1、P2^2相连,负责控制液晶与芯片之间数据命令的读写操作;3为液晶显示偏压信号端,用于调整液晶显示对比度。1602液晶显示原理图如下:

G N D 1V C C 2V O 3R S 4R W 5E N 6D

B 07D B 18D B 29D B 310D B 411D B 512D B 613D B 714B L A 15B L K

16

1602液晶

GND

VCC GND

VCC

1

1

223

3RV1

P 0.0V O P 0.1P 0.2P 2.0P 2.1P 2.2P 2.3P 2.4P 2.5P 2.6P 2.7

图4 液晶显示系统图

3.3 系统电源

为了方便控制系统的上电与断电,系统电源中连接了一个蓝白自锁开关。此开关两边各有三个引脚,不同的连接方式,开关的控制方法就不同。电源的正负极各接在此开关的两边。为了方便观察电源是否接上,在电路中的VCC 与GND 之间接一个发光二极管并且加一个限流电阻防止发光二极管烧坏,电源通电时发光二极管亮,断电时,则暗。再接四个排针便两边的两个排针用于外部电源给系统上电,中间的两个排针是用于单片机烧录程序。如图所示:

图5 系统电源图

3.4光电编码器电路

这是一张光电编码器部分的电路原理图。图上的74LS74芯片上就是两个D 触发器。A 相接在P3^4的引脚用于计数器0采集脉冲。A 相同时接在CLK 端,B 相接在D 端,Q 接在P3.2引脚,外部中断0检测和Q 非接在P3.3外部中断1来检测。另外A 相和B 相各需接一个上拉电阻,阻值为1K 。这样输出的脉冲就可以直接接在单片机上,进行检测了。另外74LS74芯片的SET 引脚,CLR 引脚,VCC 引脚都接电源,GND 引脚接地。整个电路就连接完成了。

11

22334

4

P2

编码器接口

CLR11

D12CLK13SET14Q15Q16GND 7Q28Q29SET210CLK211D212CLR213VCC 14U4

74LS74

R51K

R61K VCC

VCC

P3.2

VCC

P3.3

VCC GND

GND A 相

B 相

VCC

P3.4A 相B 相

图6 光电编码器电路

3.5 整体电路

这是采用网络标号的画出的以一张整体电路图。它将整张可调直流电机的电路原理图分为七个部分:电源模块,P0口上拉电阻,1602液晶模块,51单片机,复位晶振电路,控制按键和光电编码器电路。整张原理看起来美观,明了并且根据标号很容易找到与之对应的引脚。

P0.0P0.1P0.2P0.3P0.4P0.5P0.6P0.7VCC P2.7P2.6P2.5P2.4P2.3P2.2P2.1P2.0

GND

X1X2P3.7P3.6P3.5P3.4P3.3P3.2TXD RXD RST P1.7P1.6P1.5P1.4P1.3P1.2P1.1P1.0VCC 1R12R23R34R45R56R67R78R89

102

RP1VCC VCC

TXD

VCC L01K R2RXD

电源模块

NC 1IN22O23NC 4IN1

5

O1

6

S5蓝白自锁开关

GND

P0.0P0.1P0.2P0.4P0.5P0.6P0.7

P0口 上拉 电阻

1

234P0

Header 4

P1.01P1.12P1.23P1.34P1.45P1.56P1.67P1.78RST

9P3.0/RXD 10P3.1/TXD 11P3.2/INT012P3.3/INT113P3.4/T014P3.5/T115P3.6/WR 16P3.7/RD 17XTAL218XTAL119GND

20

P2.0

21

P2.122P2.223P2.324P2.425P2.526P2.627P2.728PSEN 29ALE/PROG

30EA/VPP 31P0.732P0.633P0.534P0.435P0.336P0.237P0.138P0.039VCC 40U6

51单片机

每秒钟转速

控制按键

复位晶振电路

10K

R110uF

C0

RST

VCC

GND

22pF C122pF C2

GND

X2X1

1

2

Y1XTAL 基于51单片机的光电编码器测速设计

每分钟转速

GND

P1.1

P1.2

G N D 1V C C 2V O 3R S 4R W 5E N 6D B 07D B 18D B 29D B 310D B 411D B 512D B 613D B 714B L A 15B L K

16

1602液晶

GND

VCC GND

VCC

11

2233RV1P 0.0V O P 0.1P 0.2P 2.0P 2.1P 2.2P 2.3P 2.4P 2.5P 2.6P 2.7

1602液晶模块

11

22334

4

P2

编码器接口

CLR11

D12CLK13SET14Q15Q16GND 7Q28Q29SET210CLK211D212CLR213VCC 14U4

74LS74

R51K

R61K 光电编码器电路

VCC

VCC

P3.2

VCC

P3.3

VCC GND

GND A 相

B 相

VCC

P0.3P3.4A 相B 相

图7 整体电路图

四、软件设计

4.1 keil软件介绍

Keil C51是美国Keil Software公司出品的51系列兼容单片机C语言软件开发系统。Keil C51软件提供丰富的库函数和功能强大的集成开发调试工具,全Windows界面。另外重要的一点,只要看一下编译后生成的汇编代码,就能体会到Keil C51生成的目标代码效率非常之高,多数语句生成的汇编代码很紧凑,容易理解。在开发大型软件时更能体现高级语言的优势。单片机开发中除必要的硬件外,同样离不开软件,我们写的汇编语言源程序要变为CPU可以执行的机器码有两种方法,一种Keil软件图标是手工汇编,另一种是机器汇编,目前已极少使用手工汇编的方法了。机器汇编是通过汇编软件将源程序变为机器码,用于MCS-51单片机的汇编软件有早期的A51,随着单片机开发技术的不断发展,从普遍使用汇编语言到逐渐使用高级语言开发,单片机的开发软件也在不断发展,Keil软件是目前最流行开发MCS-51系列单片机的软件,这从近年来各仿真机厂商纷纷宣布全面支持Keil即可看出。Keil提供了包括C编译器、宏汇编、连接器、库管理和一个功能强大的仿真调试器等在内的完整开发方案,通过一个集成开发环境(uVision)将这些部份组合在一起。运行Keil 软件需要Pentium或以上的CPU,16MB或更多RAM、20M以上空闲的硬盘空间、WIN98、NT、WIN2000、WINXP等操作系统。掌握这一软件的使用对于使用51系列单片机的爱好者来说是十分必要的,如果你使用C语言编程,那么Keil几乎就是你的不二之选(目前在国内你只能买到该软件、而你买的仿真机也很可能只支持该软件),即使不使用C语言而仅用汇编语言编程,其方便易用的集成环境、强大的软件仿真调试工具也会令你事半功倍。Keil C51生成的目标代码效率非常之高,多数语句生成的汇编代码很紧凑,容易理解。在开发大型软件时更能体现高级语言的优势。与汇编相比,C语言在功能上、结构性、可读性、可维护性上有明显的优势,因而易学易用。用过汇编语言后再使用C来开发,体会更加深刻。

4.2 系统程序流程

1) 主程序流程

图8为光电编码器测速系统的主程序流程图。通过该图可以直观的了解到整个调控程序的大致走向为先扫描每秒钟速度和每分钟速度的控制按键,确定了是显示速度的方式之后,再执行液晶显示程序,显示出速度。接着又重新回到控制按键扫描的程序中,如此不断重复循环。

图8 主程序流程图

2)中断程序流程

图9为光电编码器测速系统的中断程序流程图。脉冲计数周期主要是由单片机内部精确到毫秒的定时器每次以间隔相同的时间进入中断,中断1000次才形成一个周期。一个周期的时间到了,就进行一次脉冲计算。一个周期时间没到就进入主程序。从而控制每个周期的方波高电平和低电平各自持续的时间,即控制了方波的占空比。通过该图也可以清晰明了的知道,该中断程序主要涉及的就是方波的调控。先是判断高电平是否未达到调控的时间,如果未达到则让gdp+1,即让继续高电平保持。如果gdp为100则说明主程序已经把方波调控到一直保持高电平,就让gdp为0,就可以一直输出高电平了。如果高电平达到了调控的时间,就让控制电机的两个引脚都为低电平并让ddp+1,即让继续低电平保持。如果低电平未达到了调控的时间,就进入主程序继续保持低电平等待下一次中断。如果低电平达到了调控的时间,就让ddp=gdp=0,即重新开始下一个方波。

图9 定时器中断程序流程图

五、仿真与实现

5.1 proteus软件介绍

Proteus是世界上著名的EDA工具(仿真软件),从原理图布图、代码调试到单片机与外围电路协同仿真,一键切换到PCB设计,真正实现了从概念到产品的完整设计。是目前世界上唯一将电路仿真软件、PCB设计软件和虚拟模型仿真软件三合一的设计平台,其处理器模型支持8051、HC11、PIC10/12/16/18/24/30/DsPIC33、A VR、ARM、8086和MSP430等,2010年又增加了Cortex和DSP系列处理器,并持续增加其他系列处理器模型。在编译方面,它也支持KEIL,IAR和MPLAB等多种编译器。PROTEUS不仅可将许多单片机实例功能形象化,也可将许多单片机实例运行过程形象化。前者可在相当程度上得到实物演示实验的效果,后者则是实物演示实验难以达到的效果。它的元器件、连接线路等却和传统的单片机实验硬件高度对应。这在相当程度上替代了传统的单片机实验教学的功能,例:元器件选择、电路连接、电路检测、电路修改、软件调试、运行结果等。使用Proteus软件进行单片机系统仿真设计,是虚拟仿真技术和计算机多媒体技术相结合的综合运用,有利于培养学生的电路设计能力及仿真软件的操作能力;在单片机课程设计和全国大学生电子设计。实践证明,在使用Proteus进行系统仿真开发成功之后再进行实际制作,能极大提高单片机系统设计效率。因此,Proteus有较高的推广利用价值。

由于该设计的光电编码器测速在仿真软件中无法仿真,只能仿真液晶显示部分,所以仿真原理图忽略。

5.2 仿真过程

图10为使用keil软件编写程序时的调试过程图。我用的是C语言来编写。第一次编写完程序后,然后编译一下,出现的对话框中显示有几个错误,点击错误提示,主程序会出现光标只向错误的地方,根据这个错误提示,然后进行更改,再编译一下,程序还是显示有错误,再重复上次的操作,进过了几次修改后,就如图所示没有错误提示了。编写程序就是这样,需要不断修改,程序才能准确。程序编写好,还要编译成HEX文件。只有HEX文件才能烧录到到单片机上。

图10 keil软件仿真图

5.3 实物制作与调试

图11为实物图的背面,图12为实物图的正面。

原理图和洞洞板图画好,程序写好后就可以开始焊接了。在刚开始焊好后,烧录程序进去,但液晶却不能显示,于是我就在protues中仿真了液晶显示部分,仿真中能实现正确显示,再检查一下有没有焊接错误,也没有发现任何错误,我就想如果我能正确控制1602液晶的引脚,它就应该能够显示,于是我在出现中令P2=0xaa,en=1,rw=0,rs=1,然后用万用电表检查液晶上的液晶是否是如我所设定的那样,电平引脚和我设置的一样。我再令P2=0x55,en=0,rw=1,rs=0,结果我发现rs液引脚为高电平,而我设置的为低电平。我用万用电表检查,发现rs引出的那根导线与电源短路了,可是我根本看不出来哪里短路了,我就先把rs引出的那根导线焊开分成两段,再检查其中有一段是短路的,接着再焊开成两段,继续检查,最后找到了短路的地方,原来是两个焊盘本身就是连在一起。我就把其中一个焊盘用电烙铁焊掉,用走线连接,一上电,液晶立刻就显示正常。

图11 实物图背面

图12 实物图正面

5.4 使用说明

如图12所示:此光电编码器测速系统包含的元器件有:STC89C52单片机一块,光电编码器,一块74LS74芯片,40个脚IC插座一个,14个脚IC插座一个排阻一个,一个16脚的排母,1602液晶一块,一个3M红色LED灯,六个排针,三个四脚轻触开关,四个个电阻,一个电解电容,两个瓷片电容,,一个六角自锁开关,一个晶振和一个103蓝白滑动变阻器。

整个光电编码器测速系统布置在一块20×10大小的洞洞板上。1602液晶用于显示所测的转速,单片机下方的两个按键为控制按键,从左往右第一个为显示每秒转速控制键,第二个为显示每分钟的转速。控制按键右边为一块74LS74芯片,四个排针(用于接光电编码器)和两个1K电阻组成组成光电编码器测速电路部分。单片机右边蓝白滑动变阻器,通过调节蓝白滑动变阻器来调节液晶亮度。那个按键为复位按键,每按一次系统就复位一次,回到初始状态。复位按键下方的蓝白自锁开关为电源开关,当排针接好电源后,按下蓝白自锁开关则系统上电,按起蓝白自锁开关则系统断电。蓝白自锁开关上方的红色发光二极管为电源指示灯,当系统接通电源时,指示灯亮,当系统断开电源时,指示灯暗。蓝白自锁开关下方的四个排针从上至下依次接5V的VCC,RXD,TXD,GND。

使用前应先上电。接上电源后由于开关断开系统还未上电,按下蓝白自锁开关后,电源接通。通上电时,首先单片机连接电源时,先是1602液晶第一行显示welcome to use的字样,第二行显示real_speed: 0000。可以按显示每秒速度的按键,也可以按每分钟显示的速度,转动主轴,液晶上就会显示与所按下的控制键相对应得转速。如果是正转,液晶第二行就会显示real_speed: xxxx,如果为反转,液晶上就会显示real_speed:-xxxx。如果不按控制键液晶第二行就显示real_speed: 0000。

六、总结

6.1 设计总结

我的课题是基于51单片机的光电编码器测速。当我选择了这个课题的时候,我就先开始想在平常生活中光电编码器是怎样的,可以怎样测速,需要一些什么器件。在确定了自己要设计一个怎样的测速系统之后就开始列出做这个测速系统所需要的元器件。这个光电编码器测速系统是基于给定的显示系统上设计的,所以在设计电路原理图之前,我先要掌握给定的显示系统原理图的连接方式和连接原理。这一些都弄明白之后,我再考虑如何在现有的基础上进行外围设计使之达到预想的功能。经过一番斟酌,确定我的外围硬件只需添加两个轻触开关,一些电阻,一块74LS74芯片就可以实现光电编码器测速的功能。由于我的希望焊得尽量紧凑。所以为了以后方便焊接,减少焊接错误,需要在洞洞板软件中的画出洞洞板图,设计线路的时候要尽量减少飞线的使用,画完之后和给出的图进行对照,确定我没有连接错误之后,修正洞洞板图,使线路没有断路并且更加笔直,接点处没有连线出头,修正完后保存洞洞板图。硬件设想好了,接下来,我就要给我所要设计的光电编码器测速系统进行软件设计,使之实现智能化。进过了几次调试之后,在keil软件中我的程序显示0 error。就开始画DXP原理图,采用网络标号的形式更加方便,只需要把系统分成各个小模块,在元器件的接口上标明该接口所连接单片机的对应的引脚,再分区放置标明模块。图的大体结构画完之后再和给出的图进行对照,确定我没有连接错误之后,修正DXP原理图,使线路没有断路并且更加笔直。DXP原理图画完后,整个电路设计就算完成了。我的设计过程与思路大体就是这样子。

6.2 经验总结

我觉得一个课题设计中的心得体会是非常重要的一部分,这是一个经验的积累与总结。通过这次单片机课程设计,我不仅加深了对单片机理论的理解,将理论很好地应用到实际当中去,而且我还学会了如何去培养我们的创新精神,从而不断地战胜自己,超越自己。创新可以是在原有的基础上进行改进,使之功能不断完善,成为真己的东西。们安排了这次单片机课程设计,给了我们学以致用的做好的实践。对于这次课程设计,我们花费了比较多的心思,既是对课程理论内容的一次复习和巩固,还让我们丰富了更多与该专业相关的其他知识,比如软件应用等,在摸索中学习,在摸索中成长,在学习的过程中带着问题去学我发现效率很高,这是我做这次课程设而应该让人一看就能明白你的思路,这样也能为资料的保存和交流提供了方便;我觉得在设计课程过程中遇到问题是很正常,但我们应该将每次遇到的问题记录下来,并分析清楚,以免下次再碰到同样的问题的课程设计又出错了。此次的设计,其实也是我们所学知识的一次综合运用,让我深深的认识到了学习单片机要有一定的基础,要有电子技术方面的数字电路和模拟电路等方面的理论基础,特别是数字电路;也要有编程语言的汇编语言或C语言。要想成为单片机高手,我们首先要学好汇编语言,然后转入C 语言学习,所以我们不能学到后面就忘了前面的知识,更应该将所学的知识紧紧的结合在一起,综合运用,所谓设计,就是要求创新,只有将知识综合运用起来才能真正的设计好。

七、参考文献

[1] 杨长兴、刘卫国.C++程序设计:中国铁道部出版社

[2] 李朝青.单片机原理及接口技术(第三版):北京航空航天大学出版社

[3] 康华光.电子技术基础(第五版):高等教育出版社

[4] 刘坤、赵红波、张宪栋.51单片机C语言运用(第二版):人民邮电出版社

[5] 阎石数字电子计数基础(第五版):高等教育出版社

附录

源程序

#include

#define uchar unsigned char

#define uint unsigned int

sbit en=P0^2; //使能位

sbit rw=P0^1;//读/写选择位

sbit rs=P0^0;//数据/命令选择位

sbit fensu=P1^1;//分速键

sbit miaosu=P1^2;//秒速键

float w;

float a=0;

uchar k=2;//实际正反转标志位

uchar real_gw,real_sw,real_bw,real_qw,expc_gw,expc_sw,expc_bw;//设置速度与实际速度的各个四位

uchar num1,num2;

float real;

uint t;//定时器1中断次数

uchar code table1[]=" welcome to use "; // 显示设定速度

uchar code table2[]="real_speed: 0000"; // 显示实际速度

void delay(uchar z)

{

uchar x,y;

for(x=100;x>0;x--)

for(y=z;y>0;y--);

}

void write_com(uchar com) //写命令函数

{

rw=0;

rs=0;

en=0;

P2=com;

delay(5);

en=1;

delay(5);

en=0;

}

void write_date(uchar date) //写数据函数

{

rw=0;

rs=1;

en=0;

P2=date;

delay(5);

en=1;

delay(5);

en=0;

}

void display(uchar add,uchar expc_date) //显示速度

{

write_com(0x80+add); //写命令指针指向要写数据的地址write_date(expc_date); //写数据

delay(10);//延时显示

}

void init()

{

TCON=0X0F;

TMOD=0X15;

EX1=1;

EX0=1;

EA=1; //开总中断

ET1=1;//开启T1中断

TR1=1; //允许T1中断

IP=0X08; //设置定时器1为优先级

TH0=0;

TL0=0;

TH1=(65536-1000)/256;

TL1=(65536-1000)%256;

write_com(0x38);//显示模式

write_com(0X0c);//不显示光标

write_com(0X06);// 显示光标移动位置

write_com(0X01);//清屏

write_com(0X80);//显示welcome to use

for(num1=0;num1<16;num1++)

{

write_date(table1[num1]);

delay(20);

}

write_com(0X80+0X40);//显示real_speed 0000 for(num2=0;num2<16;num2++)

{

write_date(table2[num2]);

delay(20);

}

}

void keyskan()

{

if(miaosu==0) //判断秒速键是否按下

{

delay(5);

if(miaosu==0)

{

a=1;

while(miaosu==0);

delay(5);

while(miaosu==0);

}

}

if(fensu==0)//判断分速键是否按下

{

a=60;

while(fensu==0);

delay(5);

while(fensu==0);

}

}

void real_speed()

{

real=real*a ;

real_gw=(int)real%10;

real_sw=(int)real%100/10;

real_bw=(int)real%1000/100;

real_qw=(int)real/1000;

display(0x4f,(0x30+real_gw));

display(0x4e,(0x30+real_sw));

display(0x4d,(0x30+real_bw));

display(0x4c,(0x30+real_qw));

if(k==0)

{

display(0x4b,0x2d);

}

if(k==1)

{

display(0x4b,0x20);

}

}

//主程序

void main()

{

init();

while(1)

{

keyskan();

}

}

AT89C51单片机简易计算器的设计

AT89C51单片机简易计算器的设计 单片机的出现是计算机制造技术高速发展的产物,它是嵌入式控制系统的核心,如今,它已广泛的应用到我们生活的各个领域,电子、科技、通信、汽车、工业等。本设计是基于51系列单片机来进行的数字计算器系统设计,可以完成计算器的键盘输入,进行加、减、乘、除六位数范围内的基本四则运算,并在LCD上显示相应的结果。设计电路采用AT89C51单片机为主要控制电路,利用MM74C922作为计算器4*4键盘的扫描IC读取键盘上的输入。显示采用字符LCD静态显示。软件方面使用C语言编程,并用PROTUES仿真。 一、总体设计 根据功能和指标要求,本系统选用MCS-51系列单片机为主控机。通过扩展必要的外围接口电路,实现对计算器的设计。具体设计如下:(1)由于要设计的是简单的计算器,可以进行四则运算,为了得到较好的显示效果,采用LCD 显示数据和结果。 (2)另外键盘包括数字键(0~9)、符号键(+、-、×、÷)、清除键和等号键,故只需要16 个按键即可,设计中采用集成的计算键盘。 (3)执行过程:开机显示零,等待键入数值,当键入数字,通过LCD显示出来,当键入+、-、*、/运算符,计算器在内部执行数值转换和存储,并等待再次键入数值,当再键入数值后将显示键入的数

值,按等号就会在LCD上输出运算结果。 (4)错误提示:当计算器执行过程中有错误时,会在LCD上显示相应的提示,如:当输入的数值或计算得到的结果大于计算器的表示范围时,计算器会在LCD上提示溢出;当除数为0时,计算器会在LCD 上提示错误。 系统模块图: 二、硬件设计 (一)、总体硬件设计 本设计选用AT89C51单片机为主控单元。显示部分:采用LCD 静态显示。按键部分:采用4*4键盘;利用MM74C922为4*4的键盘扫描IC,读取输入的键值。 总体设计效果如下图:

编码器使用教程与测速原理

编码器使用教程与测速原理 我们将通过这篇教程与大家一起学习编码器的原理,并介绍一些实用的技术。 1.编码器概述 编码器是一种将角位移或者角速度转换成一连串电数字脉冲的旋转式传感器,我们可以通过编码器测量到底位移或者速度信息。编码器从输出数据类型上分,可以分为增量式编码器和绝对式编码器。 从编码器检测原理上来分,还可以分为光学式、磁式、感应式、电容式。常见的是光电编码器(光学式)和霍尔编码器(磁式)。 2.编码器原理 光电编码器是一种通过光电转换将输出轴上的机械几何位移量转换成脉冲或数字量的传感器。光电编码器是由光码盘和光电检测装置组成。光码盘是在一定直径的圆板上等分地开通若干个长方形孔。由于光电码盘与电动机同轴,电动机旋转时,检测装置检测输出若干脉冲信号,为判断转向,一般输出两组存在一定相位差的方波信号。 霍尔编码器是一种通过磁电转换将输出轴上的机械几何位移量转换成脉冲或数字量的传感器。霍尔编码器是由霍尔码盘和霍尔元件组成。霍尔码盘是在一定直径的圆板上等分地布置有不同的磁极。霍尔码盘与电动机同轴,电动机旋转时,霍尔元件检测输出若干脉冲信号,为判断转向,一般输出两组存在一定相位差的方波信号。

可以看到两种原理的编码器目的都是获取AB相输出的方波信号,其使用方法也是一样,下面是一个简单的示意图。 3.编码器接线说明 具体到我们的编码器电机,我们可以看看电机编码器的实物。 这是一款增量式输出的霍尔编码器。编码器有AB相输出,所以不仅可以测速,还可以辨别转向。根据上图的接线说明可以看到,我们只需给编码器电源5V供电,在电机转动的时候即可通过AB相输出方波信号。编码器自带了上拉电阻,所以无需外部上拉,可以直接连接到单片机IO读取。

基于51单片机的步进电机控制-设计报告(说明书)及源程序

南京XX大学 指导老师:张X 课程设计基于51单片机的步进电机控制 机械电子工程学院 测控技术与仪器 XXXXX Xxx 2012年1年4日

步进电机控制系统 [摘要]本课程设计的内容是利用51单片机,达到控制步进电机的启 动、停止、正转、反转、两档速度和状态显示的目的,使步进电机控制更加灵活。步进电机驱动芯片采用ULN2803,ULN2803具有大电流、高电压,外电路简单等优点。利用四位数码管增设电机状态显示功能,各项数据更直观。实测结果表明,该控制系统达到了设计的要求。 关键字:步进电机、数码管、51单片机、ULN2803 一步进电机与驱动电路 1.1 什么是步进电机 步进电机是一种将电脉冲转化为角位移的执行机构。通俗一点讲:当步进驱动器接收到一个脉冲信号,它就驱动步进电机按设定的方向转动一个固定的角度(及步进角)。可以通过控制脉冲个数来控制角位移量,从而达到准确定位的目的;同时也可以通过控制脉冲频率来控制电机转动的速度和加速度,从而达到调速的目的。 1.2 步进电机的种类 步进电机分永磁式(PM)、反应式(VR)、和混合式(HB)三种。永磁式步进一般为两相,转矩和体积较小,步进角一般为7.5度或15度;反应式步进一般为三相,可实现大转矩输出,步进角一般为1.5度,但噪声和振动都很大。在欧美等发达国家80年代已被淘汰;混合式步进是指混合了永磁式和反应式的优点。它又分为两相和五相:两相步进角一般为1.8度而五相步进角一般为 0.72度。这种步进电机的应用最为广泛。 1.3 步进电机的特点 1.精度高一般的步进电机的精度为步进角的3-5%,且不累积。可在宽广的频率范围内通过改变脉冲频率来实现调速,快速起停、正反转控制及制动等,这是步进电动机最突出的优点 2.过载性好其转速不受负载大小的影响,不像普通电机,当负载加大时就会出现速度下降的情况,所以步进电机使用在对速度和位置都有严格要求的场合; 3.控制方便步进电机是以“步”为单位旋转的,数字特征比较明显,这样就给计算

基于51单片机的计算器设计程序代码汇编

DBUF EQU 30H TEMP EQU 40H YJ EQU 50H ;结果存放 YJ1 EQU 51H ;中间结果存放GONG EQU 52H ;功能键存放 ORG 00H START: MOV R3,#0 ;初始化显示为空MOV GONG,#0 MOV 30H,#10H MOV 31H,#10H MOV 32H,#10H MOV 33H,#10H MOV 34H,#10H MLOOP: CALL DISP ;PAN调显示子程序WAIT: CALL TESTKEY ; 判断有无按键JZ WAIT CALL GETKEY ;读键 INC R3 ;按键个数 CJNE A,#0,NEXT1 ; 判断就是否数字键 LJMP E1 ; 转数字键处理NEXT1: CJNE A,#1,NEXT2 LJMP E1 NEXT2: CJNE A,#2,NEXT3 LJMP E1 NEXT3: CJNE A,#3,NEXT4 LJMP E1 NEXT4: CJNE A,#4,NEXT5 LJMP E1 NEXT5: CJNE A,#5,NEXT6 LJMP E1 NEXT6: CJNE A,#6,NEXT7 LJMP E1 NEXT7: CJNE A,#7,NEXT8 LJMP E1 NEXT8: CJNE A,#8,NEXT9 LJMP E1 NEXT9: CJNE A,#9,NEXT10 LJMP E1 NEXT10: CJNE A,#10,NEXT11 ;判断就是否功能键LJMP E2 ;转功能键处理NEXT11: CJNE A,#11,NEXT12 LJMP E2 NEXT12: CJNE A,#12, NEXT13 LJMP E2

编码器测速

飞思卡尔智能车舵机和测速的控制设计与实现 时间:2010-04-1411:53:10来源:电子设计工程作者:雷贞勇谢光骥五邑大学 2.1舵机工作原理 舵机在6V电压下正常工作,而大赛组委会统一提供的标准电源输出电压为7.2V,则需一个外围电压转换电路将电源电压转换为舵机的工作电压6V。图2为舵机供电电路。 舵机由舵盘、位置反馈电位计、减速齿轮组、直流动电机和控制电路组成,内部位置反馈减速齿轮组由直流电动机驱动,其输出轴带动一个具有线性比例特性的位置反馈电位器作为位置检测。当电位器转角线性地转换为电压并反馈给控制电路时,控制电路将反馈信号与输入的控制脉冲信号相比较,产生纠正脉冲,控制并驱动直流电机正向或反向转动,使减速齿轮组输出的位置与期望值相符。从而达到舵机精确控制转向角度的目的。舵机工作原理框图如图3所示。 2.2舵机的安装与调节 舵机的控制脉宽与转角在-45°~+45°范围内线性变化。对于对速度有一定要求的智能车,舵机的响应速度和舵机的转向传动比直接影响车模能否以最佳速度顺利通过弯道。车模在赛道上高速行驶,特别是对于前瞻性不够远的红外光电检测智能车,舵机的响应速度及其转向传动比将直接影响车模行驶的稳定性,因此必须细心调试,逐一解决。由于舵机从执行转动指令到响应输出需占用一定的时间,因而产生舵机实时控制的滞后。虽然车模在进入弯道时能够检测到黑色路线的偏转方向,但由于舵机的滞后性,使得车模在转弯过程中时常偏离跑道,且速度越快,偏离越远,极大限制车模在连续弯道上行驶的最大时速,使得车模全程赛道速度很难进一步提高。为了减小舵机响应时间,在遵守比赛规则不允许改造舵机结构的前提下,利用杠杆原理,采用加长舵机力臂的方案来弥补这一缺陷,加长舵机力臂示意图如图4所示。

基于51单片机的步进电机控制系统设计

基于51单片机的步进电机控制系统设计 中文摘要 步进电机是一种受脉冲信号控制,并且能将脉冲信号转化为相应的角位移或者线位移的数字电动机。由于步进电机具有步距误差不积累、运行可靠、结构简单、惯性小、成本低等优点,因此,被广泛使用于计算机外围电路、自动化控制装置以及其他的数字控制装置中,如打印机、钟表、数模转换设备等装置中。随着科学技术的快速发展,相应的控制系统也产生了很多种类,步进电机的身影在众多领域中可以看到。其中采用单片机作为控制核心的控制系统,由于其电路简单、成本低、可靠性强等优点,满足众多领域的需求,得到了大量的运用。因此,研究基于单片机的步进电机控制系统,具有重要的现实意义。本设计研究的是基于51单片机对步进电机的控制系统。通过单片机的I/O端口输出时序方波作为控制信号,信号经过芯片ULN2003驱动芯片驱动步进电机进行不同的指令进行工作。根据不同的需要,通过按键电路来控制步进电机的启停、正反转和加减速等功能,并在数码管上实时显示步进电机的工作状态。本文给出了电路各个模块的电路图,并用Proteus的ISIS软件对控制系统的各个功能进行了仿真,并给出了相应的仿真结果图像。 关键词:单片机;步进电机;电机驱动;控制系统

Abstract Stepper motor controlled by a pulse signal, and a pulse signal can be converted to the corresponding angular displacement or linear displacement of the digital motor. As the stepper motor has a step error does not accumulate, reliable, simple structure, small inertia, low cost, and therefore, are widely used in computer peripheral circuits, automatic control devices and other digital control devices, such as printers, watches and clocks , digital to analog conversion equipment, and other devices. With the rapid development of science and technology, the corresponding control system also produced many types of stepper motor figure can be seen in many areas. Which uses microcontroller as the control of the control system, because of its simple circuit, low cost, high reliability, etc., to meet the needs of many fields, we get a lot of use. Therefore, based on single-chip stepper motor control system has important practical design study is 51 single-chip stepper motor control system. As a control signal, the signal through the chip ULN2003 stepper motor drive to work through the microcontroller I / O port output timing square wave. Depending on the need, through the key circuit to control the start and stop, reversing and ramp functions such as stepper motors, stepper motors in real-time display and digital working condition. In this paper, the circuit diagram of each module, and with the ISIS Proteus software for each function control system simulation, and the simulation results are given corresponding image. Key words: microcontroller; stepper motor; motor drive; control system

测速编码器

测速编码器技术参数 电机的位置检测在电机控制中是十分重要的,特别是需要根据精确转子位置控制电机运动状态的应用场合,如位置伺服系统。电机控制系统中的位置检测通常有:微电机解算元件,光电元件,磁敏元件,电磁感应元件等。这些位置检测传感器或者与电机的非负载端同轴连接,或者直接安装在电机的特定的部位。其中光电元件的测量精度较高,能够准确的反应电机的转子的机械位置,从而间接的反映出与电机连接的机械负载的准确的机械位置,从而达到精确控制电机位置的目的。本文主要介绍高精度的光电编码器的内部结构、工作原理与位置检测的方法。 一.光电编码器的介绍: 光电编码器是通过读取光电编码盘上的图案或编码信息来表示与光电编码器相连的电机转子的位置信息的。根据光电编码器的工作原理可以将光电编码器分为绝对式光电编码器与增量式光电编码器,下面我就这两种光电编码器的结构与工作原理做介绍。 1、绝对式光电编码器 绝对式光电编码器如图所示,他是通过读取编码盘上的二进制的编码信息来表示绝对位置信息的。编码盘是按照一定的编码形式制成的圆盘。图1是二进制的编码盘,图中空白部分是透光的,用“0”来表示;涂黑的部分是不透光的,用“1”来表示。通常将组成编码的圈称为码道,每个码道表示二进制数的一位,其中最外侧的是最低位,最里侧的是最高位。如果编码盘有4个码道,则由里向外的码道分别表示为二进制的23、22、21和20,4位二进制可形成16个二进制数,因此就将圆盘划分16个扇区,每个扇区对应一个4位二进制数,如0000、0001、…、1111。 按照码盘上形成的码道配置相应的光电传感器,包括光源、透镜、码盘、光敏二极管和驱动电子线路。当码盘转到一定的角度时,扇区中透光的码道对应的光敏二极管导通,输出低电平“0”,遮光的码道对应的光敏二极管不导通,输出高电

51单片机简易计算器程序

#include <reg51.h>#include <intrins.h> #include <ctype.h> #include <stdlib.h> #define uchar unsigned char #define uint unsigned int uchar operand1[9], operand2[9]; uchar operator; void delay(uint); uchar keyscan(); void disp(void); void buf(uint value); uint compute(uint va1,uint va2,uchar optor); uchar code table[] = {0xc0,0xf9,0xa4,0xb0,0x99, 0x92,0x82,0xf8,0x80,0x90,0xff}; uchar dbuf[8] = {10,10,10,10,10,10,10,10}; void delay(uint z) { uint x,y; for(x=z;x>0;x--)

for(y=110;y>0;y--); } uchar keyscan() { uchar skey; P1 = 0xfe; while((P1 & 0xf0) != 0xf0) { delay(3); while((P1 & 0xf0) != 0xf0) { switch(P1) { case 0xee: skey = '7'; break; case 0xde: skey = '8'; break; case 0xbe: skey = '9'; break; case 0x7e: skey = '/'; break; default: skey = '#'; }

飞思卡尔光电编码器测速程序

#include /* common defines and macros */ #include /* derivative information */ #pragma LINK_INFO DERIV ATIVE "mc9s12xs128" volatile uint speed_back=0,temp=0; void delay_ms(uint ms) { volatile uint x=0; while(ms--) { for(x=2800;x>0;x--) { _asm(nop); _asm(nop); _asm(nop); _asm(nop); _asm(nop); _asm(nop); } } } //注意外接16M晶体。 //飞思卡尔推荐配置,主频道50MHZ,速度更快! void Init_PLL(void) { CLKSEL = 0X00; //disengage PLL to system PLLCTL_PLLON = 1; //turn on PLL SYNR = (0xc0|0x18); //SYDIV=0X18=24 REFDV = (0x40|0x07); //REFDIV=0X07=7 POSTDIV = 0x00; //pllclock=2*osc*(1+SYDIV)/(1+REFDIV)=100MHz; _asm(nop); //BUS CLOCK=50M _asm(nop); _asm(nop); _asm(nop); _asm(nop); _asm(nop); _asm(nop); _asm(nop); _asm(nop);

基于51单片机控制步进电机

单片机原理及系统课程设计 1 引言 步进电机又称为脉冲电动机或阶跃电动机,它是基于最基本的电磁感应作用,将电脉冲信号转变为角位移或线位移的开环控制元件。单片机控制的步进电机广泛地应用于工业自动控制、数控机床、组合机床、机器人、计算机外围设备、照相机,大型望远镜,卫星天线定位系统等等。 随着经济的发展,技术的进步和电子技术的发展,步进电机的应用领域更加广阔,同时也对步进电机的运行性能提出了更高的要求。 步进电机的原始模型起源于1830年至1860年,1870年前后开始以控制为目的的尝试,应用于氩弧灯的电极输送机构中,这被认为最早的步进电机。 1950年后期晶体管的发明也逐渐应用在步进电机上,对于数字化的控制变得更为容易。到20世纪60年代后期,在步进电机本体方面随着永磁材料的发展,各种实用性步进电机应运而生。步进电机往后经过不断改良,使得今日步进电机已广泛运用在需要高定位精度、高分解能、高响应性、信赖性等灵活控制性高的机械系统中。 在生产过程中要求自动化、省人力、效率高的机器中,我们很容易发现步进电机的踪迹,尤其以重视速度、位置控制、需要精确操作各项指令动作的灵活控制性场合步进电机用得最多。

2 设计方案与原理 4.1 设计方案 设计一个51单片机四相步进电机控制系统要求系统具有如下功能: (1)由I/O口产生的时序方波作为电机控制信号; (2)信号经过驱动芯片驱动电机的运转; (3)电机的状态通过键盘控制,包括正转,反转,加速,减速,停止和单步运行。 4.2 设计原理 步进电机实际上是一个数字\角度转换器,也是一个串行的数\模转换器。步进电机的基本控制包括启停控制、转向控制、速度控制、换向控制4个方面。从结构上看,步进电机分为三相、四相、五相等类型,本次设计的是四相电机。四相步进电机的工作方式有单四拍、双四拍和单双八拍三种。 在本次设计中,我们使用的是四相单八拍的工作方式。通过P1口给A,B,C,D四相依次输出高电平即可实现步进电机的旋转,通过控制两次输出的间隔,即可实现对步进电机的速度控制。 图 2.1 步进电机内部结构截图 根据步进电机的相关相序表我们可以正常的控制电机的步进运行。

测速编码器说明书

BEN测速编码器在智能车舵机控制中的应用2.1 舵机工作原理 舵机在6 V电压下正常工作,而大赛组委会统一提供的标准电源输出电压为7.2 V,则需一个外围电压转换电路将电源电压转换为舵机的工作电压6 V。图2为舵机供电电路。 舵机由舵盘、位置反馈电位计、减速齿轮组、直流动电机和控制电路组成,内部位置反馈减速齿轮组由直流电动机驱动,其输出轴带动一个具有线性比例特性的位置反馈电位器作为位置检测。当电位器转角线性地转换为电压并反馈给控制电路时,控制电路将反馈信号与输入的控制脉冲信号相比较,产生纠正脉冲,控制并驱动直流电机正向或反向转动,使减速齿轮组输出的位置与期望值相符。从而达到舵机精确控制转向角度的目的。舵机工作原理框图如图3所示。 2.2 舵机的安装与调节 舵机的控制脉宽与转角在-45°~+45°范围内线性变化。对于对速度有一定要求的智能车,舵机的响应速度和舵机的转向传动比直接影响车模能否以最佳速度顺利通过弯道。车模在赛道上高速行驶,特别是对于前瞻性不够远的红外光电检测智能车,舵机的响应速度及其转向传动比将直接影响车模行驶的稳定性,因此必须细心调试,逐一解决。由于舵机从执行转动指令到响应输出需占用一定的时间,因而产生舵机实时控制的滞后。虽然车模在进入弯道时能够检测到黑色路线的偏转方向,但由于舵机的滞后性,使得车模在转弯过程中时常偏离跑道,且速度越快,偏离越远,极大限制车模在连续弯道上行驶的最大时速,使得车模全程赛道速度很难进一步提高。为了减小舵机响应时间,在遵守比赛规则不允许改造舵机结构的前提下,利用杠杆原理,采用加长舵机力臂的方案来弥补这一缺陷,加长舵机力臂示意图如图4所示。

AT89C51单片机C实现简易计算器

AT89C51单片机简易计算器的设计 一、总体设计 根据功能和指标要求,本系统选用MCS-51系列单片机为主控机。通过扩展必要的外围接口电路,实现对计算器的设计。具体设计如下:(1)由于要设计的是简单的计算器,可以进行四则运算,为了得到较好的显示效果,采用LCD 显示数据和结果。 (2)另外键盘包括数字键(0~9)、符号键(+、-、×、÷)、清除键和等号键,故只需要16 个按键即可,设计中采用集成的计算键盘。 (3)执行过程:开机显示零,等待键入数值,当键入数字,通过LCD显示出来,当键入+、-、*、/运算符,计算器在内部执行数值转换和存储,并等待再次键入数值,当再键入数值后将显示键入的数值,按等号就会在LCD上输出运算结果。 (4)错误提示:当计算器执行过程中有错误时,会在LCD上显示相应的提示,如:当输入的数值或计算得到的结果大于计算器的表示范围时,计算器会在LCD上提示溢出;当除数为0时,计算器会在LCD 上提示错误。 系统模块图:

二、硬件设计 (一)、总体硬件设计 本设计选用AT89C51单片机为主控单元。显示部分:采用LCD 静态显示。按键部分:采用4*4键盘;利用MM74C922为4*4的键盘扫描IC,读取输入的键值。 总体设计效果如下图:

(二)、键盘接口电路 计算器输入数字和其他功能按键要用到很多按键,如果采用独立按键的方式,在这种情况下,编程会很简单,但是会占用大量的I/O 口资源,因此在很多情况下都不采用这种方式,而是采用矩阵键盘的方案。矩阵键盘采用四条I/O 线作为行线,四条I/O 线作为列线组成键盘,在行线和列线的每个交叉点上设置一个按键。这样键盘上按键的个数就为4×4个。这种行列式键盘结构能有效地提高单片机系统中I/O 口的利用率。 矩阵键盘的工作原理: 计算器的键盘布局如图2所示:一般有16个键组成,在单片机中正好可以用一个P口实现16个按键功能,这种形式在单片机系统中也最常用。 图 2 矩阵键盘布局图 矩阵键盘内部电路图如图3所示:

51单片机PID调增量式光电编码器测速.

编码器输出的A向脉冲接到单片机的外部中断INT0,B向脉冲接到I/O端口P1.0。当系统工作时,首先要把INT0设置成下降沿触发,并开相应中断。当有有效脉冲触发中断时,进行中断处理程序,判别B脉冲是高电平还是低电平,若是高电平则编码器正转,加1计数;若是低电平则编码器反转,减1计数。 基于51单片机的直流电机PID闭环调速系统原理详解与程序 (2013-08-04 01:18:15) 转载▼ 标签: 分类:单片机 51单片 机 直流电 机 pid pcf8591 基于51单片机的直流电机PID闭环调速系统 1.电机转速反馈: 原理:利用光电编码器作为转速的反馈元件,设电机转一周光电编码器发送N个PWM波形,利用测周法测量电机转速。 具体实现:将定时器0设置在计数模式,用来统计一定的时间T内接受到的脉冲个数M个,而定时器0置在计时模式,用来计时T时间。则如果T时间接受到M个PWM波形,而电机转一圈发出N个PWM波形,则根据测周法原理,电机的实际的转速为:real_speed=M/(N*T),单位转/秒。若将定时器1置在计数模式,则PWM波形应该由P3^3脚输入。 代码实现:

//定时器0初始化,用来定时10ms void Init_Timer0(void) { TMOD |= 0x01; //使用模式1,16位定时器,且工作在计时模式 TH0=(65536-10000)/256; //定时10ms TL0=(65536-10000)%6; EA=1; //总中断打开 ET0=1; //定时器中断打开 TR0=1; //定时器开关打开 } // 计数器1初始化,用来统计定时器1计时250ms内PWM波形个数 void Init_Timer1(void) { TMOD |= 0x50; //使用计数模式1,16位计数器模式 TH1=0x00; //给定初值,由0往上计数 TL1=0x00; EA=1; //总中断打开 ET1=1; //定时器中断打开 TR1=1; //定时器开关打开 } //定时器0的中断服务子函数,主要完成脉冲个数的读取,实际转速的计算和PID 控制以及控制结 //果输出等工作 void Timer0_isr(void) interrupt 1 { unsigned char count; TH0=(65536-10000)/256; //重新赋值 10ms TL0=(65536-10000)%6;

基于AT89C51单片机的步进电动机控制系统设计

重庆科技大学 本科毕业论文 基于AT89C51单片机的步进电动机控制系统 设计 考生姓名: XXXXX X 准考证号: XXXXXXXXXXXX 专业层次:本科院(系):XXXXXXXXXXXXXXXXXXX 指导教师: XXXXXX 职称:讲师 重庆科技大学 二O一二年月日

基于AT89C51单片机的步进电动机控制系统 设计 考生姓名: XXXXXX 准考证号: XXXXXXXXXXXX 专业层次:本科 指导教师: XXXXXXX 院(系):机械与动力工程学院 重庆科技大学 二O一二年九月二十日

摘要 随着微电子和计算机技术的发展,步进电机的需求量与日俱增,它广泛用于打印机、电动玩具等消费类产品以及数控机床、工业机器人、医疗器械等机电产品中,其在各个国民经济领域都有应用。研究步进电机的控制系统,对提高控制精度和响应速度、节约能源等都具有重要意义。 步进电机是一种能将电脉冲信号转换成角位移或线位移的机电元件,步进电机控制系统主要由步进控制器,功率放大器及步进电机等组成。采用单片机控制,用软件代替上述步进控制器,使得线路简单,成本低,可靠性大大增加。软件编程可灵活产生不同类型步进电机励磁序列来控制各种步进电机的运行方式。 本设计是采用AT89C51单片机对步进电机的控制,通过I/O口输出的时序方波作为步进电机的控制信号,信号经过芯片ULN2003驱动步进电机。 实践证明,基于单片机控制的步进电机比传统的步进控制器具有更好的性能,更加简单、方便、可靠。本设计的主要研究对象就是开环伺服系统中最常用的执行器件——步进电机。 关键词:步进电机,单片机,正反转控制,键盘控制,LCD液晶显示

编码器位置与速度检测

制作速度检测部件 实验报告 专业:机械设计制造及其自动化 姓名:xxx 学号:xxx 实验时间:2012-2013学年第2学期

制作速度检测部件 一、实验原理: 1.利用外部中断0对信号源在一定时间内产生的脉冲进行计数,并对外部中断0设置为跳变沿中断(IT0=1) 2.利用定时器0进行计时,并在中断程序中读取这段时间内产生的脉冲数,再利用脉冲数与路程之间的对应关系求得编码器的速度。 3. 光电开关的使用,如图: 测速方法: M 法测速 测取c T 时间内旋转编码器输出的脉冲个数1M ,用以计算这段时间内的平均转速,称作M法测速,图12所示。电机的转速为 r/min 601 c ZT M n = , M 法测速的分辨率: c c c ZT ZT M ZT M Q 60 60)1(6011= -+= M 法测速误差率: c T 1 M 图12 M 测速法原理图

% 1001%10060 ) 1(60 60%1111max ?=?-=M ZT M ZT M ZT M c c c δM 法测速适用于高速段, T 法测速 记录编码器两个相邻输出脉冲的间的高频脉冲个数M2,f0为高频脉冲频率,图13所示。 电机转速 r/min ZM f 60ZT 60n 2 t == T 法测速的分辨率: )1(6060)1(602202020-=--=M ZM f ZM f M Z f Q 或Zn f Zn Q -= 02 60 T法测速误差率: % 10011 %10060 60 )1(60%22 020 20max ?-=?-=M ZM f ZM f M Z f δ T 法测速适用于低速段。 M/T 法测速 把M 法和T 法结合起来,既检测TC 时间内旋转编码器输出的脉冲个数M1,又检测同一时间间隔的高频时钟脉冲个数M2,用来计算转速,称作M/T 法测速。采用M/T 法测速时,应保 2 M 2f M T t =图13 T 测速法 c T 1 M 2 M 图14 M/T 法测速原理图

基于51系列单片机控制步进电机调速实验 (自动保存的)

基于51系列单片机控制步进电机调速实验 实验指导书 仇国庆编写 重庆邮电大学自动化学院 自动化专业实验中心 2009年2月

基于51系列单片机控制步进电机调速实验 实验目的及要求: 1、熟悉步进电机的工作原理 2、熟悉51系列单片机的工作原理及调试方法 3、设计基于51系列单片机控制的步进电机调速原理图(要求实现电机的速度反馈测量,测量方式:数字测量) 4、实现51系列单片机对步进电机的速度控制(步进电机由实验中心提供,具体型号42BYG )由按钮控制步进电机的启动与停止;实现加速、匀速、和减速控制。速度设定由键盘设定,步进电机的反馈速度由LED 数码管显示。 实验原理: 步进电机控制原理 一般电动机都是连续旋转,而步进电动却是一步一步转动的,故叫步进电动机。步进电机是数字控制电机,它将脉冲信号转变成角位移,即给一个脉冲信号,步进电机就转动一个角度,因此非常适合于单片机控制。步进电机可分为反应式步进电机(简称VR)、永磁式步进电机(简称PM)和混合式步进电机(简称HB)。因此步进电动机是一种把脉冲变为角度位移(或直线位移)的执行元件。步进电动机的转子为多极分布,定子上嵌有多相星形连接的控制绕组,由专门电源输入电脉冲信号,每输入一个脉冲信号,步进电动机的转子就前进一步。由于输入的是脉冲信号,输出的角位移是断续的,所 以又称为脉冲电动机。随着数字控制系统的发展,步进电动机的应用将 逐渐扩大。 步进电机区别于其他控制电机的最大特点是,它是通过输入脉冲信号来 进行控制的,即电机的总转动角度由输入脉冲数决定,而电机的转速由 脉冲信号频率决定。步进电机的驱动电路根据控制信号工作,控制信号 可以由单片机产生。 电机转子均匀分布着很多小齿,定子齿有三个励磁绕阻,其几 何轴线依次分别与转子齿轴线错开。0、1/3て、2/3て,(相邻 两转子齿轴线间的距离为齿距以て表示),即A与齿1相对齐, B与齿2向右错开1/3て,C与齿3向右错开2/3て,A'与齿5相对齐,(A'就是A,齿5就是齿1)下面是定转子的展开图:(图2所示)

M法与T法在编码器测速方面的区别和频率问题

编码器的测速原理:M/T法 大家都比较清楚在闭环伺服系统中,编码器的反馈脉冲个数和系统所走位置的多少成正比,但对于怎样通过编码器所反馈的脉冲个数来求得电机的旋转速度了解的人就不是很多了。 根据脉冲计数来测量转速的方法有以下三种:(1)在规定时间内测量所产生的脉冲个数来获得被测速度,称为M法测速;(2)测量相邻两个脉冲的时间来测量速度,称为T法测速;(3)同时测量检测时间和在此时间内脉冲发生器发出的脉冲个数来测量速度,称为M/T 法测速。以上三中测速方法中,M法适合于测量较高的速度,能获得较高分辨率;T法适合于测量较低的速度,这时能获得较高的分辨率;而M/T法则无论高速低速都适合测量。以下只对T法测速进行详细介绍。 T法测速的原理是用一已知频率fc(此频率一般都比较高)的时钟脉冲向一计数器发送脉冲,计数器的起停由码盘反馈的相邻两个脉冲来控制,原理图见图1。若计数器读数为m1,则电机每分钟转速为nM=60fc/Pm1(r/min) 图1 T法测速原理 其中P为码盘一圈发出的脉冲个数即码盘线数,m1为 相邻两个脉冲间高频脉冲个数。测速分辨率:当对应转速由n1变为n2时则分辨率Q的定义为Q=n2-n1,Q值越小说明测量装置对转速变化越敏感即分辨率越高。因此可以得到T法测速的分辨率为 Q=60fc/Pm1-60fc/P(m1+1)= n2M P/(60fc+ nMP) 由上式可见随着转速nM的降低,Q值越小,即T法测速在低速时有较高的分辨率。 MT法测速之定量分析 速度测量是工控系统中最基本的需求之一,最常用的是用数字脉冲测量某根轴的转速,再根据机械比、直径换算成线速度。脉冲测速最典型的方法有测频率(M法)和测周期(T法)。定性分析: M法是测量单位时间内的脉数换算成频率,因存在测量时间内首尾的半个脉冲问题,可能会有2个脉的误差。速度较低时,因测量时间内的脉冲数变少,误差所占的比例会变大,所以M法宜测量高速。如要降低测量的速度下限,可以提高编码器线数或加大测量的单位时间,使用一次采集的脉冲数尽可能多。 T法是测量两个脉冲之间的时间换算成周期,从而得到频率。因存在半个时间单位的问题,可能会有1个时间单位的误差。速度较高时,测得的周期较小,误差所占的比例变大,所以T法宜测量低速。如要增加速度测量的上限,可以减小编码器的脉冲数,或使用更小更精确的计时单位,使一次测量的时间值尽可能大。 M法、T法各且优劣和适应范围,编码器线数不能无限增加、测量时间也不能太长(得考虑实时性)、计时单位也不能无限小,所以往往候M法、T法都无法胜任全速度范围内的测量。因此产生了M法、T法结合的M/T 测速法:低速时测周期、高速时测频率。 定量分析:

51单片机简易计算器代码

#include"reg52.h" #define uchar unsigned char #define uint unsigned int sbit busy=P0^7; void delay(uint z) { uint x,y; for(x=z;x>0;x--) for(y=110;y>0;y--); } char i,j,temp,num; long a,b,c; //a,第一个数b,第二个数c,得数 uchar flag,fuhao;//flag表示是否有符号键按下,fuhao表征按下的是哪个符号uchar code table[]={7,8,9,0,4,5,6,0,1,2,3,0,0,0,0,0}; uchar code table1[]={7,8,9,0x2f-0x30,4,5,6,0x2a-0x30,1,2,3,0x2d-0x30,0x01-0x30,0,0x3d-0x30,0 x2b-0x30}; //按键显示编码表 sbit lcden=P2^2; sbit lcdwrite=P2^1; sbit lcdrs=P2^0; //lcd的写指令 void write_com(uchar com) { lcdrs=0; lcden=0; P0=com; delay(1); lcden=1; delay(1); lcden=0; } //lcd的写数据 void write_date(uchar da) { lcdrs=1; lcden=0; P0=da; delay(1); lcden=1; delay(1); lcden=0; } //初始化

void init() //初始化 { uchar num; num=-1; lcdwrite=0; lcden=0; write_com(0x38); write_com(0x0c); write_com(0x06); write_com(0x01); delay(500);//延时0.5s write_com(0x01); i=0; j=0; a=0; //第一个参与运算的数 b=0; //第二个参与运算的数 c=0; flag=0; //flag表示是否有符号键按下, fuhao=0; // fuhao表征按下的是哪个符号 } void keyscan() // 键盘扫描程序 { P3=0xfe; if(P3!=0xfe) { delay(10); //延迟20ms if(P3!=0xfe) { temp=P3&0xf0; switch(temp) { case 0xe0:num=0; break; case 0xd0:num=1; break; case 0xb0:num=2; break; case 0x70:num=3; break; } } while(P3!=0xfe); if(num==0||num==1||num==2)//如果按下的是'7','8'或'9 { if(j==1)//确认一次计算完毕,清屏 { write_com(0x01);

基于51单片机的光电编码器测速报告

课程设计报告 课程名称:微机原理课程设计 题目:基于51单片机的光电编码器测速

光电编码器是高精度位置控制系统常用的一种位移检测传感器。在位置控制系统中,由于电机既可能正转,也可能反转,所以要对与其相连的编码器输出的脉冲进行计数,要求相应的计数器既能实现加计数,又能实现减计数,即进行可逆计数。其计数的方法有多种,包括纯粹的软件计数和硬件计数。文中分别对这两种常用的计数方法进行了分析,对其优缺点进行了对比,最后提出了一种新的计数方法,利用80C51单片机内部的计数器实现对光电编码器输出脉冲的加减可逆计数,既节省了硬件资源,又能得到较高的计数频率。本设计就是由单片机STC89C52RC芯片,光电编码器和1602液晶为核心,辅以必要的电路,构成了一个基于51单片机的光电编码器测速器。该系统有两个控制按键,分别用于控制每秒的转速和每分钟的转速,并将速度用1602液晶显示出来。该测速器测速精准,具有实时检测的功能,操作简单。 关键词:光电编码器,51单片机,C语言,1602液晶

一、设计任务与要求 (4) 1.1 设计任务 (4) 1.2 设计要求 (4) 二、方案总体设计 (5) 2.1 方案一 (5) 2.2 方案二 (5) 2.3 系统采用方案 (5) 三、硬件设计 (7) 3.1 单片机最小系统 (7) 3.2 液晶显示模块 (7) 3.3 系统电源 (8) 3.4光电编码器电路 (8) 3.5 整体电路 (9) 四、软件设计 (10) 4.1 keil软件介绍 (10) 4.2 系统程序流程 (10) 五、仿真与实现 (12) 5.1 proteus软件介绍 (12) 5.2 仿真过程 (12) 5.3 实物制作与调试 (13) 5.4 使用说明 (14) 六、总结 (15) 6.1 设计总结 (15) 6.2 经验总结 (15) 七、参考文献 (16)

51单片机 实现计算器功能

51单片机多为计算器汇编程序 此程序并不仅仅局限于255以内操作 FIR0 EQU 30H FIR1 EQU 31H FIR2 EQU 32H FIR3 EQU 33H ;第一个操作数 SEC0 EQU 34H SEC1 EQU 35H SEC2 EQU 36H SEC3 EQU 37H ; 第二个操作数 LIN0 EQU 38H LIN1 EQU 39H LIN2 EQU 40H LIN3 EQU 41H ; 数据暂存 RES0 EQU 42H RES1 EQU 43H RES2 EQU 44H RES3 EQU 45H ;结果暂存区 XLINE EQU 46H YLINE EQU 47H ;记录按键按键位置 SYMBLE EQU 48H ;操作符存储 DDE0 EQU 49H DDE1 EQU 50H DDE2 EQU 51H ;用于延时 FLEL4 EQU 52H FLEL5 EQU 53H FLEL6 EQU 54H BEFOR EQU 55H HH BIT 01H ;比较大 EE BIT 02H ;比较相等 FIL BIT 03H ;溢出标记 FLAG BIT 04H ;有无按键标记 ERR BIT 05H ;错误标记 YESY BIT 06H ; 有无操作符按键标记

NUM BIT 07H ;按键个数标记 YESN BIT 08H ;有无数字按键标记 ORG 0000H LJMP MAIN ORG 0003H LJMP INTERUPT MAIN: MOV IE,#01H ;初始化 MOV SP,#6FH LCALL CLRI SETB IT0 SETB EA DISPLAY: ;数码管显示函数 CJNE R3,#00H,TT1 MOV R3,#0AH TT1: CJNE R3,#0AH,STARTD CJNE R2,#00H,TT2 MOV R2,#0AH TT2: CJNE R2,#0AH,STARTD CJNE R1,#00H,STARTD MOV R1,#0AH STARTD: MOV A,R0 LCALL TRANS ;将所要显示的值转化为数码管对应的数据 MOV P2,A MOV P1,#10H LCALL DELAY10ms MOV A,R1 LCALL TRANS MOV P2,A MOV P1,#20H LCALL DELAY10ms MOV A,R2 LCALL TRANS MOV P2,A MOV P1,#40H LCALL DELAY10ms

相关文档
相关文档 最新文档