摘 要
随着我国经济的飞速发展,促使各种能源使用入不敷出,尤其是最主要的能源,煤炭石油资源不断消耗与短缺,因此人类寻找其他替代能源的脚步正在加快。而太阳能则具有无污染﹑可再生﹑储量大等优点,且分布范围广,拥有非常广阔的发展前景。但是太阳能利用效率较低,这个问题一直影响和妨碍着太阳能技术的推广和发展。
在太阳能发电中,太阳板受光面与太阳光线的角度是决定太阳能发电效率的关键因素。本设计的原理是利用传感器(光敏电阻)把接收到的光信号转换成电信号,然后经过信号处理及单片机控制后,由控制电路输出相应的控制数字信号驱动方位角调整机构和高度角调整机构实现相应的位置调整。
本课题选用STC89C51单片机作为智能单元,根据单片机的特点和所需实现的功能,着重完成了单片机外围硬件电路设计和对应的软件设计。
关键词 太阳跟踪; 单片机; 光敏
目 录
摘 要
Abstract
第1章 绪论
1.1 研究的背景和意义
1.1.1课题研究的目的和意义
1.2国内外的研究情况
1.3论文的主要研究内容
1.4本章小结
第2章 系统的总体设计
2.1太阳跟踪方式
2.1.1光电跟踪
2.1.2视日运动轨迹跟踪
2.2系统总体设计要求及分析
2.2.1系统总体设计要求
2.2.2系统总体设计分析
2.3本章小结
第3章 系统的硬件设计
3.1单片机控制电路
3.1.1复位电路
3.1.2晶振电路
3.2光电转换电路设计
3.2.1光电传感器
3.2.2光电转换电路工作原理及电路设计
3.3 AD转换模块电路设计
3.3.1AD转换模块
3.4步进电机驱动电路设计
3.4.1步进电机的介绍
3.4.2步进电机及其控制方式
3.4.3步进电机驱动电路
3.5单片机外围电路设计
3.6系统实物平台搭建
3.7本章小结
第4章系统软件设计
4.1按键部分子程序
4.2指示灯部分子程序
4.3主程序模数转换
4.4驱动电路子程序
4.5 AD电压采样子程序
4.6本章小结
第5章结 论
5.1总结
5.2不足与进一步改进
参考文献
谢 辞
附 录
第1章 绪论
1.1 研究的背景和意义
随着社会的飞速发展,人们保护环境的意识也随之提高,致力开发一些环保能源,比如,在风能,水力发电,太阳能等各种新型能源中,有很多专家学者都倾向于开发太阳能。风能、水能、潮汐能、生物质能等它们都属于可再生能源,而且都来自于太阳能,所以,太阳能是那些可再生能源中最主要的基本能源。太阳能是一种新型节能能源,它与普通的能源比较有四个特点: 第一、 太阳能的总量十分巨大:每年辐射到地球表面上的太阳能大约相当于130万亿吨煤碳燃烧的热量,并且跟据世界能源会议统计,世界已经探明可着手采煤炭储量总计为15980亿吨,估计还能开采200年,全世界可以开采的化石能源总量约相当于33730亿吨原煤,由此可以说太阳能的总量是现今世界上可以开发的最大的能源。第二、太阳能具有无害性,太阳能是一种清洁无污染的能源,开发和利用太阳能不会污染环境,它是最干净的能源之一,在环境污染愈发严重的今天,这一点是非常可贵的,所以人类对太阳能的普及已经是重中之重。第三、太阳能具有普遍性:它是我们可以利用的最丰富的能源,自从地球上有生命诞生以来,它们就主要以太阳提供的辐射能生活,太阳光它普照大地,在地球上,无论哪里都有太阳能,尤其是对于交通不发达的村庄、岛屿和偏远地区更具有利用价值,也没地域限制无论陆地或海洋,到处都有,都可以直接开发利用,而且不需要开采运输。第四、太阳能还有长久性:科学家根据日前太阳产生的核能速率进行估算,得出结果,氢的储存量可以维持上百亿年,而且地球的寿命约为几十亿年,单从这一点上,就能够说明太阳能量是用之不竭的。由此可见,大规模开发和利用太阳能是我们面向未来,实现可持续发展的必经之路。
随着社会日益发展,人类对电的需求每年以很大的幅度增加,所以对能源的需求也极速增长。全世界对这些能源的消耗在1970年约为83亿吨的标准煤,但是在1995年,这种消耗竟然达到了140亿吨的标准煤,也就是说在25年间增长了69.7%,据这种增长速率,科学家预计,到2020年全世界对能源的消耗会高达195亿吨的标准煤。据公认的估计,假如人类对能源的需求一直以现在的速度增长,那么全世界的石油将在今后40年间被消耗完,还有天然气和煤也最多分别能维持60年和200年左右。不仅如此,我们大量使用化石能源已经开始造成全球气候变暖,燃烧煤碳会通过煤渣、烟尘释放出大量的有化学毒性的重金属和有放射性的物质,严重污染了我们的生活环境。 所以,利用和开发用新兴能源和可再生能源来渐渐减少和替代化石原料的使用,是保护生态环境、走经济社会可持续发展之路的重大措施。这个举措对于世界尤其是我国来说是十分迫切的。太阳能不仅可以再生产,不污染环境,而且最主要是总量可观,分布范围广泛,所以,它是世界上公认的理想新兴清洁替代能源。
1.1.1课题研究的目的和意义
根据现况,开发利用太阳能受到科学家们越来越普遍的重视,因此,它是各国都在研究的重大课题。它对人类来说是一种取之不竭而且能自由免费利用的绿色能源。我国的太阳能资源非常丰富,它作为一种清洁无污染的能源,发展前景也是非常广阔,太阳能发电已成为全球最受欢迎的利用新型能源的方法。但是也存在一些瑕疵,太阳能也有间歇性、光照方向和光照强度随时间不断变化等等问题,这样我们就对太阳能的采集和利用提出了更高的要求。目前,我们都不能充分利用太阳能资源,因为很多太阳能电池板的排列规律基本上是固定的,所以发电的效率特别低。根据实验,在太阳能光生电中,相同条件下,采用太阳跟踪发电的装置要比固定发电的装置的发电量高出35% ,因此在太阳能利用中,进行追踪是十分重要的!智能型自动跟踪太阳的装置设计是为了解决太阳能转换效率低的问题,并且为了更大限度的利用太阳能。太阳光照射的角度不能固定,要想达到最大的集热效果,太阳能电池板应和太阳光线保持垂直。本设计要求设计一种可以自动跟踪太阳的控制系统,使太阳能电池板可以随着太阳光线的移动而转动方向,保持太阳板与太阳光线基本垂直,以达到最大的发电效率,成本低,有较好的推广利用价值。
长期以来,世界能源主要消耗石油,煤炭等矿物燃料,但是这些都是不可再生能源数量有限,同时矿物燃烧时会产生大量的二氧化碳,污染环境。所以,根据现状,各国加大力度开发新能源。于是,太阳能这个清洁可再生能源已经受到许多国家的重视和利用,充分利用太阳能资源,有着深远的能源战略意义。
1.2国内外的研究情况
我国很多科学家也都陆续展开了这方面的研究。1994年《太阳能》杂志简述了单轴液压的自动跟踪器,完成了单向跟踪,国家气象局计量站在1990年研制出了FST型全自动太阳跟踪器,成功用于太阳辐射观测。2005年与以色列合作,在江苏省南京市建立成了第一座功率为75kw的太阳能塔式热发电示范电站,并成功运行发电。
此外,国外对太阳跟踪研究也有了突破性进展。二十世纪50年代,太阳能利用的领域出现了两项重大的技术突破:一是1954年在美国贝尔的实验室研制出6%实用型单晶硅电池,二是1955年以色列Tabor提出选择性吸收表面概念和理论并研制成功选择性太阳吸收涂层。这两项技术的突破为使太阳能的利用进入现代发展时期奠定了技术基础。此外,1997年美国的Blackace研制出了单轴的跟踪器,这种装置根据赤道坐标系下的太阳运行原理完成东西方向的自动跟踪,但南北方向通过手动的调节,接收器的接收效率提高了15%。1998年美国,加州成功的研制出了ATM两轴的跟踪器,使热接收率得到进一步提高。
据现阶段国内外科学家对太阳跟踪的研究情况来看,普遍采用单轴的跟踪方式。随着科学技术的发展,太阳跟踪装置会朝着双轴的跟踪方向发展,做到同步跟踪太阳,太阳能的接收率有了很大提高。
1.3论文的主要研究内容
本设计要求设计一种自动的跟踪太阳的智能控制系统,从而更有效的利用太阳能。所以采用双轴跟踪的方法对太阳进行跟踪,使太阳能接受装置能够始终垂直于太阳。
主要内容包括:
(1)分析太阳的变化规律,由此为基础制定比较合理的跟踪策略。
(2)分析所需要的传感器(光敏电阻)的功能及工作原理,设计光电转换电路。
(3)分析系统的硬件要求,选取符合条件的控制芯片,设计控制系统。
(4)设计控制方案,步进电机以及驱动电路。
(5)软件设计及实物平台搭建。
1.4本章小结
本章主要介绍了本课题的研究背景和意义,说明了太阳能是一种新型的清洁无污染能源,并且含量丰富,分布范围广,属于可再生能源,国内外已经开始开发利用太阳能了,并且受到国际上认可,对社会主义建设有着深远的战略意义。还介绍了本设计的总体思路和需要研究的内容。
第2章 系统的总体设计
2.1太阳跟踪方式
目前对太阳能利用最普遍的形式是通过太阳板将太阳能转换成热能,为了收集到尽可能多的太阳能,最好采取跟踪方式,使太阳板始终正对太阳。传统的跟踪方法主要采用以下两种方法:光电跟踪和视日运动轨迹跟踪,前者是闭环的随机系统,后者是开环的程控系统。
2.1.1光电跟踪
光电追踪装置利用光敏传感器,如硅光电管进行太阳光的检测。在这些装置中,光电管的安装靠近遮光板。通过调整遮光板的位置使遮光板对准太阳、硅光电池处于阴影区;当太阳西移时遮光板的阴影偏移,光电管受到阳光直射输出一定值的微电流,作为偏差信号,经放大电路放大,由伺服机构调整角度使追踪装置对准太阳完成追踪。光电追踪灵敏度高,结构设计较为简单;但受天气的影响很大,如果在稍长时间段里出现乌云遮住太阳的情况,太阳光线往往不能照射到硅光电管上,导致追踪装置无法对准太阳,甚至会引起执行机构的误动。
2.1.2视日运动轨迹跟踪
视日运动轨迹跟踪方式有两种可分为单轴和双轴。
(1)单轴追踪。单轴跟踪又可分为水平单轴跟踪、不同倾角单轴跟踪、最佳倾角跟踪。单轴追踪一般采用:①倾斜布置东西追踪;②焦线南北水平布置,东西追踪;③焦线东西水平布置,南北追踪。这三种方式都是单轴转动的南北向或东西向追踪。单轴追踪的优点是结构简单,但是由于入射光线不能始终与主光轴平行,收集太阳能的效果并不理想。
(2)双轴追踪。如果能够在太阳高度角和方位角的变化上都能够追踪太阳就可以获得最多的太阳能,全追踪即双轴就是根据这样的要求而设计的。双轴追踪又可以分为两种方式:极轴式全追踪和高度角方位角式全追踪。
2.2系统总体设计要求及分析
2.2.1系统总体设计要求
对于本设计课题的整体要求是造价低廉、结构简单、性能可靠、充分考虑其经济性。在结构设计过程中,避免复杂和浪费,力图简单整洁,并且要便于安装和维护。另一方面,在控制单元设计中,要充分考虑到系统的全天候要求,要选用耐用和抗干扰性强的执行单元,避免发生故障。
本设计所要达到的目的是提高太阳能的利用率,确定使用太阳板将太阳能转化为电能。通常对太阳能进行转换的时候,因为太阳是不停运动的,所以如果接收装置是固定的,则无法时刻做到与太阳光线垂直,只能在固定时间吸收某一部分太阳能,而在其他时间的吸收效率不高甚至根本无法吸收到太阳能,因此,如果使太阳的吸收效率提高,必须要使太阳能吸收装置与太阳运行轨迹一致,从而可以持续吸收太阳能。在本设计中采用的是双轴跟踪法对太阳进行实时跟踪,使太阳能板能够始终正对太阳,从而提高吸收效率。
设计要求如下:
- 此装置能根据天气条件进行工作,晴天自动跟踪,阴天或黑夜停止跟踪。
- 在进行跟踪时,能确保太阳板始终与太阳光线垂直,更充分吸收太阳能。
- 在本设计中,要求硬件部分和软件部分能准确合理的配合和工作。
2.2.2系统总体设计分析
本设计主要模块包括:单片机控制电路,光电转换电路,AD转换电路,电机驱动电路。本部分首先主要介绍各个模块的硬件电路,以及整体实物平台搭建部分的原理分析,还有软件设计方面的研究。
硬件方面:采用双轴跟踪系统,能够同时在方位角和高度角两个方向进行跟踪,由光电传感器,信号处理及控制电路,方位角及高度角调整机构组成。传感器把接收到的光信号转换成电信号,然后经过信号处理及控制电路后,由控制电路输出相应的控制信号驱动方位角调整机构和高度角调整机构实现相应的位置调整。
软件方面:以单片机芯片为控制核心部分,经过数模转换模块,最后通过AD电压采样控制步进电机的正反转。
综上所述,本设计采用的具体方案是阳光照在光敏电阻上,通过光电转换变成电压值,输入AD转换电路,进行DA转换,然后进行AD电压采样,输入控制核心单片机,经处理后最后经过驱动芯片从而控制步进电机的正反转,使太阳板始终与太阳光线垂直。
下图为系统的总体设计方案
图2.1系统总体设计方案
2.3本章小结
本章主要介绍了太阳跟踪系统的两种跟踪方式,分别简述了两种跟踪方式的特点和原理,并最终决定采用双轴自动跟踪的方式。此外,也大体上说明了总体设计方案和原理,总结出了流程图。
第3章 系统的硬件设计
3.1单片机控制电路
为了使用方便,系统要求可以进行在线改写,并能在断电情况下保存数据而不需要保护电源,同时使系统使用尽可能少的外围扩展芯片,提高系统运行的可靠性,要求使用的单片机具有片内电擦除可编程只读存储器,基于以上原因,选用STC89C51单片机。它是由复位电路和晶振电路构成。
STC89C51单片机是最早期也最典型的产品,STC89C51单片机学习板是一款基于8位单片机处理芯片STC89C52RC的系统。STC89C52RC是采用8051核的ISP(In System Programming)在系统可编程芯片,最高工作时钟频率为80MHz,片内含8K Bytes的可反复擦写1000次的Flash只读程序存储器,器件兼容标准MCS-51指令系统及80C51引脚结构,芯片内集成了通用8位中央处理器和ISP Flash存储单元,具有在系统可编程(ISP)特性,配合PC端的控制程序即可将用户的程序代码下载进单片机内部,省去了购买通用编程器,而且速度更快。STC89C52RC系列单片机是单时钟/机器周期(1T)的兼容8051 内核单片机,是高速/ 低功耗的新一代8051 单片机,全新的流水线/精简指令集结构,内部集成MAX810 专用复位电路。
有如下功能:
·8位CPU·4kbytes程序存储器(ROM) (52为8K)
·128bytes的数据存储器(RAM) (52有256bytes的RAM)
·32条I/O口线
·111条指令,大部分为单字节指令
·21个专用寄存器
·2个可编程定时/计数器
·5个中断源,2个优先级(52有6个)
·一个全双工串行通信口
·外部数据存储器寻址空间为64kB
·外部程序存储器寻址空间为64kB
·逻辑操作位寻址功能
·双列直插40PinDIP封装
·单一+5V电源供电
CPU:由运算和控制逻辑组成,同时还包括中断系统和部分外部特殊功能寄存器;
RAM:用以存放可以读写的数据,如运算的中间结果、最终结果以及欲显示的数据;
ROM:用以存放程序、一些原始数据和表格;
I/O口:四个8位并行I/O口,既可用作输入,也可用作输出
T/C:两个定时/记数器,既可以工作在定时模式,也可以工作在记数模式;
五个中断源的中断控制系统;
一个全双工UART(通用异步接收发送器)的串行I/O口,用于实现单片机之间或单片机与微机之间的串行通信;
片内振荡器和时钟产生电路,石英晶体和微调电容需要外接。最佳振荡频率为6M—12M。
图中各引脚连接:
LED1 LED2是两个指示灯分别代表自动模式和手动模式;TX RX是指串口通讯接口即程序下载接口;KEY1-KEY5是代表五个按键,其中一个是手动和自动模式之间的切换,另外四个是手动模式下,手动控制电机的上下左右四个方向的转动;X1 X2是连接晶振电路的;IN1-INT8是一个上拉排阻,它连接驱动芯片ULN2803,目的是提高输出电平,增加单片机的驱动能力;SDA SCL分别代表连接I²C总线的数据线和时钟线。
图3.1单片机最小系统
3.1.1复位电路
单片机的置位和复位,都是为了把电路初始化到一个确定的状态,一般来说,单片机复位电路作用是把一个例如状态机初始化到空状态,而在单片机内部,复位的时候单片机是把一些寄存器以及存储设备装入厂商预设的一个值。 单片机复位电路原理是在单片机的复位引脚RST上外接电阻和电容,实现上电复位。当复位电平持续两个机器周期以上时复位有效。复位电平的持续时间必须大于单片机的两个机器周期。具体数值可以由RC电路计算出时间常数。
图3.2复位电路
3.1.2晶振电路
3.2光电转换电路设计
3.2.1光电传感器
光敏电阻器是利用半导体的光电导效应制成的一种电阻值随入射光的强弱而改变的电阻器,当它受到光的照射时,半导体片(光敏层)内 就激发出电子—空穴对,参与导电,使电路中电流增强。
光敏电阻的工作原理是基于内光电效应。在半导体光敏材料两端装上电极引线,将其封装在带有透明窗的管壳里就构成光敏电阻,为了增加灵敏度,两电极常做成梳状。入射光消失后,由光子激发产生的电子—空穴对将复合,光敏电阻的阻值也就恢复原值。在光敏电阻两端的金属电极加上电压,其中便有电流通过,受到一定波长的光线照射时,电流就会随光强的增大而变大,从而实现光电转换。光敏电阻没有极性,纯粹是一个电阻器件,使用时既可加直流电压,也加交流电压。半导体的导电能力取决于半导体导带内载流子数目的多少。
3.2.2光电转换电路工作原理及电路设计
光电转换装置接收太阳光,将光信号转换成电信号,根据所采集到的信号,由单片机分析得最终控制的步进电动旋转与转向来达到太阳能板,结果始终是垂直于入射光线,从而达到利用太阳能的最高效率。其中光电检测A对左远离光线进行检测,当光线远离电池板时A检测会给单片机信号,单片机控制驱动芯片驱动电机M1正转使电池板跟随光线左转。光电检测B对右远离光线进行检测,当光线远离电池板时B检测到并实时传输给单片机信号,单片机控制驱动芯片驱动电机M1反转使电池板跟随光线右转。光电检测C与D对太阳垂直角度的变化进行检测,并将检测到的光线变化信号传输给单片机,单片机进行进一步处理后控制驱动芯片驱动电机M2的正反转,从而实现电池板垂直角度的调整。光敏电阻的分布如图所示
图3.3光敏电阻模型
3.3 AD转换模块电路设计
3.3.1AD转换模块
1.AD模块的组成
AD转换电路包括电压信号输入部分, AD转换部分和AD电压采样,信号输出部分。
2.AD转换原理及电路设计
由光电转换电路所得到的信号为模拟信号,所以采用AD转换器,将模拟信号转换为数字信号,然后通过单片机进行处理。模拟量可以是电压、电流等信号,但在AD转换前,输入到AD转换器的输入信号必须是电压信号。AD转换后,输出的数字信号可以有8位、10位、12位和16位等。在本设计中采用的是PCF8591芯片,PCF8591 是一种具有 I2C 总线接口的 8 位 A/D D/A 转换芯片,在与 CPU的信息传输过程中仅靠时钟线 SCL 和数据线 SDA 就可以实现。 I2C 总线是Philips (飞利浦)公司推出的串行总线,它与传统的通信方式相比具有读写方便,结构简单 ,可维护性好, 易实现系统扩展, 易实现模块化标准化设计, 可靠性高等优点。
PCF8591 为单一电源供电(2.5 6 V)典型值为 5 V,CMOS 工艺 PCF8591 有 4 路 8 位 A/D 输入,属逐次比较型,内含采样保持电路; 1 路 8 位 D/A 输出,内含有 DAC的数据寄存器 A/D D/A 的最大转换速率约为 11 kHz,但是转换的基准电源需由外部提供。 PCF8591具有4个模拟输入、1个模拟输出和1个串行I²C总线接口。PCF8591的3个地址引脚A0, A1和A2可用于硬件地址编程,允许在同个I²C总线上接入8个PCF8591器件,而无需额外的硬件。在PCF8591器件上输入输出的地址、控制和数据信号都是通过双线双向I²C总线以串行的方式进行传输。
图3.5 AD转换模块
3.4步进电机驱动电路设计
3.4.1步进电机的介绍
前面介绍了光电转换电路,AD转换电路,和单片机电路部分的设计,其最终的目的也就是要控制步进电机的正反转。步进电机是将电脉冲转化为角位移的开环控制执行机构。步进电机又称为脉冲电动机,当步进驱动器接收到一个脉冲信号, 它就驱动步进电机按设定的方向转动一个固定的角度,称为“步距角”,它的旋转是以固定的角度一步一步运行的。可以通过控制脉冲个数来控制角位移量,从而达到准确定位的目的;同时可以通过控制脉冲频率来控制电机转动的速度和加速度,从而达到调速的目的。其中步距角是对应一个脉冲信号,电机转子转过的角位移用θ表示。θ=360度(转子齿数J*运行拍数),以常规二、四相,转子齿为50齿电机为例。四拍运行时步距角为θ=360度/(50*4)=1.8度,八拍运行时步距角为θ=360度/(50*8)=0.9度。在负载能力范围内这些关系不因电源电压、负载大小、环境条件的波动而变化。因而可适用于开环系统中作为执行元件,使控制系统大为简化。步进电动机可以在很宽的范围内通过改变脉冲频率来调速;能够快速反转和制动。它不需要变换可直接将数字脉冲信号转换为角位移,很适合采用微型计算机控制。步进电动机是纯粹的数字控制电动机。它将电脉冲信号转变成角位移,即给一个脉冲信号,步动机就转动一个角度,因此作常适合于单片机控制,推动了步进电动机的发展,为步进电动机的应用开辟了广阔的前景。
3.4.2步进电机及其控制方式
本系统用到的是四相步进电动机,四相步进电动机是将电信号转变成角位移或线位移的开关控制元件,其转速、停止位置只与脉冲信号的频率和脉冲数有关,具有误差小,易控制等特点,广泛用于仪器设计。选用28BYJ48型四相八拍电机,电压为DC5V—DC12V。当对步进电机施加一系列连续不断的控制脉冲时,它可以连续不断地转动。四相步进电机可以在不同的通电方式下运行,常见的通电方式有单(单相绕组通电)四拍(A-B-C-D-A),双(双相绕组通电)四拍(AB-BC- CD-DA-AB-),八拍(A-AB-B-BC-C-CD-D-DA-A)。
3.4.3步进电机驱动电路
步进电机单靠交流供电或直流电源无法运动,必须与驱动电路同时使用时才能发挥其功能,步进电机驱动器(驱动电路)由决定换向顺序的控制电路(或称为逻辑电路)与控制电机输出功率的换相电路(或称为功率电路(power stage))组成。本图是步进电机驱动电路原理图。驱动电路通过ULN2803构成比较多的驱动电路,8个NPN达林顿晶体管,连接在阵列非常适合逻辑接口电平数字电路(例如TTL,CMOS或PMOS上/ NMOS)和较高的电流/电压,如电灯,电磁阀,继电器,打印锤或其他类似的负载,广泛的使用范围:计算机,工业和消费应用。所有设备功能由集电极输出和钳位二极管瞬态抑制。该ULN2803是专为符合标准TTL。该电路为反向输出型,即输入低电平电压,输出端才能导通工作。
基本工作原理:如果1脚输入高电平1,则16脚输出低电平0,反之一样!一般来说,步进电动机的工作电压是5V,对应芯片的9脚接步进电动机的工作电压5V。输入接上拉电阻即接单片机引脚。引脚输入低电平,ULN2003就输出高电平,正反转跟输入电平有关。电路图如图所示。
3.5单片机外围电路设计
1、电源模块电路
其中J1是指开关按键
图3.7电源电路
2、按键电路
其中S1是手动和自动模式之间的切换,默认为自动模式,S2,S3,S4,S5是手动模式下,利用手动按键来控制步进电机的正反转。
图3.8按键电路
3、指示灯电路
系统默认为自动模式,接通电源后LED1亮,当按下S1按键时,切换成手动模式,LED2亮。
图3.9指示灯电路
3.6系统实物平台搭建
本设计要求:,机械部分主要由电池板支架,转动轴,底座和步进电机构成,机械装置由电机驱动,可使电池板在水平方向360度和垂直方向0~80度之间自由旋转。控制部分主要由STC89C51单片机系统构成。 跟踪系统机械结构大致为用螺丝把一个控制方位的步进电机控制在底座上,然后在步进电机上安装转动轴,上面连接水平方向步进电机的底座。水平步进电机也被用螺丝控制在垂直方向的底座上,也安装了转动轴,并且连接着太阳板和光敏电阻等部件。机机械结构的工作原理为用2个步进电机分别对高度角和方位角2个方向进行控制。跟踪器的方位轴垂直地平面,控制水平方向;另一根轴与方位轴垂直称为俯仰轴,控制垂直方向,最后两个步进电机分别与单片机控制系统连接,具体是跟驱动芯片ULN2803连接,而此芯片又与AD转换芯片连接,从而控制步进电机。工作时,太阳跟踪器根据太阳运动的位置,通过方位轴转动改变方位角来改变水平方向,通过俯仰轴作俯仰运动改变接收平台的倾斜角来改变垂直方向,从而使太阳光线与太阳板垂直,以达到跟踪的目的。
3.7本章小结
本章介绍了本系统各部分硬件模块的简介和工作原理,主要模块有光电转换电路,AD转换模块,步进电机控制电路,其中还有一些小部件,比如,按键模块,LED显示模块,电源模块,复位电路,晶振电路。最后介绍了实物平台的具体搭建。
第4章系统软件设计
本设计采用的是51单片机,它是控制这个系统的核心部分,软件部分也由单片机来操作,其最终目的就是正确控制电机的正反转。本部分以单片机为核心部件将各个电路模块都连接起来,使我们更清楚设计本意。可设上下左右四个方向的光敏电阻的电压值分别为U1、U2、U3、U4,设精度为10
图4.1软件流程图
4.1按键部分子程序
按键电路默认状态为自动模式。
if(!ENTER)
{
Delay_ms(20);
while(!ENTER);
k++;
}
4.2指示灯部分子程序
LED1输出高电平说明此装置在自动模式下。
if(k%2 == 0)
{
LED1 = 1;
LED2 = 0;
4.3主程序模数转换
数模转换是本设计的关键部分,光电转换的电压值输入到AD模块后,经过PCF8951芯片里的电压采样,最后输出数字信号,再把信息传送给单片机,从而控制步进电机正反转。流程图如下
图4.2AD模块流程图
本设计AD转换模块用到的芯片是PCF8951,它有4路8位A/D输入,属于逐次比较型,内含采样保持电路,1路8位输出,内含有ADC数据寄存器。意思是芯片内有四个通道,所以分为以下程序的四种情况。
Case0是用来读取8951芯片第一通道所采集的到模拟量的值;0x41是控制发送的字节;IRcvByte(PCF8591)是用来接收读取AD转换的数据;本设计在AD模块中,利用芯片PCF8951,输入和输出都进行了电压保持采样,即系统内部自己进行了两次采样,所以最后输出电压得需要IRcvByte(PCF8591)*2,这才保证输入和输出数据相同,确保了数据的准确性;ADC是用来寄存每一通道输出的数据。以下通道同理。程序中,最后一个if语句是指在手动模式下的操作。
for(i=0;i<8;i++)
{
switch(AD_CHANNEL)
{
case 0: PCF8591_ISendByte(PCF8591,0x41);
AD_Up=PCF8591_IRcvByte(PCF8591)*2; //ADC0 模数转换1
break;
case 1: PCF8591_ISendByte(PCF8591,0x42);
AD_Down=PCF8591_IRcvByte(PCF8591)*2; //ADC1 模数转换2
break;
case 2: PCF8591_ISendByte(PCF8591,0x43);
AD_Left=PCF8591_IRcvByte(PCF8591)*2; //ADC2 模数转换3
break;
case 3: PCF8591_ISendByte(PCF8591,0x40);
AD_Right=PCF8591_IRcvByte(PCF8591)*2; //ADC3 模数转换4
break;
}
Send_Hex(Table,4);
if(++AD_CHANNEL>3)
{
AD_CHANNEL=0;
Table[0] = AD_Up;
Table[1] = AD_Down;
Table[2] = AD_Left;
Table[3] = AD_Right;
}
}
}
if(k%2 == 1)
{
LED1 = 0;
LED2 = 1;
AD_Up = 0; //上
AD_Down = 0;//下
AD_Left = 0;//左
AD_Right = 0;//右
}
4.4驱动电路子程序
设定10为精度值,本设计中一共有上下左右四个光敏电阻,在光照下就会产生电压,上边电压大于下边电压或者两边电压值差大于10,或者手动模式下按下向下的按键,水平电机反转,若下边电压大于上边电压或者两边电压值差大于10,或者手动模式下按下向上的按键,水平电机正转。同理,左边电压大于右边电压或者两者差值大于10,或者手动模式下按下向右的按键,方位电机右转,若右边电压大于左边或者两者差值大于10,或者手动模式下按下向左的按键,方位电机左转。具体程序如下:
if(((AD_Up<AD_Down)&&(AD_Down-AD_Up>10))||(!UP))//上转
{
for(i=0;i<10;i++)
{
for(j=0;j<4;j++)
{
P0=Motor_Up[j];
Delay_ms(10);
}
}
}
//
if(((AD_Up>AD_Down)&&(AD_Up-AD_Down>10))||(!DOWN))//下转
{
for(i=0;i<10;i++)
{
for(j=0;j<4;j++)
{
P0=Motor_Down[j];
Delay_ms(10);
}
}
}
/
if(((AD_Left<AD_Right)&&(AD_Right-AD_Left>10))||(!LEFT))//左转
{
for(i=0;i<10;i++)
{
for(j=0;j<4;j++)
{
P0=Motor_Left[j];
Delay_ms(10);
}
}
}
//
if(((AD_Left>AD_Right)&&(AD_Left-AD_Right>10))||(!RIGHT))//右转
{
for(i=0;i<10;i++)
{
for(j=0;j<4;j++)
{
P0=Motor_Right[j];
Delay_ms(10);
}
}
}
Delay_ms(100);//延时,可适当修改
}
}
4.5 AD电压采样子程序
将光电转换电路中测得的电压值通过AD转换模块转换为数值采样再存到单片机内存里,进行比较,AD电压采样可以决定采样的精度,下面介绍芯片内部原理。
- I2C总线数据位的传输
它是由串行数据线(SDA)和串行时钟线(SCL)组成。连接到总线上的每一个器件都有一个唯一的地址,而且都可以作为一个发生器或接收器,SDA和SCL都是双向线路,分别通过一个电阻连接到电源端。前提是连接到总线上的器件的SDA和SCL端必须是漏极或集电极开路型。I2C总线上的数据传输速率在标准模式下可达100Kb/s,快速模式可达400Kb/s,高速模式下可达3.4Mb/s。连接到总线的器件数量只由总线的电容(400PF)限制决定。
I2C总线上每传输一个数据位必须产生一个时钟脉冲,I2C总线上数据传输的有效性要求SDA线上的数据必须在时钟线SCL的高电平期间保存稳定,数据线的改变只能在时钟线为低电平期间。在标准模式下,高低电平宽度必须大于4.7us(即每次时钟线需延时4.7us后才能改变)。
2、I2C总线数据的传输
数据传输的字节格式要求:发送到SDA线上的每一个字节必须为8位,每次发送的字节数量不受限制,从机在接收完一个字节后向主机发送一个应答位,主机在收到从机应答后才会发送第二字节数据,发送数据时先发数据的最高位。
数据传输中的应答:相应的应答位由接收方(从机)产生,在应答的时钟脉冲期间,发送方(主机)应释放SDA线(使其为高电平)。在应答过程中,接收方(从机)必须将数据线SDA拉低,使它在这个时钟脉冲的高电平期间保持稳定的低电平。
#include <PCF8591.H>
bit PCF859_ack; /*应答标志位*/
/*******************************************************************
起动总线函数
函数原型: void Start_I2c();
功能: 启动I2C总线,即发送I2C起始条件.
********************************************************************/
void PCF8591_Start()
{
PCF8591_SDA=1; /*发送起始条件的数据信号*/
_Nop();
PCF8591_SCL=1;
_Nop(); /*起始条件建立时间大于4.7us,延时*/
_Nop();_Nop();_Nop();_Nop();
PCF8591_SDA=0; /*发送起始信号*/
_Nop(); /* 起始条件锁定时间大于4μs*/
_Nop();_Nop();_Nop();_Nop();
PCF8591_SCL=0; /*钳住I2C总线,准备发送或接收数据 */
_Nop();_Nop();
}
/*******************************************************************
结束总线函数
函数原型: void Stop_I2c();
功能: 结束I2C总线,即发送I2C结束条件.
********************************************************************/
void PCF8591_Stop()
{
PCF8591_SDA=0; /*发送结束条件的数据信号*/
_Nop(); /*发送结束条件的时钟信号*/
PCF8591_SCL=1; /*结束条件建立时间大于4μs*/
_Nop();_Nop();_Nop();_Nop();_Nop();
PCF8591_SDA=1; /*发送I2C总线结束信号*/
_Nop();_Nop();_Nop();_Nop();
}
/*******************************************************************
字节数据发送函数
函数原型: void SendByte(UCHAR c);
功能: 将数据c发送出去,可以是地址,也可以是数据,发完后等待应答,并对
此状态位进行操作.(不应答或非应答都使ack=0)
发送数据正常,ack=1; ack=0表示被控器无应答或损坏。
********************************************************************/
void PCF8591_SendByte(unsigned char c)
{
unsigned char BitCnt;
for(BitCnt=0;BitCnt<8;BitCnt++) /*要传送的数据长度为8位*/
{
if((c<<BitCnt)&0x80)PCF8591_SDA=1; /*判断发送位*/
else PCF8591_SDA=0;
_Nop();
PCF8591_SCL=1; /*置时钟线为高,通知被控器开始接收数据位*/
_Nop(); _Nop(); /*保证时钟高电平周期大于4μs*/
_Nop();_Nop();_Nop();
PCF8591_SCL=0;
}
_Nop();_Nop();
PCF8591_SDA=1; /*8位发送完后释放数据线,准备接收应答位*/
_Nop();_Nop();
PCF8591_SCL=1;
_Nop();_Nop();_Nop();
if(PCF8591_SDA==1)PCF859_ack=0;
else PCF859_ack=1; /*判断是否接收到应答信号*/
PCF8591_SCL=0;
_Nop();_Nop();
}
/*******************************************************************
字节数据接收函数
函数原型: UCHAR RcvByte();
功能: 用来接收从器件传来的数据,并判断总线错误(不发应答信号),
发完后请用应答函数应答从机。
********************************************************************/
unsigned char PCF8591_RcvByte()
{
unsigned char retc;
unsigned char BitCnt;
retc=0;
PCF8591_SDA=1; /*置数据线为输入方式*/
for(BitCnt=0;BitCnt<8;BitCnt++)
{
_Nop();
PCF8591_SCL=0; /*置时钟线为低,准备接收数据位*/
_Nop();_Nop(); /*时钟低电平周期大于4.7μs*/
_Nop();_Nop();_Nop();
PCF8591_SCL=1; /*置时钟线为高使数据线上数据有效*/
_Nop();_Nop();
retc=retc<<1;
if(PCF8591_SDA==1)retc=retc+1; /*读数据位,接收的数据位放入retc中 */
_Nop();_Nop();
}
PCF8591_SCL=0;
_Nop();_Nop();
return(retc);
}
/********************************************************************
应答子函数
函数原型: void Ack_I2c(bit a);
功能: 主控器进行应答信号(可以是应答或非应答信号,由位参数a决定)
********************************************************************/
void PCF8591_Ack(bit a)
{
if(a==0)PCF8591_SDA=0; /*在此发出应答或非应答信号 */
else PCF8591_SDA=1;
_Nop();_Nop();_Nop();
PCF8591_SCL=1;
_Nop();_Nop(); /*时钟低电平周期大于4μs*/
_Nop();_Nop();_Nop();
PCF8591_SCL=0; /*清时钟线,钳住I2C总线以便继续接收*/
_Nop();_Nop();
}
///
/*******************************************************************
DAC 变换, 转化函数
*******************************************************************/
bit PCF8591_DACconversion(unsigned char sla,unsigned char c, unsigned char Val)
{
PCF8591_Start(); //启动总线
PCF8591_SendByte(sla); //发送器件地址
if(PCF859_ack==0)return(0);
PCF8591_SendByte(c); //发送控制字节
if(PCF859_ack==0)return(0);
PCF8591_SendByte(Val); //发送DAC的数值
if(PCF859_ack==0)return(0);
PCF8591_Stop(); //结束总线
return(1);
}
/*******************************************************************
ADC发送字节[命令]数据函数
*******************************************************************/
bit PCF8591_ISendByte(unsigned char sla,unsigned char c)
{
PCF8591_Start(); //启动总线
PCF8591_SendByte(sla); //发送器件地址
if(PCF859_ack==0)return(0);
PCF8591_SendByte(c); //发送数据
if(PCF859_ack==0)return(0);
PCF8591_Stop(); //结束总线
return(1);
}
/*******************************************************************
ADC读字节数据函数
*******************************************************************/
unsigned char PCF8591_IRcvByte(unsigned char sla)
{ unsigned char c;
PCF8591_Start(); //启动总线
PCF8591_SendByte(sla+1); //发送器件地址
if(PCF859_ack==0)return(0);
c=PCF8591_RcvByte(); //读取数据0
PCF8591_Ack(1); //发送非就答位
PCF8591_Stop(); //结束总线
return(c);
}
4.6本章小结
本章主要介绍了整个系统中各个模块的软件设计及原理,还有编写的程序,主要模块的软件编程,比如,按键模块,LED灯显示模块,步进电机驱动模块,AD转换还有AD电压采样模块。具体解释如上。
第5章结 论
5.1总结
本设计采取了传统的硬件和软件相结合的开发方法,使用了STC89C51单片机作为整个系统的控制处理中心,它具有硬件设计方便,资源丰富,软件部分程序指令快速简单,驱动能力强等优点,保证了该系统反应的快速性和灵敏性。从资料的查找到电路的设计,从程序的编写到功能的基本实现,一路坎坷。在设计过程中不断的发现问题,同时也不断的解决问题,越来越发觉制作实物相比整体设计要难一些,实际制作过程中会遇到多种多样的问题,要通过不断的测试和实验来解决。
5.2不足与进一步改进
当然,本设计也存在很多不足之处比如程序算法的设计不尽完美,各样器件的参数不太准确等等,还有一些未发现的瑕疵之处,都需要在调试和实践之后进行许多的改进。而且不能粗心大意,一开始就因单片机一脚没连接导致单片机不起作用,浪费时间又浪费精力,因此,做任何事都要细心,要考虑的周全,不能因为一时的失败而丧失信心,从哪里跌倒了要从哪里爬起来,只有有了这样的精神,才会从问题中学到更多的知识,为我们以后更好的发展奠定了基础。
最后,本太阳能自动跟踪系统基本能满足设计的要求,能实现按照所预先设计的思想运转,各个模块电路也都运行正常,但是由于本人的知识和水平的有限,在机械设计部分知识的欠缺,使得本系统在这方面有很大的不足。如果此系统能够在机械设计上有较多改进,能够加上液晶显示模块的话,相信本系统将会有很大的改进,在性能上会有很大的提高。
[1]李申生.太阳能[M].北京:北京人民教育出版社,1988:12-14.
[2]王炳忠.太阳能—未来能源之星[M].北京:高教出版社,1990:20-21.
[3]a b Philibert,Cedric(2005).”The Present and Future use of Solar Thermal Energy as a Primary Source of Energy ”.IEA.Archived from the original on[M] 2011-12-12.
[4]言惠.太阳能21世纪的能源[J].上海大中型电机,2004,(04):16-18.
[5]陈维,李戬洪.太阳能利用中的跟踪控制方式的研究[J].能源工程,2003,(03):18-21.
[6] 孙茵茵,鲍剑斌,王凡.太阳自动跟踪器的研究[J].机械设计与制造,2005(7): 157-159
[7] 陈维,李戬洪.太阳能利用中的跟踪控制方式的研究[J].能源工程,2003,(03):18-21.
[8] 欧阳名三,余世杰,沈玉樑.采用单片机的太阳能电池最大功率点跟踪控制器[J]. 电子技术,2002(12):49-51
[9] 王雪文.太阳能电池板自动跟踪控制系统设计[J].西北大学学报(自然科学版). 2004,34(2):163-164.
[10]薛建国.基于单片机的太阳能电池自动追踪系统的设计[J].长春师范学院学报,2005,24(3):26-30.
[11]James F.Cox.Fundamentals of linear electronics:integrated and discrete. Cengage Learning. [M],91-. 26 June 2001[20 August 2011].
[12]朱定华.单片机原理及接口技术[M].北京:电子工业出版社,2001:25-27.
[13]周兴华.光敏器件[J].电子世界,1999,(12):53-54.
[14]范志刚.光电测试技术[M].北京:电子工业出版社,2004:24-26.
[15] 余泽通,宋长源.硅光电池板自动跟踪太阳机械装置的设计[J].新乡学院学报,2008(3):70-71
[16] 李建庚.一种智能型全自动太阳跟踪装置的机械设计[J].太阳能学报,2003,24(03):330-333.