课程设计(论文)-基于STC89C52单片机的帆板角度控制系统.doc_第1页
课程设计(论文)-基于STC89C52单片机的帆板角度控制系统.doc_第2页
课程设计(论文)-基于STC89C52单片机的帆板角度控制系统.doc_第3页
课程设计(论文)-基于STC89C52单片机的帆板角度控制系统.doc_第4页
课程设计(论文)-基于STC89C52单片机的帆板角度控制系统.doc_第5页
已阅读5页,还剩34页未读 继续免费阅读

下载本文档

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

文档简介

目录一、 引言1二、系统方案1(一)方案论证与比较11、主控电路12、角度传感器的选用23、按键选用24、显示25、电机的驱动26、风扇37、电源3(二) 总体设计方案3三、理论分析与计算3(一)距离计算3(二)角度计算4(三)控制算法4四、电路与程序设计4(一)硬件设计41、总体电路图(见附录1)42、主控电路43、风扇控制54、显示模块55、声光提示模块66、传感器模块6(二)软件设计61、风扇控制算法设计62、声光提示算法设计73、系统流程图7五、系统测试7(一)测试方法与仪器7(二)测试结果81、功能要求测试82、按键控制风力等级测试8(三)测试结果分析9六、设计总结9参考文献9附录1 硬件原理图10附录2 程序代码11帆板控制系统摘要:报告介绍基于stc89c52单片机的帆板角度控制系统,系统可以利用风扇控制装置对帆板角度进行控制,并通过lcd12864实时显示角度变化。还可依据设定的帆板角度信息智能控制风扇转速,在很短时间内(5秒以内)动态调整帆板摆角,同时实时显示帆板角度等信息。系统包括:单片机主控模块、角度信号采集模块、键盘输入模块、显示模块、电源模块、风扇电机驱动模块。系统主控模块采用性价比高的单片机最小系统;选用adxl345加速度传感器完成系统角度信号采集功能;利用lcd12864实时显示角度变化的信息,5*6矩阵键盘完成风力等级和角度设定的输入;系统电源模块采用两路稳压输出电路(5v、15v),提供控制系统与风扇电机的工作电源;风扇电机采用l298n模块驱动。本系统制作成本较低、工作性能控制稳定,能很好达到设计要求。关键词: stc89c52;加速度传感器;lcd12864;l298n一、 引言单片机又称单片微控制器,单片机具有体积小、功耗低、控制功能强、扩展灵活、微型化和使用方便等优点,广泛应用于仪器仪表中,结合不同类型的传感器,可实现诸如电压、功率、频率、湿度、温度、流量、速度、厚度、角度、长度、硬度等物理量的测量。本系统就是以单片机为核心建立起来的,要实现对帆板转角大小的控制,其归根就是对风扇的控制,帆板的转角随着风扇风力的变化而变化,角度传感器给单片机不同的角度检测信号,经单片机处理后在lcd液晶上显示,同时给出声光提示。系统体现了模块化的设计理念,将单片机和各个器件结合在一起,完成系统化的设计,充分发挥了单片机的可靠性、可操作性和强大处理功能。二、系统方案(一)方案论证与比较1、主控电路【方案一】采用可编程逻辑器件fpga作为控制器。fpga可以实现各种复杂的逻辑功能,io资源丰富,易于进行功能扩展。但本系统不需要复杂的逻辑功能,且从使用、功耗及经济的角度考虑我们放弃了此方案。【方案二】stc89c52 单片机采用stc89c52 单片机作为主控器,其算术功能强,软件编程简洁灵活、自由度大 ,可用软件编程实现各种逻辑控制功能,且其功耗低、技术成熟,成本低廉。本系统主要是进行信号的处理以及风扇电机的控制。综合考虑,本系统设计的功能依靠51单片机均可实现,故采用方案二。2、角度传感器的选用【方案一】用uzz9001y与kmz41连接构成一个角度测量系统。电路组成繁琐,制作较困难,稳定性较差。【方案二】倾角传感器。该集成芯片为专用的水平倾角测量芯片,具有体积小、灵敏度高等优点,但是输出为模拟信号,需要用到da转换,操作间为复杂,且占用i/o口较多,不利于本统功能模块的操作。【方案三】用adxl345数字加速度传感器。adxl345是一款小而薄的超低功耗的3轴加速度计,可测量帆板在斜面所受重力加速度在斜面上的分量,进而转换成倾斜角,测量精度较高。adxl345输出信号为数字信号,避免了a/d转换,操作简单;此外adxl345只需用到两个i/o口,占用资源少,能满足本设计的要求。本系统选择了第三种方案。3、按键选用【方案一】采用独立键盘。多个使用时,线路连接不便,操作繁琐。【方案二】采用5*6的距阵键盘,可输入的值比较多,可设定的功能也多。在本系统中需要多个键,系统选择了第二种方案。4、显示【方案一】使用数码管显示。要完成功能电路的显示需要多个数码管,此方案占用i/o口多,连接不便,显示效果差,功耗大。【方案二】用lcd1602液晶显示。1602是一种专门用于显示字母、数字、符号等点阵式,1602分为上下2行,每行显示16个字符。驱动简单,但不能显示汉字。【方案三】用lcd12864液晶显示。lcd12864功能强大,不仅能显示字母、数字、符号,还可以显示汉字和图形,最多可显示4行,每一行最多显示8个中文,16个半宽字体。(最好选用带字库的,方便编写程序。)lcd12864和lcd1602使用方法类似,驱动简单,耗电量小,无辐射危险,显示直观、抗干扰能力强,但体积较大。本系统选择了第三种方案。5、电机的驱动【方案一】用分立元件构成的h桥电路利用分立三极管元件构成的h桥电路结构简单,但驱动能力有限,所带负载不可过大。【方案二】采用l298n集成h桥芯片。在l298n集成芯处中集成了两套h桥电路,可直接驱动两路直流电机,利用单片机产生的pwm信号,可方便地进行电机调速。【方案三】用uln2003功率放大器件。uln2003 是高耐压、大电流达林顿陈列,由七个硅npn 达林顿管组成。通过使用不同的放大电路和不同参数的器件,可达到不同的放大的要求,放大后能得到较大的功率。本系统设计采用方案二。6、风扇【方案一】用普通的散热风扇。风力小,风力流失大,很难达到系统要求。【方案二】用带通风通道的风扇。风力集中,流失小,能很好的吹动帆板。本系统设计采用方案二。7、电源【方案一】自制稳压电源。采用变压器与三端稳压器相结合,使220v电压经变压器变压,降为系统所需电压,过整流桥并利用两个大的电容滤波,从而得到较为稳定的直流电压。自制电源体积大,需接入220v电压,电压不稳定,使用不方便。【方案二】三块6v蓄电池串联供电。直接选用所需型号蓄电池,能量足,供电稳定,高低温适应性强。本系统选用第二种方案。(二) 总体设计方案系统功能的实现,以stc89c52单片机为核心,在单片机系统实现的输入输出和显示功能的基础上,由单片机的内置逻辑和运算功能,加上外围电路得以实现。根据设计任务要求,该电路的总体框图可分为几个基本的模块,总体框图如下图21所示:图21总体框图三、理论分析与计算(一)距离计算帆板尺寸:长 15cm,宽 10cm。风扇到帆板的距离:715cm。本系统帆板转轴直径0.5cm(二)角度计算帆板转角:060度。帆板转角测量原理:风扇吹动帆板转动,产生帆板角度变化,利用adxl345数字加速度传感器测出三维坐标x 、y 、z的变化,将加速度传感器固定在帆板上,从而通过固定y,利用x 、z的关系求出角度。角度=(180*atan(temp z/temp x)/3.14。角度的测量范围是090,可以满足系统要求。(三)控制算法首先利用键盘控制风扇的转速,使帆板能够偏转一定的角度,再利用加速度传感器测出帆板的角度,送显示电路显示。具体控制算法采用c语言编程实现,具体程序代码见附录2。四、电路与程序设计(一)硬件设计1、总体电路图(见附录1)2、主控电路系统采用stc89c52单片机构成主控制电路,电路如图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系统流程图五、系统测试(一)测试方法与仪器利用四位半数字万用表、秒表、量角器等设备通电对系统进行测试。(二)测试结果1、功能要求测试序号指标(目标值)实测值1显示范围为0-60,实时显示。0-662分辨力为2,绝对误差5。分辨1误差33使帆板转角稳定在455范围内,制过程在10 秒内完成,实时显示,并由声光提示5秒4在5 秒内达到设定值5秒表 12、按键控制风力等级测试 风力等级角度w角度w角度w000051111091011152322232025293125373739304039403547464340494951455152535055565255555754605859576557605870606259756163608064636485656465906565659565656599666666表 2(三)测试结果分析本系统总体性能良好。但是也有不足的地方,由于帆板摆动大的问题,当系统工作时,影响到转角实际测量的精确性。这个地方有待改进。六、设计总结本方案的系统设计基本符合2011年全国大学生电子设计竞赛试题(f题)的要求。通过本次设计,深深感到理论与实践之间的差距。很多知识点在理论上完全理解了,但到具体的电路设计与实现中,会出现很多一时无法理解的问题,要通过不断测试修改软硬件,才能用理论来指导实践,进一步深入理解理论。参考文献1 郭天祥. 51单片机c语言教程. 北京:电子工业出版社,2009年.2 阎石. 数字电子技术基础(第四版). 北京: 高等教育出版社,1997年.3 李建忠单片机原理及应用西安:西安电子科技大学出版社,2002年38附录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_init();lcd_12864_init();init_adxl345(); /初始化adxl345devid=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();extern 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 int xms)unsigned int i,j;for(i=0;ixms;i+)for(j=0;j=100)count=0;if(countpwm)ena=1;elseena=0;/*/12864.h文件#ifndef _12864_h_ #define _12864_h_/extern void lcd_writestring(unsigned char *str);/向lcd发送一个字符串,长度64字符之内。extern void write_12864_cmd(unsigned char cmd ); /向液晶写数据extern void write_12864_data(unsigned char dat); /向液晶写数据extern void lcd_12864_init(); /初始化液晶extern void write_12864_addr(unsigned char x ,unsigned char y);/写液晶的地址extern void delayms_12864(unsigned char xms); /延时函数/extern void write_12864_addr(unsigned char x ,unsigned char y);/写液晶的地址 #endif/*/12864.c文件/*12864指令:0x01/将ddram填满“20h”,并且设定ddram的地址计数器(ac)到“00h”0x02/设定ddram的地址计数器 (ac)到“00h”, 并且将游标移到开头原点位置;这个指令并不改变ddram的内容0x04/读写后,ac减一,向左写0x06/读写后,ac加一,向右写0x10/光标向左移动,ac减一0x14/光标向右移动,ac加一0x18/显示向左移动,光标跟着移动 0x1c/显示向右移动,光标跟着移动0x0c/整体显示开,游标关,游标位置反白不允许0x0e/整体显示开,游标开,游标位置反白不允许0x0f/整体显示开,游标开,游标位置反白允许0x08/关显示,关光标,关光标闪烁0x30/8位数据端口,基本指令操作0x34/8位数据总线,扩展指令集0x20/4位数据总线,基本指令集0x24/4位数据总线,扩展指令集 */#include#include 12864.h#include control.h#define lcd_data p1 /定义液晶数据端口sbit lcd_psb=p37; /液晶串行数据和并行数据选择端sbit lcd_en=p34; /液晶en使能端sbit lcd_rs=p35; /液晶的rssbit lcd_rw=p36;/液晶的rw读写端口void delayms_12864(unsigned char xms) /延时函数unsigned char i,j;for(i=0;ixms;i+)for(j=0;j110;j+);bit check_12864_busy()/检测液晶忙不忙 bit result=0; lcd_rs=0; lcd_rw=1; lcd_en=1; delayms_12864(3); result=(bit)(lcd_data&0x80); /取出数据端口的最高位 lcd_en=0; return result;void write_12864_cmd(unsigned char cmd ) /写指令 while(check_12864_busy(); /检测液晶忙不忙 lcd_rs=0; /rs=0为写命令lcd_en=0;lcd_rw=0;lcd_data=cmd; /把指令给数据端口delayms_12864(1);lcd_en=1;delayms_12864(1);lcd_en=0; void write_12864_data(unsigned char dat) /向液晶写数据 while(check_12864_busy(); /检测液晶忙不忙 lcd_rs=1; /rs=1为写数据lcd_en=0;lcd_rw=0;lcd_data=dat; /把数据给数据端口delayms_12864(1);lcd_en=1;delayms_12864(1);lcd_en=0; void lcd_12864_init() /初始化液晶lcd_psb=1;write_12864_cmd(0x30);delayms_12864(5);write_12864_cmd(0x0c);delayms_12864(5);write_12864_cmd(0x01);delayms_12864(5); void write_12864_addr(unsigned char x ,unsigned char y)/写液晶的地址 unsigned char addr;if(x=0) /如果x=0,地址为液晶第一行x=0x80; else if(x=1) /如果x=1,地址为液晶第二行x=0x90;else if(x=2)/如果x=2,地址为液晶第三行x=0x88;else if(x=3) /如果x=3,地址为液晶第四行x=0x98;addr=x+y;write_12864_cmd(addr); /*/adxl.h文件#ifndef _adxl_h_ #define _adxl_h_/extern void jiaodu();/角度转换/extern void display_x(); /x轴/extern void display_y(); /y轴/extern void display_z();/z轴extern void init_adxl345();/延时函数extern unsigned char single_read_adxl345(unsigned char reg_address);/extern void multiple_read_adxl345(void);extern void adxl345(); #endif/*/adxl.c文件#include #include /keil library #include /keil library#include #include 12864.h#define uchar unsigned char#define uint unsigned int#define dataport p1 /lcd1602数据端口sbit scl=p20; /iic时钟引脚定义sbit sda=p21; /iic数据引脚定义sbit led=p22;#defineslaveaddress 0xa6 /定义器件在iic总线中的从地址,根据alt address地址引脚不同修改 /alt address引脚接地时地址为0xa6,接电源时地址为0x3atypedef unsigned char byte;typedef unsigned short word;byte buf8; /接收数据缓存区 uchar ge,shi,bai,qian,wan; /显示变量int dis_data; /变量void delay(unsigned int k);void initlcd(); /初始化lcd1602void init_adxl345(void); /初始化adxl345void writedatalcm(uchar dataw);void writecommandlcm(uchar cmd,uchar attribc);/void displayonechar(uchar x,uchar y,uchar ddata);void conversion(uint temp_data);void single_write_adxl345(uchar reg_address,uchar reg_data); /单个写入数据uchar single_read_adxl345(uchar reg_address); /单个读取内部寄存器数据void multiple_read_adxl345(); /连续的读取内部寄存器数据/-void delay5us();void delay5ms();void adxl345_start();void adxl345_stop();void adxl345_sendack(bit ack);bit adxl345_recvack();void adxl345_sendbyte(byte dat);byte adxl345_recvbyte();void adxl345_readpage();void adxl345_writepage();float

温馨提示

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

评论

0/150

提交评论