找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 17443|回复: 10
打印 上一主题 下一主题
收起左侧

单片机+XGZP6847风速测量仪设计与制作 含源程序,PCB与视频文档

  [复制链接]
跳转到指定楼层
楼主
今日台风消息时有听闻,我们小组便想设计一个气体流速测量计。本次设计主要是利用STC单片机实现对气压传感器发送的电压进行AD转换,并将相应的数值显示到液晶屏上以及通过串口发送给上位机。我采用了自带AD转换的STC单片机以及1602LCD液晶屏进行流速显示,同时可以运用USB接口将实时数值传输给上位机。相关内会在接下来的报告中陈述。

图2-1 系统整体设计框图

视频演示:

目录
摘  要
第1章 设计的背景和思路 1
  1.1、本次设计的背景1
   1.2、本次设计的思路及功能1
第2章 设计方案和硬件电路 2
  2.1、整体功能模块图2
   2.2、各功能模块的详细介绍2
2.2.1、单片机模块 2
2.2.2、驱动及调速模块 4
2.2.3、显示模块5
2.2.4、串口模块7
2.2.5、电源模块9
第3章 软件流程及描述 11
  3.1、主程序设计11
   3.2、AD转换程序设计12
   3.3、LCD应用程序设计12
第4章 调试过程及结果 13
     4.1、实验调试13
课程设计总结16
参考文献17
附录一18
附录二19
附录三20

第1章 设计的背景和思路

1.1、本次设计的背景

最近,台风的来临大家都有所耳闻,气体流速的检测与我们大家的生活息息相关。除此之外,气体流速也与工业生产密不可分。气体流速的检测和控制关系着产品的性能,是装置能否安全运行的一个重要指标,气体流速对一些大型反应装置起着控制作用,可以通过检测气体流速来实现对反应的控制。可见气体流速的检测对人们的重要性,本设计就是对气体流速的测量。气体流速测试系统以传感器、单片机STC12C5A16AD与LCD1602液晶组成的气体流速测试系统。

我认为设计一个气体流速测量系统,不论是从学习还是实践的角度,对一名机电专业的学生都会有很好的学习效果。

1.2、本次设计的思路及功能

因为气体流速测量在生产及生活中有着重要的意义,我们小组就想制作一个通过气压传感器来反映气体流速的装置,通过LCD液晶屏显示实时数据并且可以通过串口将数据传输给上位机,通过串口助手显示出来。思路是使用气压传感器,用注射器向其注射气体,传感器产生电压变化,经过单片机AD转换,数据运用LCD显示出来,还有就是通过USB串口传输到电脑串口助手。

基本的设计思路是这样的:首先,因为我们的主题是关于测量的,所以我们选择了自带AD转换功能的STC12C5A16AD单片机,然后再搜寻传感器和串口通讯部分元件。后来找到了XGZP6847型气体压力传感器模块,这款元件的优势在于电压信号在模块内部已经进行了放大,所以输出信号不需要进行放大。而串口通讯则是选择了PL-2303HX模块。另外我们选择了较为常见的LCD1602液晶实现液晶显示功能。从而总体的完成了整个设计。

第2章 设计方案和硬件电路
2.1、整体功能模块图

我们小组设计的系统采用STC12C5A16AD单片机(自带8路十位精度的AD转换),有气压传感器获取电压信号,然后将电压信号传送给带有AD转换的STC12C5A16AD单片机。由于空气流速与气压有相应的正比例函数关系,可以根据得到的数值求出相应比例的空气流速。然后将数据输送给液晶屏显示和串口。                     


2.2、各功能模块的详细介绍

2.2.1、单片机模块

1、单片机介绍

STC12C5A16AD单片机是新一代8051单片机。相比于普通的51单片机,它增加了许多功能。例如AD转换功能,PWM功能等等。因为我们这次设计的是一个用于测量数据的系统,所以使用这款单片机就不需要再扩展AD转换芯片,可以减少外围电路。

2-2  单片机引脚图

  • 单片机最小系统

单片机的最小应用系统是指用最少的元件组成的单片机可以工作的系统。最小系统一般包括:单片机、晶振电路和复位电路。

图2-3 单片机最小系统图

晶振电路: 单片机系统里都有晶振,在单片机系统里晶振作用非常大,他结合单片机内部电路,产生单片机所需的时钟频率,单片机晶振提供的时钟频率越高,单片机的运行速度就越快。

复位电路:在单片机系统在运行中,当受到环境干扰出现程序跑飞时,按下复位按钮,使内部的程序自动从头开始执行。

  • 设计思路及理由

我们小组选用这款单片机的理由是因为这款单片机广泛运用于测量,它自带AD转化的功能,可以减少外围电路,简化系统。

   4、单片机引脚连接

表2-1单片机引脚连接

连接元件

单片机引脚编号

元件引脚代号

单片机引脚编号

元件引脚代号

传感器XGZP6847

1(P1.0/T2)

2OUT



LCD1602

39(P0.0/AD0)

8(D0)

38(P0.1/AD1)

9(D1)

37(P0.2/AD2)

10(2)

36(P0.3/AD3)

11(D3)

35(P0.4/AD4)

12(D4)

34(P0.5/AD5)

13(D5)

33(P0.6/AD6)

14(D6)

32(P0.7/AD7)

15(D7)

串口PL2303

10(P3.0/RxD)

TX

11(P3.1/TxD)

RX

2.2.2、传感器模块

1、气压传感器原理

XGZP6847型气体压力传感器为压阻式压力传感器,其利用单晶硅的压阻效应构成。采用单晶硅片为弹性元件,利用集成电路工艺,在特定方向扩散一组等值电阻,并将电阻连成桥路,单晶硅片置于传感器腔内。当压力发生变化时,单晶硅产生应变,使直接扩散在上面的应变电阻产生与被测压力成正比的变化,再由桥式电路获得相应的电压输出信号。

2、传感器模块接线

图2-4 传感器模块原理图

    本次设计采用的是XGZP6847型气体压力传感器模块,此模块外围所接的电路十分简单,因为电压信号在模块内部已经进行了放大,所以输出信号不需要进行放大,XGZP6847型气体压力变送器模块共有六个引脚,其中的1、2、3脚都不需要外接其他电子元件,4脚接+5V电源电压,5脚是信号输出引脚,6脚接地即可。在串接一个10K的电阻R5防止击穿电容C4。

3、设计思路及理由

根据现代惠斯通原理制成的压阻式压力传感器,有体积小、耗能低、重量轻、响应快、便于实现显示数字化等特点,而且可以测量压力,稍加改变,还可以测量差压、高度、速度、加速度等参数。因为本系统选择了XGZP6847型气体压力传感器模块。

2.2.3、显示模块

1、LCD显示屏简介及选用理由

我们小组用来显示的液晶屏是LCD1602显示屏。因为该液晶显示器具有显示质量高、功耗低、抗干扰能力强、体积小、重量轻等优点。                    

图2-5 LCD显示电路原理图


1、PL2303HX模块

PL2303是Prolific公司生产的一种高度集成的RS232-USB接口转换器,可提供一个RS232全双工异步串行通信装置与USB功能接口便利联接的解决方案。

RS232双向转换器,一方面从主机接收USB数据并将其转换为RS232信息流格式发送给外设;另一方面从RS232外设接收数据转换为USB数据格式传送回主机。这些工作全部由器件自动完成,开发者无需考虑固件设计。PL-2303HX无论在工作中或等待模式中消耗的电量都非常少,可留给连接的设备许多的电能。与RS-232串行端口的讯号标准一样灵活,允许PL-2303HX直接连接1.8V~3.3V的设备。

图2-6 PL2303HX芯片引脚图

图2-7 模块内部结构框图

它有如下优点:1.完全符合USB规范2.0(全速兼容)。2.片内拥有USB1.1收发器,5V转3.3V的稳压器,12MHz的晶体振荡器。3.支持RS232这样的串行接口;支持自动握手各种模式。

2、串口模块原理图

图2-8 串口模块原理图

2.2.5、电源模块

1、电源开关原理

通过自锁开关,控制整个系统通断电。

图2-9电源开关原理图

2、自锁开关

这个开关的两排引脚中,每一排的中间一只是公共端,两边是分别是独立的,也就是说,如果你把中间的一只接到负载端,那么两边就是来自电源的进线,当你把中间一只引脚接负载端以后,如果你把两边的引脚的其中一只接电源,当你按下开关时,负载工作,那么另外一只就是开关不按下时负载接通电源,也就是说,在这两排引脚中,除了中间一只引脚是公共端以外,另外两只引脚中一只是按下开关后接通电源,而另一只则是按下开关后断开电源,简而言之就是,两排引脚,中间一只是公共端,而另外两只,一只是按下关,另一只是按下开;有两排就是一排对应电源正极,另一排对应电源负极,只要把中间电源两级的公共端接好以后,另外的两只引脚在接线时都接在同一侧就可以了,不然的话,接好了还是没有用,接错了,就会出现如果按下后电源正极接通,那么电源负极就断开了,或者不按下时,电源正极接通,负极又断开了。注意,开关有两排引脚,每一排有三只引脚,三只引脚中,中间一只是公共端,每一排对应电源的每一极。  

第3章 软件流程及描述

实现系统功能可以采用多种方法,由于要控制单片机的AD转换、LCD的显示和串口的通信,因此,整个程序可以分为主程序、LCD程序、AD转换程序,由于购买的LCD液晶屏以及单片机带有LCD和AD转换的程序,为了方便,我们对其稍做更改并将其设为子程序。其中,LCD程序主要是用来控制液晶屏的显示格式以及数值的;AD转换程序用来对所得到的电压数值进行相应关系的转化;主程序则是控制子程序的应用以及利用接口向上位机发送实时的数据。

图3-1 软件流程

3.1主程序设计

主程序中需要完成的功能主要有对系统初始值的设置、AD转换、数据发送、LCD显示等。系统上电后,需要对定时器的状态进行设置,包括定时器的工作方式以及数据传输的开始中断,因此我们首先需要进行定时器的选择以及工作方式设定。使用定时器1的操作模式2:8位自动重载,然后根据波特率为9600装入初值,TH1=TL1=0xfd。接着我们要设置串行通信工作模式,SM0=0,SM1=1,打开串行接收允许位,开总中断与串行中断。单片机通过串口向上位机发送char型数组,当串行通信发送完成后,出现信号TI=1。

由于传感器实际原因,我们无法测量出正确的空气流速值来进行校正,因此我们决定使用相应的比例关系来计算得出。首先,我们确定一个利用单片机显示的速度最大值为150mm/s。由于AD转换是十位数制,最大值为2的10次方即1024,将其乘以0.147便可以得到。其次,当系统完成后我们为板子供电,烧入程序。保持单片机显示的速度为55mm/s匀速挤完1ml的气体,测量需要33.19s的时间,而传感器与针筒接口出截面积为1mm^2,即是速度为33mm/s。因此,利用比例关系求出正确的流速还应该再乘以一个0.6的修正系数。在程序中表现就是getADCresult。再令其乘以0.147使得量程为150,再乘以0.6修正。

关于液晶显示部分,可以先在程序开头部分设定idate数据类型,设定LCD上将要显示的部分“Sudu:150”,然后再根据AD得到的结果显示出来。

主程序中还可以设置延时函数,使用for循环来进行延时,先设定延时1毫秒的延时函数,再根据此来循环n次,延时n秒。

3.2 A/D转换程序设计

我们使用的单片机内部自带AD转换器,是一个十位转换,分成高八位和低两位。编写程序时,我们首先需要选择相应的通道,打开8路通道,还需要能够清除前一次的数据。当然,十位的寄存器也需要进行相应的移位与或运算。

3.3 LCD应用程序

单片机的P2.5、P2.6、P2.7分别接LCD1602的rs、rw、en用以控制其读写功能,P0口负责传输需要显示的数据,LCD1602可以显示当前空气的流速。我们编写程序需要设定显示方式,8位数据端口,2行显示。还有就是需要设定LCD液晶屏的光标显示与否,清屏指令等等。当然液晶屏的字符输入位置也需要进行设定,我们还需要用到库函数里的string函数。

第4章 调试过程及结果

4.1、实验调试

首先打开烧录软件,选择单片机型号,并打开程序文件,然后点击下载/编程。之前遇到了困难,一直无法成功录入,后来经过查询,需要重启单片机,就可以成功的烧录。

图4-1 程序烧录

我们设计了电源开关控制电源线,另外串口也可以提供电源。

图4-2电源插头及串口
图4-3开关断开后显示

以下是我们实际调试时的截图:

下图是通电后的显示,因为没有提供风力,速度显示为零。

图4-4 初始显示

当我们按压注射器模拟风力时,显示屏上的数据就会发生变化,显示出当前的气体流速。

图4-5气体流速液晶显示(1)

图4-6气体流速液晶显示(2

然后打开软件的串口助手窗口,选择文本模式,选择正确的串口和波特率,打开串口,就可以接收到所测得气体流速值了。

图4-7气体流速串口操作及显示

通过以上操作,呈现了我们单片机系统的主要功能。


课程设计总结
课程设计是培养学生实际应用能力的重要课程,我们需要综合运用所学知识,解决实际问题。回顾两个星期的单片机设计,我们小组学到了很多单片机的相关知识,不仅巩固了以前所学的知识,绘制原理图,还学习了画pcb图的知识。            通过这次课设使我懂得了理论与实际相结合非常的重要,首先我们按照自己的想法在淘宝上买元件,买来的许多都是贴片,后来经过询问,又去淘宝上购买了一些模块,模块在使用上有两个特点,一是它已经完善了功能,我们不需要在进行改造,二是我们要查找资料去了解这个模块的工作原理。在设计单片机的过程中,我们小组也遇到了很多问题,通过查阅资料和与同学进行交流,也顺利解决了这些问题。第一,不够细心比如由于粗心大意将不同元器件的端口连接错误或者忘记连接,第二,是在学习态度上,这次课程设计是对我们的学习态度的一次检验,绝对要严谨。第三,在做人上,我认识到,无论做什么事情,只要你足够坚强,有足够的毅力和决心,有足够的挑战困难的勇气,就没有什么办不到的。
另外在设计单片机的时候,加深了对单片机IO口的输入输出的理解,在上个学期学单片机的时候,我对于单片机的认知大多还处于理论知识上,而这一次的单片机课设,让我更好的把理论知识应用到了实际当中,而且这次的设计还培养了我的创新精神。这次单片机课程设计,既是对课程理论内容的一次复习和巩固,让我丰富了更多与该专业相关的其他知识,比如软件应用等。在设计原理图时,要有了一个清晰的思路和一个完整的软件流程图之后才着手设计。在设计程序时,我们不能妄想一次就将整个程序设计好,反复修改、不断改进是程序设计的必经之路;养成注释程序的好习惯是非常必要的,一个程序的完美与否不仅仅是实现功能,而应该让人一看就能明白你的思路。
在设计过程中遇到问题是很正常的,但我们应该讲每次遇到的问题记录下来,并分析清楚,以免下次再碰到同样的问题。但是从中学到的知识会让我们受益终身。发现、提出、分析、解决问题和实践能力提高都会受益于我在今后的学习、工作和生活中。

Altium Designer画的原理图和PCB图如下:(51hei附件中可下载工程文件)


附录二
PCB图

单片机程序源码(含注释):
  1. #include <at89x51.H>
  2. #include <intrins.h>
  3. #include <string.H>
  4. #include "1602.h"
  5. #include "ADC.h"   

  6. uchar idata xianshi1[]={"Sudu:     150   "};        // 显示的第一行内容
  7. uchar idata xianshi2[]={"                "}; // 显示的第二行内容

  8. uchar sec=0,min=0,hour=0,deda;
  9. uint yali;
  10. bit send;

  11. sbit BZ=P3^7;

  12. #define FOSC_110592M
  13. //#define FOSC_12M
  14.    
  15. //注意,无论接收到信号还是发送完信号,都会进中断服务程序的
  16. /*初始化程序(必须使用,否则无法收发),次程序将会使用定时器1*/
  17. void SerialInti()//初始化程序(必须使用,否则无法收发)
  18. {
  19.         TMOD=0x21;//定时器1操作模式2:8位自动重载定时器

  20. #ifdef FOSC_12M                   //在这里根据晶振大小设置不同的数值初始化串口
  21.         TH1=0xf3;//装入初值,波特率2400
  22.         TL1=0xf3;      
  23. #else        
  24.         TH1=0xfd;//装入初值,波特率9600
  25.         TL1=0xfd;
  26. #endif //end of SOC_12M
  27.       
  28.         TR1=1;//打开定时器
  29.         SM0=0;//设置串行通讯工作模式,(10为一部发送,波特率可变,由定时器1的溢出率控制)
  30.         SM1=1;//(同上)在此模式下,定时器溢出一次就发送一个位的数据
  31.         REN=0;//串行接收允许位(要先设置sm0sm1再开串行允许)
  32.         EA=1;//开总中断
  33.         ES=0;//开串行口中断      
  34. }

  35.         void delay_1ms(void)                 //1ms延时函数
  36. {
  37.    unsigned int i;
  38.    for (i=0;i<840;i++);
  39. }  
  40. void delay_nms(unsigned int n)       //N ms延时函数
  41.   {
  42.    unsigned int i=0;
  43.    for (i=0;i<n;i++)
  44.    delay_1ms();
  45.   }

  46. void Uart1Send(uchar c)
  47. {
  48.         SBUF=c;
  49.         while(!TI);//等待发送完成信号(TI=1)出现
  50.         TI=0;      
  51. }
  52. //串行口连续发送char型数组,遇到终止号/0将停止
  53. void Uart1Sends(uchar *str)
  54. {
  55.         while(*str!='\0')
  56.         {
  57.                 SBUF=*str;
  58.                 while(!TI);//等待发送完成信号(TI=1)出现
  59.                 TI=0;
  60.                 str++;
  61.         }
  62. }


  63. void timetoseg()// 转换显示
  64. {
  65.         xianshi1[10] =yali/100%10+0x30;
  66.   xianshi1[11] =yali/10%10+0x30;
  67.   xianshi1[12] =yali%10+0x30;

  68. }

  69. main()
  70. {

  71. InitADC();
  72. LCD_Initial();
  73. SerialInti();      
  74.         GotoXY(0,0);


  75. while(1)
  76. {
  77.            yali=GetADCResult(0);
  78.                  yali*= 0.147*0.6;//满量程显示150
  79.                  timetoseg();//
  80.                  GotoXY(0,0);
  81.                  Print(xianshi1);
  82.                  GotoXY(0,1);
  83.                  Print(xianshi2);


  84.       
  85.         Uart1Send(yali/100+0x30);                                //数据内容
  86.         Uart1Send(yali/10%10+0x30);
  87.         Uart1Send(yali%10+0x30);
  88.         Uart1Send(0x0d);//
  89.         Uart1Send(0x0a);//
  90.         delay_nms(500);

  91. }                                                                                                                                                                                       
  92. }
复制代码

全部资料51hei下载地址:
源代码.rar (3.88 KB, 下载次数: 174)
原理图.rar (15.87 KB, 下载次数: 107)
视频.rar (19.71 MB, 下载次数: 76)
课设报告.doc (841 KB, 下载次数: 94)
PCB.rar (544.45 KB, 下载次数: 70)

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏7 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:430492 发表于 2020-3-7 10:52 | 只看该作者
XGZP6847样例比轻少,感谢楼主分享,好象有XGZP6867,数字气压传感器,可能省事儿不少。
回复

使用道具 举报

板凳
ID:673678 发表于 2020-4-11 15:31 | 只看该作者
想问一下xgzp6847输出口连接一个电阻和电容能不能达到滤波作用?
回复

使用道具 举报

地板
ID:668185 发表于 2020-4-28 11:34 | 只看该作者
可以用袖带测血压吗
回复

使用道具 举报

5#
ID:815353 发表于 2020-8-21 04:39 来自手机 | 只看该作者
疯了的单片机 发表于 2020-4-11 15:31
想问一下xgzp6847输出口连接一个电阻和电容能不能达到滤波作用?

可以达到的。
回复

使用道具 举报

6#
ID:815353 发表于 2020-8-31 16:29 来自手机 | 只看该作者
这个程序有全的吗?谢谢
回复

使用道具 举报

7#
ID:815353 发表于 2020-9-24 10:58 来自手机 | 只看该作者
sher 发表于 2020-4-28 11:34
可以用袖带测血压吗

可以的
回复

使用道具 举报

8#
ID:908943 发表于 2021-4-21 12:21 | 只看该作者
老哥,有XGZP6847的源码吗
回复

使用道具 举报

9#
ID:908943 发表于 2021-5-16 10:47 | 只看该作者
求具体计算过程啊!
回复

使用道具 举报

10#
ID:480607 发表于 2022-12-22 11:30 | 只看该作者
有XGZP6847的源码吗?
回复

使用道具 举报

11#
ID:18797 发表于 2023-3-17 08:29 | 只看该作者
可惜啊,币不足,,,东西很不错
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表