电子课程设计_光风速测量系统

更新时间:2024-05-29 21:49:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

电子课程设计:

光风速测量系统

基于单片机的风速测量仪的设计

摘要

在实际生活中,我们经常会遇到各种各样的测速场合,比如我们最常见的路口测量车速的测速仪。在工业生产中,我们也经常会遇到测速,比如测定电机转速的测速仪。不管是的直线行驶速度还是转速,测量方法大同小异,无非是模拟方式和数字式两种。那么现在我们就以数字方

1

式为题,运用89C51单片机来控制智能化风速测量仪,来设计一款智能测速仪。

对风速进行测量过程中,风车的转动速度是间接反映风速大小的物理量,风车转速的测量就是一个必不可少的参数,本设计主要用AT89C51作为控制核心,由光电传感器、LED数码管、51单片机、及模拟风车系统构成。详细介绍了单片机的测量风速系统。充分发挥了单片机的性能。本系统就是对风车转速进行测量,通过LED数码管显示风速大小,并实现实时监测。利用单片机对其进行设计,其优点硬件是电路简单,软件功能完善,测量速度快、精度高、控制系统可靠,性价比较高等特点。

关键词: 89C51单片机 转速 传感器

Abstract

In real life, we often encounter all kinds of speed situations, such as our most common intersection measurement speed velocimeter. In industrial production, we also often speed, such as the determination of motor speed velocimeter. Whether straight line speed or speed, measurement method is the same, is nothing more than analog and digital two kinds. So now we are digitally, design a device of wind speed measurements. Digital usually adopts photoelectric sensor for detecting element, such as analog signals. Now, the use of 89 c51 to control intelligent wind speed measuring instrument, to design an intelligent velocimeter.

2

In the process of wind speed measurement, the windmill rotating speed is indirectly reflect the size of wind quantity and wind speed measurement is an essential parameter, this design mainly USES AT89C51 as the control core, consists of photoelectric sensor, LED digital tube, 51 single chip microcomputer, and system simulation of windmill. SCM measuring wind speed system was introduced in detail. Give full play to the performance of the single chip microcomputer. This system is the windmill rotating speed measurement, through the LED digital tube display size of wind speed, and realize the real-time monitoring. Using single chip microcomputer to design, its advantage is hardware circuit is simple, software function is perfect, measuring speed, high precision, reliable control system, the characteristics of high cost performance.

Keywords: 89c51 speed sensor

目 录

第一章

1.1摘要·························1 1.2单片机AT89C51简介 ················· 4 第二章 设计思路 ·····················6 2.1 转速的测量方法····················8

3

2.2 转速测量原理·····················9 第三章 硬件设计方案 ··················· 10 3.1 设计原理图 ·················· 10 3.2 转速信号采集 ·················· 10 3.3单片机系统的设计 ················ 11 3.4LED数码管显示部分设计················ 13 第四章软件设计方案 ················· 16 4.1软件结构划分·····················16

4.1.1计时模块··········· ······· · 16 4.1.2转速计算模块 ···· ········· · ·· 17 总结 ··························· 18致谢 ·························· 19参考文献 ························· 19附录A 程序清单 ··················· ···20

1.2单片机AT89C51简介

AT89C51是一种带4K字节闪烁可编程可擦除只读存储器(FPEROM—Falsh Programmable and Erasable Read Only Memory)的低电压,高性能CMOS8位微处理器,俗称单片机。该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的

4

AT89C51是一种高效微控制器,为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。

图1.1是常用的一种单片机,型号为AT89C51,它将计算机的功能都集成到这个芯片内部去了,就这么一个小小的芯片就能构成一台小型的电脑,因此叫做单片机。

1.2.1AT89C51芯片

它有40个管脚,分成两排,每一排各有20个脚,其中左下角标有箭头的为第1脚,然后按逆时针方向依次为第2脚、第3脚??第40脚。在40个管脚中,其中有32个脚可用于各种控制,比如控制小灯的亮与灭、控制电机的正转与反转、控制电梯的升与降等,这32个脚叫做单片机的“端口”,在单片机技术中,每个端口都有一个特定的名字,比如第一脚的那个端口叫做“P1.0”。 ●VCC:供电电压, ●GND:接地。

●P0口:P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL门电流。当P1口的管脚第一次写1时,被定义为高阻输入。P0能够用

5

于外部程序数据存储器,它可以被定义为数据/地址的第八位。在FIASH编程时,P0 口作为原码输入口,当FIASH进行校验时,P0输出原码,此时P0外部必须被拉高。

●P1口:P1口是一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4TTL门电流。P1口管脚写入1后,被内部上拉为高,可用作输入,P1口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。在FLASH编程和校验时,P1口作为第八位地址接收。 ●P2口:P2口为一个内部上拉电阻的8位双向I/O口,P2口缓冲器可接收,输出4个TTL门电流,当P2口被写“1”时,其管脚被内部上拉电阻拉高,且作为输入。并因此作为输入时,P2口的管脚被外部拉低,将输出电流。这是由于内部上拉的缘故。P2口当用于外部程序存储器或16位地址外部数据存储器进行存取时,P2口输出地址的高八位。在给出地址“1”时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写时,P2口输出其特殊功能寄存器的内容。P2口在FLASH编程和校验时接收高八位地址信号和控制信号。

●P3口:P3口管脚是8个带内部上拉电阻的双向I/O口,可接收输出4个TTL门电流。当P3口写入“1”后,它们被内部上拉为高电平,并用作输入。作为输入,由于外部下拉为低电平,P3口将输出电流(ILL)这是由于上拉的缘故。 P3口也可作为AT89C51的一些特殊功能口。 P3口管脚备选功能: ●P3.0 RXD(串行输入口) ●P3.1 TXD(串行输出口)

6

●P3.2 /INT0(外部中断0) ●P3.3 /INT1(外部中断1) ●P3.4 T0(记时器0外部输入) ●P3.5 T1(记时器1外部输入) ●P3.6 /WR(外部数据存储器写选通) ●P3.7 /RD(外部数据存储器读选通)

●P3口同时为闪烁编程和编程校验接收一些控制信号。

● RST:复位输入。当振荡器复位器件时,要保持RST脚两个机器周期的高电平时间。

●ALE/PROG:当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的地位字节。在FLASH编程期间,此引脚用于输入编程脉冲。在平时,ALE端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6。因此它可用作对外部输出的脉冲或用于定时目的。然而要注意的是:每当用作外部数据存储器时,将跳过一个ALE脉冲。如想禁止ALE的输出可在SFR8EH地址上置0。此时, ALE只有在执行MOVX,MOVC 指令是ALE才起作用。另外,该引脚被略微拉高。如果微处理器在外部执行状态ALE禁止,置位无效。

●PSEN:外部程序存储器的选通信号。在由外部程序存储器取指期间,每个机器周期两次/PSEN有效。但在访问外部数据存储器时,这两次有效的/PSEN信号将不出现。

●EA/VPP:当/EA保持低电平时,则在此期间外部程序存储器(0000H-FFFFH),不管是否有内部程序存储器。注意加密方式1时,

7

/EA将内部锁定为RESET;当/EA端保持高电平时,此间内部程序存储 器。在FLASH编程期间,此引脚也用于施加12V编程电源(VPP)。 ●XTAL1:反向振荡放大器的输入及内部时钟工作电路的输入。 ●XTAL2:来自反向振荡器的输出。

图1.2.2 AT89C51芯片管脚

第二章设计思路

2.1 转速的测量方法

转速是指作圆周运动的物体在单位时间内所转过的圈数,转速测量一直是工业领域的一个重要问题。本文介绍的采用单片机和光电传感器组成的高精度转速测量系统,其转速测量方法采用的就是电子式定时计数法。对转速的测量实际上是对转子旋转引起的周期脉冲信号的频率进

8

行测量。在频率的工程测量中,电子式定时计数测量频率的方法一般有三种:①测频率法:在一定时间间隔t 内,计数被测信号的重复变化次数N ,则被测信号的频率fx 可表示为f x =Nt(1)

②测周期法:在被测信号的一个周期内,计数时钟脉冲数m0 ,则被测信号频率fx = fc/ m0 ,其中, fc 为时钟脉冲信号频率。

③多周期测频法:在被测信号m1 个周期内, 计数时钟脉冲数m2 ,从而得到被测信号频率fx ,则fx 可以表示为fx =m1 fcm2, m1 由测量准确度确定。

电子式定时计数法测量频率时,其测量准确度主要由两项误差来决定:一项是时基误差;另一项是量化±1误差。当时基误差小于量化±1 误差一个或两个数量级时,这时测量准确度主要由量化±1 误差来确定。对于测频率法,测量相对误差为:

Er1 =测量误差值实际测量值×100 % =1N×100 % (2)

由此可见,被测信号频率越高, N 越大, Er1就越小,所以测频率法适用于高频信号(高转速信号) 的测量。对于测周期法,测量相对误差为: Er2 =测量误差值实际测量值×100 % =1m0×100 %

(3)对于给定的时钟脉冲fc , 当被测信号频率越低时,m0 越大, Er2就越小,所以测周期法适用于低频信号(低转速信号) 的测量。对于多周期测频法,测量相对误差为:

Er3 =测量误差值实际测量值100%=1m2×100 % (4)

9

从上式可知,被测脉冲信号周期数m1 越大, m2 就越大,则测量精度就越高。它适用于高、低频信号(高、低转速信号) 的测量。但随着精度和频率的提高, 采样周期将大大延长,并且判断m1 也要延长采样周期,不适合实时测量。

根据以上的讨论,考虑到实际应用中需要测量的转速范围很宽,上述的转速测量方法难以满足要求,因此,研究高精度的转速测量方法,以同时适用于高、低转速信号的测量,不仅具有重要的理论意义,也是实际生产中的需要。

2.2 转速测量方案的选择

根据频率测量方案的不同,目前数字式转速测量装置的计时方法主要有M 法、T法和同步M/T法。M 法测速是在相等的时间间隔△t内读取脉冲数M,由M/△t计算出转速,速度越高在△t时间内计得的M 就越多,由±1个计数脉冲误差所引起的转速测量误差就越小,故该法适用于高速。T法测速是根据相邻两个脉冲时间间隔对应的时钟脉冲计数值m 来计算转速的,转速越慢或每转脉冲数越多,其计数值m就越多,计数器±l个计数脉冲所引起的误差就越小,故该法适用于低速。上述两种方法测量的绝对误差反比于速度采样时间T(Hp:时间间隔△t或计数值m),因此在稳态测量和实时性要求不高的场合,可取较大的T 以保证足够的测量精度。但在动态测量和实时控制系统中,往往对转速测量的实时性有较高的要求。因此,采样时间T不能随意取大,为了解决既要周期小,又要测速精度高的矛盾,可采用同步M/T法。这种方法的特点是不固定定时时间△t′,以记录到完整的盘脉冲为准,主要是设

10

法使M 与△t′同步,从整数个盘脉冲开始计时,同样在整数个盘脉冲结束计时,记录到的是整数个盘脉冲,且与计时是“同步” 的。其原理如图3所示,在采样时间△t时间内实际计时时间△t′开始于第一盘脉冲的下降沿,终止于最后一个脉冲的下降沿,因而得到整数个盘脉冲,消除了M 法和T法中±1个脉冲引入的误差。鉴于几种方法的比较,在设计中采用同步M/T(多周期测频)法设计本测速系统。

图 2.2.1 同步M/T法测速原理图

第三章硬件设计方案

3.1设计原理图

图3.1 系统原理图

11

各部分模块的功能:

①传感器:用来对信号的采样,将光信号转化为电信号,进而转化为高 低电平,在送入单片机进行数据的处理转换。

②放大、整形电路:对传感器送过来的信号进行放大和整形,在送入单片机进行数据的处理转换。

③ 单片机:对处理过的信号进行转换成风速的实际值,送入LED。 ④LED显示:用来对所测量到的风速进行显示。 3.2转速信号采集

在设计中采用光电传感器采集信号,这种传感器是把旋转轴的转速变为相应频率的脉冲,然后用测量电路测出频率,由频率值就可知道所测转速值。这种测量方法具有传感器结构简单、可靠、测量精度高的特点。是目前常用的一种测量转速的方法。

图3.2.1 光电传感器

图3.2.2光电传感器及其整流电路图

3.3单片机系统的设计

12

图3.3.1 最小系统的仿真(仿真程序见附件1)

图3.3.2 动态显示仿真(仿真程序见附件2)

3.4显示部分设计

许多电子产品上都有跳动的数码来指示电器的工作状态,其实数码管显示的数码均是由八个发光二极管构

13

成的。每段上加上合适的电压,该段就点亮。LED数码有共阳和共阴两种,把这些LED发光二极管的正极接到一块(一般是拼成一个8字加一个小数点)而作为一个引脚,就叫共阳的,相反的,就叫共阴的,那么应用时这个脚就分别的接VCC和GND。再把多个这样的8字装在一起就成了多位的数码管了。 图3.3.3 4位数

码管

图3.3.5共阴和共阳LED数码管内部结构

数码管要正常显示,就要用驱动电路来驱动数码管的各个段码,从而显示出我们要的数字,因此根据数码管的驱动方式的不同,可以分为静态式和动态式两类。 静态显示驱动:静态驱动也称直流驱动。静态驱动是指每个数码管的每一个段码都由一个单片机的I/O端口进行驱动,或者使用如BCD码二-十进制译码器译码进行驱动。静态驱动的优点是编程简单,显示亮度高,缺点是占用I/O端口多,如驱动5个数码管静态显示则需要5×8=40根I/O端口来驱动,要知道一个89S51单片机可用的I/O端口仅有32个),实际应用时必须增加译码驱动器进行驱动,增加了硬件电路的复杂性。

动态显示驱动:数码管动态显示接口是单片机中应用最为广泛的一种显示方式之一,动态驱动是将所有数码管的8个显示笔划

14

\的同名端连在一起,另外为每个数码管的公共极COM增加位选通控制电路,位选通由各自独立的I/O线控制,当单片机输出字形码时,所有数码管都接收到相同的字形码,但究竟是那个数码管会显示出字形,取决于单片机对位选通COM端电路的控制,所以我们只要将需要显示的数码管的选通控制打开,该位就显示出字形,没有选通的数码管就不会亮。通过分时轮流控制各个数码管的的COM端,就使各个数码管轮流受控显示,这就是动态驱动。在轮流显示过程中,每位数码管的点亮时间为1~2ms,由于人的视觉暂留现象及发光二极管的余辉效应,尽管实际上各位数码管并非同时点亮,但只要扫描的速度足够快,给人的印象就是一组稳定的显示数据,不会有闪烁感,动态显示的效果和静态显示是一样的,能够节省大量的I/O端口,而且功耗更低。

图3.36 4位LED数码管接线图

15

图3.37 风速测量总电路图

第四章软件设计方案

4.1软件结构划分

采用结构化软件设计的方法,使得设计简单,易于调试和移植,提高编程效率。采用结构化设计软件的方法将本系统软件划分为图4.1.1所示的4个模块:脉冲计数模块、计时模块、转速计算模块和风速显示模块。其中最主要的是计时模块和转速计算模块。

红外测速系统 次数计算模块 计时模块 转速计算模块 风速显示模块 图4.1.1系统模块划分

16

4.1.1 计时模块 图4.1.1 计时流程图 由图3.2.2可知当红外线发射管发射的红外线未被挡板挡住时,接收管受红外线照射呈导通状态,经三极管输入到单片机中断端口的电压为高电平,不产生中断;而当红外线发射管发射的红外线被挡板挡住时,接收管不受红外线照射则呈截止状态,经三极管输入到单片机中断端口的电压跳变为低电平。从而激活中断程序对脉进行计数。计数流程图如图5所示。由于计数需要与计时同步,所以需要在产生第一次红外光被挡住时(红外光被挡住时Pass=0,反之Pass=1),也即中断口电位由高变低时打开定时器。 4.1.2转速计算模块

由于系统采用同步M/T法测量转速,所以计算转速时,需要的参数有盘脉冲数和计时值。本系统中AT89C51单片机采用频率为12MHz的外接晶振,则每个机器周期为1us。单片机定时器的计数脉冲周期为一个机器周期,若定时器从零开时计数,关闭定时器时其计数值为m,则计时时间就是m微秒。计算转速部分程序如下。

m=TH0×256 //读出计数器的计数变量TH0,并将其左移8位 m=TH0+TL0 //获得时钟脉冲数

17

time=m //计算出计时时间

n=60106/(9*time) /计算转速r/min

风速=n*Α 米/秒(Α为转速与风速的关系式) 风的种类 无风 USB小风扇 12 3 吹风筒中风 吹风筒强风 22 8 30 12 转速(转/秒) 0 风速(米/秒) 0 以上测得数据是通过风速仪实际测得数据。

利用线性回归方程,代入4组数据测得风速和转速的线性回归方程为 y=0.4x-0.7 r=0.98

总 结

为了更好的把原理与实践结合,把学习的理论原理知识应用到实际的工程技术上,提高解决工程问题的能力,老师给我们安排了课程设计,在实践中探索学习,提高我们的实践操作能力。跟指导老师交流过后,我们选择了光风速测量的课题。在本次课程设计中 ,进一步学会了团队合作与完成一个项目的分工合作,极大地提高了工作效率。小组成员之间一起参与讨论,研究解决问题,提出好的想法来改善模块功能,各司其责的同时又互帮互助,提高自身能力的同时又增强了同学之间的友谊。

18

参考文献:

[1]张永枫. 单片机应用实训教程. 西安电子科技大学出版社 [2]顾兴海,高富强,张帆. 风速测量系统设计. 微计算机信息 [3]孙以才 压力传感器的设计制造与应用. 北京冶金工业出版社 [4]郭天祥 新概念51单片机C语言教程-入门、提高、开发、拓展全攻略 电子工业出版社

附件1 最小系统仿真程序:

#include

sbit LED=P1^0; //定义LED接P1.0口// void Delay () //延时函数//

{unsigned char i,j; for(i=255;i>0;i--) for(j=255;j>0;j--); }

void main () {while(1)

{LED=0; // LED灭//

Delay (); //返回延时函数// LED=1; //LED亮// Delay (); //反回延时函数// }

19

附件2 动态显示程序:

#include #define uchar unsigned char #define uint unsigned int

uint mm=1234; //显示1234// uchar jj; uchar code

table[]={0xc0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,}; delay(uint m) { uint i,j; for(i=m;i>0;i--) for(j=110;j>0;j--); }

xian_shi()

{ uchar qian,bei,shi,ge; qian=mm/1000; bei=mm00/100; shi=mm0/10; ge=mm; P2=0x80; P0=table[qian]; delay(50); P2=0; P2=0x40;

P0=table[bei]; delay(50); P2=0;

20

P2=0x20;

P0=table[shi]; delay(50); P2=0; P2=0x10;

P0=table[ge]; delay(50); P2=0;}

附件3

附录:程序代码

ORG 0000H ;单片机主程序入口地址 LJMP MAIN

ORG 0003H ; 外部中断0入口地址

LJMP INTER0 ORG 000BH ; 定时器0入口地址 LJMP TIMER0

INIT_T0: ; 子程序,初始化定时器0

MOV TMOD,#01H ; 定时器0工作方式1,16位计数器 MOV R2, #20 ; 1s=1000ms=20*50ms

MOV TL0,#00H ; 对于f=11.0592MHz的晶体振荡器 MOV TH0,#4CH ; (2^16-x)*(f/12)=50ms,x=4C00H SETB ET0 SETB EA SETB TR0

RET ; 返回,return MAIN: ; 主程序 MOV SP,#60H ; 设置堆栈位置

21

MOV R0,#44H ; 显示数据开始存放地址 MOV R1,#0 ; 数码管位数 MOV 43H,#1 ; 千位 MOV 42H,#2 ; 百位 MOV 41H,#3 ; 十位 MOV 40H,#4 ; 个位

SETB EX0 ;初始化外部中断0,允许中断源 SETB EA ;初始化外部中断0,允许总中断 SETB IT0 ;初始化外部中断0,下降沿触发方式 CALL INIT_T0 ; 调用子程序初始化定时器0 LOOP1: MOV A,@R0 MOV DPTR,#TAB01 MOVC A,@A+DPTR

MOV P0,A ; 向数码管发送数据 MOV A,R1 MOV DPTR,#TAB02 MOVC A,@A+DPTR

MOV P2,A ; 选中某个数码管 CALL DELAY ; 延时 INC R0 INC R1

CJNE R1,#4,LOOP1 ; 4个数码管显示完毕? MOV R0,#44H ; 显示数据开始存放地址 MOV R1,#0

22

JMP LOOP1 ; 反复执行 DELAY: ; 延时子程序 MOV R6,#2 ; (R6)=2

DEL01: MOV R7,#250 ; (R7)=250

DEL02: DJNZ R7,DEL02 ; R7减1不等于0跳转 DJNZ R6,DEL01 ; R6减1不等于0跳转 RET ; 返回

TIMER0: ; 定时器0中断服务程序

MOV TL0,#00H ; 对于f=11.0592MHz的晶体振荡器 MOV TH0,#4CH ; (2^16-x)*(f/12)=50ms,x=4C00H

DJNZ R2,END_T0 ; 如果不到20次中断则不足1s MOV R2, #20 ; 1s=1000ms=20*50ms

MOV A, 40H ;准备显示个位 MOV 44H, A

MOV A, 41H ;准备显示十位 MOV 45H, A

MOV A, 42H ;准备显示百位 MOV 46H, A

MOV A, 43H ;准备显示千位 MOV 47H, A

MOV 40H, #0 ; 准备下一次测量转速 MOV 41H, #0 ; 准备下一次测量转速

23

MOV 42H, #0 ; 准备下一次测量转速 MOV 43H, #0 ; 准备下一次测量转速 END_T0: RETI ; 中断返回,return interrupt

INTER0: ; 外部中断0中断服务程序 MOV A,40H INC A MOV 40H,A

CJNE A,#10,END_EX0

MOV 40H,#0 ;个位大于10则修改为0,十位加MOV A,41H INC A MOV 41H,A

CJNE A,#10,END_EX0

MOV 41H,#0 ;十位大于10则修改为0,百位加MOV A,42H INC A MOV 42H,A

CJNE A,#10,END_EX0

MOV 42H,#0 ;百位大于10则修改为0,千位加MOV A,43H INC A MOV 43H,A

CJNE A,#10,END_EX0

24

1 1 1

MOV 43H,#0 ;千位大于10则修改为0 END_EX0:

RETI ; 中断返回,return interrupt

TAB01:DB 0C0H,0F9H,0A4H,0B0H,099H ; 01234 段码 DB 092H,082H,0F8H,080H,090H ; 56789 段码 DB

088H,083H,0C6H,0A1H,086H,08EH ; ABCDEF段码 TAB02:DB 0EH,0DH,0BH,07H; 数码管位选 END ; 程序结束

25

本文来源:https://www.bwwdw.com/article/acc6.html

Top