吉林铁道职业技术学院电子制作职业技能大赛(论文)题目太阳能自动跟踪装置设计参赛人姓名王志会张卫国朱峰所在系电气工程系指导教师陈冬鹤完成时间2013年5月26日吉林铁道电子制作职业技能大赛设计报告题目:太阳能自动跟踪装置设计主要内容、基本要求等:◆主要内容:加强大学生动手操作能力,促进集体荣誉感。
◆基本要求:1,利用单片机控制实现太阳能电池板随着太阳(光源)的位置变化而调整自身相应的姿态,以达到太阳光能的最佳利用。
2,实现一定的姿态控制精度。
3,以低成本、低功耗完成设计并实现目标电路的组装。
◆主要参考资料:电路基础、电工技术、电子手工焊接、单片机原理及应用、传感器原理与应用。
完成日期:2013年5月26日指导教师:陈冬鹤实验组组长:王志会2013年 6 月 5 日太阳能自动跟踪装置研制目的人类正面临着石油和煤炭等矿物燃料枯竭的严重威胁,太阳能作为一种新型能源具有储量无限、普遍存在、利用清洁、使用经济等优点,太阳能光伏发电是改善生态环境、提高人类生存质量的绿色能源之一,但由于传统太阳能板方向固定,受光时间有限。
因此研制可随光移动的太阳能跟随系统。
一自动跟踪系统整体设计1.1 系统总体结构本系统包括光电转换器、步进电机、89C5系列单片机以及相应的外围电路等。
太阳能电池板可以360度自由旋转。
控制机构将分别对水平方向进行调整。
单片机加电复位后,首先由TRCT5000构成的定位系统对整个系统进行预置定位,然后单片机将对两光敏电阻采样进来的两个电平进行比较,电平有高电平和低电平两种,若两电平相等则电池板停止转动,若不等单片机将对两电平进行比较判定,驱动步进电机让太阳能板与之相对应转动,实现电池板对太阳的跟踪。
图1-1所示:1.2 光电转换器光电转换器接收太阳光,将光信号转换成电信号,利用lm339对电信号和基准电压进行比较,单片机根据采集来的信号进行分析比较,得出结果最终控制步进电动机的转动与转向来达到太阳能电池面板始终垂直于入射光线,从而达到最高效率的利用太阳能。
本设计的光敏器件选为光敏电阻。
利用光敏电阻在光照时阻值发生变化的原理,将两个完全相同的光敏电阻分别放置于一块电池板东西方向边沿处的下方。
如果太阳光垂直照射太阳能电池板时,两个光敏电阻接收到的光强度相同,所以它们的阻值相同,此时电动机不转动。
当太阳光方向与电池板垂直方向有夹角时,接收光强多的光敏电阻阻值减少,驱动电动机转动,直至两个光敏电阻上的光照强度相同,称为光敏电阻光强比较法。
其优点在于控制较精确且电路比较容易实现。
1.3 光电转换电路,下图1-3所示中光电转换电路是其中的一组,另一组电路与此相同。
当阳光正对太阳能板时,光敏电阻R1、R2都是高电阻,A、B两点光照相等。
四运放LM339的输出的电压相同,单片机收到的信号相等,所以单片机不控制电动机转动。
若阳光发生倾斜,使Rl被阳光射中呈低电阻,则A点输出电位比B点输出电位高。
单片机控制uln2003控制步进电机向R1倾斜。
反之则毅然。
图1-3二单片机及其外围电路2.1 单片机的选择及外围电路AT89C51是51系列单片机的一个型号,采用双列直插封装(DIP),有40个引脚。
2.2 外围电路电源管理部分电路由普通单片机或电脑USB输出口供5V电压。
三步进电动机及驱动电路3.1 步进电动机介绍步进电机其功用是将脉冲电信号变换相应的角位脉电号电动机就转动一个角度或前进一步。
因此非常适合单片机控制。
本实验采用永磁式步进电功机。
步进电机流程图电源步进电机驱动器图3-1步进电示意图四驱动电路4.1.uln2003高耐压、大电流复合晶体管IC—ULN2003概述与特点ULN2003 是高耐压、大电流复合晶体管阵列,由七个硅NPN 复合晶体管组成。
五系统的实现5.1 光敏电阻光强比较法利用光敏电阻在光照时阻值发生变化的原理,将两个完全相同的光敏电阻分别放置于一块电池板东西方向边沿处的下方。
如果太阳光垂直照射太阳能电池板时,两个光敏电阻接收到的光照强度相同,所以它们的阻值完全相等,此时电动机不转动。
当太阳光方向与电池板垂直方向有夹角时,接收光强多的光敏电阻阻值减小,驱动电动机转动,直至两个光敏电阻上的光照强度相同。
其优点在于控制较精确,且电路也比较容易实现。
其控制主要由以下三部分来完成:a)信号采集部分用光敏电阻实现信号采集的电路原理为桥式电路,电路的输出信号只与照射在两个光敏电阻上光强的相对值有关,不受外界环境的影响,增加了装置的抗干扰能力。
b)数据处理部分采用非倒向放大接法,由运算放大器及其外围电阻组成线性放大单元。
零电位调整单元以抵消零点漂移的直流信号。
因调零后包含一定量的负脉冲信号,用反相单元为下一级电路提供正电压信号。
对输入信号进行判断,当输出信号的强度大于一定值时,给下一级一个高电平信号;反之,提供低电平信号,这样能屏蔽一些微小信号的扰动,使系统的工作更稳定。
c)控制单元根据前一级送出的触发信号,控制电动机的工作状态。
由于继电器在实现逻辑过程中需要的吸合电流较大,会造成整体电路的耗电增大;另外,继电器的反应速度很慢,灵敏度不高,会造成设备整体灵敏度及精确度下降。
图4-5光敏电阻放置5.2 系统的流程图开机之后,上电复位,系统进行初始化,初始化之后,系统首先判断当时是白天还是黑夜,若是黑夜,则系统启用中断处理程序,进入等待状态,系统进入光电追踪模式。
系统主流程图:NY图5-2系统主流程图光敏电阻光强比较法流程图这部分的程序设计很简单,只需要单片机检测2个光敏电阻所对应的单片机的2个引脚的电位的高低,就可以判断当时太阳的朝向,并对电动机发出相应的命令,程序流程图如图5-3示:图5-3光敏电阻光强比较法流程图程序#include <reg51.h> //51芯片管脚定义头文件#include <intrins.h> //内部包含延时函数_nop_();#define uchar unsigned char#define uint unsigned intuchar code FFW[8]={0x01,0x03,0x02,0x06,0x04,0x0c,0x08,0x09}; //四相八拍正转编码uchar code REV[8]={0x09,0x08,0x0c,0x04,0x06,0x02,0x03,0x01};////四相八拍反转编码sbit K1 = P3^2; //正转sbit K2 = P3^3; //反转sbit K3 = P3^4; //停止sbit KK = P1^0; //定位sbit A = P1^1; //右位sbit BB = P1^2; //左位/********************************************************//*/* 延时t毫秒/* 11.0592MHz时钟,延时约1ms/*/********************************************************/ void delay(uint t){uint k;while(t--){for(k=0; k<125; k++){ }}}/**********************************************************/ void delayB(uchar x) //x*0.14MS{uchar i;while(x--){for (i=0; i<13; i++){ }}}/**********************************************************//********************************************************//*/*步进电机正转/*/********************************************************//*void motor_ffw(){uchar i;uint j;for (j=0; j<8; j++) //转1*n圈{if(K3==0) {break;} //退出此循环程序for (i=0; i<8; i++) //一个周期转45度{P2 = FFW[i]; //取数据delay(2); //调节转速}}} */void motor_ffw(){uchar i;// if(K3==0) // {break;} //退出此循环程序for (i=0; i<8; i++) //一个周期转45度{P2 = FFW[i]; //取数据delay(2); //调节转速}}/********************************************************//*/*步进电机反转/*/********************************************************//*void motor_rev(){uchar i;uint j;for (j=0; j<8; j++) //转1×n圈{if(K3==0){break;} //退出此循环程序for (i=0; i<8; i++) //一个周期转45度{P2 = REV[i]; //取数据delay(2); //调节转速}}} */void motor_rev(){uchar i;// if(K3==0) // {break;} //退出此循环程序for (i=0; i<8; i++) //一个周期转45度{P2 = REV[i]; //取数据delay(2); //调节转速}}/********************************************************** 主程序**********************************************************/main(){uchar rrr,rr,num=0;do{motor_ffw();}while(KK==0); //定位寻开始位置while(1){if(A==1&&BB==0){for(rr=0;rr<100;rr++){motor_rev(); //步进电机反转num++;if(num==99||A==0&&BB==0){num=0;break;}}for(rr=0;rr<100;rr++){motor_ffw(); //步进电机反转num--;if(num==0||A==0&&BB==0){break;}}}if(A==0&&BB==0){while(1){P2=0xf0;if(A!=0||BB!=0){break;}}}}/********************************************************/if(A==0&&BB==1){for(rr=0;rr<100;rr++){motor_ffw(); //步进电机正转num++;if(num==99||A==0&&BB==0){num=0;break;}}for(rr=0;rr<100;rr++){motor_rev(); //步进电机反转num--;if(num==0||A==0&&BB==0){break;}}}if(A==0&&BB==0){while(1){P2=0xf0;if(A!=0||BB!=0){break;}}}}/* while(1){if(K1==0){ while(1){motor_ffw(); //电机正转if(K3==0){break;} //退出此循环程序}}if(K2==0) {while(1){motor_rev(); //电机反转if(K3==0){break;} //退出此循环程序}}elseP2 = 0xf0;} *//********************************************************/。