简易风洞设计

上传人:ni****g 文档编号:512290768 上传时间:2023-02-25 格式:DOCX 页数:13 大小:41.21KB
返回 下载 相关 举报
简易风洞设计_第1页
第1页 / 共13页
简易风洞设计_第2页
第2页 / 共13页
简易风洞设计_第3页
第3页 / 共13页
简易风洞设计_第4页
第4页 / 共13页
简易风洞设计_第5页
第5页 / 共13页
点击查看更多>>
资源描述

《简易风洞设计》由会员分享,可在线阅读,更多相关《简易风洞设计(13页珍藏版)》请在金锄头文库上搜索。

1、简易风洞设计需要的材料风机,小球,51 单片机,风机驱动模块,液晶1602,超声波,电源设计任务设计制作一简易风洞及其控制系统。风洞由圆管、连接部与直流风机构成。圆管竖直放 置,长度约40cm,内径大于4cm且内壁平滑,小球(直径4cm黄色乒乓球)可在其中上下 运动;管体外壁应有 A、B、C、D 等长标志线, BC 段有 1cm 间隔的短标志线;可从圆管 外部观察管内小球的位置;连接部实现风机与圆管的气密性连接,圆管底部应有防止小球落 入连接部的格栅。控制系统通过调节风机的转速,实现小球在风洞中的位置控制。设计要求(1)小球置于圆管底部,启动后5秒内控制小球向上到达BC段,并维持5秒以上。(2

2、0 分)(2)当小球维持在BC段时,用长形纸板(宽度为风机直径的三分之一)遮挡风机的进 风口,小球继续维持在BC段。(10分)(3)以C点的坐标为0cm、B点的坐标为10cm;用键盘设定小球的高度位置(单位: cm),启动后使小球稳定地处于指定的高度3秒以上,上下波动不超过1cm。(10分)(4)以适当的方式实时显示小球的高度位置及小球维持状态的计时。 (10分)小球置于圆管底部,启动后5秒内控制小球向上到达圆管顶部处A端,且不跳离,维持 5 秒以上。(10分)(5)小球置于圆管底部,启动后30秒内控制小球完成如下运动:向上到达AB段并维 持35秒,再向下到达CD段并维持35;再向上到达AB段

3、并维持35,再向下到达 CD段并维持35;再向上冲出圆管(可以落到管外)。(20分)(6)风机停止时用手将小球从A端放入风洞,小球进入风洞后系统自动启动,控制小 球的下落不超过D点,然后维持在BC段5秒以上。(10分)(7)其他自主发挥设计。(10分)说明(1)题中“到达XX段”是指,小球的整体全部进入该段内;(2)题中“维持”是指,在维持过程中小球整体全部不越过该段的端线;(3)小球的位置以其中心点为准(即小球的上沿切线向下移2cm,或下沿切线向上移 2cm);(4)直流风机的供电电压不得超过24V,注意防止风机叶片旋转可能造成的伤害;可 在圆管及其周围设置传感器检测管内小球的位置;可将圆管

4、、连接部与直流风机安装在 硬质板或支架上,以便于使圆管保持竖直状态,并保持风洞气流通畅。设计论证该装置通过利用单片机输出pwm波控制风机转速,从而达到控制小球位置的目的。利 用超声波检测小球离检测装置的距离通过单片机发送至外设lcdl602显示模块,并通过显示 模块显示的数据利用键盘模块进行任务的设定。部分程序代码#include #define uchar unsigned char#define uint unsigned intsbit led1=P1A3;sbit led2=P1A4;sbit RX=P3A2;sbit TX=P1A5;sbit LCM_RW=PM1; 定义 LCD 引

5、脚sbit LCM_RS=P1A0;sbit LCM_E=P2A5;#define LCM_Data P0/#define Key_Data P3_4 /定义 Keyboard 引脚/#define Key_CLK P3_5#define Busy0x80 /用于检测 LCM 状态字中的 Busy 标识sbit in0=P1A0;sbit in1=P1A1;sbit ena=P3A0;sbit k1=P3A6;sbit k2=P3A7;sbit k3=P3A5;float a;float zkb=10;char val=2;void delay(int z) int x,y;for(x=z;x

6、0;x-)for(y=110;y0;y-);/1602void Delay12us();void Conut(void);void LCMInit(void);void DisplayOneChar(unsigned char X, unsigned char Y, unsigned char DData);void DisplayListChar(unsigned char X, unsigned char Y, unsigned char code *DData);void Delay5Ms(void);void Decode(unsigned char ScanCode);void Wr

7、iteDataLCM(unsigned char WDLCM);void WriteCommandLCM(unsigned char WCLCM,BuysC);unsigned char ReadDataLCM(void);unsigned char ReadStatusLCM(void);unsigned char code ASCII15 = 0,1,2,3,4,5,6,7,8,9,.,-,M;static unsigned char DisNum = 0; /显示用指针unsigned int time=0; unsigned long S=0;bit flag =0; unsigned

8、 char disbuff4 = 0,0,0,0,;void delayms(unsigned int ms)unsigned char i=100,j; for(;ms;ms-)while(-i)j=10; while(-j);/写数据void WriteDataLCM(unsigned char WDLCM) ReadStatusLCM(); /检测忙 LCM_Data = WDLCM; LCM_RS = 1; LCM_RW = 0;LCM_E = 0; /若晶振速度太高可以在这后加小的延时LCM_E = 0; /延时LCM_E = 1;/写指令void WriteCommandLCM(u

9、nsigned char WCLCM,BuysC) /BuysC为 0 时忽略忙检测 if (BuysC) ReadStatusLCM(); /根据需要检测忙 LCM_Data = WCLCM;LCM_RS = 0;LCM_RW = 0;LCM_E = 0;LCM_E = 0;LCM_E = 1;/读数据 unsigned char ReadDataLCM(void)LCM_RS = 1;LCM_RW = 1;LCM_E = 0;LCM_E = 0;LCM_E = 1; return(LCM_Data);/读状态 unsigned char ReadStatusLCM(void)LCM_Dat

10、a = 0xFF;LCM_RS = 0;LCM_RW = 1;LCM_E = 0;LCM_E = 0;LCM_E = 1;while (LCM_Data & Busy); /检测忙信号 return(LCM_Data);void LCMInit(void) /LCM 初始化LCM_Data = 0;WriteCommandLCM(0x38,0); /三次显示模式设置,不检测忙信号 Delay5Ms();WriteCommandLCM(0x38,0);Delay5Ms();WriteCommandLCM(0x38,0);Delay5Ms();WriteCommandLCM(0x38,1); /显

11、示模式设置,开始要求每次检测忙信号 WriteCommandLCM(0x08,1); /关闭显示WriteCommandLCM(0x01,1); /显示清屏WriteCommandLCM(0x06,1); / 显示光标移动设置WriteCommandLCM(0x0F,1); / 显示开及光标设置 /按指定位置显示一个字符void DisplayOneChar(unsigned char X, unsigned char Y, unsigned char DData) Y &= 0x1;X &= 0xF; /限制 X 不能大于 15,Y 不能大于 1 if (Y) X 1= 0x40; 当要显示

12、第二行时地址码+0x40;X |= 0x80; /算出指令码WriteCommandLCM(X, 1); /发命令字 WriteDataLCM(DData); /发数据/按指定位置显示一串字符void DisplayListChar(unsigned char X, unsigned char Y, unsigned char code *DData) unsigned char ListLength;ListLength = 0;Y &= 0x1;X &= 0xF; 限制X不能大于15, Y不能大于1 while (DDataListLength0x19) /若到达字串尾则退出 if (X

13、= 0xF) /X 坐标应小于 0xFDisplayOneChar(X, Y, DDataListLength); /显示单个字符 ListLength+;X+;void StartModule()/启动模块TX=1;/启动一次模块Delay12us();TX=0;while(!RX);/当 RX 为零时等待TR1=1;/开启计数while(RX);/当 RX 为 1 计数并等待TR1=0;Conut();/5ms 延时void Delay5Ms(void)unsigned int TempCyc = 5552; while(TempCyc-);unsigned char leddata=0x

14、3F,/00x06,/10x5B,/20x4F,/30x66,/40x6D,/50x7D,/60x07,/70x7F,/80x6F,/90x77,/A;float t;/uint bai,shi,ge; uint distance;void init();/void display(uint,uint,uint);void Delay12us() /11.0592MHz unsigned char i;、i = 30; while (-i);/void leddisplay()数码管显示程序/ duan=1;/ P0=leddatazkb;/ duan=0;/ wei=1;/ P0=0xfe;/ wei=0;/ delay(10);/*pwm 调速设置*/void pwm()for(a=0;a50)zkb=0; while(!kl);if(a

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 学术论文 > 其它学术论文

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号