ImageVerifierCode 换一换
格式:DOCX , 页数:42 ,大小:197.16KB ,
资源ID:5437465      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/5437465.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(全国大赛帆板控制系统最新.docx)为本站会员(b****3)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

全国大赛帆板控制系统最新.docx

1、全国大赛帆板控制系统最新帆板控制系统摘要:报告介绍基于STC89C52单片机的帆板角度控制系统,系统可以利用风扇控制装置对帆板角度进行控制,并通过LCD12864实时显示角度变化。还可依据设定的帆板角度信息智能控制风扇转速,在很短时间内(5秒以内)动态调整帆板摆角,同时实时显示帆板角度等信息。系统包括:单片机主控模块、角度信号采集模块、键盘输入模块、显示模块、电源模块、风扇电机驱动模块。系统主控模块采用性价比高的单片机最小系统;选用ADXL345加速度传感器完成系统角度信号采集功能;利用LCD12864实时显示角度变化的信息,5*6矩阵键盘完成风力等级和角度设定的输入;系统电源模块采用两路稳压

2、输出电路(5v、15v),提供控制系统与风扇电机的工作电源;风扇电机采用L298N模块驱动。本系统制作成本较低、工作性能控制稳定,能很好达到设计要求。关键词: STC89C52;加速度传感器;LCD12864;L298N一、 引言单片机又称单片微控制器,单片机具有体积小、功耗低、控制功能强、扩展灵活、微型化和使用方便等优点,广泛应用于仪器仪表中,结合不同类型的传感器,可实现诸如电压、功率、频率、湿度、温度、流量、速度、厚度、角度、长度、硬度等物理量的测量。本系统就是以单片机为核心建立起来的,要实现对帆板转角大小的控制,其归根就是对风扇的控制,帆板的转角随着风扇风力的变化而变化,角度传感器给单片

3、机不同的角度检测信号,经单片机处理后在LCD液晶上显示,同时给出声光提示。系统体现了模块化的设计理念,将单片机和各个器件结合在一起,完成系统化的设计,充分发挥了单片机的可靠性、可操作性和强大处理功能。二、系统方案(一)方案论证与比较1、主控电路【方案一】采用可编程逻辑器件FPGA作为控制器。FPGA可以实现各种复杂的逻辑功能,IO资源丰富,易于进行功能扩展。但本系统不需要复杂的逻辑功能,且从使用、功耗及经济的角度考虑我们放弃了此方案。【方案二】STC89C52 单片机采用STC89C52 单片机作为主控器,其算术功能强,软件编程简洁灵活、自由度大 ,可用软件编程实现各种逻辑控制功能,且其功耗低

4、、技术成熟,成本低廉。本系统主要是进行信号的处理以及风扇电机的控制。综合考虑,本系统设计的功能依靠51单片机均可实现,故采用方案二。2、角度传感器的选用【方案一】用UZZ9001Y与KMZ41连接构成一个角度测量系统。电路组成繁琐,制作较困难,稳定性较差。【方案二】倾角传感器。该集成芯片为专用的水平倾角测量芯片,具有体积小、灵敏度高等优点,但是输出为模拟信号,需要用到DA转换,操作间为复杂,且占用I/O口较多,不利于本统功能模块的操作。【方案三】用ADXL345数字加速度传感器。ADXL345是一款小而薄的超低功耗的3轴加速度计,可测量帆板在斜面所受重力加速度在斜面上的分量,进而转换成倾斜角,

5、测量精度较高。ADXL345输出信号为数字信号,避免了A/D转换,操作简单;此外ADXL345只需用到两个I/O口,占用资源少,能满足本设计的要求。本系统选择了第三种方案。3、按键选用【方案一】采用独立键盘。多个使用时,线路连接不便,操作繁琐。【方案二】采用5*6的距阵键盘,可输入的值比较多,可设定的功能也多。在本系统中需要多个键,系统选择了第二种方案。4、显示【方案一】使用数码管显示。要完成功能电路的显示需要多个数码管,此方案占用I/O口多,连接不便,显示效果差,功耗大。【方案二】用LCD1602液晶显示。1602是一种专门用于显示字母、数字、符号等点阵式,1602分为上下2行,每行显示16

6、个字符。驱动简单,但不能显示汉字。【方案三】用LCD12864液晶显示。LCD12864功能强大,不仅能显示字母、数字、符号,还可以显示汉字和图形,最多可显示4行,每一行最多显示8个中文,16个半宽字体。(最好选用带字库的,方便编写程序。)LCD12864和LCD1602使用方法类似,驱动简单,耗电量小,无辐射危险,显示直观、抗干扰能力强,但体积较大。本系统选择了第三种方案。5、电机的驱动【方案一】用分立w元件构成的H桥电路利用分立三极管元件构成的H桥电路结构简单,但驱动能力有限,所带负载不可过大。【方案二】采用L298N集成H桥芯片。在L298N集成芯处中集成了两套H桥电路,可直接驱动两路直

7、流电机,利用单片机产生的PWM信号,可方便地进行电机调速。【方案三】用ULN2003功率放大器件。ULN2003 是高耐压、大电流达林顿陈列,由七个硅NPN 达林顿管w组成。通过使用不同的放大电路和不同参数的器件,可达到不同的放大的要求,放大后能得到较大的功率。本系统设计采用方案二。6、风扇【方案一】用普通的散热风扇。风力小,风力流失大,很难达到系统要求。【方案二】用带通风通道的风扇。风力集中,流失小,能很好的吹动帆板。本系统设计采用方案二。7、电源【方案一】自制稳压电源。采用变压器与三端稳压器相结合,使220V电压经变压器变压,降为系统所需电压,过整流桥并利用两个大的电容滤波,从而得到较为稳

8、定的直流电压。自制电源体积大,需接入220V电压,电压不稳定,使用不方便。【方案二】三块6V蓄电池串联供电。直接选用所需型号蓄电池,能量足,供电稳定,高低温适应性强。本系统选用第二种方案。(二) 总体设计方案系统功能的实现,以STC89C52单片机为核心,在单片机系统实现的输入输出和显示功能的基础上,由单片机的内置逻辑和运算功能,加上外围电路得以实现。根据设计任务要求,该电路的总体框图可分为几个基本的模块,总体框图如下图21所示:图21总体框图三、理论分析与计算(一)距离计算帆板尺寸:长 15cm,宽 10cm。风扇到帆板的距离:715cm。本系统帆板转轴直径0.5cm(二)角度计算帆板转角:

9、060度。帆板转角测量原理:风扇吹动帆板转动,产生帆板角度变化,利用ADXL345数字加速度传感器测出三维坐标x 、y 、z的变化,将加速度传感器固定在帆板上,从而通过固定y,利用x 、z的关系求出角度。角度=(180*atan(tempz/tempx)/3.14。角度的测量X围是090,可以满足系统要求。(三)控制算法首先利用键盘控制风扇的转速,使帆板能够偏转一定的角度,再利用加速度传感器测出帆板的角度,送显示电路显示。具体控制算法采用C语言编程实现,具体程序代码见附录2。四、电路与程序设计(一)硬件设计1、总体电路图(见附录1)2、主控电路系统采用STC89C52单片机构成主控制电路,电路

10、如图41所示:图41主控电路3、风扇控制风扇电机选用L298N模块驱动,并由4*4按键矩阵控制PWM,改变电机速度,达到控制风扇风力大小的目标。L298N驱动模块如下图42所示:图42风扇控制4、显示模块使用LCD12864显示,如下图43所示:图43显示模块5、声光提示模块图44声光提示模块6、传感器模块图45传感器模块(二)软件设计1、风扇控制算法设计风扇控制算法如下图46所示:图46风扇控制算法2、声光提示算法设计声光提示算法如下图47所示:图47声光提示算法3、系统流程图整个系统程序流程图如图48所示:图48系统流程图五、系统测试(一)测试方法与仪器利用四位半数字万用表、秒表、量角器等

11、设备通电对系统进行测试。(二)测试结果1、功能要求测试序号指标(目标值)实测值1显示X围为0-60,实时显示。0-662分辨力为2,绝对误差5。分辨1误差33使帆板转角稳定在455X围内,制过程在10 秒内完成,实时显示,并由声光提示5秒4在5 秒内达到设定值5秒表 12、按键控制风力等级测试风力等级角度W角度W角度W00005111109101115232223202529312537373930403940354746434049495145515253505556525555575460585957655760587060625975616360806463648565646590656

12、5659565656599666666表 2(三)测试结果分析本系统总体性能良好。但是也有不足的地方,由于帆板摆动大的问题,当系统工作时,影响到转角实际测量的精确性。这个地方有待改进。六、设计总结本方案的系统设计基本符合2011年全国大学生电子设计竞赛试题(F题)的要求。通过本次设计,深深感到理论与实践之间的差距。很多知识点在理论上完全理解了,但到具体的电路设计与实现中,会出现很多一时无法理解的问题,要通过不断测试修改软硬件,才能用理论来指导实践,进一步深入理解理论。参考文献1 郭天祥. 51单片机C语言教程. :电子工业,2009年.2 阎石. 数字电子技术基础(第四版). : 高等教育,1

13、997年.3李建忠单片机原理及应用XX:XX电子科技大学,2002年附录1 硬件原理图附录2 程序代码主函数/*/#include#include control.h#include 12864.h#include ADXL.H#define uchar unsigned char#define uint unsigned intsbit key=P27;void timer_init() TMOD=0X10; TH1=(65535-100)/256; TL1=(65535-100)%256; EA=1; ET1=1; TR1=1;void main() char devid; timer_i

14、nit(); lcd_12864_init(); Init_ADXL345(); /初始化ADXL345 devid=Single_Read_ADXL345(0X00); /读出的数据为0XE5,表示正确 while(1) adxl345(); if(key=0) keyscan_1(); else keyscan(); /*/Controh.H文件#ifndef _contral_h_ #define _contral_h_extern signed char pwm;extern void delayms(unsigned int xms);extern void keyscan();ex

15、tern void keyscan_1();#endif/*/Control.C文件#include#include control.h#include 12864.h#define uchar unsigned char#define uint unsigned int#define keydata P0sbit A1=P24;sbit A2=P25;sbit ENA=P26;signed int count=0; signed char pwm=0;signed char anjian=0;uchar numshi=0;uchar numge=0;void delayms(unsigned

16、 int xms) unsigned int i,j; for(i=0;ixms;i+) for(j=0;j110;j+); void pwm_dis() numshi=pwm/10; numge=pwm%10; write_12864_data(0x30+numshi); write_12864_data(0x30+numge); void anjian_dis() numshi=anjian/10; numge=anjian%10; write_12864_data(0x30+numshi); write_12864_data(0x30+numge); void keyscan() uns

17、igned char dat=0; unsigned char num=0; keydata=0xfe; dat=keydata; dat=dat&0xf0; while(dat!=0xf0) delayms(5); dat=keydata; dat=dat&0xf0; while(dat!=0xf0) dat=keydata; switch(dat) case 0xee:num=1; break; case 0xde:num=2; break; case 0xbe:num=3; break; case 0x7e:num=4; break; while(dat!=0xf0) dat=keyda

18、ta; dat=dat&0xf0; keydata=0xfd; dat=keydata; dat=dat&0xf0; while(dat!=0xf0) delayms(5); dat=keydata; dat=dat&0xf0; while(dat!=0xf0) dat=keydata; switch(dat) case 0xed:num=5; break; case 0xdd:num=6; break; case 0xbd:num=7; break; case 0x7d:num=8; break; while(dat!=0xf0) dat=keydata; dat=dat&0xf0; key

19、data=0xfb; dat=keydata; dat=dat&0xf0; while(dat!=0xf0) delayms(5); dat=keydata; dat=dat&0xf0; while(dat!=0xf0) dat=keydata; switch(dat) case 0xeb:num=9; break; case 0xdb:num=10; break; case 0xbb:num=11; break; case 0x7b:num=12; break; while(dat!=0xf0) dat=keydata; dat=dat&0xf0; keydata=0xf7; dat=key

20、data; dat=dat&0xf0; while(dat!=0xf0) delayms(5); dat=keydata; dat=dat&0xf0; while(dat!=0xf0) dat=keydata; switch(dat) case 0xe7:num=13; break; case 0xd7:num=14; break; case 0xb7:num=15; break; case 0x77:num=16; break; while(dat!=0xf0) dat=keydata; dat=dat&0xf0; switch(num) case 1: write_12864_addr(1

21、,3); pwm=0; pwm_dis(); break; case 2: write_12864_addr(1,3); pwm=10; pwm_dis(); break; case 3:write_12864_addr(1,3); pwm=20; pwm_dis(); break; case 4:write_12864_addr(1,3); pwm=30; pwm_dis(); break; case 5:write_12864_addr(1,3); pwm=40; pwm_dis(); break; case 6:write_12864_addr(1,3); pwm=50; pwm_dis

22、(); break; case 7:write_12864_addr(1,3); pwm=60; pwm_dis(); break; case 8:write_12864_addr(1,3); pwm=70; pwm_dis(); break; case 9: write_12864_addr(1,3); pwm=80; pwm_dis(); break; case 10: write_12864_addr(1,3); pwm=90; pwm_dis(); break; case 11:write_12864_addr(1,3); pwm=99; pwm_dis(); break; case

23、12:write_12864_addr(1,3); pwm=35; pwm_dis(); break; case 13:write_12864_addr(1,3); pwm=pwm+5; pwm_dis(); break; case 14:write_12864_addr(1,3); pwm=pwm-5; pwm_dis(); break; case 15:write_12864_addr(1,3); pwm=pwm+1; pwm_dis(); break; case 16:write_12864_addr(1,3); pwm=pwm-1; pwm_dis(); break; void key

24、scan_1() unsigned char dat=0; unsigned char num=0; keydata=0xfe; dat=keydata; dat=dat&0xf0; while(dat!=0xf0) delayms(5); dat=keydata; dat=dat&0xf0; while(dat!=0xf0) dat=keydata; switch(dat) case 0xee:num=1; break; case 0xde:num=2; break; case 0xbe:num=3; break; case 0x7e:num=4; break; while(dat!=0xf0) dat=keydata; dat=dat&0xf0; keydata=0xfd; dat=keydata; dat=dat&0xf0; while(dat!=0xf0) delayms(5); dat=keydata; dat=dat&0xf0; while(dat!=0xf0) dat=keydata; switch(dat) case 0xed:num=5; break; case 0xdd:num=6; break; case 0xbd:num=7; break; case 0x7d:num=8; break; while(dat!=0xf0) dat=

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1