历史上的今天
返回首页

历史上的今天

今天是:2025年03月16日(星期日)

正在发生

2018年03月16日 | 单片机测速的几种方案解析

2018-03-16 来源:eefocus

测速是工农业生产中经常遇到的问题,学会使用单片机技术设计测速仪表具有很重要的意义。

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

 

一、脉冲信号的获得

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

1.霍尔传感器

图1 CS3020引脚图

图1 CS3020引脚图

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

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

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

2.光电传感器

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

图2 光电传感器的原理图

图2 光电传感器的原理图

图3 遮光叶片

图3 遮光叶片

3.光电编码器

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

图4 成品光电编码器

图4 成品光电编码器

二、硬件连接

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

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

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

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

图5 测速计电路原理图

图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.查找等精度测量原理,试设计等精度测量的硬件设计并编写相应软件。


推荐阅读

史海拾趣

Bestar Electric公司的发展小趣事

随着技术实力的提升和产品线的丰富,Bestar Electric开始积极拓展市场。公司通过参加国际电子展、建立销售团队和合作伙伴网络等方式,将产品推向全球市场。同时,公司注重品牌建设,通过广告宣传和客户服务提升品牌知名度和美誉度。

EPIC公司的发展小趣事

Epic Games一直关注并支持独立游戏开发者的发展。过去,独立开发者有机会与Epic Store签订协议以获得财务支持或提高游戏的知名度。然而,随着市场环境的变化和金融合约结构的转变,独立开发者面临着越来越多的挑战。尽管如此,Epic Games仍然致力于提供支持和资源来帮助独立开发者克服障碍、实现创新并推动整个游戏行业的进步。通过与独立开发者的紧密合作和持续支持,Epic Games不仅促进了游戏行业的多样性发展,也为自己赢得了广泛的好评和声誉。

Everbuild公司的发展小趣事

随着全球对环保和可持续发展的重视,Everbuild也将绿色环保理念融入到产品设计和生产过程中。公司采用环保材料和节能技术,减少生产过程中的污染和能源消耗。同时,Everbuild还积极参与环保公益活动,倡导绿色生活方式。这些举措不仅提高了公司的社会责任感,也为公司的可持续发展奠定了基础。

Herrmann Kg公司的发展小趣事

Herrmann Kg凭借其卓越的产品质量和专业的服务,赢得了全球众多领先客户的信赖。例如,CUSTOMCELLS®作为一家全球领先的客户专用锂电池开发商,在生产过程中采用了Herrmann Kg的超声波焊接系统,有效降低了废品率,提高了生产效率。这种深度合作不仅展示了Herrmann Kg在电池制造领域的专业能力,也进一步巩固了其在全球市场中的地位。通过不断满足客户的特定需求,Herrmann Kg在电子及其他相关行业中树立了良好的口碑。

Consolidated Wire公司的发展小趣事

在电子行业的早期,Consolidated Wire公司以其出色的技术研发能力崭露头角。公司投入大量资源研发新型导电材料,成功推出了一种具有更高导电性能和更低电阻的新型线材。这一技术突破不仅提升了电子设备的性能,还降低了能耗,赢得了市场的广泛认可。随着新型线材的普及,Consolidated Wire公司的业务规模迅速扩大,逐渐在电子线材市场占据了领先地位。

Dfx公司的发展小趣事

某消费电子公司在生产过程中经常遇到质量问题,导致产品退货率居高不下。为了解决这个问题,该公司引入了DFX的设计理念,对产品设计、生产和测试等环节进行了全面优化。通过改进生产工艺、优化材料选择和加强质量控制等手段,该公司成功提高了产品的质量和可靠性,降低了退货率,赢得了消费者的信任。

问答坊 | AI 解惑

新的想法!

我最近看到论坛中的气氛真的挺好的,问的问题大家都讲的那么详细,有个问题是有人在有问题时会传附件那么想解决的人下载是否不应该付出芯币呢?琳子姐你看这样行吗?…

查看全部问答>

Wince6.0下面检测到SD卡后串口提示响应超时,但是SD卡可以正常识别和使用,请高手指点如何才能解决响应超时的问题

我使用的是PXA310平台,SD卡插入插槽后开机,刚开机的一段时间内串口打印的信息提示错误 串口信息如下 [MMC] SDH_INIT, Index:0 [MMC] SDH_INIT, cao:0 [MMC] SDH_INIT, intrTHreadP:100 [MMC] SDH_INIT, IstThreadP:101 [MMC] DMA BUFFER ...…

查看全部问答>

smdk2440下串口输出一些debug信息后就再没debug信息了

板子启动后,输出了一些诸如\"HW_Init, PWR_Init, PWR_Open, PWR_IOControl, PWR_Close\"的debug信息后,就没再有debug信息了,输出的那些信息都是在smdk2440\\drivers\\pwrbtn_pcf\\目录下的,而同目录下别的文件里的debug信息都打印不出来,我在t ...…

查看全部问答>

武汉有做Linux C/C++ 嵌入式开发的吗?

现在急需在武汉做Linux C/C++ 嵌入式开发的程序员,主要是做手机界面,因此需要在界面开发上有经验的人 请联系:陈先生 手机:13100628660 简历发至邮箱:peng.chen.wh@gmail.com…

查看全部问答>

怎么设置IP呀 ?

我是菜鸟, 我想知道怎么在WinCE里面设置IP. 察了半天都说修改注册表. 可我连注册表都打不开呀. 我是用 VS2003做得开发.我想在程序里面进行修改. 高手能否提供一个修改注册表得函数, 或者API之类得, 感激不尽啊!!!!…

查看全部问答>

急!wince系统要打印汉字,用什么编码方式??

wince系统要打印汉字,用unicode编码打印结果为方框,该用什么编码方式?GBK UTF都不能啊?急…

查看全部问答>

LIN简介

Vector公司有LIN介绍的大挂图,简明扼要,很不错,可惜是纸格式,保存看起来不方便,所以我把其编辑成了文件格式,如有需要,请自取。 http://www.box.net/shared/tipmr5qt1y…

查看全部问答>

简单加法

一、采用AT89C51单片机为核心,设计一个小系统,至少包括键盘(中断)、显示(LED和数码管)以及存储器。要求: 1、  请画出功能框图。 2、  功能要求: 1)  将键盘分为0-9以及“+”、“-”、“=”、“启动”、“复位”以及“暂 ...…

查看全部问答>

关于PB5.0查看函数源码的问题

       我在PB5.0下要修改代码,但是有的函数在其他文件里(例如在根目录下),我想看一下某个函数的实现体,我在函数上点击右键选择Go To Definition of \"函数名\", 但是出现对话框说要去project中的setting中设置, 我 ...…

查看全部问答>

电流源

本帖最后由 paulhyde 于 2014-9-15 08:52 编辑 我设计了一个电流源。但是只能输出200毫安以下的电流。我想要大电流,怎么办?    …

查看全部问答>