datasheet

使用单片机制作的测速表

2016-09-30来源: eefocus关键字:单片机  测速表
测速是工农业生产中经常遇到的问题,学会使用单片机技术设计测速仪表具有很重要的意义。

要测速,首先要解决是采样的问题。在使用模拟技术制作测速表时,常用测速发电机的方法,即将测速发电机的转轴与待测轴相连,测速发电机的电压高低反映了转速的高低。使用单片机进行测速,可以使用简单的脉冲计数法。只要转轴每旋转一周,产生一个或固定的多个脉冲,并将脉冲送入单片机中进行计数,即可获得转速的信息。

一、脉冲信号的获得

可以有多种方式来获得脉冲信号,这些方法有各自的应用场合。下面逐一进行分析。

1.霍尔传感器

霍尔传感器是对磁敏感的传感元件,常用于开关信号采集的有CS3020、CS3040等,这种传感器是一个3端器件,外形与三极管相似,只要接上电源、地,即可工作,输出通常是集电极开路(OC)门输出,工作电压范围宽,使用非常方便。如图1所示是CS3020的外形图,将有字面对准自己,三根引脚从左向右分别是Vcc,地,输出。

 

 

 

 

图1CS3020外形图

使用霍尔传感器获得脉冲信号,其机械结构也可以做得较为简单,只要在转轴的圆周上粘上一粒磁钢,让霍尔开关靠近磁钢,就有信号输出,转轴旋转时,就会不断地产生脉冲信号输出。如果在圆周上粘上多粒磁钢,可以实现旋转一周,获得多个脉冲输出。在粘磁钢时要注意,霍尔传感器对磁场方向敏感,粘之前可以先手动接近一下传感器,如果没有信号输出,可以换一个方向再试。

这种传感器不怕灰尘、油污,在工业现场应用广泛。

2.光电传感器

光电传感器是应用非常广泛的一种器件,有各种各样的形式,如透射式、反射式等,基本的原理就是当发射管光照射到接收管时,接收管导通,反之关断。以透射式为例,如图2所示,当不透光的物体挡住发射与接收之间的间隙时,开关管关断,否则打开。为此,可以制作一个遮光叶片如图3所示,安装在转轴上,当扇叶经过时,产生脉冲信号。当叶片数较多时,旋转一周可以获得多个脉冲信号。

 

 

 

 

图2光电传感器的原理图

 

 

 

 

图3遮光叶片

3.光电编码器

光电编码器的工作原理与光电传感器一样,不过它已将光电传感器、电子电路、码盘等做成一个整体,只要用连轴器将光电传感器的轴与转轴相连,就能获得多种输出信号。它广泛应用于数控机床、回转台、伺服传动、机器人、雷达、军事目标测定等需要检测角度的装置和设备中。如图4所示,是某光电编码器的外形。

 

 

 

 

图4成品光电编码器

二、硬件连接

测速的方法决定了测速信号的硬件连接,测速实际上就是测频,因此,频率测量的一些原则同样适用于测速。

通常,可以用计数法、测脉宽法和等精度法来进行测试。所谓计数法,就是给定一个闸门时间,在闸门时间内计数输入的脉冲个数;测脉宽法是利用待测信号的脉宽来控制计数门,对一个高精度的高频计数信号进行计数。由于闸门与被测信号不能同步,因此,这两种方法都存在±1误差的问题,第一种方法适用于信号频率高时使用,第二种方法则在信号频率低时使用。等精度法则对高、低频信号都有很好的适应性。

这里为简化讨论,仅采用计数法来进行测试。

图5所示是测速器的电路图,由六位数码管和测速接口组成。其中T0处接的只画了一只CS3020组成的霍尔传感器接线图,如果采用光电传感器接口也是一样的,读者可自行画出接线图。

 

 

 

 

图5测速计电路原理图

三、软件编程

测量转速,使用霍尔传感器,被测轴安装有12只磁钢,即转轴每转一周,产生12个脉冲,要求将转速值(转/分)显示在数码管上。

程序如下:

DISPBUF EQU 5AH ;显示缓冲区从5AH开始

SecCoun EQU 59H

SpCoun EQU 57H ;速度计时器单元57H和58H,高位在前(57H单元中)

Count EQU 56H ;显示时的计数器

SpCalc bit 00h ;要求计算速度的标志

Hidden EQU 16 ;消隐码

ORG 0000H

AJMP START

ORG 1BH

JMP TIMER1 ;定时中断1入口

ORG 30H

START: MOV SP,#5FH ;设置堆栈

MOV P1,#0FFH

MOV P0,#0FFH

MOV P2,#0FFH ;初始化,所有显示器、LED灭

MOV TMOD,#00010101B ;定时器T1工作于方式1,定时器0工作方式1 MOV TH1,#HIGH(65536-4000)

MOV TL1,#LOW(65536-4000)

SETB TR1

SETB ET1 ;开定时器1中断

SETB EA

LOOP: JNB SpCalc,LOOP ;如果未要求计算,转本身循环

;标号:MULD功能:双字节二进制无符号数乘法

;入口条件:被乘数在R2、R3中,乘数在R6、R7中。

;出口信息:乘积在R2、R3、R4、R5中。

;影响资源:PSW、A、B、R2~R7堆栈需求:2字节

MOV R2,SpCoun

MOV R3,SpCoun+1

MOV R6,#0

MOV R7,#5 ;测得的数值是每秒计数值,转为每分转速(每一转测12次,故乘5而非60)

CALL MULD

;标号:HB2功能:双字节十六进制整数转换成双字节BCD码整数

;入口条件:待转换的双字节十六进制整数在R6、R7中。

;出口信息:转换后的三字节BCD码整数在R3、R4、R5中。

;影响资源:PSW、A、R2~R7堆栈需求:2字节

MOV A,R4

MOV R6,A

MOV A,R5

MOV R7,A ;将乘得的结果送R6R准备转换,这里结果不可能超过2字节

CALL HB2

CBCD:

MOV DISPBUF,R3 ;最高位

MOV A,R4 ;

ANL A,#0F0H ;去掉低4位

SWAP A ;将高4位切换到低4位

MOV DISPBUF+1,A

MOV A,R4

ANL A,#0FH

MOV DISPBUF+2,A

MOV A,R5

ANL A,#0F0H

SWAP A

MOV DISPBUF+3,A

MOV A,R5

ANL A,#0FH

MOV DISPBUF+4,A

CLR SpCalc ;清计算标志

JMP LOOP

;主程序到此结束

TIMER1: PUSH ACC;ACC入栈

PUSH PSW ;PSW入栈

SETB RS0 ;工作区1

JNB TR0,SETTR0 ;如果T0未运行,则开启T0

JMP GO1

SETTR0:

SETB TR0

GO1:

INC SecCoun ;秒计数器加1

MOV A,SecCoun

CJNE A,#251,Go2 ;如果未到1s则转

CLR TR0 ;1s到了,则停止T0的运行

MOV SpCoun,TH0

MOV SpCoun+1,TL0 ;读取计数值

CLR A

MOV TH0,A

MOV TL0,A ;清计数器

SETB SpCalc ;要求主程序计算速度

MOV SecCoun,#0 ;清秒计数器

Go2:

INC COUNT;用于显示的计数器

MOV A,COUNT

CLR C

SUBB A,#6

JZ N1

JMP N2

N1: MOV COUNT,#0

N2: MOV A,#DISPBUF

ADD A,COUNT

MOV R0,A ;指向当前要显示的显示缓冲区

MOV A,@R0 ;取第一个待显示数

MOV DPTR,#DISPTAB ;字形表首地址

MOVC A,@A+DPTR ;取字形码

MOV P0,A ;将字形码送P0位(段口)

MOV A,COUNT

MOV DPTR,#BitTab ;字位表首地址

MOVC A,@A+DPTR

ORL P2,#11111100B

ANL P2,A

MOV TH1,#HIGH(65536-4000)

MOV TL1,#LOW(65536-4000)

POP PSW

POP ACC

RETI

BitTab: DB7Fh,0BFH,0DFH,0EFH,0F7H,0FBH

DISPTAB:DB0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H,88H,83H,0C6H,0A1H,86H,8EH,0FFH

……其他数学运算程序(略)

四、程序分析

主程序在对定时器、计数器、堆栈等进行初始化后即判断标志SpCalc是否为1,如果为1,说明要求对数据进行计算处理,首先将SpCalc标志清零,以保证下次能正常判断,然后进入数据处理程序,由于这里的闸门时间为1s,而显示要求为转/分,因此,要将测到的数据进行转换,转换的方法是将测得的数据乘以60,但由于转轴上安装有12只磁钢,每旋转一周可以得到12个脉冲,因此,要将测得的数据除以12,所以综合起来,将测得的数据乘以5即可得到每分钟的转速。计算得到的结果是二进制的整数,要将数据送往显示缓冲区需要将该数转化为BCD码。运算得到的是压缩BCD码,需要将其转换为非压缩BCD码,从标号CBCD开始的一段程序即作了这样的处理。需要说明的是,这里多位二进制乘法和多位二进制到BCD码的转换都是用了现成的成熟子程序,因此,首先将二进制数转换为压结合实际BCD码,然后再转换成非压缩BCD码,看似多写了些程序,实际上这对于保证程序的质量很有好处。

定时器T1用作4ms定时发生器,在定时中断程序中进行数码管的动态扫描,同时产生1s的闸门信号。1s闸门信号的产生是通过一个计数器Count,每次中断时间为4ms,每计250次即为1s,到了1s后,即清除计数器Count,然后关闭作为计数器用的T0,读出TH0、TL0中的数值,分别送入SpCoun和SpCoun+1单元,将T0中的值清空,置SpCalc标志为1,要求主程序进行速度值的计算。这里还有一个细节,用作1s闸门信号产生的Count每次中断都会加1,而T0却有一个周期是被关闭的,因此,计数值是251而不是250。

看完这一部份内容以后,请读者自行完成以下工作:

1.试用测脉宽法测试速度(提示:80C51单片机内部有高精度信号源,而其计数器又具有门控特性),注意硬件设计要略作更改。

2.查找等精度测量原理,试设计等精度测量的硬件设计并编写相应软件。

关键字:单片机  测速表

编辑:什么鱼 引用地址:http://www.eeworld.com.cn/mcu/article_2016093029996.html
本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。

上一篇:用89C2051控制的简易拨号报警器
下一篇:点阵式汉字LED显示屏的原理与制作

关注eeworld公众号 快捷获取更多信息
关注eeworld公众号
快捷获取更多信息
关注eeworld服务号 享受更多官方福利
关注eeworld服务号
享受更多官方福利

推荐阅读

单片机时钟的解析

时钟周期       时钟周期也称为振荡周期,定义为时钟脉冲的倒数(时钟周期就是单片机外接晶振的倒数,例如12M的晶振,它的时钟周期就是1/12us),是计算机中的最基本的、最小的时间单位。       在一个时钟周期内,CPU仅完成一个最基本的动作。时钟脉冲是计算机的基本工作脉冲,控制着计算机的工作节奏。时钟频率越高,工作速度就越快。       8051单片机把一个时钟周期定义为一个节拍(用P表示),二个节拍定义为一个状态周期(用S表示)。机器周期       计算机中
发表于 2019-04-16
单片机时钟的解析

关于单片机通过串口发送浮点数信息

最近弄一个小东西的时候,需要将AD采集的数据,通过串口发送上位机。由于还得在下位机部分显示出来,所以这个AD采集的数据转换之后发送到串口,比较容易点。但是问题来了,以前的串口,只有从GPS模块接收的信息是浮点类型外。其他的东西,都只是把字符类型或者字符串类型的数据发到串口。 查阅了一点资料,这里是资料的链接。 单片机将浮点数从串口发送出去: 1.http://www.51hei.com/bbs/dpj-31223-1.html 采用了将浮点数转换为四个字节的数据,放到数组中,发送到串口。 2.http://blog.sina.com.cn/s
发表于 2019-04-12

单片机之STM32 中的 assert_param 函数

我们在学STM32的时候函数assert_param出现的几率非常大,上网搜索一下,网上一般解释断言机制,做为程序开发调试阶段时使用。下面我就谈一下我对这些应用的看法,学习东西抱着知其然也要知其所以然。4 断言机制函数assert_param我们在分析库函数的时候,几乎每一个函数的原型有这个函数assert_param();下面以assert_param(IS_GPIO_ALL_PERIPH(GPIOx));为例说一下我的理解,函数的参数IS_GPIO_ALL_PERIPH(GPIOx),我们可以寻找到原型#define IS_GPIO_ALL_PERIPH(PERIPH) (((*(uint32_t*)&(PERIPH))
发表于 2019-04-11
单片机之STM32 中的 assert_param 函数

STM32单片机常用库函数

必须在其中选择,抢占级别高的会打断其他中断优先执行,而响应级别高的会在其他中断执行完优先执行。4.FLASH:芯片内部存储器flash操作函数对芯片内部flash进行操作的函数,包括读取,状态,擦除,写入等等,可以允许程序去操作flash上的数据。 基础应用1,FLASH时序延迟几个周期,等待总线同步操作。推荐按照单片机系统运行频率,0—24MHz时,取Latency=0;24—48MHz时,取Latency=1;48~72MHz时,取Latency=2。所有程序中必须的 用法:FLASH_SetLatency(FLASH_Latency_2);位置:RCC初始化子函数里面,时钟起振之后。 基础应用
发表于 2019-04-11

C51单片机通过串口调节PWM波

PWM 是一种常用的电子控制技术PWM 本意为 脉冲宽度调制,可以简单理解为对占空比的控制。下图就是占空比图例,一个周期内高电平时间与周期时间的比值。现在的一些MCU自带PWM控制功能,但是51/52单片机还是没有这个功能。可以用程序自己实现。用到的51单片机资源如下:1.双定时器及定时器中断 2.串口和串口中断 下面看下程序:PWM.H#ifndef _PWM_H#define _PWM_H#include <reg52.h>#include <stdio.h>#include <stdlib.h>#define uint  unsigned int 
发表于 2019-04-09
C51单片机通过串口调节PWM波

51单片机之IIC&EEPROM的驱动程序

#include <reg52.h>#include "./delay/delay.h"sbit SCL = P2^0;sbit SDA = P2^1;bit ack = 0; unsigned char flag = 1;#define LCDPORT P0#define LCD_WRITE_DATA 1#define LCD_WRITE_COM 0sbit RS = P2^4;sbit RW = P2^5;sbit E = P2^6; #define SUCC 0#define ERR 1 void iic_start(){ SDA = 1;  //先操作
发表于 2019-04-08

小广播

何立民专栏

单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号 电信业务审批[2006]字第258号函 京公海网安备110108001534 Copyright © 2005-2019 EEWORLD.com.cn, Inc. All rights reserved