太阳能充放电控制器设计 完美版

更新时间:2024-05-19 09:55:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

山东科技大学课程设计

太阳能充放电控制器设计

摘 要

太阳能光伏发电现已成为新能源和可再生能源的重要组成部分,也被认为是当前世界最有发展前景的新能源技术。目前太阳能光伏发电装置已广泛应用于通讯,交通,电力等各个方面,其核心部分就是充电控制器。

本设计针对目前市场上传统充电控制器对蓄电池的充放电控制不合理,同时保护也不够充分,使得蓄电池的寿命缩短这种情况,研究确定了一种基于单片机的太阳能充电控制器的方案。在太阳能对蓄电池的充放电方式、控制器的功能要求和实际应用方面做了一定分析,完成了硬件电路设计和软件编制,实现了对蓄电池的高效率管理。

在总体方案的指导下,本设计使用低功耗、高性能,超强抗干扰的STC89C52单片机作为核心器件对整个电路进行控制。系统硬件电路由太阳能电池充放电电路,电压采集和显示电路,单片机控制电路和RS232串口通信电路组成,主要实现对蓄电池电压的采集和显示。软件部分依据PWM(Pulse Width Modulation)脉宽调制控制策略,编制程序使单片机输出PWM控制信号,通过控制光电耦合器通断进而控制MOSFET管开启和关闭,达到控制蓄电池充放电的目的,同时按照功能要求实现了对蓄电池过充、过放保护和短路保护。实验表明,该控制器性能优良,可靠性高,可以时刻监视太阳能电池板和蓄电池状态,实现控制蓄电池最优充放电,达到延长蓄电池的使用寿命。

关键词: 充电控制器; 太阳能光伏发电; PWM脉宽调制;

I

山东科技大学课程设计

Abstract

Solar photovoltaic power generation has become an important part of new energy and renewable energy, it is considered the current world's most promising new energy technologies. At present solar photovoltaic device has been widely used in communications, transport, electricity and other aspects, the core part is the charge controller.

The conventional charge controller on the market today on the battery charge and discharge control is unreasonable, and its protection is also inadequate,whichs makes the battery life to shorten. To solve this problem, the design identifies a solar charge controller based on single chip solution. In the solar energy to battery charge and discharge means, the controller of the functional requirements and the practical application aspects ,making some analysis,completed the hardware circuit design and software development, to achieve the high efficiency of the battery management.

Under the guidance of the overall program, the design uses low-power, high performance, super anti-jamming STC89C52 microcontroller as a core device to control the entire circuit. Hardware circuit consists of a solar battery charging and discharging circuit, voltage acquisition and display circuit, the MCU control circuit and RS232 serial communication circuit, the main achievement of the acquisition and display battery voltage. Software is based in part on PWM (Pulse Width Modulation) pulse width modulation control strategy, programming the microcontroller output PWM control signal, by controlling the photocoupler on-off the control MOSFET opening and closing, to control battery charging and discharging purposes, and in accordance with the functional requirements implemented the battery over charge, over discharge protection and short circuit protection. Experiments show that the controller performance, high reliability, can always monitor the state of solar panels and batteries to achieve optimal control of battery charge and discharge, to prolong battery life.

Keywords: charge controller; solar photovoltaic; PWM pulse width modulation;

II

山东科技大学课程设计

目 录

1 绪论 ............................................................................................................................................ 1

1.1 课题研究背景和意义 .................................................................................................... 1 1.2 太阳能充放电控制器现状 ............................................................................................ 1 1.3 设计主要任务 ................................................................................................................ 2 2 太阳能充电控制器的总体设计方案 ......................................................................................... 3

2.1 太阳能路灯系统基本结构 ............................................................................................ 3 2.2 充电控制器的控制策略 ................................................................................................ 4 2.3 控制器的整体设计方案 ................................................................................................ 5 3 太阳能充电控制器的硬件电路设计 ......................................................................................... 7

3.1 系统层次原理图 ............................................................................................................ 7 3.2 单片机最小系统 ............................................................................................................ 7

3.2.1 STC89C52的简介 .............................................................................................. 7 3.2.2 单片机的最小系统及扩展电路 ........................................................................ 9 3.3 充放电电路 .................................................................................................................. 10 3.4光耦驱动电路 ............................................................................................................... 11 3.5 A/D转换电路 ................................................................................................................ 12

3.5.1 ADC0804的简介 .............................................................................................. 12 3.5.2 ADC0804外围接线电路 ............................................................................... 13 3.6 LCD显示电路 .............................................................................................................. 15 3.7 E2PROM数据存储电路 ............................................................................................... 16 3.8 串口通信电路 .............................................................................................................. 17 4 太阳能充电控制器的软件设计 ............................................................................................... 20

4.1 系统主程序设计 .......................................................................................................... 20 4.2 电压采集转换模块 ...................................................................................................... 21 4.3 显示模块 ...................................................................................................................... 22 4.4 数据存储模块 .............................................................................................................. 24 4.5 软件调试和仿真 .......................................................................................................... 26 5 总结与展望 .............................................................................................................................. 29

5.1 设计总结 ...................................................................................................................... 29 5.1 展望 .............................................................................................................................. 29 参考文献 ...................................................................................................................................... 31 致 谢 .......................................................................................................................................... 32 附录Ⅰ 源程序 ............................................................................................................................ 33 附录Ⅱ 硬件电路图 .................................................................................................................... 43

III

山东科技大学课程设计

1 绪论

1.1 课题研究背景和意义

能源资源是国民经济发展的重要基础之一,随着人民生活水平的不断提高和科学技术的迅速发展,能源的缺口增大,能源问题作为困扰人类长期稳定发展的一大因素摆在了人们面前。伴随着世界能源危机的日益严重,石油价格不断上涨,利用常规能源已经不能适应世界经济快速增长的需要,如何解决能源问题,是每个国家都必须面临的问题。同时,以煤、石油作为燃料在燃烧过程中产生的有害物质已经开始造成全球变暖,即“温室效应\,人类的生活将会由此受到很大的威胁。这些难题迫使政府和社会在发展常规能源的同时必须加大对新能源的开发和利用。

新能源包括水能、风能、太阳能等。虽然风能或水能等更加便宜,但是大多数的自家用户却都不可能找到适当场合进行架设,架设成本较高。而太阳能则不同,任何自家用户只要找到一个有阳光照射到的窗户都可以装置太阳能极板作辅助能源,几百元投资便可以架设。所以综合考虑,太阳能无疑是符合我国可持续发展战略的理想绿色能源,全球能源专家也认为,太阳能将成为21世纪最重要也最有前景的能源之一。

而且太阳辐射能与煤炭、石油等常规能源相比较,更有如下的优点: (1)普遍性。

地球上处处都有太阳能,不需要到处去寻找,去运输,容易获取。 (2)无害性。

利用太阳能作为能源,没有废渣,废料,废气,废水的排放,没有噪声,不会污染环境,没有公害,清洁干净。

(3)长久性。

只要有太阳,就有太阳能,因此太阳能可以说是取之不尽,用之不竭。 (4)巨大性。

一年内到达地面的太阳辐射能总量要比现在地球上消耗的各种能量的总和大几万倍。 我国幅员辽阔,有着十分丰富的太阳能资源。全国各地的年太阳辐射总量3340.8400MJ/m2,中值为5852MJ/m2。年日照时数在2200小时以上的地区约占国土面积的2/3以上。我国的西部地区,包括西藏、新疆、青海、内蒙古等省,年日照时间长,这些地区面积宽广、人口密集低,在一些偏僻的地区传统的供电设施建设成本高,电能的供需矛盾显得十分突出,因此当地政府充分利用太阳能发电解决无电地区的用电具有重大的战略意义。为了更高效的利用太阳能,白天可将太阳能转化为电能,利用蓄电池将电能储存起来,需要用电时即可由蓄电池供电。

总体看来我国太阳能资源比较丰富,因此充分利用丰富的太阳能资源,采用太阳能光伏发电技术,可以节约能源,发展经济,提高人民生活水平。 1.2 太阳能充放电控制器现状

(1)太阳能光伏发电

太阳能作为新能源有着巨大的优势,所以世界各国都在努力研发新技术进行获取,比较成熟的是太阳能光伏发电技术。太阳能光伏发电现已成为新能源和可再生能源的重要组成部分,也被认为是当前世界最有发展前景的新能源技术。目前太阳能光伏发电装置已广

1

山东科技大学课程设计

泛应用于通讯,交通,电力等各个方面。

在进行太阳能光伏发电时,由于一般太阳能极板输出电压不稳定,不能直接将太阳能极板应用于负载,需要将太阳能转变为电能后存储到一定的储能设备中,如铅酸蓄电池。但只有当太阳能光伏发电系统工作过程中保持蓄电池没有过充电,也没有过放电,才能使蓄电池的使用寿命延长,效率也得以提高,因此必须对工作过程加以研究分析而予以控制,这种情况下太阳能充电控制器应运而生。

(2)充电控制器的作用及现状

太阳能充电控制器具备充电控制、过充保护、过放保护、防反接保护及短路保护等一系列功能,解决了这一难题,这样控制器在这个过程中起着枢纽作用,它控制太阳能极板对蓄电池的充电,加快蓄电池的充电速度,延长蓄电池的使用寿命。同时太阳能充放电控制器还控制蓄电池对负载的供电,保护蓄电池和负载电路,避免蓄电池发生过放现象,由此可见,控制器具有举足轻重的作用。

市目前场上有各种各样的太阳能控制器,但这些控制器主要问题对于蓄电池的保护不够充分,不合适的充放电方式容易导致蓄电池的损坏,使蓄电池的使用寿命降低。目前,控制器常用的蓄电池充电法包括三种:恒流充电法、阶段充电法和恒压充电法。但是这些方法由于充电方式单一加上控制策略不够完善,都存在一定的局限性。另一方面,当蓄电池给负载供电时,由于控制器不能时刻检测蓄电池的电压,这样很容易发生蓄电池的过放电,将会导致蓄电池的深度放电,严重影响其寿命。

所以,如何改善太阳充控制器的充放电方式,开发性能优良的充放电控制器,提高其在实际应用中的效率,成为了一个重要的研究方面。 1.3 设计主要任务

本设计研究确定了一种基于STC单片机的太阳能充放电控制器的方案,在太阳能对蓄电池的充电方式、控制器的功能要求和电路保护方面做了分析,完成了系统硬件电路设计和软件编程,实现了对蓄电池的科学管理,并将充放电控制器应用于太阳能路灯或其他负载,实现了控制功能。这里以充/放电最大电流10A,额定电压12V控制器系统为例,其实现的主要功能如下。

(1)要能自动检测太阳能电池板电压是否高于蓄电池电压,若高于蓄电池 电压,则可开启充电;若低于蓄电池电压,则不能开启充电,否则蓄电池电流会反向流向太阳能电池板而造成点亮损耗。

(2)当蓄电池电压低于10.8V时,自动关断负载(欠压关断),同时有报警功能; (3)当蓄电池电压高于14.5V,自动关断负载(过压关断)和充电电路,同时有报警功能。

(4)当蓄电池处于浮充充电状态时电压值控制在13.5V左右。

(5)当用户将太阳能电池板接反至控制器时,具有保护控制器不被毁坏的功能; (6)当用户将蓄电池接反至控制器时,要有报警功能,并且具有保护控制器不被毁坏的功能。

2

山东科技大学课程设计

2 太阳能充电控制器的总体设计方案

在确定设计方案之前,需要结合应用实例,进行一定的综合分析,更加明确控制器的作用,最后来确定整体方案。这里以太阳能充电控制器应用于太阳能光伏发电路灯系统为例,对系统各个组成部分的主要功能做详细的分析说明。 2.1 太阳能路灯系统基本结构

本系统主要针对直流照明路灯进行系统设计,所以构成太阳能路灯系统主要有四大部分组成,即太阳能极板、蓄电池、充电控制器、照明电路。太阳能路灯系统基本结构如图2-1所示。

太阳能电池板蓄电池照明电路充电控制器 图 2-1 太阳能路灯系统基本结构

从图2-1中可以看出,太阳能极板阵列将太阳能转换为电能并将电能存储到蓄电池中,蓄电池再将存储的电能输出给照明电路供电,完成能量的传递。系统各个部分的控制功能全由充电控制器来完成。

(1)太阳能电池板

如图2-2所示,太阳能电池板是利用半导体光伏效应制成的,能够直接将太阳辐射转换成电能的器件。具有很强的光伏效应半导体材料,当吸收一定能量的光子后其内部导电的载流子电子和空穴分布和浓度发生变化。光照在半导体P/N结上,就会在其两端产生光生电压,当外部接通电路时,在该电压的作用下,将会有电流流过外部电路产生一定的输出功率。在这个过程中,光电池本身不发生任何化学反应,也没有转动磨损,因此使用太阳能电池的过程中没有噪声,没有环境污染,这是其他方式发电所不能比拟的。

3

山东科技大学课程设计

图2-2 太阳能电池产生光伏效应

(2)蓄电池

这里首先介绍蓄电池工作原理。

太阳能充电控制器最主要的功能是控制太阳能极板对蓄电池的充电,蓄电池的性能和充放电的方式有很大的关系,所以在设计控制器之前需要对蓄电池的原理、充放电过程做一个分析。

一般铅酸蓄电池是由正极板、负极板、隔板、电池槽、电解液和接线端子等部分组成,极板主要有铅制成,电解液是硫酸溶液。依据化学基础理论:铅酸蓄电池释放化学能的过程(放电过程)是负极进行氧化,正极进行还原的过程;电池补充化学能的过程(充电过程)是负极进行还原,正极进行氧化的过程。分析可知,蓄电池的充电过程和放电过程是可逆的。实际上,蓄电池最重要的指标就是电解液中硫酸根的浓度,因此可以用电池中硫酸溶液的密度(比重)来衡量电池充放电的程度。

工作原理搞懂了之后,接着看蓄电池在整个系统中的作用。

在独立的太阳能光伏发电系统中,蓄电池是整个系统的重要组成部分,是对整个系统性能可靠性影响比较大的部分。在光伏发电系统中,蓄电池的主要作用有:储存能量、对太阳能极板的工作电压的进行钳位、给负载提供启动电流等。蓄电池的存在,可以解决太阳能产生电能和负载用电时间不一致不同步的问题,太阳能极板和负载两者之间电压不匹配的问题等。

(3)充电控制器

一般太阳能极板输出电压的不稳定,不能直接应用于负载,需要将太阳能转变为电能后存储到储能设备如蓄电池中,而控制器在这个过程中起着枢纽作用,其性能的好坏将会直接影响实际应用的使用效果。控制器控制太阳能极板对蓄电池的充电,为了延长蓄电池的使用寿命,必须对它的充放电条件加以限制,防止蓄电池过充电及深度充电。控制器同时负责蓄电池是否对负载供电,当蓄电池的电压在正常范围内时,控制器控制开关接通,蓄电池给负载供电;当蓄电池的电压处于欠压或是过放状态时,控制器控制开关截止,蓄电池停止对负载的供电,在这个过程中控制器起着至关重要的作用,保护负载和蓄电池。 2.2 充电控制器的控制策略

作为光伏发电系统中的关键部件,蓄电池的寿命短是阻碍整个光伏发电系统性能和推广的主要原因之一。根据蓄电池的工作原理,结合实际应用情况,在光伏发电系统中,影响铅酸蓄电池寿命的主要因素有:充电电压的设置、过放控制点的设置、温度、运行环境等。依据这些影响因素,分析蓄电池常见充放电方式局限性,对充放电方式进行了一定的改进。

(1)蓄电池常规充放电方式

目前,控制器常规的蓄电池充电法包括三种:恒流充电法、阶段充电法和恒压充电法。 恒流充电法是通过保持充电电流强度不变进行充电的方法。这种充电控制方法简单,但由于电池的可接受电流能力是随着充电过程的进行而逐渐下降的,到充电后期,充电电流多用于电解水,产生气体,使出气过多,影响蓄电池的使用寿命。

第二种是阶段充电法。这种充电方法包括二阶段充电法和三阶段充电法。二阶段充电

4

山东科技大学课程设计

法是先用恒定电流充电至预定的电压值,然后改为恒定电压完成剩余的充电,一般两阶段之间的转换电压就是第二阶段的恒电压;三阶段充电法是指在充电开始和结束时采用恒定的电流充电,中间用恒定的电压进行充电。阶段充电法这种方法虽然可以将出气量减到最少,但作为一种快速充电方法使用,实际应用中受到一定的限制。

恒压充电时要严格掌握充电电压,电压在全部充电时间里保持恒定的数值,充电电压过低,蓄电池会充不满,过高则会造成过量充电。由于充电初期蓄电池电动势较低,充电电流很大,随着充电的进行,电流将逐渐减少。这种充电方法在充电初期电流过大,对蓄电池寿命造成很大影响,且容易使蓄电池极板弯曲,将会影响蓄电池的使用。

(2)改进的充放电方式

针对目前市场上控制器的主要问题是由于对于蓄电池的保护不够充分,不合适的充电方式容易导致蓄电池的损坏,同时通过对蓄电池的工作原理和对影响蓄电池使用寿命因素的分析,本论文提出了PWM (Pulse Width Modulation)脉宽调制充电方法。 PWM是利用微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术,广泛应用在从测量、通信到功率控制与变换的许多领域中。这种充电法不仅遵循蓄电池固有的充电接受率,而且能够提高蓄电池充电接受率,这也是蓄电池充电理论的进一步发展。

PWM脉冲调制充电方式首先对电池充电一段时间,然后让电池停止充电一段时间,如此循环往复。充电脉冲使蓄电池充满电量,而间歇期使蓄电池经化学反应产生的氧气和氢气有时间重新化合而被吸收掉,从而减轻了蓄电池的内压,使下一轮的充电能够更加顺利地进行,使蓄电池可以吸收更多的电量。PWM调制充电方式使蓄电池有较充分的反应时间,减少了析气量,提高了蓄电池的充电效率。脉宽调制方式是指在固定时钟频率下,通过调节开关的通断时间来控制信号的占空比,从而实现对输出电压的调整。实际也就是以一直流电压经过以一定频率打开与闭合开关的控制来改变电压。输出电压波形如图2-3所示。

电压U0tT时间

图2-3 输出电压波形

针对目前市场上的太阳能充电控制器当蓄电池给负载供电时,没有时刻检测蓄电池的电压,很容易导致蓄电池的深度放电这个问题,本论文提出时刻在线检测蓄电池电压来避免蓄电池发生过放现象,保护蓄电池,提高其使用寿命。 2.3 控制器的整体设计方案

通过对应用实例的分析,更加明确太阳能充电控制器的在系统中重要性和作用,同时

5

山东科技大学课程设计

依照其功能要求和改进的控制策略,最后确定了整体设计方案。

本系统以STC89C52单片机为主控芯片,利用分压电路对蓄电池的电压、进行采样,然后经过A/D转换将检测电压数据输入到单片机中进行处理,通过液晶芯片把电压值显示出来方便调整。单片机在软件程序的控制下输出PWM控制信号,经光耦驱动MOSFET管开启与关闭来控制充放电电路。该系统可以实现控制蓄电池的最优充放电,有效的延长蓄电池的寿命。系统整体结构框图如图2-4所示。

太阳能电池板光耦驱动电路液晶1602电压显示电路充电电路铅酸蓄电池A/D转换电路主控芯片STC89C52单片机AT24C02数据存储电路负载放电电路光耦驱动电路RS232串口通信电路 图2-4 系统整体结构框图

以上通过对控制器、被控对象蓄电池的分析,结合硬件资源和软件控制策略,进行了硬件电路设计和软件编程设计,最终确定整体设计方案。整体方案设计,讲述了光伏发电技术中最重要部分控制器和蓄电池的作用,控制器主要负责控制太阳能极板对蓄电池的充电以及控制蓄电池对负载的供电。由于不合适的充放电方式会导致蓄电池的损坏,缩短蓄电池的使用寿命,本论文提出了PWM脉宽调制充电方法,这种充电方法能够使蓄电池有较充分的反应时间,与以前的充电方式相比,提高了蓄电池的充电效率。同时提出了时刻在线检测蓄电池电压的放电控制方法,避免蓄电池发生过放现象,保护蓄电池。各个部分的控制功能通过对单片机进行软件编程来实现。

6

山东科技大学课程设计

3 太阳能充电控制器的硬件电路设计

在整体方案的指导下,依据工程设计的常见思路,本论文从硬件电路设计和软件设计两个方面入手,运用模块化的设计方法去进行控制器的设计。

硬件电路主要由以下几部分组成:单片机最小系统、充放电电路、光耦驱动电路、A/D转换电路、LCD显示电路、E2PROM数据存储电路、串口通信电路等。下面先从系统层次原理图入手,对系统原理进行详细的分析,然后再对具体电路地进行一一介绍。 3.1 系统层次原理图

系统层次原理图如图3-1所示,电路设计以STC89C52单片机作为主控芯片构成控制电路模块对整个电路控制。首先采用并联分压方式对蓄电池电压采集后,送到AD模块中的A/D转换器进行转换得到一个数字信号的电压值,再将此信号送入到控制模块中单片机进行处理;然后在软件程序控制下,单片机输出控制信号送到充放电模块中,经光耦驱动电路来控制MOSFET。控制MOSFET管导通的方式是脉冲宽度调制(PWM),根据载荷变化来调制MOSFET管栅的偏置,达到实现开关功能。

图 3-1 系统原理图

最后通过通信模块实现数据的传送和保存。串口通信模块采用MAX232芯片进行TTL电平和RS-232电平之间的转换,加入串口的目的主要是使控制器具有远程通信或远程监控功能,同时方便将每天的异常状态数据记录下来,供工作人员查看。数据存储电路模块,使得当电压出现异常时,让蜂鸣器报警,同时把异常电压值通过I2C总线存放在E2PROM中,作为以后分析使用。 3.2 单片机最小系统 3.2.1 STC89C52的简介

STC89C52是一种低功耗、高性能CMOS 8位微控制器,具有8K在系统可编程Flash

7

山东科技大学课程设计

存储器。使用STC公司高密度非易失性高加密性存储器技术制造,与工业80C51产品指令和引脚完全兼容。在芯片内部,拥有很高频率8位CPU和在系统可编程Flash,使得

STC89C52为众多嵌入式控制应用系统提供高灵活、有效的解决方案。

STC89C52具有以下标准功能:8k字节Flash,256字节RAM,32位I/O 口线,看门狗定时器,2个数据指针,三个16位定时器/计数器,一个6向量2级中断结构,全双工串行口,片内晶振及时钟电路。另外,STC89C52具有低功耗设计,支持2种软件可选择节电模式。空闲模式下,CPU停止工作,允许RAM、定时器/计数器、串口、中断继续工作。掉电保护方式下,RAM内容被保存,振荡器被冻结,单片机一切工作停止,直到下一个中断或硬件复位为止。同时该芯片还具有PDIP、TQFP和PLCC等三种封装形式,以适应不同产品的需求。而且STC89C52的工作频率很宽,可以在0~35MHz之间选择,芯片具有超强抗干扰性,加密性强。

STC89C52常见的是PDIP封装,是一个有40个引脚的芯片,引脚如图3-2所示。按其功能类别将它们分为三类:

(1)电源和时钟引脚。如VCC、GND、XTAL1、XTAL2。

(2)编程控制引脚。RST、PSEN、ALE/PROG、EA/VPP。 (3)I/O口引脚。如P0、P1、P2、P3。

图 3-2 STC89C52引脚图

这里仅详细介绍编程引脚:

(1)RST:复位输入。晶振工作时,RST引脚持续2个机器周期高电平将使单片机复位。看门狗计时完成后,RST脚输出96个晶振周期的高电平。特殊寄存器AUXR(地址8EH)上的DISRTO位可以使此功能无效。DISRTO默认状态下,复位高电平有效。

(2) ALE/PROG:地址锁存控制信号(ALE)是访问外部程序存储器时,锁存低8 位

8

山东科技大学课程设计

地址的输出脉冲。在flash编程时,此引脚(PROG)也用作编程输入脉冲。在一般情况下,ALE以晶振六分之一的振荡频率输出脉冲,可作为外部定时器或时钟使用。

如果需要,通过将地址为8EH的SFR的第0位置“1”,ALE操作将无效。这一位置“1”,ALE仅在执行MOVX或MOVC指令时有效。否则,ALE将被微弱拉高。这个ALE使能标志位(地址为8EH的SFR的第0位)的设置对微控制器处于外部执行模式下无效。

(3)PSEN:外部程序存储器选通信号(PSEN)是外部程序存储器选通信号。

PSEN在每个机器周期被激活两次,当STC89C52从外部程序存储器执行外部代码时,

而在访问外部数据存储器时,PSEN将不被激活。

(4)EA/VPP:访问外部程序存储器控制信号。为使能从0000H 到FFFFH的外部程序存储器指令,EA必须接GND。为了执行内部程序指令,EA应该接VCC。在flash编 程期间,EA也接收12伏Vpp电压。 3.2.2 单片机的最小系统及扩展电路

单片机是系统的主控芯片,为了使整个电路得到很好的控制,首先必须构建最小系统是单片机可以工作起来。本设计单片机最小系统扩展电路包括上电复位电路,时钟电路,工作指示灯和蜂鸣器报警电路等。

(1)时钟电路

单片机内部有一个用于构成振荡器的高增益反相放大器,此放大器的输入端和输出端分别是引脚XTAL1和XTAL2,在XTAL1和XTAL2上外接时钟源即可构成时钟电路,CPU的所有操作均在时钟脉冲同步下进行。片内振荡器的振荡频率非常接近晶振频率,一般多在1.2MHz~12MHz之间选取。时钟电路如图3-3所示。电路中C6、C7是反馈电容,其值在5pF~30pF之间选取,本电路选用的电容为30pF,晶振频率为11.0952MHz。

图 3-3 时钟电路

图 3-4 复位电路

9

山东科技大学课程设计

(2)复位电路

复位是单片机的初始化操作。其主要功能是把PC初始化为0000H,使单片机从0000H单元开始执行程序。除了进入系统的正常初始化之外,当由于程序运行出错或操作错误使系统处于死锁状态时,为摆脱困境,也需按复位键重新启动。

单片机的复位电路如图3-4所示。本系统采用的是上电+电平按钮复位,上电复位是通过外部复位电路的电容充电来实现的。按钮复位是当按钮按下后,电源通过电阻R14施加到复位端上,实现单片机复位。

复位电路虽然简单,但其作用非常重要。一个单片机系统能否正常运行,首先要检查是否能复位成功。初步检查可用示波器探头监视RST引脚,按下复位键,观察是否有足够幅度的波形输出(瞬时的),还可以通过改变复位电路电阻和电容值进行实验。

(3)工作状态指示灯电路

本设计可以时刻检测蓄电池电压,为了更好的进行监控,要对整个电路的工作状态进行指示,这是很有必要的。工作状态指示灯电路如图3-5所示。其中LED1为正常充电指示灯,LED2为过压指示灯,LED3为欠压指示灯。串联的电阻的目的是为了限制通过发光二极管的电流太大而将其烧毁。

图 3-5工作状态指示灯电路 图 3-6 蜂鸣器报警电路 (4)蜂鸣器报警电路

报警电路采用蜂鸣器来发出报警声音,由于STC89C52输出引脚的驱动能力较弱,所以蜂鸣器要加三极管进行驱动。

在对蓄电池电压实时监测的过程中,一旦发现检测电压值连续超出阈值范围,便启动自身报警电路,即当电压超过程序设定的最高值或最低值时,单片机的P2.6引脚(beep端)输出低电平,三极管随之导通,驱动蜂鸣器发出报警信号。蜂鸣器报警电路图如图3-6所示。

3.3 充放电电路

充放电电路如图3-7所示,电路由防反充二极管D1、滤波电容C4和C5、稳压管D2、续流二极管D3、MOSFET管Q1和Q2等构成。二极管D1是为了防止反充,当阴天或晚上蓄电池的电压高于太阳能电池板的电压时,D1就生效,可以防止蓄电池电流流向太阳能

10

山东科技大学课程设计

电池板。分析可知,通过控制MOSFET管闭合和断开的时间(即PWM—脉冲宽度调制),就可以控制输出电压。所使用的MOSFET是电压控制单极性金属氧化物半导体场效应晶体管,所需驱动功率较小。而且MOSFET只有多数载流子参与导电,不存在少数载流子的复合时间,因而开关频率可以很高,非常适合作控制充放电开关。设计中采用IRL2703- N沟道MOSFET管,N沟道MOSFET的导通电压Vth>0。当光耦U2断开时,由于Q1的G极电压接近蓄电池电压,S极是接地,使得Vgs>0,当G极电压达到一定值时,Q1导通。电容C4是太阳能电池板输出电压滤波,使得更稳定地给蓄电池充电。电容C5是对蓄电池输出电压进行滤波,以保证负载供电电路的稳定性。图中稳压管D2用来对蓄电池进行稳压作用。当用户将蓄电池反接至控制器时,续流二极管D3可以进行续流,从而保护控制器不被毁坏。

图 3-7 充放电电路

按程序设计当检测到蓄电池的电压低于12V,充电模式为均充,Q1为完全导通状态,也就是导通的脉冲占空比最大;当检测到蓄电池的电压在12V-14.5V,充电模式为浮充,Q1导通与不导通的占空比例变小,;当检测到蓄电池的电压等于15V左右,Q1截止使充电停止,同时Q2也关闭来关断负载。当检测到蓄电池的电压低于10.8V,Q2关闭停止放电,关断负载来实现欠压关断。 3.4光耦驱动电路

为了增加系统的可靠性,本设计用光电耦合器实现单片机控制电路和充放电电路的隔离。光耦驱动电路如图3-8所示。M0S管Q1控制着充电电路,当充电控制信号PWM为低电平时,光耦内部的发光二极管的电流近似为零,右侧三极管不导通,输出端两管脚间的电阻很大,相当于开关“断开”,输出端K1被抬高,电阻R9右侧被稳压管D2稳压到12V左右,MOSEFT的Vgs>0,MOS管Q1开启,太阳能极板开始对蓄电池充电;当充电控制器信号为高电平时,光耦内部的发光二极管发光,三极管导通,输出端两管脚间的电阻变小,相当于开关“接通”,此时从U2输入的电压经光耦流向接地端,K1处的电压接近为零,MOSEFT的Vgs<0,Q1截止,充电电路关断。这就是充电电路原理。M0S管Q2控制着放电电路,其原理与Q1相似。

11

山东科技大学课程设计

图 3-8 光耦驱动电路

3.5 A/D转换电路

本系统设计的STC89C52单片机没有内置的A/D转换模块,因此需要先采集蓄电池的电压,然后经A/D转换才可接入单片机。市场中集成的A/D转换器品种很多,选用时需要综合考虑各种因素进行选取。一般逐次比较型A/D转换器用到较多,本设计采用8位并行A/D转换器芯片ADC0804。因为蓄电池电压的采集转换在系统中极为重要,所以下面对所选ADC0804芯片及在本系统中是典型连接电路予以介绍。 3.5.1 ADC0804的简介

AD转换就是模数转换,顾名思义,就是把模拟信号转换成数字信号。AD转换器最主要的技术参数是转换速度和转换精度,由于逐次比较型兼有并行A/D转换器转换速度高和双积分型转换精度高的优点,所以得到普遍应用。ADC0804就是这类集成A/D转换器。

ADC0804 为一只具有20引脚并行8位CMOS工艺逐次比较型的集成A/D 转换器, 其规格如下:

(1) 高阻抗状态输出,分辨率:8 位(0~255) (2) 存取时间:135 us ;转换时间:100 us (3) 总误差:正负1LSB (4) 工作温度:0度~70度; (5) 模拟输入电压范围:0V~5V

(6) 参考电压:2.5V;工作电压:5V

(7) 输出为三态结构,可直接连接在数据总线上。

12

山东科技大学课程设计

ADC0804引脚图如图3-9所示,其各个引脚的功能:

CS— 芯片片选信号输入端,低电平有效,一旦CS有效,表明A/D转换器别选中,

可启动工作。

DB0~DB7 处理高阻抗:RD RD—外部读取转换结果的控制输出信号。RD为 1 时,为 0 时,数字数据才会输出。

,当WR 由 WR—用来启动转换的控制输入,相当于 ADC 的转换开始(CS=0 时)1变为 0时,转换器被清除:当WR 回到 1时,转换正式开始。

图 3-9 ADC0804引脚图

CLK IN—时钟信号输入端

CLK R:内部时钟发生器的外接电阻端,与CLK配合可有芯片自身产生时钟脉冲,其振荡频率为 1/(1.1RC)

INTR—中断请求信号输出,端,低地平动作.,表明本次转换已完成。

VIN(+) VIN(-) ——差动模拟电压输入。输入单端正电压时, VIN(-)接地:而差动输入时, 直接加入 VIN(+) VIN(-).

AGND,DGND——模拟信号以及数字信号的接地. VREF/2—参考电平输入,决定量化单位。 DB0~DB7—三态特性数字信号输出端. VCC: 电源供应以及作为电路的参考电压. 3.5.2 ADC0804外围接线电路

(1)电压采集电路

如图3-10所示,电压采集电路使用两个串联的电阻,大小比例为2:1,然后并联在需

13

山东科技大学课程设计

要检测的电压两端,从两个电阻中间采集电压。由分压公式得出采集的电压为ADIN,当蓄电池充满电时电压大概为14.5V,计算出采集到的电压为4.8V,符合A/D转换芯片的ADC0804的输入值。

图 3-10 电压采集电路

(2)ADC0804构成的典型A/D转换电路

图 3-11 A/D转换电路

按照芯片手册中ADC0804的典型接法,系统中设计的A/D转换电路如3-11所示。单片机的P2.7引脚,用来实现片选;RD、WR分别接单片机的P3.6和P3.7引脚,进行读写控制;CLK、CLKR、GND之间用电阻和电容构成RC振荡电路,用来给ADC0804提供工作所需的脉冲。

蓄电池的电压采集信号ADIN从6脚引入,在内部采集转换后,从数字输出端输出到单片机的P1口,通过读P1口数据,便可以得到蓄电池的电压,实现实时在线检测。

14

山东科技大学课程设计 3.6 LCD显示电路

液晶具有体积小、功耗低,显示清晰的优点,所以比较适合作显示使用。为了更好的显示电压值,同时扩展自己学习芯片的能力,本设计用液晶1602来显示蓄电池的电压值。在使用1602之前,我们首先查阅其使用手册,对其进行一定的了解。从芯片手册中,可以得到1602液晶的主要技术资料,如表3-1所示,通过此表我们可以知道1602工作电压和显示容量,可以验证设计选择的是否合适。

表 3-1 1602的主要技术参数

显示容量 芯片工作电压 工作电流

模块最佳工作电压 字符尺寸

16?2个字符

4.5~5.5V

2.0mA(5.0V) 5.0V

2.95?4.35(W?H)mm

显然,1602液晶可以满足要求,接下来介绍其各个引脚的功能,为后面设计电压显示电路做准备。1602引脚功能如表3-2所示。

表 3-2 1602引脚功能表 引脚 1 2 3 4 5 6 7-14

符 号 Vss VDD VO RS R/W E DB0-DB7

名 称 接地 电路电源

0V 5V±10%

功 能 液晶显示对比度调节

用于调节对比度

寄存器选择信号 读/写信号 片选信号 数据线

H:数据寄存器 L:指令寄存器

H:读 L:写 下降沿触发,锁存数据 数据传输

15

山东科技大学课程设计

图 3-12 电压显示电路

根据1602的技术参数和引脚功能, 1602与单片机连接构成的电压显示电路如图3-12所示。EN使能端接单片机的P2.2引脚,用来实现片选;RS接单片机P2.0引脚,进行数据和命令选择;R/W接单片机P2.1引脚,进行读写控制; 为防止直接加5V电压烧坏背光灯,在15脚串接一个10 的电阻用于限流。液晶3端通过接一个10K 电位器接地来调节显示对比度。数据输入端D0-D7接单片机的P0口用于电压数据的传送。 3.7 E2PROM数据存储电路

为了把电路发生异常时的蓄电池电压记录下来,需要用存储芯片进行数据保存。若采用普通存储器,在掉电时需要备用电池供电,并需要在硬件上增加掉电检测电路,但存在电池不可靠及扩展芯片占用单片机过多口线的缺点。为了解决这一难题,本设计采用具有I2C总线接口的串行E2PROM器件,这里选择AT24C02芯片。AT24C02可有效解决掉电数据保存问题,可对所存在数据保存100年,并可多次擦写,擦写次数可达10万次以上。

AT24C02是一个2K位串行CMOS E2PROM, 内部含有256个字节,采用先进CMOS技术实质上减少了器件的功耗。AT24C02内部有一个8字节页写入数据缓冲器。该器件通过I2C总线接口进行操作,有一个专门的写保护功能。为了更好的使用AT24C02,首先来介绍其各个引脚功能,如表3-3 所示。

表 3-3 AT24C02管脚描述

管脚名称 A0 A1 A2 SDA SCL

功能

可编程地址输入端 串行数据/地址 串行时钟

16

山东科技大学课程设计

WP 写保护

电源端,+1.8V~6.0V 工

Vcc

作电压

GND 地

I2C串行总线一般有两根信号线,一根是双向的数据线SDA,另一根是时钟线SCL。所有接到I2C总线设备上的串行数据SDA都接到总线的SDA上,各设备的时钟线SCL接到总线的SCL上。根据各引脚的功能,依据IC总线系统的典型硬件连接图,AT24C02与单片机连接构成的数据存储电路如图3-13所示。

2

图 3-13 数据存储电路

3.8 串口通信电路

随着单片机系统的广泛应用和计算机网路技术的普及,单片机的通信功能愈来愈显得重要。单片机通信是指单片机与计算机或单片机与单片机之间的信息交换,不过通常使用的是单片机与计算机之间的通信。通信有并行和串行两种方式。由于并行通信存在使用传输线较多,长距离传送成本高且收、发方的各位同时接受存在困难等诸多问题,所以在现代单片机测控系统中,信息的交换多采用串行通信方式。

本设计中加入串行通信电路的目的主要有三个:一是方便给单片机下载程序;二是使控制器具有远程通信或远程监控的功能;三是将控制器每天采集到数据的极限值和发生异常状态时的数据记录下来,供用户查看。由于单片机的电平和计算机电平不兼容,设计中采用MAX232芯片进行TTL电平和RS-232电平之间的转换。而且系统采用易于实现的异

17

山东科技大学课程设计

步串行通信方式,用最简单也最实用的奇偶校验作为串行通信错误校验方式。

MAX232芯片是专门为电脑的RS-232标准串口设计的单电源电平转换芯片,使用+5v单电源供电。其主要特点:

(1)符合所有的RS-232C技术标准 (2)只需要单一 +5V电源供电

(3)片载V-

(4)功耗低,典型供电电流5mA (5)内部集成2个RS-232C驱动器 (6)内部集成两个RS-232C接收器

(7)高集成度,片外最低只需4个电容即可工作。

了解芯片的主要特点之后,接下来我们来认识MAX232它的各个引脚的功能,即有什么作用,以更好地设计串口通信电路。其引脚图如图3-14所示。

第一部分是电荷泵电路。由1、2、3、4、5、6脚和4只电容构成。功能是产生+12v和-12v两个电源,提供给RS-232串口电平的需要。

第二部分是数据转换通道。由7、8、9、10、11、12、13、14脚构成两个数据通道。

其中13脚(R1IN)、12脚(R1OUT)、11脚(T1IN)、14脚(T1OUT)为第一数据通道。 8脚(R2IN)、9脚(R2OUT)、10脚(T2IN)、7脚(T2OUT)为第二数据通道。

TTL/CMOS电平从T1IN、T2IN输入转换成RS-232电平从T1OUT、T2OUT送到电脑DB9插头;DB9插头的RS-232数据从R1IN、R2IN输入转换成TTL/CMOS数据后从R1OUT、R2OUT输出。

第三部分是供电。15脚GND、16脚VCC(+5v)

图3-14 MAX232的引脚图

+10V和-10V电压V+、

按照串行通信原理,根据RS-232串口协议和MAX 232芯片的引脚功能,结合STC89C52单片机串行中断方式,本设计采用串口方式1(10位数据的异步通信)来构建

18

山东科技大学课程设计

串口通信电路。电路如下图3-15所示。

设计中T1IN连接CMOS电平的单片机的串行发送端;T1OUT连接电脑的RS-232C串口的接收端PCRXD;同理,R1IN连接电脑的RS-232C串口的发送端PCTXD;R1OUT连接CMOS电平的单片机的串行接收端。当然单片机和DB9要共地,这是实现串行通信的前提条件。

图3-15 串口通信电路

本章对充放电控制器的原理以及具体的硬件实现电路进行了详细的介绍,并对电路中使用到的芯片也予以描述,使读者通过阅读可以清晰的明白控制器的设计思路和实现过程。

19

山东科技大学课程设计

4 太阳能充电控制器的软件设计

软件设计采用C语言来实现,受C语言模块化编程设计思想的启发,本系统软件设计采用模块化设计思路,即整个控制软件由许多独立的子程序(子函数)模块组成,它们之间通过函数调用实现连接。既便于调试,连接,又便于移植、修改。系统软件主要完成蓄电池电压采集转换,PWM脉冲充电控制、实时LCD显示,异常报警等。包括以下几部分:系统主程序设计,电压采集转换模块, 显示模块和异常数据存储模块。 4.1 系统主程序设计

系统主程序流程图如图4-1所示。

开始初始化主函数和子函数蓄电池电压采集转换蓄电池反接关闭充放电电路Vbat<0YVbat>14.5VNVbat>12VNYVbat>10.8V直充充电N关断负载开启充电结束图 4-1 系统主程序流程图

系统主程序是整个电压测控系统中最重要的程序,是一个顺序执行的无限循环程序。蓄电池电压的采集、转换显示和异常数据的存储都在测控子程序中进行,系统应用主程序采用模块化结构,首先完成初始化,然后就开始按顺序调用各个模块子程序,通过系统自检和控制指令来实现数据处理和电路控制,有效的控制蓄电池充放电。

NY停止充电关断负载YPWM浮充充电

20

山东科技大学课程设计 4.2 电压采集转换模块

为了更好理解模数转换器的对蓄电池电压采集转换过程,下面首先对ADC0804的启动和读取时序图予以介绍。时序图如图4-2所示。

图 4-2 ADC804时序图

如图,当CS与WR同时置低,为低电平时,A/D转换器被启动,且在WR上升沿后,经过约100 uS后, 模数完成转换,转换结果存入数据锁存器,同时,INTR自动变为低电平,表示本次转换已结束。在INTR变为低电平后,若CS、RD同时来低电平,则数据锁存器的三态门打开,把数字信号送出,此时直接读取数字端口数据,便可得到转换后的数字信号。反之,若RD为高电平,三态门处于高阻状态,数据被锁存。

芯片的时序图是对芯片的操作的关键依据。按照ADC0804芯片的时序图,此模块通过对其进行启动和读取操作,主要来完成对蓄电池电压的采集转换,并对结果进行数据处理,送给后面的显示模块予以显示。由于ADC0804的转换时间很短,本设计未用中断读取A/D的数据,而是在启动A/D转换后,稍等一会时间(程序中用延时函数实现),直接读取A/D的数字输出口即可。软件设计中AD转换模块的流程图如图4-3所示。

21

山东科技大学课程设计

开始CS置低片选芯片RD置低电平读使能WR置低启动AD转换读取AD转换结果延时等待转换成实际电压值转换完成?Y结束N

图 4-3 A/D转换子程序

4.3 显示模块

通过电压采集转换子程序,通过单片机处理就可以得到蓄电池的实际电压值,本设计用液晶1602作显示器来进行显示。液晶1602通常用并行操作,作为一款显示芯片,为了使其能够正常的工作,首先必须对其进行初始化,然后按照其时序图进行正确操作,才能够得到满意的显示效果,这就是软件设计中显示模块的任务。下面就1602的初始化指令和操作时序进行介绍。

液晶1602的初始化,是让其正确显示的前提,其初始化通常如下:

EN=0;首先关闭使能,防止开始时显示乱码,同时为以后高脉冲写入数据做准备。 write_com(0x38); //设置16X2显示,5X7点阵,8位数据接口 write_com(0x0c);//设置开显示,不显示光标 write_com(0x06);//写一个字符后地址指针加1 write_com(0x01);//显示清零,数据指针清零

了解液晶1602的基本操作时序,读懂其操作时序图,是对其读写操作的关键。1602的基本时序如下:

读状态 输入:RS=L, 输出:DO~D7=状态字 读数据 输入:RS=H, 输出:无

N

R/W=H, E=H

R/W=H, E=H

写指令 输入:RS=L, R/W=L, DO~D7=指令码,E=H高脉冲

22

山东科技大学课程设计

输出:DO~D7=状态字

写数据 输入:RS=H, R/W=L, DO~D7=数据,E=H高脉冲

输出:无

作为显示用的芯片,通常对其进行写操作,1602液晶写操作时序图如图4-4所示。

图 4-4 1602液晶写操作时序图

分析时序图可知,对1602液晶进行写操作的流程如下:

(1)通过RS确定是写数据还是写操作,写命令包括使液晶的光标显示/不显示、光标是否闪烁、需/不需要移屏、在液晶的什么位置显示,等等。写数据是指要显示什么内容。

(2)读/写控制端设置为写模式,即低电平。 (3)将数据或命令送到达数据线上。

(4)给使能端E一个高脉冲将数据送入到液晶控制器,完成写操作。

关于时序图中的各个延时,不同厂家生产的液晶延时不同,不过大多数基本为纳秒级,而单片机操作最小单位为微秒级,因此在写程序是可不做延时,不过为了使液晶运行稳定,最好做简短延时即可。本设计采用C51库中自带的延时函数_nop_()(延时一个机器周期的意思)来实现简短延时。

按照1602液晶的写操作时序图,结合硬件连接电路,软件设计中电压显示模块的流程图如图4-5所示。

23

山东科技大学课程设计

开始初始化设置读取AD转换模块处理结果,得到实际电压值分离出十位、个位和十分位,送给1602液晶具体位置显示调用写命令函数,定位第一行显示的数据指针调用写数据函数,进行第一行数据显示调用写命令函数,定位第二行显示的数据指针调用写数据函数,进行第二行数据显示移屏显示结束 图4-5 电压显示流程图

4.4 数据存储模块

在对蓄电池充放电控制过程中,会出现电压值过高或过低的异常情况,很有必要对其进行存储,作为以后分析优化使用;同时我们可以按一定周期间隔性的对蓄电池电压进行采集,然后求取电压的平均值,通过分析每天的平均值情况,可以大致了解蓄电池的充电情况,这对以后优化充放电很有用。本设计用常见E2PROM器件AT24C02作为存储器对数据进行保存记录。AT24C02芯片的优点:采用IC总线标准,串行操作,可以简化硬件电路;同时具有很好的掉电保护功能。

由于STC89C52单片机没有IC总线接口,所以使用时要先通过软件模拟IC总线的工作时序,正确的调用函数就可方便的扩展IC总线接口部件。IC总线模拟时序图

2222224

山东科技大学课程设计 如图4-6所示。

SCL>4.7us>4.7usSCL>4usSDA启动信号S终止信号P >4us SDA4usSCLSCLSDASDA应答信号初始化信号

图 4-6 IC总线模拟时序图

按照时序图,设计中为了模拟IC总线通信,写出了几个关键部分的程序:总线初始化、启动信号、应答信号、停止信号等。下面以启动信号为例进行介绍。

启动信号的程序如下:在SCL为高电平期间,SDA一个下降沿为启动信号。 void start() //启动信号 { sda=1; delay1(); scl=1; delay1(); sda=0; delay1(); }

作为存储芯片最重要的是对其进行写操作,下面将给出IC总线发送一个字节的流程图如图4-7所示。并根据AT24C02字节写入方式,结合IC总线时序图,软件中实现异常数据存储的流程图如图4-8所示。

222225

山东科技大学课程设计

开始开始时钟信号SCL置低传送数据左移一位总线初始化,初始化地址指针将此位送到数据线上异常电压值送给变量a时钟信号置高标志位是否有效?NN8位送完否?Y清除标志位,调用AT24C02写字节函数Y一个应答信号的周期地址指针加1结束

结束

图 4-7 IC发送字节流程图

2 图 4-8 异常数据存储流程图

当检测蓄电池充电使电压值超过14.5v造成过充电时,首先蜂鸣器报警,标志位置1,然后调用数据存储函数把此时刻的电压值保存下来;当发生过放电时,同理如此。由于单片机的处理速度很快,因此很容易实现循环检测,做到对蓄电池状态的实时监控。 4.5 软件调试和仿真

为了检验自己设计的单片机系统是否可以正常工作以及设计合理性,很有必要对系统进行模拟仿真。通过仿真可以看出系统硬件设计的不合理部分,以方便改善使得系统更加合理;同时更重要的是验证自己编写的软件程序是否已经实现其功能,完成了相应的设计要求和设计任务。

软件调试的过程:首先根据太阳能充电控制器软件设计要完成的设计任务,然后按照C语言模块化设计的编程方法,设计出各个子模块和主程序的算法流程图,最后在KEIL C51中去编写相应的程序去实现。当然在编写程序进行软件实现过程中,遇到的第一个问题就是:程序的调试。程序编写后,进行编译,一开始发现了很多错误,一下子把自己卡住了;后来通过查看相关资料,同时咨询指导老师和同学的经验,,在软件的提示下,慢慢地修改,最终把出现的错误都改正过来了。最终在显示输出信息窗口出现了一下信息:

Build target 'Target 1' //创建目标'Target 1' compiling 控制器移屏.c... //编译文件控制器移屏.c… linking... //链接….

Program Size: data=21.1 xdata=0 code=1572 //项目大小:存储空间RAM和ROM的

26

山东科技大学课程设计

数据存储量

creating hex file from \充放电控制器\ // 创建了十六进制的目标文件 \充放电控制器\ //工程“充放电控制器”,编译结果-0个错误,0个警告。

当看到这个信息时,我很激动,知道自己编写的程序终于调试成功了。通过编写和调试程序,深深的体会到了程序编写的不易和艰辛,同时积累了很多的经验,收益匪浅。更十分地感谢我的同学和指导老师的无私帮助,是在他们的指导下,我才把程序调试无误完成了软件调试工作。

程序调试成功后,下一步就是软件仿真,是检验程序运行是否正确的关键所在,更是优化系统所必须的。Proteus软件为单片机系统提供了良好的仿真环境,所以程序调试完成后,把在KEIL中生成的目标文件HEX文件,下载在仿真系统的单片机中,进行KEIL和proteus联合调试,看系统是否能正常工作。

和自己当初预料的一样,在刚开始仿真时,遇到了许多的问题,如1602液晶不显示,系统工作状态指示灯指示状态不正确等等,调试很久找不到关键所在。无奈之下,最后去咨询指导老师该怎么办,老师说可以在模拟的电池板和蓄电池附近并联虚拟的电压表,通过电压表的示数,用以时刻监测蓄电池的充放电状态。果然加上虚拟电压表,通过监测后发现蓄电池两端电压表的示数一直显示为零,明白是AD转换部分出现问题,然后通过修改AD转换模块的子程序,同时调整硬件引脚部分与软件相一致,慢慢的调试,最终蓄电池两端电压表有了示数,液晶1602也正确的显示了。然后再慢慢调试主程序,修改控制指令,最终三个工作状态指示灯也正确指示了。

系统共三种状态:正常充电、过充、过放。这里仅列出系统在正常工作状态下的仿真图,如下图4-9所示,以便更形象的看出充电控制器内部结构设计和实现功能。

正常工作时的状态:(此时电压13.4V)

27

山东科技大学课程设计

附录Ⅰ 源程序

系统主程序代码controller.c: #include

#include //库函数头文件,代码中引用了_nop_()函数 #include \//变量定义和函数的声明 #include \ //初始化模块 #include \ //AD转换模块 #include \ //液晶1602显示模块 #include \ //数据存储模块 /*主函数*/ void main() { init(); init1602(); init24c02(); battery_v=get_ad(); yj1602(); if(battery_v<108) PWM=0; //首次要直接充电 else PWM=1; while(1) { delay(5000); battery_v=get_ad(); yj1602(); if(battery_v<0)//蓄电池反接,立刻关闭充放电电路,蜂鸣器报警 { PWM=1;FuZai=1;buzzer(); } if(battery_v>=108)//蓄电池电压大于10.8V { if(145<=battery_v) { LED1=0; //开启过电压指示灯 LED=1; LED2=1; PWM=1;//停止充电 buzzer(); //蜂鸣器报警 write=1; AT24c02();

33

山东科技大学课程设计

}

else if(120<=battery_v<145)//蓄电池电压大于12v而且小于13.5v { LED=0;

LED1=1;LED2=1;

TR0=1; //开启固定PWM充电

if(count==4) { PWM=0; } if(count==12) { count=0; PWM=1; } } else if(battery_v<120) { LED=0;LED1=1;LED2=1; TR0=0; PWM=0; }

} else { LED=1;//开启欠压指示灯 LED1=1; LED2=0; FuZai=1;//关闭负载 PWM=0; buzzer(); write=1; AT24c02(); } } }

/*****定时中断函数*****/

34

山东科技大学课程设计

void timer0() interrupt 1 { TH0=(65536-50000)/256; TL0=(65536-50000)%6;//定时时间为50ms,每50ms中断一次 count++; }

以下代码为define.h //变量定义和函数的声明 #define uchar unsigned char #define uint unsigned int // 定义控制信号端口 //充放电控制端口

sbit PWM= P3^2;//蓄电池开关 sbit FuZai=P3^3;//负载开关

sbit LED=P2^3;//充电指示灯 sbit LED1=P2^4;//充电指示灯 sbit LED2=P2^5;//欠压指示灯 sbit beep=P2^6;//蜂鸣器控制位 uchar count,battery_v; //AD转换

sbit csad=P2^7; //定义AD的片选位 sbit adwr=P3^6; //定义AD的WR端口 sbit adrd=P3^7; //定义AD的RD端口 unsigned char V1,V2,V3,adval,ad_vo; //1602液晶显示

sbit RS=P2^0; //P2.0 sbit RW=P2^1; //P2.1 sbit EN=P2^2; //P2.2

unsigned char code table1[]=%unsigned char code table2[]=\ N:%unsigned char code lcdd[]=%uchar xs_vo,num; //AT24c02保存数据

bit write=0; //写24C02的标志; sbit scl=P2^4; sbit sda=P2^5; uchar p=2,a1; RS232串口通信

35

山东科技大学课程设计

sbit RXD=P3^0; sbit TXD=P3^1; /*声明调用函数*/

void init();//初始化主函数

void delay(unsigned int t); //可控延时函数

void delay1(); //软件实现延时函数,5个机器周期 void buzzer(); uchar get_ad(); // AD程序 //1602液晶显示部分

void write_com(uchar com); void write_data(uchar date); void init1602(); void yj1602();

//AT24c02保存数据 void init24c02(); void start(); //启动 void stop(); //停止 void respons(); //应答 void write_byte(uchar date); //uchar read_byte();

void write_add(uchar address,uchar date); //uchar read_add(uchar address); void AT24c02();

以下代码为init.h //初始化模块 void init()//初始化主函数 { TMOD=0x01; TH0=(65536-50)/256; TL0=(65536-50)%6;//定时时间为50ms,每50ms中断一次 EA=1; ET0=1; PWM=1;//初始化时先关闭充电 LED=0;//开启正常工作指示灯 LED1=1;//关闭异常指示灯 LED2=1; beep=1; write=0; }

36

山东科技大学课程设计

/*延时函数*/

void delay(unsigned int t) {

unsigned int j,i; for(i=0;i

for(j=0;j<110;j++); }

/*延时函数1*/

void delay1() {

_nop_(); _nop_(); _nop_(); _nop_(); _nop_(); }

//蜂鸣器报警函数 void buzzer() { beep=0; delay(10); beep=1; }

以下代码为AD.h //AD转换模块 //ad转换程序 uchar get_ad() // AD程序 { csad=0; //置CSAD为0, adwr=1; _nop_(); adwr=0; //启动AD转换 _nop_(); adwr=1;

delay(2); //AD转换时间 P1=0xff; //读取P1口之前先给其写全1 adrd=1; //选通ADCS _nop_(); adrd=0; //AD读使能 _nop_();

37

本文来源:https://www.bwwdw.com/article/zbm7.html

Top