ionicons-v5-f

基于单片机太阳能光伏充电系统设计

课程名称:电子系统设计(含单片机及微机系统)

实验题目:基于单片机太阳能光伏充电系统设计

课程简要信息

电子系统综合设计,20学时,航弹、航材、四站等相关专业,大二下学期

实验内容与任务

基础任务:

利用光电反应将太阳能转换成电能再利用稳压保护电路、处理成适合的电压为充电电池充电,功能要求如下:

  1. 太阳能光伏充电系统是以单片机为核心部件的控制系统,充分地利用太阳能充电板给电池充电,利用软件编程,最终实现各项要求;

  2. 满足充电条件时,充电指示灯点亮;不满足充电条件,充电指示灯熄灭;当充电电池电压低于3V时,报警指示灯闪烁。

  3. 利用A/D模数转换器采集充电电池的电压并在液晶显示屏上显示充电电压值以及充电时间。

扩展任务:

  1. 加入过压充电保护系统,电压超过3.7V能断开充电,避免电池过度充电而损坏。

实验过程及要求

知识储备:

  1. 学习单片机的硬件结构和软件编程方法,对单片机的工作方式进行认知;

  2. 了解外围设备比如传感器、液晶屏、模数转换、蜂鸣器等各种芯片的硬件电路与结构功能,以及常用输入输出接口电路连接;

设计电路与器件选择:

  1. 掌握太阳能电池板的工作原理与基本特性,合理选择适合实验要求的光电池,设计并制作太阳能电池充电电路,并利用稳压保护电路给充电芯片提供电源;

  2. 对系统进行模块化设计,包括主控制模块、太阳能充电电路模块、充电电压AD采集电路模块、液晶显示模块和电源模块等;每个模块均可设计多个执行方案,比较各方案的优劣,从逻辑功能的实现,对数据处理速度的要求,功耗兼容性以及经济成本等多方面确定适合系统的最佳方案 ;

  3. 对选择符合实验要求的器件进行分模块调试,测试其功能;

程序设计与参数确定:

  1. 根据系统框图,利用Altium Designer或者protel99绘图软件设计电路原理图;

  2. 利用keil 4软件编写相关程序,上位机通过USB接口将程序烧至开发板进行测试;

观察现象与测试数据:

  1. 观察太阳能光伏充电系统充电过程是否符合实验要求,在此基础上反复进行调试,修改程序参数;

结果分析与方案优化

  1. 考虑锂电池充电时温度过高造成的系统误差以及控制误差,根据测试情况及时修改完善设计方案;

  2. 可考虑加入电能存储设置,对天气状况不好情况时进行使用,或将系统闲置时太阳能板转化的电能存储起来,作为电源给别的设备使用,进一步对系统进行多功能优化。

实验总结:

  1. 撰写实验总结报告,并通过分组讨论,学习交流不同解决方案的特点。

相关知识及背景

太阳能光伏充电系统设计的来源是将太阳能转换成电能,主要解决的技术问题是如何将太阳能转换成能够充电的电能。化石能源的日益枯竭、人们对环境保护问题的重视程度也在不断提高,寻找洁净的替代能源问题变得越来越迫切。太阳能作为一种可再生能源它具有取之不尽、用之不竭和清洁安全等特点,因此有着广阔的应用前景,光伏发电技术也越来越受到人们的关注,随着光伏组件价格的不断降低和光伏技术的发展,太阳能光伏发电系统将逐渐由现在的补充能源向替代能源过渡。 

迫于全球性日益严重的资源短缺和环境污染使得光伏产业的发展不仅仅是一个经济问题更是一个环境保护和能源替代的问题。目前光伏电池主要应用在并网和未连网的大规模发电领域而消费类产品的应用实例非常少,如目前还没有真正有效的利用太阳能充电的电池.因此太阳能作为一种没有任何污染的易取的绿色能源若能应用到消费类产品中对于改善地球的整体的能源状况和环境有着非常重要的意义。

教学目的

在对单片机硬件技术平台学习和了解的同时,构建太阳能光伏充电系统,培养设计并实现学生掌握自动控制的能力。本设计的指导思想就是利用光电反应将太阳能转换成电能再利用稳压保护电路、处理成适合的电压为充电电池充电。本设计的主要设计内容是太阳能板的选择、充电控制电路的设计、电压电流的控制。灵活应用机电等相关学科的理论知识,联系实际电路设计的具体实现方法,达到理论与实践的统一。

实验教学与指导

本实验的过程是一个比较完整的工程实践,需要经历学习研究、方案论证、系统设计、实现调试、测试标定、设计总结等过程。在实验教学中,应在以下几个方面加强对学生的引导:

  1. 太阳能系统构建时,学习了解充电系统的几大模块,例如主控制模块、太阳能充电电路模块、充电电压AD采集电路模块、液晶显示模块和电源模块等等。熟悉各个模块之间的关系,结合系统所要实现的功能进行设计制作;

  2. 掌握单片机编程的基础语言,熟悉各器件的基本参数,对充电系统所要完成的工作有初步规划然后进行编程,烧入程序后指导学生进行多次调试,以达到实验要求;

  3. 创建模拟实验环境,对系统处于不同光照强度下(阳光充足、阴天、黑暗)实现不同充电功能进行实验并调试,以达到最佳效果;

  4. 鼓励学生发散思维,引导学生对系统不足之处进行深入思考,提出过压充电保护的思想,在后续实验扩展中可以修改完善系统方案;

  5. 在程序设计方面,紧紧围绕 “红外测温” 这一主要功能,加强学生在对温度数据接收及显示部分的程序设计的理解,引导学生根据温度值的计算,运用不同的方法进行程序设计,因为这关乎整个系统的设计精度,最后在调试阶段择优选择;

  6. 在实验完成后,可以组织学生以项目介绍、技术要求、演示讲解的形式进行交流,了解不同解决方案及其特点,拓宽知识面。

在设计中,要注意学生设计的规范性,如系统结构与模块构成,模块间的接口方式与参数要求;在调试中,要注意工作电源、参考电源品质对系统指标的影响,电路工作的稳定性与可靠性;在测试分析中,要分析系统的误差来源并加以验证。

实验原理及方案

  1. 系统结构

  1. 电路原理图

  1. 实现方案

硬件系统:

① 主控制模块

主控制最系统电路如图1所示。单片机最小系统包括单片机、复位电路、时钟电路构成。STC89C52 单片机的工作电压范围:4V-5.5V,所以通常给单片机外界5V直流电源。连接方式为单片机中的40脚VCC接正极5V,而20脚VSS接电源地端。

复位电路就是确定单片机的工作起始状态,完成单片机的启动过程。单片机接通电源时产生复位信号,完成单片机启动确定单片机起始工作状态。当单片机系统在运行中,受到外界环境干扰出现程序跑飞的时候,按下复位按钮内部的程序自动从头开始执行。一般有上电自动复位和外部按键手动复位,单片机在时钟电路工作以后,在RESET端持续给出2个机器周期的高电平时就可以完成复位操作。本设计采用的是外部手动按键复位电路,需要接上上拉电阻来提高输出高电平的值。

时钟电路好比单片机的心脏,它控制着单片机的工作节奏。时钟电路就是振荡电路,是向单片机提供一个正弦波信号作为基准,决定单片机的执行速度。XTAL1和XTAL2分别为反向放大器的输入和输出,该反向放大器可以配置为片内振荡器。如采用外部时钟源驱动器件,XTAL2应不接。因为一个机器周期含有6个状态周期,而每个状态周期为2个振荡周期,所以一个机器周期共有12个振荡周期,如果外接石英晶体振荡器的振荡频率为12MHZ,一个振荡周期为1/12us。

图1 单片主控电路

② 显示模块电路

显示模块采用LCD1602液晶显示器,能够清晰的在液晶上显示字符和数字,看到能让人感觉到舒服感。液晶的命令操作脚是RS、RW、EN接在单片机的P1^4、P1^5、P1^6脚。,数据脚D0~D7分别接单片机的的P0口。具体电路图如图2所示:

图2液晶显示电路

③ 充电电压AD采集电路

太阳能光伏充电系统利用ADC0832采集充电电压经过R4和R5电阻分压单片机运算分析后在液晶上把充电电压值示出来。具体电路如图3所示:

图3电池电压采集电路

④ 太阳能充电模块电路设计

太阳能光伏充电系统的充电电路是太阳能充电板在阳光的照耀下产生电荷,用1000uF电容存储太阳能电池板的电荷,经过LM1117-5稳压芯片给TP4056芯片提供电源和充电电源。CE为高电平时,BAT脚为高电平给电池充电,当VCC于BAT管脚的电压差小于30mv时,TP4056将进入低功耗的停机模式,BAT引脚电流小于2MA,CHRG脚为充电状态指示脚。充电时,LED2指示灯点亮,当充电完成后,指示灯熄灭。具体电路图如图4所示:

图4太阳能充电模块电路图

⑤ 电源部分的设计

太阳能光伏充电系统可采用3节1.5 V干电池共4.5V做电源,经过实验验证系统工作时,单片机、传感器的工作电压稳定能够满足系统的要求,而且电池更换方便。电源接口电路如图5,其中DC5V为电池接口,SW1为电源开关,C1和C2为电源的滤波电容。

图5电源接口电路

软件系统:

① 程序结构分析

本红外测温系统的软件设计采用模块化的设计思想,这样就把一个复杂的软件设计分成几个相对简单的部分分别予以解决。因为该系统完成的功能是测温,所以对温度数据接收及显示部分的程序设计做了详细叙述,而对其它各模块做了相应简要的介绍。

② 系统程序流图

当红外测温仪接通电源时,STC89C52单片机自动复位,开始运行该程序。该程序首先对STC89C52初始化。然后给出开机显示,接着判断是否有键输入,若没有键输入,则继续判断;若有键输入,则判断是否是红外测温。若不是就返回开机显示,是则进行红外测温,接收数据,并将计算的温度值显示出来,如果是环境温度通过数码管前四位显示,目标温度用后四位显示。并等待结束测温命令。再判定是否结束温度测量,若没则继续测温,若收到结束命令则返回开机显示,重新判断。具体工作的流程图如下图6:

图6 主程序流程图

③ 红外测温程序模块

该红外测温模块的数据输出信号和脉冲信号分别接单片机P1.0,P1.1口,测温控制端接P1.2口。它的程序流程图如图7所示,此模块首先定义一个字符型数组用于存放读取到的一帧数据,然后启动测温,读取数据,数据是在脉冲的下降沿一位一位传送的。把五个字节数据都读完后判断第一个字节是否为0x4c或0x66并且第五个字节为0x0d,若是则计算温度值返回,否则继续读取数据。

图7 红外测温流程图

在此红外测温仪的软件设计中,温度值的计算也是一个非常重要的部分,它关系到整个产品的设计精度,因此把它的温度数据读取与计算用单独的程序给出,其流程图如图8。因为红外测温模块的数据是一位一位地送入单片机的,所以用双重循环,内循环接收一个字节的数据,外循环接收五个字节的数据。

图8 读测量数据流程图

④ 部分源程序

#include <reg52.h>

//#include <string.h>

#define uchar unsigned char

#define uint unsigned int

#define LCD_PINDATA P0 //数据端口定义 P2

sbit RS = P1^4; //RS P0^7

sbit RW = P1^5; //RW P0^6

sbit E = P1^6; //E P0^5

sbit CS = P1^2;

sbit Clk = P1^1;

sbit DATI = P1^0;

sbit DATO = P1^0;

sbit State_led = P3^7; //状态指示灯驱动端口==P3^4

sbit BUZZER = P1^2; //蜂鸣器驱动端口==P1^2

sbit Reduc = P1^7; //按键键输入端口==P1^7

sbit Add = P3^0; //按键加输入端口==P3^1

/************************************************

** 函数名称 : Delay(uint T)

** 函数功能 : 延时函数

** 输 入 : T--延时倍数 大小--0~65535

** 输 出 : 无

** 说 明 :

************************************************/

void Delay(uint T)

{

uchar i;

for(T;T>0;T--)

for(i=200;i>0;i--);

}

/************************************************

** 函数名称 : WriteCOMDATA(uchar LCD_DATA,uchar N)

** 函数功能 : LCD1602写指令、数据函数

** 输 入 : LCD_DATA:指令或者数据

N:指令方式还是数据方式

N=0时,LCD_DATA为指令,N=1时,LCD_DATA为数据

** 输 出 : 无

** 说 明 :

************************************************/

void WriteCOMDATA(uchar LCD_DATA,uchar N)

{

Delay(10);

E=1;

RW=0;

RS=N;

LCD_PINDATA=LCD_DATA;

E=0;

}

/************************************************

** 函数名称 : void LCD_init(void)

** 函数功能 : LCD1602初始化操作

** 输 入 : 无

** 输 出 : 无

** 说 明 :

************************************************/

void LCD_Init(void)

{

WriteCOMDATA(0x01,0);

Delay(500);

WriteCOMDATA(0x38,0);

Delay(10);

WriteCOMDATA(0x06,0);

Delay(10);

WriteCOMDATA(0x0c,0);

Delay(10);

}

/************************************************

** 函数名称 :void WriteChar(uchar Row,uchar Col,uchar Num,uchar *pBuffer)

** 函数功能 :在任意位置写指定个字符

** 输 入 :Row : 要写的字符所在的行,只能为1或2;

Col : 要写的字符所在的列,只能为0---15

Num : 要写字符的个数

pbuffer : 要写字符的首地址

** 输 出 :无

** 说 明 :

************************************************/

void WriteChar(uchar Row,uchar Col,uchar Num,uchar *pBuffer)

{

uchar i;

if(Row==1)Row=0x80+Col;

else Row=0xC0+Col;

WriteCOMDATA(Row,0);

for(i=Num;i!=0;i--)

{

WriteCOMDATA(*pBuffer,1);

pBuffer++;

}

}

/****************************************************************************

函数功能:AD转换子程序

入口参数:CH

出口参数:dat

****************************************************************************/

unsigned char adc0832(unsigned char CH)

{

unsigned char dat = 0x00; //AD值

unsigned char i,test,adval;

adval = 0x00;

test = 0x00;

Clk = 0; //初始化

DATI = 1;

_nop_();

CS = 0;

_nop_();

Clk = 1;

_nop_();

if ( CH == 0x00 ) //通道选择

{

Clk = 0;

DATI = 1; //通道0的第一位

_nop_();

Clk = 1;

_nop_();

Clk = 0;

DATI = 0; //通道0的第二位

_nop_();

Clk = 1;

_nop_();

}

else

{

Clk = 0;

DATI = 1; //通道1的第一位

_nop_();

Clk = 1;

_nop_();

Clk = 0;

DATI = 1; //通道1的第二位

_nop_();

Clk = 1;

_nop_();

}

Clk = 0;

DATI = 1;

for( i = 0;i < 8;i++ ) //读取前8位的值

{

_nop_();

adval <<= 1;

Clk = 1;

_nop_();

Clk = 0;

if (DATO)

adval |= 0x01;

else

adval |= 0x00;

}

for (i = 0; i < 8; i++) //读取后8位的值

{

test >>= 1;

if (DATO)

test |= 0x80;

else

test |= 0x00;

_nop_();

Clk = 1;

_nop_();

Clk = 0;

}

if (adval == test) //比较前8位与后8位的值,如果不相同舍去。若一直出现显示为零,请将该行去掉

dat = test;

_nop_();

CS = 1; //释放ADC0832

DATO = 1;

Clk = 1;

return dat;

}

************************************************

** 函数名称 : void main(void)

** 函数功能 : 主函数

** 输 入 : 无

** 输 出 : 无

** 说 明 :

************************************************/

void main()

{

uchar count,flag=0;

uint adc_val;

uchar baojing_val=32;

uchar disp[16]={"BAT: . V "};

LCD_Init();

State_led=1;

WriteChar(1,0,16,"Photoelectric CO"); //在第一行显示QQ里面的字符

while(1)

{

WriteChar(2,0,16,disp); //在第二行显示disp里面的字符

//disp[13]=baojing_val/10+0x30;

//disp[14]=baojing_val%10+0x30;

if(Reduc==0)

{

Delay(400);

//while(Reduc==0);

baojing_val--;

if(baojing_val<=0)baojing_val=0;

}

if(Add==0)

{

Delay(400);

//while(Add==0);

baojing_val++;

if(baojing_val>=99)baojing_val=99;

}

if(adc_val<baojing_val)

{

flag=1;

}

if(flag)

{

if(count>40 && adc_val>baojing_val)

{

flag=0;

count=0;

//RELAY=1;

State_led=1;

}

}

}

}


实验报告要求

实验报告是对一次实验的总结,要求独立完成,简明扼要、图表清晰。实验报告需要反映以下工作:

  1. 实验需求分析

  2. 实现方案论证

  3. 实验使用仪器与设备

  4. 电路设计与器件选择(硬件)

  5. 程序设计与参数确定(软件)

  6. 太阳能光伏充电系统测试(完成基本充电功能,在此基础上进行扩展功能实现)

  7. 对实验结果的分析讨论(分析系统不足之处,缩小系统误差和控制误差)

  8. 实验方法总结(总结解决问题达到实验要求的有效方式方法,完善实现方案)

10)实验注意事项与误差分析

11)心得体会与意见建议

考核要求与方法

实验考核采取实验过程结合实验报告进行综合评判,分制为百分制,具体分值分配如下:

1)实物验收:功能与性能指标的完成程度及完成时间(以调试组装完成为准)。(共40分,具体分值分配如下)

完成基本充电功能:在太阳光充足条件下正常充电,指示灯亮;不满足充电条件时,指示灯灭。当充电电池电压低于3V时,报警指示灯闪烁。(10分)

完成液晶功能显示:显示充电电压与充电时间(10分)

完成扩展功能:带过压保护功能,过充能切断电路(10分)

完成时间(10分)

2)实验质量:硬件组装完整性、程序设计准确简单流畅(20分)

3)自主创新:功能构思巧妙、电路设计创新、自主思考与独立实践能力(20分)

4)实验成本:是否充分利用实验室已有条件,材料与元器件选择合理性,成本核算与损耗。器件应选择满足条件、批量生产、性能稳定、可靠性强、价格低廉的产品。(10分)

5)实验报告:实验报告的规范性与完整性,完成实验报告的独立性(10分)

项目特色或创新

**项目特色:**太阳能光伏充电系统设计的来源是将太阳能转换成电能,主要解决的技术问题是如何将太阳能转换成能够充电的电能。太阳能作为一种可再生能源它具有取之不尽、用之不竭和清洁安全等特点,因此有着广阔的应用前景,光伏发电技术也越来越受到人们的关注,随着光伏组件价格的不断降低和光伏技术的发展,太阳能光伏发电系统将逐渐由现在的补充能源向替代能源过渡。 

该系统是由单片机最小系统、太阳能充电电路模块、充电电压AD采集电路模块、液晶显示模块和电源模块组成。太阳能光伏充电系统是太阳能充电板在阳光的照耀下产生电荷,存储太阳能电池板的电荷,经过稳压芯片稳压后给TP4056充电芯片提供电源和充电电池充电。充电时,充电指示灯点亮,当充电完成后,充电指示灯熄灭。利用ADC0832转换器采集充电电池的电压并在液晶LCD1602上显示充电电压值和充电时间。此项目制作简单,性价比高,性能稳定,适合学生进行一次较为系统的工程实践,从以往教学结果来看深受学生欢迎,成品率高,教学效果较好。

附件1 元件清单

LibRef Designator Comment Quantity
充电电池 BAT 180ma 1
电解电容 C1 470uF 1
瓷片电容 C2 104 1
电解电容 C3 10uF 1
瓷片电容 C4, C5 18pF 2
电解电容 C6 1000uF 1
排针 DC 5V Header 2 2P
液晶 LCD1602 LCD1602 1
发光二极管 LED1,LED2 3MM 2
排阻 R1 4.7K 1
电阻 R2,R4, R5 10K 3
电阻 R8 470 1
电阻 R3,R7, R6 2K 3
触点开关 RESET SW-PB 1
自锁开关 SW1 SW-SPDT 1
单片机座 U1 DIP-40 1
单片机 U1 STC89C52 1
A/D模数转换芯片 U2 ADC0832 1
稳压芯片3.3V U3 LM1117-5.0V 1
充电芯片 U4 TP4056 1
晶振 Y1 11.0592M 1
电池板 电池板 Component_1 1

附件2 实物图片

4
001.jpg4
002.jpg

有光照,正常充电(指示灯亮) 无光照,不满足充电条件(指示灯灭)

4
003.jpg4
004.jpg

液晶屏显示充电电压与时间 电路板背面

附件3 实验报告图片

4
005.jpg4
006.jpg

交流展示现场

akdqy2olrc.jpg
参赛选手信息表

案例提供单位 空军勤务学院基础部 相关专业 电工电子
设计者姓名 王婷 电子邮箱 cslgwt@163.com
移动电话 15150015076

通讯地址

(含邮编)

江苏省徐州市西阁街85号
设计者姓名 耿夫利 电子邮箱 429297475@qq.com
移动电话 13912009789

通讯地址

(含邮编)

江苏省徐州市西阁街85号
设计者姓名 吕继武 电子邮箱 429297475@qq.com
移动电话 13776786367

通讯地址

(含邮编)

江苏省徐州市西阁街85号
相关x课程名称 电子系统综合设计 学生年级 大二下学期 学时(课内+课外) 20学时

支撑

条件

仪器设备 数字万用表、微机、焊接工具及材料等
软件工具 Keil4、Altium Designer、protel99
主要器件 单片机STC89C52、A/D模数转换芯片ADC0832、稳压芯片LM1117

获奖信息

获奖等级 一等奖
年份 2018

作品信息

作者信息

作者
王婷,耿夫利,吕继武
学校
空军勤务学院

电工电子实验教学资源平台 苏ICP备09069895号-19