基于STC12C5A60S2自动太阳能跟踪器的设计
   来源:现代电子技术     2021年01月24日 23:15

基于STC12C5A60S2的自动配料控制系统设计

张树人+周景雷

摘 要: 在此阐述了利用光敏电阻寻找直射太阳的原理,以STC12C5A60S2为控制核心,设计了一种自动太阳能跟踪器。太阳照射情况通过太阳能电池板4边上的4个光敏电阻测得,经过放大后输送到单片机,在单片机内由软件进行分析计算,得出电池板需要偏移的方向和角度,最后通过2个伺服电机对电池板左右和上下偏移进行控制,从而提高了转化效率。

关键词: STC12C5A60S2; 自动太阳能跟踪器; 光敏电阻; 转化效率

中图分类号: TN919?34; TP273 文献标识码: A 文章编号: 1004?373X(2015)08?0142?03

Design of automatic solar tracker based on STC12C5A60S2

ZHANG Shu?ren, ZHOU Jing?lei

(College of Jiang?zheng Machine and Electronic Engineering, Heze University, Heze 274015, China)

Abstract: The principle to look for the direct sun by using photosensitive resistance is expounded in this article. An automatic solar tracker taking the STC12C5A60S2 as its core was designed. The suns irradiation status is measured by the four photosensitive resistances embedded on four sides of the solar panel, sent to the single chip microcomputer (SCM) after amplification, and then analyzed and calculated in the SCM by software to get deviation direction and angle that the panel needs to be moved. At last, two servo motors are adopted to control panels left?right and up?down migration, and improve the luminous efficiency.

Keywords: STC12C5A60S2; automatic solar tracker; photosensitive resistance; luminous efficiency

进入21世纪,随着工业等各行各业的迅速发展,化石燃料的使用量在极具增加,人们不得不面临两个严峻的现实——资源日益短缺和生态环境极具恶化。为了缓解这些问题世界各国都采取了一系列政策和措施,来大力扶持和发展节能环保产业,其中太阳能电池板就是一个重要的领域。由于不同季节、地区、时间段太阳光强最强点总是变化的,以及其他不确定因素的影响,在利用太阳能时,自然而然地就出现了一个问题,那就是电池板如何自动跟踪太阳直射,使得转化效率最高,经过几年的研究,已经取得了不错的成绩[1?3]。笔者根据自己的经验设计了一种太阳能自动跟踪器,取得了不错的效果。

1 系统组成

为解决上述问题,本设计采用对光强敏感的光敏电阻检测太阳光强最强点,根据多个光敏电阻检测最强光强的差值作为伺服电机的输入量,控制电池板两个自由度灵活准确偏转。工作原理如图1所示。该系统时刻检测太阳与光敏传感器的位置,并将检测到的信号经过放大输入到单片机,在单片内经过计算和分析得出太阳能电池板如何偏移及偏移的角度,该偏移信号由驱动电路驱动伺服电机,进而带动电池板进行偏转,到达最佳位置。实物示意图如图2所示。

2 控制系统设计

2.1 控制器

本装置控制系统核心控制器采用STC公司生产的单时钟单片机STC12C5A60S2,该器件是高速、低功耗、超强抗干扰的一代8051单片机,指令代码完全兼容8051,但速度较其提升8~12倍,60 KB FLASH程序存储器,1 280 B RAM数据存储器,E2PROM分为若干扇区,每个扇区含512 B,7路I/O口外部中断,4个16位定时器,3个时钟输出口,内部集成MAX810专用复位电路,2路PWM,8路高速10位A/D转换(250千次/s,即25万次/s)针对电机控制,强干扰场合。

自动太阳能跟踪器的基本控制方式主要有MCU(单片机)控制和PLC[4]控制等几种形式,相比其他而言MCU控制更具有简单、灵活的特点。而STC12C5A60S2是传统8051的升级版,控制上像8051一样简单,功能上却毫不逊色其他MCU,而且性价比特别高,综合考虑本设计选择STC12C5A60S2单片机作为控制核心。

2.2 光强信号采集及伺服电机控制

光敏电阻工作原理是基于内光电效应。在其受到光照时,内部产生的载流子参与导电,由于外加的电场,载流子会做漂移运动,电子流向电源正极,空穴流向电源负极,从而使其阻值迅速下降,光照消失后,由光激发产生的电子?空穴对将复合,其阻值也将恢复原值。

伺服电机可以使控制速度、位置精度非常精确,依靠脉冲来定位而且能快速响应,作为执行元件其具有始动电压、线性度高等特性。本设计伺服电机的控制信号来源于单片机的输出脉冲。

本设计光强采集采用灵敏度较高的光敏电阻,分布于电池板4个边沿的中心位置(图2中红色点),光强不同,则其阻值不同,单片机A/D采集的信号不同,转换出的数据亦不同,根据电池板上下光敏电阻的差值作为控制系统的输入量,经过程序算法计算出相应脉冲信号,由单片机输出,控制伺服电机1,调节电池板上下偏移。同理,左右控制由电池板左右光敏电阻差值计算。据此可以实现电池板灵活准确的跟踪太阳光强求出最强点,实现电池板的最大效率。信号处理电路如图3所示[5]。图中,R_Uin是电池板上部光敏电阻采集信号,R_Din是电池板下部光敏电阻采集信号,经过各自放大,再进行查分放大,得到输出信号Uout输送到单片机A/D采集口。限于篇幅,左右电路在此不再列举。

3 软件设计

限于篇幅,这里只给出A/D转换子程序、PWM配置子程序和左右偏移子程序。程序编译环境为Keil4[6]。

3.1 A/D转换子程序

光信号的采集使用4路高速A/D通道,使用多次采样求均值的方法提高数据的准确性。

//

uint get_adc(uchar n)

{ uint adc_data;

ADC_RES = 0; //清零

ADC_CONTR=ADC_POWR|ADC_SPEEDLL|n|ADC_START; //打开A/D转换电源,设定转换速度、通道号,A/D转换开始

_nop_();

_nop_();

_nop_();

_nop_(); //要经过4个CPU时钟的延时,其值才能够保证

被设置进ADC_CONTR 寄存器

while(!(ADC_CONTR&ADC_FLAG)); //等待转换完成

adc_data=ADC_RES; //转换结果计算,取8位结果

ADC_CONTR&=~ADC_FLAG;

//关闭A/D转换,ADC_FLAG位由软件清0

return adc_data; //返回ADC的值

}

//

float AD_work(uchar n)

{ float AD_val; //定义处理后的数值AD_val为浮点数

unsigned char i;

for(i=0;i<100;i++)

AD_val+=get_adc(n); //转换100次求平均值(提高精度)

AD_val/=100;AD_val=(AD_val*5)/256;

//A/D的参考电压是单片机上的5 V,所以乘5即为实际电压值

return AD_val;

}

3.2 PWM配置子程序

采用单片机内部自带的两路PWM输出控制该装置两个伺服电机的精确偏转,使电池板在两个自由度上灵活移动。限于篇幅,这里只给出控制左右偏移伺服电机的PWM程序。

void PWM_A(uchar y)

{ CR=1; //启动PCA计数器

CCAP0H=y; //占空比高8位控制

CCAP0L=y; //占空比低8位控制

while(!CCF0); //等待正脉宽结束

CR=0; //停止PCA计数器

}

3.3 左右偏移子程序

理论上同轴上的两个光敏电阻面对最强光源时,所得到的数据即A/D转换后所得的数值应该相等,但实际情况总存在误差,所以在同轴电阻数据求差时设定一极小误差值e,若同轴电阻数据差值在正负e内,则认为是最强光源点,伺服电机便可上下、左右控制电池板偏移到最强光源点。

//

if((AD_work(1)?AD_work(2))>=E)

//如果左边光敏电阻的A/D值减去右边光敏电阻的A/D值打入阈值

{ while((AD_work(1)?AD_work(2))<=e)

//用while语句实现舵机的连续转动,直至满足设定的条件

{ PWM_A(i); //舵机PWM输出

i++; //变量自加,实现舵机向左转动

if(i==0xff) //保护程序,防止溢出

{ i=0xff; //i最大值为0xFF 255 break; //跳出while循环

}

}

}

else if((AD_work(2)?AD_work(1))>=E)

//如果右边光敏电阻的ad值减去左边光敏电阻的ad值打入阈值

{ while((AD_work(2)?AD_work(1))<=e)

//用while语句实现舵机的连续转动,直至满足设定的条件

{ PWM_A(i); //舵机PWM输出

i??; //变量自加,实现舵机向右转动

if(i==0) //保护程序,防止溢出

{ i=0; //i最小值为0 break; //跳出while循环

}

}

}

else

{ PWM_A(i); //如果采集值变化在要求内,维持上一次值

}

4 结 语

随着太阳能的利用越来越广泛,对自动太阳能跟踪器的研究也越来越重要。本文以单片机STC12C5A60S2为控制核心,设计了一种太阳能自动跟踪器,能随着四季、一天早晚太阳直射不同情况进行实时调节,现场试验结果表明该控制器跟踪准确、转化效率高,有着明显的现实意义。

参考文献

[1] 伍春生,刘四洋,彭燕昌,等.基于PIC16F877A自动太阳能跟踪器的设计[J].现代电子技术,2007,30(20):147?149.

[2] 杜云峰.基于单片机的太阳能自动跟踪系统的研究[J].现代电子技术,2010,33(15):157?159.

[3] 王海鹏,郑成聪,徐丹,等.基于单片机的太阳能自动跟踪装置的设计与制作[J].科学技术与工程,2010,10(19):4651?4655.

[4] 罗维平.基于PLC的太阳能电池板自动跟踪系统的研究[J].电子技术与应用,2009(9):138?140.

[5] 童诗白.模拟电子技术基础[M].4版.北京:高等教育出版社,2006.

[6] 郭天祥.新概念51单片机C语言教程:入门、提高、开发、拓展全攻略[M].北京:电子工业出版社,2009.

文章 电池板 电阻