单片机水流流速实习报告.doc_第1页
单片机水流流速实习报告.doc_第2页
单片机水流流速实习报告.doc_第3页
单片机水流流速实习报告.doc_第4页
单片机水流流速实习报告.doc_第5页
已阅读5页,还剩16页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

单片机课程设计报告题目:水流流速测试仪院系名称:自动化学院学生姓名: 3号:张拓航 8号:杨永发 13号:姚义飞 18号:杨翰林专业名称:测控技术与仪器班 级:测控1102班时间:2014.09.15-2014.09.28 水流流速仪的设计一、设计目的使用MJ-HZ21FA传感器测量水的流速,实时显示其值。并相应地做出动作:当高于某值时,控制电机正转,当低于另一值时,控制电机反转。同时,从串口输出流速值。二、设计要求(1)熟悉MJ-HZ21FA传感器,ADC0809的使用;(2)熟悉电机控制方法。(3)熟悉主控制器的使用。三、设计器材 STC52单片机 (1个) 极性电容(33pF,2个) MJ-HZ21FA传感器(1个) 排阻(10K)电阻(1K 200 8.2K)(3 个) 晶振(12MHz ,1 个)电机 ULN2003驱动电路 LCD1602四、水流流速仪系统原理水流流速仪的系统框图如下图所示:LCD显示模块单片机模块传感器模块电机驱动模块五、设计方案及分析(包含设计电路图)4.1 硬件电路设计 4.1.1 单片机最小系统控制模块设计采用STC52单片机控制。STC52单片机是一种低功耗、高性能CMOS8位微控制器,具有 8KB的系统可编程Flash 存储器。AT89S52具有以下标准功能: 8k字节Flash,256字节RAM, 32 位I/O 口线,看门狗定时器,2 个数据指针,三个16 位 定时器/计数器,一个6向量2级中断结构,全双工串行口, 片内晶振及时钟电路,能够满足题目设计的所有要求,加之我们对STC52单片机也比较熟悉,最小系统电路图如图4所示图44.1.2 显示模块设计采用LCD1602显示,连接电路简单,显示电路连接图如下所示4.1.3传感器采集模块本系统采用MJ-HZ21FA传感器采集信号,该模块使用直流5V供电,理想条件下输出脉冲信号,广泛应用于测量水流流速领域,模块性能稳定,测度较精确.传感器测速原理:MJ-HZ21FA传感器先收集水量,当容量达到传感器容积的四分之一,传感器输出脉冲信号,这些脉冲信号输入到单片机,完成数据采集。4.1.4 电机驱动模块我们采用的是ULN2003作为驱动电路4.1.5 其他电路设计a.复位电路 单片机在RESET端加一个大于20ms正脉冲即可实现复位,上电复位和按钮组合的复位电路如下:在系统上电的瞬间,RST与电源电压同电位,随着电容的电压逐渐上升,RST电位下降,于是在RST形成一个正脉冲。只要该脉冲足够宽就可以实现复位,即ms。一般取R1,C22uF。当人按下按钮S1时,使电容C1通过R1迅速放电,待S1弹起后,C再次充电,实现手动复位。R1一般取8.2K。 b.时钟电路 当使用单片机的内部时钟电路时,单片机的XATL1和XATL2用来接石英晶体和微调电容,如图所示,晶体一般可以选择3M24M,电容选择30pF左右。我们选择晶振为12MHz,电容33pF。 4.2软件程序设计软件分为两部分,主程序和中断服务程序。主程序完成初始化工作、超声波发射和接收顺序的控制。外部中断服务子程序主要完成时间值的读取、距离计算、结果的输出、数码管显示等工作。主程序首先是传感器模块初始化,通过延时函数产生10us的高电平,再将计数器初始化,判断超声波接收端是否收到回波,进而执行外部中断程序。中断程序首先关闭外部中断,关闭计数器,然后读出计数值,根据公式计算距离,然后将结果送往数码管显示。 为了避免超声波从发射器直接传送到接收器引起的直射波触发,需要延时约0.1 ms(这也就是超声波测距仪会有一个最小可测距离的原因)后,才打开外中断0接收返回的超声波信号。由于采用的是12 MHz的晶 振,计数器每计一个数就是1s,当主程序检测到接收成功的标志位后,将计数器T0中的数(即超声波来回所用的时间)按公式计算,即可得被测物体与测距仪之间的距离,设计时取30时的声速为340 m/s则有:d=(ct)/2=170T0/10000cm 其中,T0为计数器T0的计算值。六、问题分析与解决方法1.在拿到设计要求之后,我们先确定采用压力传感器模块,根据压力传感器模块的工作原理:给压力传感器模块一个压力,将采集到的模拟信号输入ADC模数转换模块,然后经过51单片机输出其流速,并驱动电机模块,当流速大于设定值时电机正转,否则电机反转,但是最后传感器模块变换,不用经过模数转换,因此相对简单。2.在设计LCD1602显示电路时,因为LCD1602引脚相对比较复杂,设置起来还是有不少困难,另外在刚开始连接电路时,发现连好之后,显示屏不亮,最后我们分析电路,最后加了一个电位器,改变电位器的阻值,显示屏恢复正常。3驱动模块的设计也有一定的难度,我们使用的是直流电机,刚开始给驱动模块的电源太小,不能驱动电机正常转动,又重新加了12V的电源,电机也完成正常工作。七、设计结果在传感器中装进水,传感器采集到水流所形成的信号,产生脉冲输入到单片机中从而根据具体流速驱动电机正反转,并且显示具体数值。八、设计体会与收获对比此次本班课程设计其他小组课题,我组水流流速测试仪看似简单,并没有超声波测距仪的硬性要求,但实验进行到仿真步骤时才发现,本实验实则更加考验实际焊接中排线布局的能力,仿真中LCD显示模块和单片机芯片接线复杂,排线冗余,还要考虑线路重叠产生的电流回路误差影响。因此我们用最简单的排线以及排阻完成显示模块的连接。仿真程序中并没有实际中所需要的MJ-HZ21FA传感器,所以我们只能使用脉冲信号来代替。本次实验的成功离不开成员间的密切配合,每一个人的努力都对实验的最终结果都起到十分的作用。实际操作中每个人都能体会到自己的不足之处,并加以改进,整个实验结束后,各人的能力均得到提升。除此之外,我们还应该感谢指导老师的耐心指导,许多看似复杂的问题,老师就能一针见血地指出关键所在,实验过程中,老师给我们提供了无限的帮助。杨翰林:我们这次主要是基于51单片机和MJ-HZ21FA传感器以及LCD显示还有驱动电路的硬件与软件结合的实习,它的目的是通过MJ-HZ21FA传感器采集到信号转换为脉冲完成水流流速测试系统。我们在网上找了好多基于单片机和MJ-HZ21FA,还有各个模块的官方资料,经过层层筛选,我们结合那些资料将大致的电路图画了出来,然后就是软件编程。我们合作查资料,请教老师和会的同学,终于将仿真图成功的做了出来。焊接是整个过程中最简单地,但是也考验了我们的耐心。如何运用所学的知识去解决实际的问题,提高我们的动手能力,明白理论和实践还是有差距的,我们不能只学理论而不实践,要多结合理论进行实践,这样才更加理解掌握知识,把理论应用于实践,从实践中得出结论。杨永发:这次水流流速的实验主要是基于单片机,以及驱动电路的硬件与软件结合,实验初期老师给出了水流流速测定的原理,以及大致过程。我们在网上查阅了相关资料,请教老师后,将电路图确定下来,在同学的帮助下完成了软件的编程以及仿真,最后是焊接和调试。这次课程设计锻炼了我的动手能力,加强了对理论知识的了解,让我学会了与他人合作。不知不觉中将理论知识与实践结合了起来,对于单片机的理解更加深刻了。张拓航:两周的课程设计结束了,在这次的课程设计中不仅检验了我所学习的知识,也培养了我如何去把握一件事情,如何去做一件事情,又如何完成一件事情。在设计过程中,与同学分工设计,和同学们相互探讨,相互学习,相互监督。学会了合作,学会了运筹帷幄,学会了宽容,学会了理解,也学会了做人与处世。课程设计是我们专业课程知识综合应用的实践训练,着是我们迈向社会,从事职业工作前一个必不少的过程”千里之行始于足下”,通过这次课程设计,我深深体会到这句千古名言的真正含义我今天认真的进行课程设计,学会脚踏实地迈开这一步,就是为明天能稳健地在社会大潮中奔跑打下坚实的基础姚义飞:通过这次实习,我学到了很多东西,我们的实习题目是水流流速测试。整个过程充满了挑战,也遇到了很多问题,主要原因是对这类题目的陌生所导致的。最大的问题也就是程序的编写,好在同学和老师的帮助下程序勉强算是完成。在这次实习我们接触了一些新的东西,比如传感器,水流测量仪等等。这次试验是我们很晚才做出来,这也说明我们的知识还不足,相信我们在以后的学习中会多多观察,多学习,争取能掌握更多的知识。附录:原理图附录:程序代码1.stepmotordrive.h#ifndef _STEPMOTORDRIVE_H_#define _STEPMOTORDRIVE_H_#include #include LcdDrive.hsbit SMA = P24;sbit SMB = P25;sbit SMC = P26;sbit SMD = P27;/*function:forward*para:void*desc:电机正转一圈*/void forward(void);/*function:forward*para:void*desc:电机正转一圈*/void reversal(void);/*function:stopSM*para:void*desc:电机停止转动*/void stopSM(void);#endif2.stepmotordrive.c#include stepMotorDrive.h#include /A-AB-B-BC-C-CD-D-DA/0001 0011 0010 0110 0100 1100 1000 1001/电机正转表unsigned char code smft = 0x01, 0x03, 0x02, 0x06, 0x04, 0x0c,0x08, 0x09;/电机反转表unsigned char code smst = 0x08, 0x0c, 0x04, 0x06, 0x02, 0x03, 0x01, 0x09;void forward(void)int i;for (i = 0; i 8; i+) P1 = (P1 & 0xF0) | smfti;delay(4);void reversal(void)int i;for (i = 0; i 8; i+) P1 = (P1 & 0xF0) | smsti;delay(4);void stopSM(void)P1 = P1 & 0xF0;delay(4);3.lcddrive.h#ifndef _LCDDRIVE_H_#define _LCDDRIVE_H_#include sbit LcdRS = P20;/lcd数据/命令sbit LcdRW = P21;/lcd读写sbit LcdEN = P22;/lcd使能/*function:delay*para:unsigned int*desc:12M晶振,每次延时1ms * para*/extern void delay(unsigned int ms);/*function:writeCom*para:unsigned char*desc:写命令函数,向LCD写入命令,由八位字符确定。*/extern void writeCom(unsigned char com);/*function:writeDat*para:unsigned char*desc:写数据函数,向LCD写入数据,由八位字符确定。*/extern void writeData(unsigned char dat);/*funtion:initLcd*para:void*desc:初始化Lcd,使用Lcd前必须执行这个函数。*/extern void initLcd(void);#endif4.lcddrive.c#include LcdDrive.hvoid delay(unsigned int ms)int x = 0, y = 0;for (x = ms; x 0; x-)for (y = 110; y 0; y-);void writeCom(unsigned char com)LcdRS = 0;/命令模式LcdRW = 0;P0 = com;delay(5);LcdEN = 1;delay(5);LcdEN = 0;void writeData(unsigned char dat)LcdRS = 1;LcdRW = 0; P0 = dat;delay(5);LcdEN = 1;delay(5);LcdEN = 0;void initLcd(void)LcdEN = 0;writeCom(0x38);/16*2显示,5*7点阵,8位数据接口writeCom(0x0c);/开显示,不显示光标writeCom(0x06);/写一个字符后自动加一writeCom(0x01);/显示清零,数据指针清零5. Flow.c#include #include LcdDrive.h#include stepMotorDrive.h/* 流速三个标量 */#defineFAST1#defineSlow2#define Suit0unsigned int cnt = 0;/水流脉冲次数计数器unsigned int timeCnt = 0;/时间计数器unsigned int fre = 0;/记录上一次脉冲总数unsigned char flowStatus = Suit; /流速状态unsigned char code table1 = Flow Velocity;unsigned char code table2 = by zmx zm hx zl;unsigned char code table3 = Vel : L/min;/*function:initInt0*para:void*desc:初始化外部中断一*/void initInt0(void);/*function:initTime0*para:void*desc:初始化定时器一,50ms中断*/void initTime0(void);/*function:calflow*para:void *desc:计算水流流速和快慢是否超过低于预定值*/void calflow(void); void main(void)int i = 0;int tmp = 0;initLcd();initInt0();initTime0();delay(5);writeCom(0x80+0x01);for (i = 0; i 13; i+) writeData(table1i);delay(5);writeCom(0x80+0x40+0x01);for (i = 0; i 15; i+) writeData(table2i);delay(5);/让开始界面停留2Sdelay(100);writeCom(0x04);/因为在初始化中光标是右移的,这里/设为左移地址减一writeCom(0x80+0x4F);/第二行写入“ 0; i-) writeData();delay(200);delay(10);writeCo

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论