基于51单片机点光源自动跟踪系统设计综合设计报告 精品文档格式.docx

上传人:b****6 文档编号:21502961 上传时间:2023-01-30 格式:DOCX 页数:23 大小:4.27MB
下载 相关 举报
基于51单片机点光源自动跟踪系统设计综合设计报告 精品文档格式.docx_第1页
第1页 / 共23页
基于51单片机点光源自动跟踪系统设计综合设计报告 精品文档格式.docx_第2页
第2页 / 共23页
基于51单片机点光源自动跟踪系统设计综合设计报告 精品文档格式.docx_第3页
第3页 / 共23页
基于51单片机点光源自动跟踪系统设计综合设计报告 精品文档格式.docx_第4页
第4页 / 共23页
基于51单片机点光源自动跟踪系统设计综合设计报告 精品文档格式.docx_第5页
第5页 / 共23页
点击查看更多>>
下载资源
资源描述

基于51单片机点光源自动跟踪系统设计综合设计报告 精品文档格式.docx

《基于51单片机点光源自动跟踪系统设计综合设计报告 精品文档格式.docx》由会员分享,可在线阅读,更多相关《基于51单片机点光源自动跟踪系统设计综合设计报告 精品文档格式.docx(23页珍藏版)》请在冰豆网上搜索。

基于51单片机点光源自动跟踪系统设计综合设计报告 精品文档格式.docx

三总体调试19

3.1总体调试19

3.2问题及解决方案19

3.2.1通道比较阀值的设置19

3.2.2电机的防抖19

四设计总结20

五参考文献21

六附录22

1、设计题目

1.1基于单片机的光源自适应控制系统设计

设计一控制系统,假设有一个太阳能电池板,为了使电池板最大限度的接受光照强度,通过控制器调节电池板的角度使电池板始终正对光线。

采用步进电机作为角度调整装置,使系统能上下和左右旋转。

1.2设计要求

1.绘出电路原理图;

2.制作电路图;

3.编写程序;

4.调试运行。

2、设计报告正文

2.1设计方案的选择

2.1.1系统方案的拟定

1.方案一

本方案是由检测电路、AT89C52单片机、时钟电路、A/D转换控制电路等主要模块组成。

传感器部分采用光敏二极管,将光信号变换为电信号。

经过A/D转换将其转化离散的数字信号。

控制电路以单片机为核心,能够对采集的数字信号进行处理和判断,控制电机运转使太阳能板正对光线。

2.方案二

本方案用以单片机STC12C5A60S2为核心,光强度检测模块,时钟模块,步进电机控制电路模块和12864液晶显示等主要模块组成。

传感器采用光敏电阻,STC12C5A6S2单片机自带10位A/D,能够识别模拟信号。

控制电路以单片机为核心,能够对采集的模拟信号进行处理和判断对步进电机实现控制。

2.1.2方案选择

比较以上两方案可知,系统的工作原理是一致的,都是通过传感器采集太阳光并间接或直接将其转化成单片机能够识别的信号,通过单片机处理信号并进行判断,步进电机控制电路根据单片机传出的信号转动。

所不同的是采用元器件差异,但从单片机方面考虑,方案一所使用的传统的单片机器件方案二所使用的系列成本低。

根据实际情况方案一的元器件基本都是简单易上手的器件,运用起来比较灵活,原理简单容易理解方便写程序代码。

综合考虑,最后确定选择方案一。

系统组成及工作原理以单片机为控制核心,采用光强度检测电路测量,以光敏电阻传感器作为测量元件,构成光电测量模块。

该系统可分为电源模块电路、光电测量电路、时钟电路、步进电机控制电路、单片机、A/D转换电路。

选用的主要器件有:

光敏电阻,时钟芯片74LS74,AT89C52,步进电机与转换芯片ADC0809等。

系统设计框图如图2-1所示。

图2-1系统设计框图

2.2硬件电路的设计

2.2.1AD转换模块

1.ADC0809的内部逻辑结构

ADC0809由一个8路模拟开关、一个地址锁存与译码器、一个A/D转换器和一个三态输出锁存器组成。

多路开关可选通8个模拟通道,允许8路模拟量分时输入,共用A/D转换器进行转换。

三态输出锁器用于锁存A/D转换完的数字量,当OE端为高电平时,才可以从三态输出锁存器取走转换完的数据。

2.ADC0809引脚结构

ADC0809各脚功能如下:

D7-D0:

8位数字量输出引脚。

IN0-IN7:

8位模拟量输入引脚。

VCC:

+5V工作电压。

GND:

地。

REF(+):

参考电压正端。

REF(-):

参考电压负端。

START:

A/D转换启动信号输入端。

ALE:

地址锁存允许信号输入端。

(以上两种信号用于启动A/D转换).

EOC:

转换结束信号输出引脚,开始转换时为低电平,当转换结束时为高电平。

OE:

输出允许控制端,用以打开三态数据输出锁存器。

CLK:

时钟信号输入端(一般为500KHz)。

A、B、C:

地址输入线。

如图2-2所示

图2-2实物图和管脚图

ADC0809对输入模拟量要求:

信号单极性,电压范围是0-5V,若信号太小,必须进行放大;

输入的模拟量在转换过程中应该保持不变,如若模拟量变化太快,则需在输入前增加采样保持电路。

地址输入和控制线:

4条

ALE为地址锁存允许输入线,高电平有效。

当ALE线为高电平时,地址锁存与译码器将A,B,C三条地址线的地址信号进行锁存,经译码后被选中的通道的模拟量进入转换器进行转换。

A,B和C用于选通IN0-IN7上的一路模拟量输入。

通道选择表如表2-1所示。

数字量输出及控制线:

11条

ST为转换启动信号。

当ST上跳沿时,所有内部寄存器清零;

下跳沿时,开始进行A/D转换;

在转换期间,ST应保持低电平。

EOC为转换结束信号。

当EOC为高电平时,表明转换结束;

否则,表明正在进行A/D转换。

OE为输出允许信号,用于控制三条输出锁存器向单片机输出转换得到的数据。

OE=1,输出转换得到的数据;

OE=0,输出数据线呈高阻状态。

D7-D0为数字量输出线。

CLK为时钟输入信号线。

因ADC0809的内部没有时钟电路,所需时钟信号必须由外界提供,通常使用频率为500KHZ,VREF(+),VREF(-)为参考电压输入。

表2-1输入通道

3.ADC0809应用说明

1)ADC0809内部带有输出锁存器,可以与AT89S51单片机直接相连。

2)初始化时,使ST和OE信号全为低电平。

3)要转换的哪一通道的地址到A,B,C端口上。

4)在ST端给出一个至少有100ns宽的正脉冲信号。

5)是否转换完毕,我们根据EOC信号来判断。

6)当EOC变为高电平时,这时给OE为高电平,转换的数据就输出给单片机了。

图2-3ADC0809连接图

如图2-3所示,IN0-IN7分别与8个检测单元连接,D0-D7管脚接在单片机1的P3口,ST管脚于单片机1的P1.2连接,OE、EOC分别与P1.0、P1.1连接,A、B和C与P1.4-P1.6连接,CLK接外部时钟电路,11、12管脚接VCC,13、16管脚接地。

2.2.2步进电机模块

1.驱动方法及主要参数如表2-2、表2-3所示:

表2-2驱动方式(4-1-2相驱动)

导线颜色

1

2

3

4

5

6

7

8

6红

+

4橙

-

3黄

2粉

1蓝

表2-3主要技术参数

电机型号

电压V

相数

步距角度

减速比

28BYJ-48

5.625/64

1:

64

2.步进电机的主要特性:

1)步进电机必须加驱动才可以运转,驱动信号必须为脉冲信号,没有脉冲的时候,步进电机静止,如果加入适当的脉冲信号,就会以一定的角度(称为步角)转动。

转动的速度和脉冲的频率成正比。

2)28BYJ48是减速步进电机,减速比为1:

64,步进角为5.625/64度。

如果需要转动1圈,那么需要360/5.625*64=4096个脉冲信号。

3)步进电机具有瞬间启动和急速停止的优越特性。

4)改变脉冲的顺序,可以方便的改变转动的方向。

电机线圈由四相组成,即A、B、C、D四相,电机示意图和各线圈通电顺序图2-4和表2-4所示:

图2-4步进电机原理图

表2-4各线圈通电顺序

相顺序

相顺序从0到1称为一步,电机轴将转过5.625度,四相四拍为0-1-2-3则称为通电一周,若循环进行这种通电一周的操作,电机便连续的转动起来,而进行相反的通电顺序如3-2-1-0将使电机同速反转。

同理四相八拍的通电顺序为A-AB-B-BC-C-CD-D-DA-A(本设计用的是四相八拍)。

通电一周的周期越短,即驱动频率越高,则电机转速越快,但步进电机的转速也不可能太快,因为它每走一步需要一定的时间,若信号频率过高,可能导致电机失步,甚至只在原步颤动。

图2-5水平方向步进电机电路连接

图2-6竖直方向步进电机电路连接

2.2.3电机驱动模块

本设计采用51单片机AT89C52(晶振频率为11.0592MHZ)对该四线八相制步进电机进行控制。

通过I/O口输出的具有时序的方波作为步进电机的控制信号,信号经过特定芯片驱动步进电机。

本文选用ULN2003构成步进电机的驱动电路,下面但见介绍下ULN2003的结构和特点:

ULN2003是高耐压、大电流达林顿陈列,由七个硅NPN达林顿管组成。

该电路的特点如下:

ULN2003的每一对达林顿都串联一个2.7K的基极电阻,在5V的工作电压下它能与TTL和CMOS电路直接相连,可以直接处理原先需要标准逻辑缓冲器来处理的数据。

ULN2003工作电压高,工作电流大,灌电流可达500mA,并且能够在关态时承受50V的电压,输出还可以在高负载电流并行运行。

ULN2003采用DIP—16塑料封装。

ULN2003方框图如图2-7所示。

ULN2003和AT89C52构成的驱动电路如图2-8所示。

图2-7ULN2003内部方框图

图2-8ULN2003和AT89C52构成的驱动电路

2.2.4检测模块:

光敏电阻的分布如图2-9所示:

图2-9光敏电阻分布图

比较控制式太阳跟踪装置。

设置一个直筒形外壳,在直筒外部,东、南、西、北四个方向上分别布置4只光电阻;

其中一对光电阻(PI,P3)东西对称安装在直筒的两侧,用来粗略的检测太阳由东往西运动的偏转角度即方位角;

另一对光电阻(PZ,P4)南北对称安装在直筒的两侧,用来粗略检测太阳的视高度即高度角;

在直筒内部,东、南、西、北四个方向上也分别布置4只光电阻;

其中一对光电阻(PS,P7)东西对称安装在直筒的内侧,用来精确检测太阳由东往西运动的偏转角度;

另一对光电阻(P6,PS)南北对称安装在直筒的内侧,用来精确检测太阳的视高度。

其电路图如如2-10所示。

图2-10检测电路

2.2.5单片机模块

1.AT89C52的内部结构和引脚

AT89C52是一个低功耗高性能单片机,40个引脚,32个外部双向输入/输出(I/O)端口,同时内含2个外部中断口,2个16位可编程定时计数器,2个全双工串行通信口,AT89C52可以按照常规方法进行编程,也可以在线编程。

其将通用的微处理器和Flash存储器结合在一起,特别是可反复擦写的Flash存储器可有效地降低开发成本。

管脚说明如下:

电源。

P0口:

P0口是一个8位漏极开路的双向I/O口。

作为输出口,每位能驱动8个TTL逻辑电平。

对P0端口写“1”时,引脚用做高阻抗输入。

当访问外部程序和数据存储器时,P0口也被作为低8位地址/数据复用。

在这种模式下,P0具有内部上拉电阻。

在Flash编程时,P0口也用来接收指令字节;

在程序校验时,输出指令字节。

在程序校验时,需要外部上拉电阻。

P1口:

P1口是一个具有内部上拉电阻的8位双向I/O口,P1输出缓冲器能驱动4个TT逻辑电平。

当对P1端口写“1”时,内部上拉电阻把端口拉高,此时可以作为输入口使用。

当作为输入使用时,被外部拉低的引脚由于内部电阻的原因,将输出电流(IIL)。

此外,P1.0和P1.2分别作为定时器/计数器2的外部计数输入(P1.0/T2)和定时器/计数器2的触发输入(P1.1/T2EX),在Flash编程和校验时,P1口接收低8位地址字节。

P2口:

P2口是一个具有内部上拉电阻的8位双向I/O口,P2输出缓冲器能驱动4个TT逻辑电平。

对P2端口写“1”时,内部上拉电阻把端口拉高,此时可以作为输入口使用。

P3口:

P3口是一个具有内部上拉电阻的8位双向I/O口,P2输出缓冲器能驱动4个TT逻辑电平。

对P3端口写“1”时,内部上拉电阻把端口拉高,此时可以作为输入口使用。

P3口也可作为AT89C52的一些特殊功能口,如下所示:

P3.0RXD(串行输入口)

P3.1TXD(串行输出口)

P3.2/INT0(外部中断0)

P3.3/INT1(外部中断1)

P3.4T0(记时器0外部输入)

P3.5T1(记时器1外部输入)

P3.6/WR(外部数据存储器写选通)

P3.7/RD(外部数据存储器读选通)

P3口同时为闪烁编程和编程校验接收一些控制信号。

RST:

复位输入。

在晶振工作时,RST脚持续两个机器周期高电平将使单片机复位。

看门狗计时完成后,RST脚输出96个晶振周期的高电平。

特殊寄存器AUXR(地址8EH)上的DISRTO位可以使此功能无效。

在DISRTO默认状态下,复位高电平有效。

ALE/PROG:

地址锁存控制信号(ALE)在访问外部程序存储器时,锁存低8位地址的输出脉冲。

在Flash编程时,此引脚(PROG)也用做编程输入脉冲。

PSEN:

外部程序存储器选通信号(PSEN)是外部程序存储器选通信号。

当AT89S52从外部程序存储器执行外部代码时,PSEN在每个机器周期被激活两次,而在访问外部数据存储器时,PSEN将不被激活。

EA/VPP:

访问外部程序存储器控制信号。

为使能从0000H到FFFFH的外部程序存储器读取指令,EA必须接GND。

为了执行内部程序指令,EA应该接VCC。

在Flash编程期间,EA也接收12伏VPP电压。

XTAL1:

振荡器反相放大器和内部时钟发生电路的输入端。

XTAL2:

振荡器反相放大器的输出端。

AT89S52单片机引脚功能介绍(如图2-11):

图2-11AT89S52DIP封装管脚分布图

2.单片机电路设计

单片机1通过与ADC0809连接,接收ADC0809转换后的数据并对其作出判断与比较,在P2口发出信号与单片机2通信。

其电路连接图如图2-12所示:

图2-12单片机1电路图

单片机2通过接收单片机1的P2口发出的信号作出判断控制水平与竖直方向上的电机运作以求太阳能板正对光线。

其电路连接图如图2-13所示:

图2-13单片机2电路图

3.两片单片机的通信

单片机1主要负责接收ADC0809转换后的数据,并通过比较产生控制信号并将信号发送给单片机2,而单片机2主要负责接收信号然后通过信号控制两台步进电机的运作从而达到实验目的。

两片单片机的通信接口协议如表2-5所示:

表2-5单片机通信

接线1

接线2

接线3

单片机1

P2^6

P2^5

P2^4

单片机2

P3^2

P3^3

P3^4

2.3系统软件设计

本设计,程序采用C语言进行设计。

程序中主要有以下几个主要子程序:

主程序,ADC0809初始化、采集、转换数据程序,电机驱动控制程序。

程序源代码见附录。

3、总体调试

3.1软硬件调试

硬件焊接及程序编写完成后,在对整个系统调试的过程中,出现了电机不运转等问题。

主要通过单独调试各个模块及检查相关硬件电路的焊接,找出问题所在,然后针对问题逐个击破,最后成功完成本设计。

3.2主要问题及解决方案

3.2.1通道比较阀值的设置

由于采用ADC0809进行数模转换,而在转换过程中光敏电阻的采光是时时变化的,所以8个通道的数据比较过程会有一定波动,如不加阀值比较则会致使电机不停工作,最后太阳能板无法准确对光。

在阀值的选定上,通过实物测试,最后选定在+5(-5)。

这个阀值既能数据比较的准确性又能保证电机的正常运转。

3.2.2电机的防抖

在最初程序编写过程,由于没考虑到检测时候的延时及数据的波动,导致最初的太阳能板在最后对光时不停波动。

后来通过程序延时的加入、数据比较时阀值的引入及实物测试终于使此问题得到改善,成功完成太阳能板的对光。

4、设计总结

本次课程设计使我对设计一个完整的计算机控制系统有了更全面的体会,通过绘制电路原理图,温故了PROTEL软件,提高了我的动手设计能力。

电路焊接过程中,通过每个对模块的焊接和测试,极大地提高了我动手分析解决问题的能力。

本设计通过两片AT89C52分别控制数模转换芯片ADC0809与电机驱动控制芯片构成数据采集转换电路与电机驱动控制电路实现光源的自适应控制。

同时又利用单片机AT89C52内部计时器,节约了大量资源。

但是,由于存在步进电机转角度数精度不高、手工制作的实验装置的不规整等非线性、ADC0809数据转换不够精确等问题,所以存在误差,所以本设计还有待继续研究和改进。

在本次课程设计中,通过和队员之间的合作,使得我们能顺利完成设计任务,体会到了合作的力量,增强了我团队合作意识,在方案选择和电路原理图的设计过程中,感谢老师的悉心指导,才能顺利地完成设计,节省了很多时间来应付更大的障碍。

特在此忠心感谢我的指导老师蒋建春老师!

5、参考文献

[1]张毅刚.单片机原理及应用[M].北京:

高等教育出版社,2010.5.

[2]ADC0809中文资料.

[3]AT89C52中文资料.

[4]ULN2003中文资料.

6、附录

1.系统整体电路图

优酷视频地址:

2.源程序1(数据采集)

#include<

reg52.h>

#defineuintunsignedint

#defineucharunsignedchar

ucharcodeLEDData[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};

ucharcodepip[8]={0x0f,0x1f,0x2f,0x3f,0x4f,0x5f,0x6f,0x7f};

//通道选择

uintbuffer[8]={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};

//数据存放

charcharset[10]={'

0'

'

1'

2'

3'

4'

5'

6'

7'

8'

9'

};

sbitP25=P2^5;

sbitP26=P2^6;

sbitP24=P2^4;

sbitOE=P1^0;

sbitEOC=P1^1;

sbitST=P1^2;

sbitCLK=P3^3;

uchari=0;

uchars[6]={'

|'

'

='

voidlong_char(ucharl,char*s)

{

*(s+3)=charset[l/100];

*(s+4)=charset[l%100/10];

*(s+5)=charset[l%10];

}

voidDelayMS(uinti)//延时iMS

ucharx,j;

for(j=0;

j<

i;

j++)

for(x=0;

x<

=148;

x++);

voidSendStr(unsignedchar*s);

/*------------------------------------------------

串口初始化

------------------------------------------------*/

voidInitUART(void)

SCON=0x50;

//SCON:

模式1,8-bitUART,使能接收

TMOD|=0x20;

//TMOD:

timer1,mode2,8-bit重装

TH1=0xFD;

//TH1:

重装值9600波特率晶振11.0592MHz

TR1=1;

//TR1:

timer1打开

EA=1;

//打开总中断

//ES=1;

//打开串口中断

}

发送一个字节

voidSendByte(chardat)

SBUF=dat;

while(!

TI);

TI=0;

发送一个字符串

voidSendStr(char*s)

while(*s!

\0'

)//\0表示字符串结束标志,

//通过检测是否字符串末尾

{

SendByte(*s);

s++;

}

v

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 法律文书 > 辩护词

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

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