单片机测速的几种方案解析 - 深圳led背光源生产厂家,lcd显示屏,lcm液晶显示模块|模组厂-欧陆娱乐


  • 欧陆娱乐



  • 


  •  深圳市欧陆娱乐产品分类列表

    联系我们

    公司名称 :深圳市欧陆娱乐光电有限公司
    厂址:中国.广东省.深圳市宝安西乡臣田工业区

    营销专线
    吴先生 手机:13538278608
    胡先生 手机 :13823360976
    固定电话:86-0755-28246146/
    28246906/28246536/28247229
    电话传真:86-0755-89715671
    投诉与售后咨询 黄小姐 :13823217679
    胡先生 :13928021976

    Email:bly@sdgfj.net

    公司网址 :https://www.sdgfj.net/

    单片机测速的几种方案解析

    单片机测速的几种方案解析

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

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

    一、脉冲信号的获得

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

    1.霍尔传感器

     

    图1 CS3020引脚图

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

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

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

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

    
    首 页 | 公司简介 | 企业荣誉 | 产品中心 | 新闻中心 | 联系我们 | 集团首页

    版权所有 深圳市欧陆娱乐光电有限公司     粤ICP备08129267号-1


  • XML地图