基于51单片机点光源自动跟踪系统设计

上传人:gui****hi 文档编号:74196262 上传时间:2022-04-13 格式:DOC 页数:31 大小:4.51MB
返回 下载 相关 举报
基于51单片机点光源自动跟踪系统设计_第1页
第1页 / 共31页
基于51单片机点光源自动跟踪系统设计_第2页
第2页 / 共31页
基于51单片机点光源自动跟踪系统设计_第3页
第3页 / 共31页
点击查看更多>>
资源描述
指导教师评定成绩: 审定成绩: 重 庆 邮 电 大 学自 动 化 学 院综合设计报告 设计题目:基于单片机的光源自适应控制系统设计单位(二级学院): 自 动 化 学 院 学 生 姓 名: 专 业: 自 动 化 班 级: 学 号: 指 导 教 师: 蒋建春 设计时间: 2012 年 10 月重庆邮电学院自动化学院制摘 要本设计给出了一种基于单片机的点光源自动跟踪系统设计方案, 该设计使用TI公司的超低功耗的AT89C52单片机作为整个系统的控制核心,主要由电机驱动模块,点光源检测模块,电源转换模块等模块组成。利用8路光敏电阻来检测点光源的位置并将检测到的信号经过放大后进行AD转换,将转换的结果传给控制器AT89C52单片机,经过过单片机的运算和处理来确定点光源的运动趋势,并将运算的控制信号控制两台步进电机,使其跟随点光源运动。本设计可以扩展为以后的太阳能发电的自动跟踪系统。该系统不仅能自动根据太阳光方向来调整太阳能电池板朝向, 结构简单、成本低, 而且在跟踪过程中能自动记忆和更正不同时间的坐标位置, 不必人工干预, 特别适合天气变化比较复杂和无人值守的情况, 有效地提高了太阳能的利用率, 有较好的推广应用价值。关键词:AT89C52单片机,光源,自动跟踪,传感器 目 录摘要2目录3一 设计题目41.1 基于单片机的光源自适应控制系统设计41.2 设计要求4二 设计报告正文52.1 设计方案总体方向的选择5 2.1.1 系统方案的拟定5 2.1.2 方案选择52.2 硬件电路的设计62.2.1 A/D转换模块6 2.2.2 步进电机模块9 2.2.3 电机驱动模块11 2.2.4 检测模块13 2.2.5 单片机模块142.3 系统软件设计18三 总体调试19 3.1 总体调试193.2 问题及解决方案19 3.2.1 通道比较阀值的设置19 3.2.2 电机的防抖19四 设计总结 20五 参考文献21六 附录22一、 设计题目1.1基于单片机的光源自适应控制系统设计 设计一控制系统,假设有一个太阳能电池板,为了使电池板最大限度的接受光照强度,通过控制器调节电池板的角度使电池板始终正对光线。采用步进电机作为角度调整装置,使系统能上下和左右旋转。1.2设计要求1. 绘出电路原理图;2. 制作电路图;3. 编写程序;4. 调试运行。 二、 设计报告正文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.1 AD转换模块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对输入模拟量要求:信号单极性,电压范围是05V,若信号太小,必须进行放大;输入的模拟量在转换过程中应该保持不变,如若模拟量变化太快,则需在输入前增加采样保持电路。 地址输入和控制线:4条 ALE为地址锁存允许输入线,高电平有效。当ALE线为高电平时,地址锁存与译码器将A,B,C三条地址线的地址信号进行锁存,经译码后被选中的通道的模拟量进入转换器进行转换。A,B和C用于选通IN0IN7上的一路模拟量输入。通道选择表如表2-1所示。 数字量输出及控制线:11条 ST为转换启动信号。当ST上跳沿时,所有内部寄存器清零;下跳沿时,开始进行A/D转换;在转换期间,ST应保持低电平。EOC为转换结束信号。当EOC为高电平时,表明转换结束;否则,表明正在进行A/D转换。OE为输出允许信号,用于控制三条输出锁存器向单片机输出转换得到的数据。OE1,输出转换得到的数据;OE0,输出数据线呈高阻状态。D7D0为数字量输出线。 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-3 ADC0809连接图 如图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相驱动)导线颜色123456786红+4橙-3黄-2粉-1蓝-表2-3主要技术参数电机型号电压V相数步距角度减速比28BYJ-48545.625/641:642.步进电机的主要特性: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 各线圈通电顺序相顺序1234561001110210011131110114111100 相顺序从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 采用DIP16 塑料封装。ULN2003方框图如图2-7所示。ULN2003和AT89C52构成的驱动电路如图2-8所示。 图2-7 ULN2003内部方框图图2-8 ULN2003和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存储器可有效地降低开发成本。管脚说明如下: VCC:电源。 GND:地。 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”时,内部上拉电阻把端口拉高,此时可以作为输入口使用。当作为输入使用时,被外部拉低的引脚由于内部电阻的原因,将输出电流(IIL)。 P3 口:P3 口是一个具有内部上拉电阻的8 位双向I/O 口,P2 输出缓冲器能驱动4 个TT逻辑电平。对P3 端口写“1”时,内部上拉电阻把端口拉高,此时可以作为输入口使用。当作为输入使用时,被外部拉低的引脚由于内部电阻的原因,将输出电流(IIL)。P3口也可作为AT89C52的一些特殊功能口,如下所示: P3.0 RXD(串行输入口) P3.1 TXD(串行输出口) P3.2 /INT0(外部中断0) P3.3 /INT1(外部中断1) P3.4 T0(记时器0外部输入) P3.5 T1(记时器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-11 AT89S52 DIP封装管脚分布图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单片机1P26P25P24单片机2P32P33P34 2.3系统软件设计 本设计,程序采用C语言进行设计。程序中主要有以下几个主要子程序:主程序,ADC0809初始化、采集、转换数据程序,电机驱动控制程序。程序源代码见附录。三、 总体调试3.1 软硬件调试 硬件焊接及程序编写完成后,在对整个系统调试的过程中,出现了电机不运转等问题。主要通过单独调试各个模块及检查相关硬件电路的焊接,找出问题所在,然后针对问题逐个击破,最后成功完成本设计。3.2 主要问题及解决方案3.2.1 通道比较阀值的设置 由于采用ADC0809进行数模转换,而在转换过程中光敏电阻的采光是时时变化的,所以8个通道的数据比较过程会有一定波动,如不加阀值比较则会致使电机不停工作,最后太阳能板无法准确对光。 在阀值的选定上,通过实物测试,最后选定在+5(-5)。这个阀值既能数据比较的准确性又能保证电机的正常运转。3.2.2电机的防抖 在最初程序编写过程,由于没考虑到检测时候的延时及数据的波动,导致最初的太阳能板在最后对光时不停波动。后来通过程序延时的加入、数据比较时阀值的引入及实物测试终于使此问题得到改善,成功完成太阳能板的对光。四、 设计总结 本次课程设计使我对设计一个完整的计算机控制系统有了更全面的体会,通过绘制电路原理图,温故了PROTEL软件,提高了我的动手设计能力。电路焊接过程中,通过每个对模块的焊接和测试,极大地提高了我动手分析解决问题的能力。 本设计通过两片AT89C52分别控制数模转换芯片ADC0809与电机驱动控制芯片构成数据采集转换电路与电机驱动控制电路实现光源的自适应控制。同时又利用单片机AT89C52内部计时器,节约了大量资源。但是,由于存在步进电机转角度数精度不高、手工制作的实验装置的不规整等非线性、ADC0809数据转换不够精确等问题,所以存在误差,所以本设计还有待继续研究和改进。 在本次课程设计中,通过和队员之间的合作,使得我们能顺利完成设计任务,体会到了合作的力量,增强了我团队合作意识,在方案选择和电路原理图的设计过程中,感谢老师的悉心指导,才能顺利地完成设计,节省了很多时间来应付更大的障碍。特在此忠心感谢我的指导老师蒋建春老师!五、 参考文献1 张毅刚.单片机原理及应用M.北京:高等教育出版社,2010.5.2 ADC0809中文资料. 3 AT89C52 中文资料. 4 ULN2003中文资料. 六、 附录1.系统整体电路图优酷视频地址: 2.源程序1(数据采集)#include #define uint unsigned int#define uchar unsigned charuchar code LEDData=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f;uchar code pip8 = 0x0f,0x1f,0x2f,0x3f,0x4f,0x5f,0x6f,0x7f; /通道选择uint buffer8=0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00; /数据存放char charset10 = 0,1,2,3,4,5,6,7,8,9;sbit P25=P25;sbit P26=P26;sbit P24=P24;sbit OE = P10;sbit EOC = P11;sbit ST = P12;sbit CLK = P33;uchar i=0;uchar s6 = |, ,=, , , ;void long_char(uchar l,char *s) *(s+3) = charsetl/100;*(s+4) = charsetl%100/10;*(s+5) = charsetl%10;void DelayMS(uint i) /延时iMSuchar x,j;for(j=0;ji;j+)for(x=0;x=8)?0:i; OE = 0; if(buffer2buffer3+10) /通道比较 P26=1; P25=1; P24=1; else if(buffer2buffer3-10)&(buffer2buffer1+10) P26=0; P25=0; P24=1; else if(buffer4buffer1-10)&(buffer4buffer1+10) P24=0; 3.源程序2(电机驱动)#include #define uchar unsigned char#define uint unsigned int sbit Y1 = P32; /上接控制线P26sbit Y2 = P33; /上接控制线P25sbit Y3 = P34;/上接控制线P24uchar code B_Rotation8=0x08,0x0c,0x04,0x06,0x02,0x03,0x01,0x09; /电机1逆时钟旋转相序表uchar code F_Rotation8=0x09,0x01,0x03,0x02,0x06,0x04,0x0c,0x08; /电机1正时钟旋转相序表uchar code CCW28=0x80,0xc0,0x40,0x60,0x20,0x30,0x10,0x90;/电机2逆时钟旋转相序表uchar code CW28=0x90,0x10,0x30,0x20,0x60,0x40,0xc0,0x80;/电机2顺时钟旋转相序表void Delay(uint i)uchar x,j;for(j=0;ji;j+)for(x=0;x=148;x+);void main() uchar i=0; while(Y3=1) if(Y1=1&Y2=1) Delay(20); if(Y1=1&Y2=1) P2 = B_Rotationi; /电机1逆时针转动i+;if(i=8) i=0;else if(Y1=1&Y2=0) Delay(20) ; if(Y1=1&Y2=0) P2 = F_Rotationi; /电机1顺时针转动 i+; if(i=8) i=0;else if(Y1=0&Y2=0) Delay(20); if(Y1=0&Y2=0) P2 = CW2i; /电机2逆时针转动i+;if(i=8) i=0;else if(Y1=0&Y2=1) Delay(20) ; if(Y1=0&Y2=1) P2 = CCW2i; /电机2顺时针转动 i+; if(i=8) i=0; 31
展开阅读全文
相关资源
相关搜索

最新文档


当前位置:首页 > 商业管理 > 营销创新


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!