基于PIC16F877单片机的简易测速计设计方案

发布者:ZenMaster123最新更新时间:2013-11-08 来源: dzsc关键字:PIC16F877  单片机  简易测速计 手机看文章 扫描二维码
随时随地手机看文章

  0 引言

  随着微电子技术的迅猛发展,单片机在汽车、通信、办公自动化、工业控制、高级玩具、家用电器等方面都得到了广泛的应用。如果将Proteus 作为单片机系统仿真工具,则不用制作电路板,而可以使用Proteus 进行系统虚拟实现,这样不仅能完成所需功能设计验证,还能降低硬件成本的耗用,从而缩短整个设计周期,从根本上提高了电子产品的开发效率。

  测速是工农业生产中经常遇到的问题,基于单片机的各种优势,将单片机应用于测速系统,具有很重要的意义。而对于测速技术,首先要解决的就是采样问题。在使用模拟技术制作测速设备时,常用测速发电机的方法,即将测速发电机的转轴与待测轴相连,测速发电机的电压高低反映了转速的高低;而使用单片机进行测速,则可以使用简单的脉冲计数法。

  只要转轴每旋转一周,产生一个或固定的多个脉冲,并将脉冲送入单片机中进行计数,最终计算出单位时间内的脉冲个数,即可获得转速的相关信息。本文将基于PIC16F877 单片机的捕捉功能来完成脉冲计数,利用软件编程实现相关物理关系的转换,最终得出齿轮线速度,并显示在数码管上。

  1 测速计原理

  1.1 CCP1 捕捉功能

  PIC16F877 单片机中有两个CCP 模块,其构造基本相同,分别记为CCP1 和CCP2.每个CCP 模块可以任意配置为捕捉(Capture)、比较(Compare) 和脉宽调制(PWM)3 个功能模式之一。

  CCP1 的捕捉模式具有如下三个功能:其一是可以捕捉RC2/CPP1引脚出现的跳变并保存当时TMR1计数寄存器内容;其二是具有预分频器,可以实现每1 个脉冲、每4 个脉冲或16 个脉冲捕捉一次;其三是捕捉时间能产生中断。

  1.2 CCP 测速计原理

  在捕捉模式下,单片机可以捕捉引脚电平变化时刻的时间值,即引脚输入脉冲上升沿或下降沿出现时刻的精确时间值。

  PIC16F877 的CCP1 模块工作于捕捉模式时,当特定的跳变沿出现时,TMR1 定时器的计数值会立即复制到CCPR1H 和CCPR1L 中并产生中断信号,通过在中断服务程序中读取这个16 位计数值。当使用CCP1 模块的捕捉功能实现相邻两次上升沿时间间隔的测量时,此时间间隔就是输入信号的周期g-Period.由于主频是4 MHz, 即每个指令周期为1 μs, 将预分频比设置为1:1,测得周期结果单位为微秒级。所以最终测得的速度值speed 通过以下公式得出:

  speed=(1M*60s*0.01m*pi)/g_Period

  其中,pi 为圆周率值;0.01m 为被测对象齿轮的直径,通过物理方法测得。

  speed=(1M*60s*0.01m*pi)/g_Period

  其中,pi 为圆周率值;0.01m 为被测对象齿轮的直径,通过物理方法测得。

  2 功能实现

  2.1 系统设计框图

  测速计功能的实现可由基于PIC16F877 的主控制模块、显示模块、齿轮和光电传感器构成的被测模块等几部分构成。

  通过单片机的RC2/CCP1 引脚分别连接被测模块和测量子模块,在Proteus 软件仿真时,分别由信号发生器SG1 和频率计作为硬件设备连接。SG1 用来模拟被测模块产生信号,F1 采用频率计方式运行,用来显示当前信号频率,用来做参考值与显示模块数据,即测速计测速结果值进行比较,以验证测速计测速结果的正确与否。各模块之间的连接关系如图1 所示。[page]

  

  2.2 方案设计与实现

  该简易速度计的设计实现主要基于PIC16F877 的CCP 模块功能,这里我们首先将PIC16F877 的CCP1 配置为捕捉模式,预分频比设置为1:1,每个上升沿触发。

  当捕捉到跳变后CPP1 中断标志位置位,直接采用中断方式进行处理,即在中断服务子程序中处理相关寄存器的数值或状态变化,计算并储存相关物理量,以上设置均由软件编程来完成。

  

  2.2 设计与实现

  该简易速度计的设计实现主要基于PIC16F877 的CCP 模块功能,这里我们首先将PIC16F877 的CCP1 配置为捕捉模式,预分频比设置为1:1,每个上升沿触发。

  当捕捉到跳变后CPP1 中断标志位置位,直接采用中断方式进行处理,即在中断服务子程序中处理相关寄存器的数值或状态变化,计算并储存相关物理量,以上设置均由软件编程来完成。

  

  3 功能仿真

  3.1 Proteus 下仿真电路的搭建

  要在Proteus下完成测速计功能的仿真,首先应在其界面新建设计文件并搭建仿真电路图,本例的测速计功能电路图如图4 所示。[page]

  

  在Proteus 软件下进行仿真时,库里各电子模块本身集成有驱动功能,故各模块与单片机之间只需要用连接线简易连接即可,而无需外加任何驱动电路。但是,实际制作电路版时,还是需外加各模块的驱动电路,并考虑各器件之间的间距,以避免电磁干扰。

  3.2 功能仿真

  在 PIC 系列单片机的专用开发环境MPLAB IDE 8.90 下分别完成各个模块的代码编写,编译运行后,用调试工具Proteus VSM加载Proteus 软件下建立好的设计文件,并运行,其结果如图5 所示。

  

  3.3 仿真结果分析

  如上图5 所示,当信号频率配置为3 000 Hz 时,仿真结果即测速计的速度显示为5 660 m/s, 且以速度值为中心, 小范围内上下波动。而经过理论计算的速度值约为5 655 m/s,与仿真值基本相同。事实上,经过连续测量n 个周期后求平均值的办法,其理论值与仿真值之间的误差会明显减小。

  4 结语

  本文提出了一种基于PIC16F877 单片机捕捉功能实现的简易测速计设计方案,经过Proteus 软件下的仿真验证,该设计方案基本符合预期结果。方案中的整个测速计设计简单方便、成本低、测速误差较小、易于实现,在模块化后,可作为一个集成测速模块直接应用于其他设计当中

关键字:PIC16F877  单片机  简易测速计 引用地址:基于PIC16F877单片机的简易测速计设计方案

上一篇:基于单片机的便携式电子秤
下一篇:基于PIC16F628单片机的便携式电子秤

推荐阅读最新更新时间:2024-03-16 13:30

单片机复位电路工作原理
复位电路的目的就是在上电的瞬间提供一个与正常工作状态下相反的电平。一般利用电容电压不能突变的原理,将电容与电阻串联,上电时刻,电容没有充电,两端电压为零,此时,提供复位脉冲,电源不断的给电容充电,直至电容两端电压为电源电压,电路进入正常工作状态。 关于单片机复位电路,以前做的一点小笔记和文摘,在这里做一个综述,一方面,由于我自己做的面包板上的复位电路按键无效,于是又回过头来重新整理了一下,供自己复习,另一方面大家一起交流学习。在我看来,读书,重在交流,不管你学什么,交流,可以让你深刻的理解你所思考的问题,可以深化你的记忆,更会让你识得人生的朋友。 最近在学ARM,ARM处理器的复位电路比单片机的复位电路有讲究,比起单片机可靠性要求
[单片机]
<font color='red'>单片机</font>复位电路工作原理
利用定时器使单片机输出方波
在P1^0口输出方波。 废话不多说,直接上代码。 #include reg52.h sbit FB = P1^0; void Init_ET_0()//定时器初始化函数 { TMOD = 0x01;//启用定时器 0 ,工作模式为 模式1 。 EA = 1;//开总中断 ET0 = 1;//开定时器开关 TR0 = 1;//启动定时器 TH0 = (65536 - 500)/256;//给高八位赋初值 TL0 = (65536 - 500)%256;//给低八位赋初值 } void Servoce_ET_0() interrupt 1 //定时器服务函数 { TH0
[单片机]
利用定时器使<font color='red'>单片机</font>输出方波
单片机内外部资源操作篇之数码管静态显示
首先,来了解下数码管显示原理: (本图片来源:百度) 数码管是靠点亮内部的发光二极管来显示。一位数码管有10个引脚,显示一个8字需要7个小段,再加上一个小数点,所以内部总共有8个小的发光二极管, 第3个引脚与第8个引脚连接在一起为公共端。如果这个公共端接地,则为共阴极数码管;如果接+5V电压,则为共阳极数码管。如下图所示: 我所用的实验板上的数码管是共阴极数码管。下图为数码管与单片机I/O口连接图: 我们来看原理图: ①.图中U1、U2为两个74HC573锁存器,U1用来向数码管送段选信号,U2用来向数码管送位选信号。U2的输出端Q0~Q5分别接到六个数码管的
[单片机]
<font color='red'>单片机</font>内外部资源操作篇之数码管静态显示
单片机笔记】二分法查找降序最接近的数
最近用到的ntc热敏电阻比较多,测温度精度还可以,最主要的是还很廉价,原理是不同温度环境下热敏电阻的阻值不同,利用这个搭建一个电路用ADC测出来再转换得到热敏的电阻值就可以用查表就可以得到温度了。一般的温度阻值表多是降序的,而且非线性,这样的话就需要查找一个最接近的值去粗略的得到温度,也还是能精确到1度的。至于如何制把厂家给的pdf或者excel制作成程里面的数组,之前的笔记也有专门提到: 代码中非线性表快速转换成数组的实用方法 最后贴上查找代码: static u8 Find_Num(const unsigned int code *tab,u16 SIZE, u16 num) { u8 left = 0,right
[单片机]
将PIC16C711片内8位A/D提高到11位的方法
目前,单片机中嵌入的A/D一般为8位到10位,难以满足信号处理应用中高分辨率的要求;而外接高分辨率的A/D将使成本明显提高,因为A/D转换器的价格将随其位数的增加而成倍增加。本文介绍一种提高PIC16C711单片机片内A/D分辨率的方法,将PIC16C711片内的8位A/D提高到11位。这种方法在PIC系列的其他单片机也适用。   美国Microchip公司推出的8位单片机PIC16C711是一种性能价格比很高的单片机。它价格低、封装小、采用CMOS工艺,具有OTP型,开发起来很方便。它内含4路8位高速A/D,将它扩展到11位后,可以大大提高单片机应用系统的性能价格比。 一、硬件电路   实现扩展的原理图如图1所示。8个
[单片机]
单片机写延时程序的几种方法
1)空操作延時 (12MHz) void delay10us() { _NOP_(); _NOP_(); _NOP_(); _NOP_(); _NOP_(); _NOP_(); } 2)循環延時 (12MHz) Void delay500ms() { unsigned char i,j,k; for(i=15;i 0;i--) for(j=202;j 0;j--) for(k=81;k 0;k--); } 延時總時間= *i+5 k*2+3=165 us 165*j+3=33333 us 33333*i+5=500000 us=500 ms 3)計時器中斷延時(工作方式2) (12MHz) #inc
[单片机]
<font color='red'>单片机</font>写延时程序的几种方法
51单片机驱动1602LCD液晶的程序
/********************************************************************* 文件名称:lcd1602.c 文件功能:lcd1602液晶驱动 *********************************************************************/ #include lcd1602.h /********************************************************************* 功能:读取LCD状态 参数:无 返回:0 -- 空闲,可以进行读写操作 1 -- 忙 ********
[单片机]
基于单片机的电加热炉温度控制系统设计
引 言   电加热炉随着科学技术的发展和工业生产水平的提高,已经在冶金、化工、机械等各类工业控制中得到了广泛应用,并且在国民经济中占有举足轻重的地位。对于这样一个具有非线性、大滞后、大惯性、时变性、升温单向性等特点的控制对象,很难用数学方法建立精确的数学模型,因此用传统的控制理论和方法很难达到好的控制效果。   单片机以其高可靠性、高性能价格比、控制方便简单和灵活性大等优点,在工业控制系统、智能化仪器仪表等诸多领域得到广泛应用。采用单片机进行炉温控制,可以提高控制质量和自动化水平。 1 单片机炉温控制系统结构   本系统的单片机炉温控制系统结构主要由单片机控制器、可控硅输出部分、热电偶传感器、温度变送器以及被控对象组成。如图
[单片机]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

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

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved