世纪电源网社区logo
社区
Datasheet
标题
返回顶部
原创

[3篇]太阳能路灯控制器的设计

[复制链接]
查看: 14246 |回复: 16
1
jafck
  • 积分:4333
  • |
  • 主题:136
  • |
  • 帖子:1755
积分:4333
版主
  • 2011-7-2 11:50:14
太阳能路灯以太阳光为能源,白天充电、晚上使用,无需铺设复杂、昂贵的管线,可任意调整灯具的布局,安全节能无污染,充电及开/关过程采用光控自动控制,无需人工操作,工作稳定可靠,节省电费,免维护,太阳能路灯的实用性已充分得到人们的认可。本文介绍的基于单片机的太阳能路灯控制器的设计,对12V和24V蓄电池可以自动识别,能实现对蓄电池的科学管理,能指示蓄电池过压、欠压等运行状态,具有两路负载输出,每路负载额定电流可以达到5A,两路负载可以随意设置为同时点亮、分时点亮,单独定时等工作模式,同时对负载的过流、短路具有保护功能;具有较高的自动化和智能化程度。

  硬件电路组成及工作原理系统硬件结构框图太阳能路灯智能控制器以STC12C5410AD单片机为核心,外围电路主要由电压采集电路、负载输出控制与检测电路、LED显示电路及键盘电路等几部分组成的,结构框图如图1所示。电压采集电路包括:太阳能电池板和蓄电池电压采集,用于太阳光线强弱的识别以及蓄电池电压的获取。单片机的P3口的两位作为键盘输入口,用于工作模式等参数的设置。

  下面详细介绍系统中STC12C5410AD、电压采集与电池管理、负载输出控制与检测电路的设计与实现。


  STC12C5410AD单片机STC12C5410AD是STC12系列的单片机,采用RISC型CPU内核,兼容普通8051指令集,而且还有新的特点:片内含有Flash程序存储器10k,Data Flash数据存储器2k,RAM数据存储器512字节,同时内部还有看门狗(WDT);片内集成MAX810专用复位电路,集成了8通道10位分辨率的ADC以及4通道的PWM;具有可编程的8级中断源4种优先级,具有系统可编程(ISP)和应用可编程(IAP)等特点,片内资源丰富、集成度高、使用方便。STC12C5410AD对系统的工作进行实施调度,实现外部输入参数的设置、对蓄电池及负载进行管理,工作状态的指示等。为充分使用片内资源,本文所设置的参数写入Data Flash数据存储器内。键盘电路P3.4(T0)接F1键,该键用

  于设置状态的识别及参数设置3.5(T1)接F2键,该键用于自检及“加1”功能,根据程序流程,分别实现不同功能。电压采集与电池管理太阳能电池板电压采集,用于太阳光线强弱的判断,因而可以作为白天、黄昏的识别信号。同时本系统支持太阳能板反接、反充保护。

  蓄电池电压采集,用于蓄电池工作电压的识别。利用微控制器的PWM功能,对蓄电池进行充电管理。蓄电池开路保护:万一蓄电池开路,若在太阳能电池正常充电时,控制器将关断负载,以保证负载不被损伤,若在夜间或太阳能电池不充电时,控制器由于自身得不到电力,不会有任何动作。

  过充保护:充电电压高于保护电压(15V)时,自动关断对蓄电池的充电;此后当电压掉至维护电压(13.2V)时,蓄电池进入浮充状态,当低于维护电压(13.2V)后浮充关闭,进入均充状态。当蓄电池电压低于保护电压(11V)时,控制器自动关闭负载开关以保护蓄电池不受损坏。通过PWM充电电路(智能三阶段充电),可使太阳能电池板发挥最大功效,提高系统充电效率。本系统支持蓄电池的反接、过充、过放。

  负载输出控制与检测电路本系统设计了两路负载输出,每路的输出均有独立的控制和检测,具有完善的过流、短路保护措施。负载输出控制与检测电路如图2所示。


  负载过流及短路保护:设计了两级保护。第一级采用了R7(0.01Ω康铜丝)以及运放LM358、比较器LM393等器件组成的过流、短路检测电路配合单片机的A/D转换及外部中断响应来实现,这里使用了硬件+软件的方式,LM358的输出送P1.7(A/D转换)口,用作过流信号识别,当电流超过额定电流20%并维持30s以上时,确认为过流;短路电流整定为10A,响应时间为毫秒数量级。第二级采用了电子保险丝保护,当流经电子保险丝的电流骤然增加时,温度随之上升,其电阻大大增加,工作电流大幅降低,达到保护电路目的,响应时间为秒数量级,过流撤消或短路恢复后电子保险丝恢复成低阻抗导体,无须任何人为更换或维修。系统采用了两级保护措施后,在长达数小时时间负载短路实验后,控制器仍没出现电路烧毁现象。解决了用传统保险丝只能对电路进行一次性保护,一旦烧毁必须人为更换的问题,同短路后需手动复位或断电后重新开启的系统相比,也具有明显的优点,简化了维护,提高了系统的安全性能。

硬件设计中的注意点

  (1)感应雷保护电路应设计在太阳能电池板引线入口处,保护电路周围4mm内不要布置其他器件。

  (2)防止太阳能电池板反接用的二极管必须采用快恢复二极管,这种管子导通内阻小,充电时发热量小,不用散热器也可以连续充电,充电效果好。

  (3)充电、负载放电电路的印刷线路宽度至少要4~5mm,线路上用搪锡处理以增加过电流能力,大电流导线在一层过渡到另一层时,要放置3~5个过孔。

  (4)过流、短路保护电路选用的电流取样电阻要综合考虑电流、功率及热稳定性三个因素。电阻增大则电路效率下降,本系统选用电阻为0.01Ω,过电流能力在10A以上的康铜丝作为电流取样电阻,来产生取样电压,取样电压最多不超过0.2V,故采用运放LM358对它进行放大。

  (5)器件的布局和PCB图的布线采用模块化,大电流信号与小电流信号要分离,对放大电路的线路犹其要精心布置。数字地和模拟地分开,注意电源线和地线的布局。

  系统软件设计

  与本设计方案的硬件电路对应的软件程序包括:主程序、定时中断程序、A/D转换子程序、外部中断子程序及键盘处理子程序、充电管理子程序、负载管理子程序。单片机的软件编程上,以KeilC编译器的Windows集成开发环境μvision2作为软件开发平台,采用C51高级语言编写。按键处理流程如图3所示,电压检测子程序如图4所示。


  太阳能路灯以太阳光为能源,白天充电、晚上使用,无需铺设复杂、昂贵的管线,可任意调整灯具的布局,安全节能无污染,充电及开/关过程采用光控自动控制,无需人工操作,工作稳定可靠,节省电费,免维护,太阳能路灯的 ...

  单片机软件编程注意点

  (1)本系统用较少的按键实现了诸多功能,如负载工作模式的设置,双灯同时工作还是分时工作、负载工作时间的设定,还有自检功能等,为防止误操作采取了一些措施。这种方法实际上是一键多用的一种尝试,还可以推广到更复杂的人机对话的设计,其思路可参见按键处理流程图。

  (2)键盘在定时中断服务程序中读取,用中断间隔时间实现键盘的去抖动,不必编写另外的延时程序,提高了CPU的利用效率。键盘值存入数据缓冲区,在主程序中读数据缓冲区的内容,执行键盘功能散转子程序。

  (3)环境光线(闪电、礼花燃放)对太阳能电池板的采样电压有明显影响,故在白天、黄昏的识别时,要进行软件延时,一般控制在2~3分钟。

  (4)外部中断为高优先级中断,编制子程序实现负载过流、短路保护时,要充分考虑到负载启动瞬间时会产生数倍于额定电流的冲击电流,冲击电流维持时间在3~5ms左右,应在软件上采取措施,避免短路与负载开启的误判。确定负载过流、短路后,切断负载输出。负载切断后,每隔一段时间,如20s,应试接通负载开关,当发现过流、短路信号已消除,则恢复负载的输出,否则负载开关仍然保持断开。

  (5)为保护负载(灯具),蓄电池过放保护恢复时,应用软件设置一个回差电压,这样负载开关不会出现颤抖现象,有利于延长灯具的使用寿命。

  (6)根据STC12C5410AD的Data Flash的特点,数据写入时必须启动ISP/IAP命令,CPU等待IAP动作定时后,才继续执行程序,要先关断中断(EA)。还应注意数据写入Data Flash存储器,不能跨越扇区。

  部分软件编程

  ADC子程序

  INT8U ADC (INT8U number)using 2{number=number&0x07;// 通道号不超过7

  ADC_CONTR= ADC_CONTR&0xe0;//清ADC_FLAG、AD不启动

  ADC_CONTR=ADC_CONTR|number;//选择通道

  ADC_CONTR=ADC_CONTR|0x08;//启动AD

  while ((ADC_CONTR&0x10)!=0x10);//等待AD转换结束

  return (ADC_DATA);// 结果

  返回

  }

  外部0中断响应子程序

  void Service_INT0 ()

  interrupt 0 using 1

  { if(P3_2)//高电平,认为是干扰信

  号触发中断

  return;

  delay1(5000);//10ms延时if(P3_2==0)

  {load_switch_1=LSTOP;// 负载开关1关

  LOOP1_DL=1;//置负载短路标志

  }

  }

  本文所设计的太阳能路灯控制器,可适用12V或24V工作的光伏系统,可以直接驱动直流节能灯或通过逆变器驱动无极灯等灯具作为照明光源使用,也可以驱动一些直流低压负载供城市亮化使用。控制器的两路负载输出,可以用于机动车道和人行道的照明,照明时间和工作模式可以灵活设置。着重解决了如何对蓄电池及负载进行有效管理的问题,既提高了太阳能电池板的使用效率,又延长了蓄电池的使用寿命,防止了工程上因线路问题而造成意外事件的发生。本文所设计的控制器已在江苏S238省道得到应用,具有设计可靠、成本低廉的特点,具有较大的实用价值。


太阳能路灯控制器电路图


  1 .工作原理

  电路原理见图 1 所示。该电路由以 U5 为核心组成的蓄电池过充电控制电路、以 U 4A ~U4D为核心组成的蓄电池电压指示电路及显示电压按钮开关 KS1 电路、以 U1B 组成的蓄电池过放电控制电路、以 U1A组成的开灯检测控制电路、以 U2 组成的开灯及延时熄灯及二次开灯定时控制电路,以及以控制三极管Q2驱动继电器组成的输出控制电路等组成。现分别介绍如下。

  (1) 过充电、过放电检测保护部分太阳能电池组件板或阵列由插口 CZ1 的①脚输入,加至防反充电二极管 D2 的正极.D2的负极接 12V 蓄电池的正极,即 CZ1 的③脚。控制器在初始上电时,由于 C4 的作用使 U5②脚为低电平,③脚输出高电平,Q7 导通; Q8 截止,允许太阳能电池给蓄电池充电。当蓄电池所充的电压小于 14 . 4V 时,由R13 、 (R38 十R39) 组成的串联分压电路送至 U5 ②、⑥电压低于 2 / 3 U5 的供电电压时,即小于6V,电路维持充电状态;随着充电时间的延长,蓄电池电压逐渐升高,当 U5 ②、⑥的电压高于 2 / 3 U5 供电电压时,U5③脚输出低电平, Q7 截止、 Q8 导通,给太阳能电池板泄放电流,停止对蓄电池充电。在U5③脚输出低电平的状态下,其⑦脚导通,相当于将 1140 并入电路中。此时电路的分压比为: R38+ R39 // R40/IRl3+(R38+R39) // R40 ,不难算出,当蓄电池电压低于设定值 13V 时.电路状态再次翻转,U5③脚输出高电平,允许蓄电池充电。

  (2) 开灯检测方法与控制

  太阳能电池板是一个很好的光敏元件,其输出电流、电压能随着接受光的强度和照度变化而变化,本控制器就是利用这一原理实现开、关灯控制的。太阳能电池板PVin 输入电压经 R5 、 R6 串联分压后;加至运放 U 1A ②脚,其③脚接于 R9 、R8+VR1的分压点上。在白天,太阳能电池板在阳光的照射下输出电压很高,其经 R5 、 R6 分压后使运放 U 1A②脚电压高于③脚, U 1A①脚输出低电平, Q1 截止, U2 无供电电压不工作,Q2截止,继电器不吸合,系统无输出电压,路灯不工作。随着天色渐黑,太阳能电池板输出电压降低。 UlA ②脚的电压也同步降低,当 U1A②脚电压低于③脚时,比较器翻转, U 1A ①脚输出高电平, Q1 导通,定时电路 U2 得电工作, Q2 导通、JDQ1吸合点亮路灯。图中 VR1 为路灯开灯时刻设置调节电位器,调节 VRl 可设置不同时刻点亮路灯。DW1是钳位二极管,作用是避免白天太阳能电池板接受的电压过高导致 U 1A ②脚输入电压过高而损坏。 C1 为储能电容,作用是防止 U1A②脚电压瞬时突变误点亮路灯。 R14 为反馈电阻.其作用是使 U 1A 成为一个迟滞比较器.防止和避免 U1A在开灯点附近振荡而反复开、关路灯。

  (3) 路灯延时电路点亮、熄灭控制电路

  延时控制电路选用 CD4541BE 可编程定时控制芯片,它功耗低、内置可编程分频器电路,最大分频级数为 65536 级。

  本控制器设计定时开灯和定时关灯时间调节范围是: 2 . 093 小时 -11 . 93 小时.分别由 V : R2 和VR3控制调节。

  (4) 蓄电池停止放电优先控制电路

  若在路灯欲点亮或已点亮时,蓄电池电压已经低于其允许终止放电值时, Q4 导通.此时无论 U 1A 输出高电平与否,均会使Q1截止,从而保护蓄电池避免过放电损坏。

  (5) 电池电压指示电路

  为了让现场看管、维护人员及时了解、掌握蓄电池的状态,本控制器设有 LED 电池电压指示装置,通过LLED点亮的数量指示蓄电池电压的高低。

  2 .电路调试

  制作中发现。 NE555 时基电路的实际状态转换点,即 1 / 3V( : C 与 2 /3VCC状态的翻转跳变点并不是严格遵循理论值。通过调节电阻 R13 可实现 14 . 4V 的过充电控制。将 R13 由设计的100kΩ换为 120k Ω即可达到实际要求。同理,通过调节 VR4 可校准蓄电池指示电压。

  二、用 PIC 12F 675 单片机制作的太阳能路灯控制器


  图 2 是用:PIC12F675单片机制作的太阳能路灯控制器电路。 PIC 12F 675 是 8 引脚单片机,具有 6个I / 0 口,自带内部 RC 振荡器 ( 振荡频率为 4MHz) 、 4 路 10 位 A /D转换器、一路比较器,该控制器性能稳定、可靠,耗电低。

  1 .工作原理

  PIC 12F675控制蓄电池的过充电、过放电,开、关路灯功能,定时点亮、天黑自动点亮、延时点亮、自动跟踪点亮等功能,路灯点亮测试控制功能,LED指示功能等。

  由蓄电池 BTl 、蓄电池过充电控制执行场效应管 01 、三端稳压器 U1 组成电源供电系统; Q2 、 Q4.组成放电控制;K1 手动, R_GM1 光控自动开灯系统,蓄电池分压电阻,发光指示二极管等部分组成。太阳能电池板电压由接口J3输入.经防反充二极管 D1 后分成两路,一路经 U1 LM 78L 05 稳压后,为 PIC 12F675单片机提供工作电源,另一路经 FB 保险丝给蓄电池充电。单片机上电后,首先由 Rf 、 Cf组成的硬件电路进行复位.然后由软件控制U2 ③脚 GP4 输出高电平,让 Q4 导通、 Q2 截止,控制系统停止放电,再检测 U2⑦脚 GP0 上的分压值,通过内部 A/ D 转换及软件运算间接检测、判断蓄电池是否欠压、过压.若蓄电池发生过充电,则通过软件控制U2 ②脚 GP5 输出高电平,使 Q1导通.短路太阳能电池板、停止向蓄电池充电,同时点亮“过充电”指示灯 LED2;若未发生过充电,则 U2 ②脚 GP5输出低电平,允许蓄电池充电。通过检测 U2 ⑥脚 GP1 所接的光敏电阻R_GM1上的分压值,判断是否已经“天黑,到了开路灯时间”,若到了预设的开灯点,则由软件控制 u2 ③脚 GP4 输出低电平,使 Q4截止、02 导通,点亮路灯。若不到开灯点,则程序返回,循环检测上述诸参数。

  K1 是手动开灯按钮。按下 K1 ,路灯点亮。单片机通过检测光敏电阻R_GM1上的分压值,判断是否“天黑”,若是天黑.则按设计要求点亮路灯,若否,单片机进入路灯控制器“测试”功能:2分钟后路灯自动熄灭。

  2 .说明

  由于单片机程序设计十分灵活,故这里用“开灯点”作为开灯标记符,这个点可以是时间。也可以是天黑的“程度”。若定义的是时间,可以让路灯从此时开始计时,点亮若干小时后熄灭;若是天黑的程度,可以让路灯到了此天黑程度后开始点亮。此后既可计时熄灭,也可判别天亮后熄灭。一切由软件设计人员抉择。






群名称:中国太阳能光伏逆变 群号码:76910230 群分类:电源技术

本群以大功率数字化电源设计为主题,云集长三角地区知名的光伏逆变器设计人员及上下游企业;

进群必须报三围[介绍自己]。非诚误加。







收藏收藏4
jafck
  • 积分:4333
  • |
  • 主题:136
  • |
  • 帖子:1755
积分:4333
版主
  • 2011-7-2 14:39:32
 
基于AVR的太阳能控制器设计
摘 要:为了控制太阳能发电系统中蓄电池的最优充放电,利用低功耗高性能的RISC:单片机AVR作为控制电路的核心,设计一种可靠性高,性能好的太阳能智能控制器,并对控制器的控制原理进行详细分析。测试结果表明,该控制器能正确监控和测量蓄电池的状态,充放电效果好,性能可靠,能减少充电损耗,延长蓄电池的使用寿命。
关键词:太阳能电池;PWM;控制器;AVR


随着能源危机和环境污染的加深,太阳能的研究和利用受到广泛的关注。太阳能是人类取之不尽用之不竭的可再生能源,也是清洁能源,不产生任何的环境污染,在太阳能的有效利用中,太阳能充电是近些年发展最快,最具活力的研究领域,是其中最受瞩目的项目之一。太阳能电池发电是基于“光生伏打效应”原理,将太阳能转化为电能,利用充电效应将太阳辐射直接转化为电能。它具有永久性、清洁性和灵活性大的优点,是其他能源无法比拟的。
1 太阳能控制器的设计
1.1 太阳能电池的输出特性
由它的输出特性曲线(见图1) 可知,太阳能电池的伏安特性具有很强的非线性,即当日照强度改变时,其开路电压不会有太大的改变,但所产生的最大电流会有相当大的变化,所以其输出功率与最大功率点会随之改变。然而当光强度一定时,电池板输出的电流一定,可以认为是恒流源。因此,必须研究和设计性能优良的太阳能发电控制器,才能更有效地利用太阳能。

1.2 系统的硬件结构
太阳能控制器硬件结构图如图2所示。该控制器以AVR mega 32为控制核心,外围电路主要由蓄电池电压及环境温度检测与充放电控制电路、电池板电压检测与分组切换电路、负载电流检测与输出控制电路、状态显示电路、串口数据上传和键盘输入电路构成。

电压检测电路用于识别光照的强度和获取蓄电池端电压。温度检测电路用于蓄电池充电温度补偿。该系统采用PWM方式驱动充电电路,控制蓄电池的最优充放电。电池板分组切换控制电路用于不同光强度和充电模式下电池板的切换,该系统实现对3组电池板阵列控制。负载电流检测电路用于过流保护及负载功率检测。状态显示电路用于系统状态的显示,包括电压、负载状况及充放电状态的显示。串行口上传数据电路用于系统运行参数的上传,实现远程监控。键盘输入电路用于充电模式设定及LCD背光开启。该控制器在有阳光时接通电池板,向蓄电池充电;当夜晚或阴天阳光不足时,蓄电池放电,以保证负载不停电。
1.3 AVR单片机
AVR微处理器是Atmel公司的8位嵌入式RISC处理器,具有高性能、高保密性、低功耗等优点。程序存储器和数据存储器可独立访问的哈佛结构,代码执行效率高。系统采用的mega 32处理器包含有32 KB片内可编程FLASH程序存储器;1 KB的E2PROM和2 KBRAM;同时片内集成了看门狗;8路10位ADC;3路可编程PWM输出;具有在线系统编程功能,片内资源丰富,集成度高,使用方便。AVR mega 32可以很方便地实现外部输入参数的设置,蓄电池及负载的管理,工作状态的指示等。
1.4 蓄电池的充放电控制
阀控密封铅酸蓄电池具有蓄能大,安全和密封性能好,寿命长,免维护等优点,在光伏系统中被大量使用。由阀控密封铅酸蓄电池充放电特性图(见图3)可知,蓄电池充电过程有3个阶段:初期(OA)电压快速上升;中期(ABC)电压缓慢上升,延续时间较长;C点开始为充电末期,电压开始上升;接近D点时,蓄电池中的水被电解,应立即停止充电,防止损毁电池。所以对蓄电池充电,通常采用的方法是在初期、中期快速充电,恢复蓄电池的容量;在充电末期采用小电流长期补充电池因自放电而损失的电量。

蓄电池放电过程主要有三个阶段:开始(OE)阶段电压下降较快;中期(EFG)电压缓慢下降且延续较长的时间;在最后阶段G点后,放电电压急剧下降,应立即停止放电,否则将会给蓄电池照成不可逆转的损坏。因此,如果对阀控密封铅酸蓄电池充放电控制方法不合理,不仅充电效率降低,蓄电池的寿命也会大幅缩短,造成系统运行成本增加。在蓄电池的充放电过程中,除了设置合适的充放电阈值外,还需要对充放电阈值进行适当的温度补偿,并进行必要的过充电和过放电保护。
根据阀控密封铅酸蓄电池的特点,控制器利用MCU的PWM功能对蓄电池进行充电管理。若太阳能电池正常充电时蓄电池开路,控制器将关断负载,以保证负载不被损伤;若在夜间或太阳能电池不充电时蓄电池开路,由于自身控制器得不到电力,不会有任何动作。当充电电压高于保护电压(15 V)时,自动关断对蓄电池的充电;此后当电压掉至维护电压(13.2 V)时,蓄电池进人浮充状态,当低于维护电压(13.2 V)后,浮充关闭,进入均充状态。当蓄电池电压低于保护电压(10.8 V)时,控制器自动关闭负载,以保护蓄电池不受损坏。若出现过放,应先进行提升充电,使蓄电池的电压恢复到提升电压后再保持一定时间,防止蓄电池出现硫化。通过PWM控制充电电路(智能三阶段充电),可使太阳能电池板发挥最大功效,提高系统充电效率。
1.5 温度补偿
采用数字温度传感器DS18820检测蓄电池环境温度。对蓄电池的充电阈值电压温度补偿系数取-4mV/(℃·单体)。补偿后的电压阈值可以用以下公式表示:Ve=V+(t-25)αn。其中,Ve为补偿后的电压阈值;V为25℃下的电压阈值;t为蓄电泄环境温度;α为温度补偿系数;n为串联的单体数。控制器对过放电压阈值不做补偿。
1.6 MOSFET驱动电路
设计的控制器属于串联型,即控制充电的开关是串联在电池板与蓄电池之间的。串联型控制器相对于并联型控制器能够更有效地利用太阳能,减少系统的发热量。设计中用MOSFET实现开关。MOSFET是电压控制单极性金属氧化物半导体场效应晶体管,所需驱动功率较小。而且MOSFET只有多数载流子参与导电,不存在少数载流子的复合时间,因而开关频率可以很高,特别适合作为PWM控制充电开关。为此,设计中采用P沟道MOSFET。P沟道MOSFET的导通电压Vth<0,由图4可以实现MOSFET的驱动。当Q2导通时,由于Q2的Vce很小,可以认为Q1的G极接地,Vgs<0,当Vin达到一定值时,Q1导通。


1.7 键盘电路
采用单按键的输入方式,用于开液晶背光和设定充电模式。初始化时将PC7输出高电平,在程序运行过程中,通过定时中断检测是否有按键按下。当有按键按下时间不超过10 s时,则打开液晶背光,10 s后背光关闭。当有按键按下时间超过10s时,进入模式设定。在设定模式下,每按一次模式加1,按下按键10 s后或者10 s按键无任何动作,模式保存到E2PROM中,退出设定模式。
1.8 状态显示和告警电路
控制器用LCD1602液晶显示系统的状态信息,包括蓄电池电压、负载功率等。 LCD1602采用7线驱动法,Vo接1 kΩ电阻到地,用于调节液晶显示对比度。显示数据和指令通过LCD1602的DB4~DB7写入,同时具备有声光告警功能。当出现过压或过放时,相应的发光二极管闪烁以及蜂鸣器告警,同时相应告警继电器接通。
1.9 数据上传
控制器用RS 232串行口将系统电压、温度、充放电状态以及负载情况数据上传,实现远程监控。
2 控制器的软件流程图
主程序主要完成对I/O、定时器和PWM的初始化,同时根据电池板和蓄电池的状态调用相应的充放电子程序。控制器参数的测量主要由中断服务程序完成。

3 结 语
在此设计的太阳能控制器性能稳定,具有过充过放保护和温度补偿。经过测试,系统显示出良好的控制效果,不仅提高了太阳电池的工作效率,同时也保护了所使用的蓄电池,在利用绿色能源方面,具有一定的社会效益和广泛的推广价值.
後會絠萋
  • 积分:9358
  • |
  • 主题:195
  • |
  • 帖子:2538
积分:9358
版主
  • 2011-7-5 10:31:24
 
请问蓄电池温度检测是怎么做的?温度传感器装在电池的电极上还是哪里?
jafck
  • 积分:4333
  • |
  • 主题:136
  • |
  • 帖子:1755
积分:4333
版主
  • 2011-7-6 08:01:26
 
一般是用DS18B20 贴在电池侧面。
後會絠萋
  • 积分:9358
  • |
  • 主题:195
  • |
  • 帖子:2538
积分:9358
版主
  • 2011-7-6 16:09:37
 
哦,谢谢了
guiliang
  • 积分:136
  • |
  • 主题:2
  • |
  • 帖子:14
积分:136
LV2
本网技师
  • 2011-7-7 11:04:32
 
呵呵,DS18B20不是帖在电池侧面,,18B20是测环境的温度的,不是测电池的温度。
jafck
  • 积分:4333
  • |
  • 主题:136
  • |
  • 帖子:1755
积分:4333
版主
  • 2011-7-8 08:55:49
 
各个厂家用法都不一样的,国外好多厂家都在用DS18B20来给蓄电池组做温度补偿,具体看你怎么用,不要被他是板载器件而迷惑了。也有厂家使用PT100,热电偶等。
也有控制器与蓄电池分开放置的,这需要向厂家定制外带温度传感线的控制器,这样即使控制器与蓄电池分开,控制器通过温度传感线也可以探测到蓄电池的实时环境温度,给予最准确的电压补偿。
k432613
  • 积分:415
  • |
  • 主题:9
  • |
  • 帖子:107
积分:415
LV6
高级工程师
  • 2011-7-14 10:00:37
  • 倒数10
 
LZ&nbsp; 公开一下STC12C5410AD 设计的电路,本人想看看这样的硬件设计。。呵呵
jafck
  • 积分:4333
  • |
  • 主题:136
  • |
  • 帖子:1755
积分:4333
版主
  • 2011-10-29 11:19:07
  • 倒数7
 
给你个STC12LE5202AD太阳能草坪灯LED充放电控制器代码
功能有浮充,过充,过放,光控+时控等功能;没有加入MPPT程序,这个产品没那个必要。
#include<STC2052AD.h> #define uchar unsigned char #define uint unsigned int /*****************************************/ #define skong (5) //5小时 自动关灯 #define YES_CHONG_DIAN (1) #define NO_CHONG_DIAN (0) #define ON (1) #define OFF (0) /**************************************/ bit out_ok_on,night_bit,yi_fen_on,yi_fen_off,fu_chong_on; //可以输出 可以充电 到了晚上 bit hour_5; uchar miao,fen,shi; uchar led_chong_mode; sbit led_chong=P1^4; //正在充电指示灯 0.5秒闪烁表示正在充电中 常亮表示电已经冲满 2秒闪烁进入浮充阶段 sbit led_chong_ok=P1^3; // sbit chong_dian=P1^5; // 1为 停止充电 0为 正在充电 uint sj_dianya; uchar dian_ya; uchar liang_du; //光线判断 uint miao_t1,miao_t2,time_miao,su_du_j,time_ss; uchar yi_fen_t_on,yi_fen_t_off,fu_chong_t; uchar su_du,iii; sbit OUTRR=P1^2; //负载 RR sbit OUTGG=P1^1; //负载 GG sbit OUTBB=P1^0; //负载 BB uchar BUF[3]; uchar run_mode,ci_shu,cici,hui_du; //===================================== uchar code led_su_du[5]={100,80,60,40,20}; //速度 /*************************************/ bit AD_finished; //AD转换完成 /********************************************/ uchar color,led_t2,led_run; //输出的颜色 uint led_time_ss; //输出LED的时间控制 /*******************************************/ void init(void) { TMOD=0x01; TH0=(65535-1000)/256; TL0=(65535-1000)%256; TR0=1; ET0=1; EA=1; led_chong=led_chong_ok=0; chong_dian=YES_CHONG_DIAN; P1M0=0xc0; //P1.7 P1.6 AD p1.5 P1M1=0xc0; } /**********************************************/ void delay(uchar ms) { unsigned int i; while(ms--) for (i=0;i<20;i++); } /**********************************************/ uchar get_AD_result(uchar channel) { AD_finished = 0; // 存储 A/D 转换标志 ADC_RES = 0; P1M0=0xc0; //P1.7 P1.6 AD p1.5 P1M1=0xc0; ADC_CONTR = channel; // 选择 A/D 当前通道 ADC_CONTR |=0x80; //开电源 delay(1); //使输入电压达到稳定 ADC_CONTR |= 0x08; //0000,1000 令 ADC_START = 1, 启动A/D 转换 AD_finished = (ADC_CONTR & 0x10); while ( AD_finished == 0 ) // 等待A/D 转换结束 { AD_finished = (ADC_CONTR & 0x10); //0001,0000, ADC_FLAG ==1测试A/D转 换结束否 } ADC_CONTR &= 0xF7; //1111,0111 令 ADC_START = 0, 关闭A/D 转换, return (ADC_RES); // 返回 A/D 转换结果 } /***********************************************/ void out_rgb(uchar yan_se) { switch(yan_se) { case 0: {BUF[0]=32; BUF[1]=0; BUF[2]=0;}break; case 1: {BUF[0]=0; BUF[1]=32; BUF[2]=0;}break; case 2: {BUF[0]=0; BUF[1]=0; BUF[2]=32;}break; /* case 0: {OUTRR=0; OUTGG=1; OUTBB=1;}break; case 1: {OUTRR=1; OUTGG=0; OUTBB=1;}break; case 2: {OUTRR=1; OUTGG=1; OUTBB=0;}break; */ default: break; } } /***********************************************/ void jian_bian(void) { if(time_ss=32) {BUF[0]=time_ss;}//R else if(time_ss=64) {BUF[1]=time_ss-32;}//buf1[0]=128;buf1[2]=0;RG else if(time_ss=96) {BUF[0]=96-time_ss;}//buf1[1]=128;buf1[2]=0;G else if(time_ss=128) {BUF[2]=time_ss-96;}//buf1[0]=0;buf1[1]=128;GB else if(time_ss=160) {BUF[1]=160-time_ss;}//buf1[2]=255;buf1[0]=0;B else if(time_ss=192) {BUF[0]=time_ss-160;}//buf1[1]=0;buf1[2]=255;BR else if(time_ss=224) {BUF[1]=time_ss-192;}//buf1[0]=255;buf1[2]=255;BRG else {time_ss=0;BUF[0]=BUF[1]=BUF[2]=0;ci_shu++;if(ci_shu>2){ci_shu=0;led_run=0;}} } /************************************************/ void bi_jiao(void) { if(BUF[0]>hui_du) {OUTRR=0;} else {OUTRR=1;} if(BUF[1]>hui_du) {OUTGG=0;} else {OUTGG=1;} if(BUF[2]>hui_du) {OUTBB=0;} else {OUTBB=1;} } /*****************************************************/ /* void ce_guang(void) { liang_du=get_AD_result(7); //测量光线 liang_du=(liang_du*360/255); //================================================== if(liang_du>=1) { yi_fen_on=0; yi_fen_off=1; if(yi_fen_t_on>20) { yi_fen_t_off=0; //清除防误动作 night_bit=0; yi_fen_off=0; out_ok_on=0; } else { yi_fen_on=1; //开始记时间 一分钟动作 yi_fen_off=0; if(yi_fen_t_off>20) //60秒 防止误动作 { night_bit=1; yi_fen_on=0; yi_fen_t_on=0; } } } } */ /*******************************************************/ void ce_guang(void) { liang_du=get_AD_result(7); //测量光线 liang_du=(liang_du*360/255); //================================================== if(liang_du=1) { yi_fen_on=1; //开始记时间 一分钟动作 yi_fen_off=0; if(yi_fen_t_on>20) //60秒 防止误动作 { night_bit=1; yi_fen_on=0; yi_fen_t_on=0; } } else { yi_fen_on=0; yi_fen_off=1; if(yi_fen_t_off>20) { yi_fen_t_off=0; //清除防误动作 night_bit=0; yi_fen_off=0; out_ok_on=0; } } } /*******************************************************/ void ce_dianya(void) { dian_ya=get_AD_result(6); //测量 sj_dianya=((dian_ya*360/255)*58)/10; //处理 //sj_dianya=(dian_ya*360/255); //处理 sj_dianya=sj_dianya-2; } /*******************************************************/ void left() { out_rgb(color); if(led_t2>led_su_du[iii]) { led_t2=0; color++; if(color>2) { color=0; ci_shu++; if(ci_shu>cici) { ci_shu=0; iii++; cici+=4; if(iii>4) {iii=0;cici=6;led_run=1;color=0;led_t2=0;} } } } } /*****************************************************/ void right() { out_rgb(color); if(led_t2>led_su_du[iii]) { led_t2=0; if(color){color--;} else {color=2;ci_shu++;} if(ci_shu>cici) { ci_shu=0; iii++; cici+=4; if(iii>4) {iii=0;cici=6;led_run=2; color=0;led_t2=0;} } } } /********************************************************/ void panduan(void) { if(night_bit) //天黑了 光线不够 { if(sj_dianya>560) { led_chong_mode=4; //电压达到5.6V 以上并且到了晚上 就可以输出 if(hour_5){out_ok_on=0; } //到了5小时关灯 else {out_ok_on=1;} //没到5小时开灯 } else { out_ok_on=0; led_chong_mode=3; } chong_dian=NO_CHONG_DIAN; //电压不够 不能输出 } //================================================================== else //有光线 { if(sj_dianya=680) {chong_dian=YES_CHONG_DIAN;fu_chong_on=0;led_chong_mode=1;} //电压不够7.5V开始充电 else if((sj_dianya>680)&&(sj_dianya<750)) {fu_chong_on=1;led_chong_mode=2;} // else if(sj_dianya>750) {fu_chong_on=0;chong_dian=NO_CHONG_DIAN;led_chong_mode=5;} //过压不充电 out_ok_on=0; hour_5=0; } } /*******************************************************/ void main(void) { init(); cici=6; OUTRR=OUTGG=OUTBB=OFF; hour_5=0; while(1) { /**********************************************/ switch(run_mode) { //============================================================= case 0: { ce_guang(); run_mode=1; }break; //============================================================= case 1: { ce_dianya(); run_mode=2; }break; //===================================================================== case 2: { panduan(); run_mode=3; }break; //====================================================================== case 3: { hui_du++; if(hui_du==32) {hui_du=0;} //渐变亮度 if(out_ok_on) { switch(led_run) { case 0: { left(); // }break; //=================================================================== case 1: { right(); }break; //=================================================================== case 2: { jian_bian(); }break; //=================================================================== default:break; } bi_jiao(); } else { OUTRR=OUTGG=OUTBB=1; //关LED color=0; hui_du=0; } run_mode=0; }break; default:break; } //======================================================================================= } } /***********************************************/ void timer0_int(void) interrupt 1 // { TH0 =(65536-500)/256; //50MS TL0 =(65536-500)%256; /*******************************************/ if(yi_fen_on) { miao_t1++; //秒 if(miao_t1>1000) //1秒到 { miao_t1=0; //秒清零 yi_fen_t_on++; //加一分 } } else {yi_fen_t_on=0;miao_t1=0;} /**********************************************/ if(yi_fen_off) { miao_t2++; //秒 if(miao_t2>1000) //1秒到 { miao_t2=0; //秒清零 yi_fen_t_off++; //加一分 } } else {yi_fen_t_off=0;miao_t2=0;} /***********************************************/ if(out_ok_on) { time_miao++; if(time_miao>1000) { time_miao=0; miao++; if(miao==60) { miao=0; fen++; if(fen==60) { fen=0; shi++; if(shi==skong) { shi=0; hour_5=1; //5小时到了标志 } } } } led_t2++; su_du_j++; if(su_du_j>50) { su_du_j=0; time_ss++; } } else {led_run=0;} //======================================================== /* if(fu_chong_on) { fu_chong_t++; if(fu_chong_t>4000) {fu_chong_t=0;chong_dian=!chong_dian;} //4秒浮冲 } */ led_time_ss++; //LED闪烁时间控制 switch(led_chong_mode) //各种电压所对应的LED运行模式 { case 1: { led_chong_ok=0; if(led_time_ss>500) {led_time_ss=0; led_chong=!led_chong; } //0.5秒闪烁 正常充电 }break; case 2: { led_chong_ok=0; if(led_time_ss>4000) {led_time_ss=0; led_chong=!led_chong;chong_dian=!chong_dian; } //4秒闪烁 //浮充 }break; case 3: { led_chong=0; if(led_time_ss>10000) {led_time_ss=0; led_chong_ok=!led_chong_ok;} //10秒闪烁 欠压不能输出 }break; case 4: { if(led_time_ss>2000) {led_time_ss=0; led_chong_ok=!led_chong_ok;} //2秒闪烁 //正常输出 led_chong=0; }break; case 5: { led_chong_ok=1;// led_chong=0; //过压不充电 }break; default:break; } }
lgh407
  • 积分:112
  • |
  • 主题:0
  • |
  • 帖子:6
积分:112
LV2
本网技师
  • 2012-2-21 20:23:57
  • 倒数6
 
12V和24V蓄电池可以自动识别电路,能给学习一下吗?楼主!谢谢
aninstone
  • 积分:1059
  • |
  • 主题:2
  • |
  • 帖子:96
积分:1059
LV6
高级工程师
  • 2015-6-24 09:32:30
  • 倒数3
 
什么 东东?
蓝图
  • 蓝图
  • 离线
  • LV8
  • 副总工程师
  • 积分:3542
  • |
  • 主题:11
  • |
  • 帖子:388
积分:3542
LV8
副总工程师
  • 2016-10-10 20:04:28
  • 倒数2
 
硬件电路没共享学习下?
金北武
  • 积分:221
  • |
  • 主题:5
  • |
  • 帖子:92
积分:221
LV3
助理工程师
  • 2011-10-15 10:43:07
  • 倒数9
 
感谢分享。刚好最近在弄这方面的。很感谢
QQ906871卖电容
  • 积分:672
  • |
  • 主题:26
  • |
  • 帖子:238
积分:672
LV6
高级工程师
  • 2012-2-25 17:02:44
  • 倒数4
 
学习了,很有帮助。
mxm0410
  • 积分:218
  • |
  • 主题:12
  • |
  • 帖子:39
积分:218
LV3
助理工程师
  • 2011-10-27 08:34:02
  • 倒数8
 
这个路灯系统不需要最大功率点跟踪吗?
cassiopeia
  • 积分:265
  • |
  • 主题:25
  • |
  • 帖子:48
积分:265
LV3
助理工程师
  • 2012-2-23 08:47:41
  • 倒数5
 
感谢楼主分享~
ahsfysjss
  • 积分:869
  • |
  • 主题:2
  • |
  • 帖子:125
积分:869
LV6
高级工程师
最新回复
  • 2021-12-3 13:14:23
  • 倒数1
 
谢谢楼主分享~~
热门技术、经典电源设计资源推荐

世纪电源网总部

地 址:天津市南开区黄河道大通大厦8层

电 话:400-022-5587

传 真:(022)27690960

邮 编:300110

E-mail:21dy#21dianyuan.com(#换成@)

世纪电源网分部

广 东:(0755)82437996 /(138 2356 2357)

北 京:(010)69525295 /(15901552591)

上 海:(021)24200688 /(13585599008)

香 港:HK(852)92121212

China(86)15220029145

网站简介 | 网站帮助 | 意见反馈 | 联系我们 | 广告服务 | 法律声明 | 友情链接 | 清除Cookie | 小黑屋 | 不良信息举报 | 网站举报

Copyright 2008-2024 21dianyuan.com All Rights Reserved    备案许可证号为:津ICP备10002348号-2   津公网安备 12010402000296号