版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
山东科技大学课程设计图3-2STC89C52引脚图这里仅详细介绍编程引脚:(1)RST:复位输入。晶振工作时,RST引脚持续2个机器周期高电平将使单片机复位。看门狗计时完成后,RST脚输出96个晶振周期的高电平。特殊寄存器AUXR(地址8EH)上的DISRTO位可以使此功能无效。DISRTO默认状态下,复位高电平有效。(2)ALE/:地址锁存控制信号(ALE)是访问外部程序存储器时,锁存低8位地址的输出脉冲。在flash编程时,此引脚()也用作编程输入脉冲。在一般情况下,ALE以晶振六分之一的振荡频率输出脉冲,可作为外部定时器或时钟使用。如果需要,通过将地址为8EH的SFR的第0位置“1”,ALE操作将无效。这一位置“1”,ALE仅在执行MOVX或MOVC指令时有效。否则,ALE将被微弱拉高。这个ALE使能标志位(地址为8EH的SFR的第0位)的设置对微控制器处于外部执行模式下无效。(3):外部程序存储器选通信号()是外部程序存储器选通信号。当STC89C52从外部程序存储器执行外部代码时,在每个机器周期被激活两次,而在访问外部数据存储器时,将不被激活。(4)/VPP:访问外部程序存储器控制信号。为使能从0000H到FFFFH的外部程序存储器指令,必须接GND。为了执行内部程序指令,EA应该接VCC。在flash编程期间,也接收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复位电路(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就生效,可以防止蓄电池电流流向太阳能电池板。分析可知,通过控制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相似。图3-8光耦驱动电路3.5A/D转换电路本系统设计的STC89C52单片机没有内置的A/D转换模块,因此需要先采集蓄电池的电压,然后经A/D转换才可接入单片机。市场中集成的A/D转换器品种很多,选用时需要综合考虑各种因素进行选取。一般逐次比较型A/D转换器用到较多,本设计采用8位并行A/D转换器芯片ADC0804。因为蓄电池电压的采集转换在系统中极为重要,所以下面对所选ADC0804芯片及在本系统中是典型连接电路予以介绍。3.5.1AD转换就是模数转换,顾名思义,就是把模拟信号转换成数字信号。AD转换器最主要的技术参数是转换速度和转换精度,由于逐次比较型兼有并行A/D转换器转换速度高和双积分型转换精度高的优点,所以得到普遍应用。ADC0804就是这类集成A/D转换器。ADC0804为一只具有20引脚并行8位CMOS工艺逐次比较型的集成A/D转换器,其规格如下:(1)高阻抗状态输出,分辨率:8位(0~255)(2)存取时间:135us;转换时间:100us(3)总误差:正负1LSB (4)工作温度:0度~70度;(5)模拟输入电压范围:0V~5V(6)参考电压:2.5V;工作电压:5V(7)输出为三态结构,可直接连接在数据总线上。ADC0804引脚图如图3-9所示,其各个引脚的功能:—芯片片选信号输入端,低电平有效,一旦有效,表明A/D转换器别选中,可启动工作。—外部读取转换结果的控制输出信号。为1时,DB0~DB7处理高阻抗:为0时,数字数据才会输出。—用来启动转换的控制输入,相当于ADC的转换开始(=0时),当由1变为0时,转换器被清除:当回到1时,转换正式开始。图3-9ADC0804引脚图CLKIN—时钟信号输入端CLKR:内部时钟发生器的外接电阻端,与CLK配合可有芯片自身产生时钟脉冲,其振荡频率为1/(1.1RC)—中断请求信号输出,端,低地平动作.,表明本次转换已完成。VIN(+)VIN(-)——差动模拟电压输入。输入单端正电压时,VIN(-)接地:而差动输入时,直接加入VIN(+)VIN(-).AGND,DGND——模拟信号以及数字信号的接地.VREF/2—参考电平输入,决定量化单位。DB0~DB7—三态特性数字信号输出端.VCC:电源供应以及作为电路的参考电压.3.5.2ADC0804外围接线电路(1)电压采集电路如图3-10所示,电压采集电路使用两个串联的电阻,大小比例为2:1,然后并联在需要检测的电压两端,从两个电阻中间采集电压。由分压公式得出采集的电压为ADIN,当蓄电池充满电时电压大概为14.5V,计算出采集到的电压为4.8V,符合A/D转换芯片的ADC0804的输入值。图3-10电压采集电路(2)ADC0804构成的典型A/D转换电路图3-11按照芯片手册中ADC0804的典型接法,系统中设计的A/D转换电路如3-11所示。单片机的P2.7引脚,用来实现片选;、分别接单片机的P3.6和P3.7引脚,进行读写控制;CLK、CLKR、GND之间用电阻和电容构成RC振荡电路,用来给ADC0804提供工作所需的脉冲。蓄电池的电压采集信号ADIN从6脚引入,在内部采集转换后,从数字输出端输出到单片机的P1口,通过读P1口数据,便可以得到蓄电池的电压,实现实时在线检测。3.6LCD显示电路液晶具有体积小、功耗低,显示清晰的优点,所以比较适合作显示使用。为了更好的显示电压值,同时扩展自己学习芯片的能力,本设计用液晶1602来显示蓄电池的电压值。在使用1602之前,我们首先查阅其使用手册,对其进行一定的了解。从芯片手册中,可以得到1602液晶的主要技术资料,如表3-1所示,通过此表我们可以知道1602工作电压和显示容量,可以验证设计选择的是否合适。表3-11602的主要技术参数显示容量162个字符芯片工作电压4.5~5.5V工作电流2.0mA(5.0V)模块最佳工作电压5.0V字符尺寸2.954.35(WH)mm显然,1602液晶可以满足要求,接下来介绍其各个引脚的功能,为后面设计电压显示电路做准备。1602引脚功能如表3-2所示。表3-21602引脚功能表引脚符号名称功能1Vss接地0V2VDD电路电源5V±10%3VO液晶显示对比度调节端用于调节对比度4RS寄存器选择信号H:数据寄存器L:指令寄存器5R/W读/写信号H:读
L:写6E片选信号下降沿触发,锁存数据7-14DB0-DB7数据线数据传输图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.7E2PROM数据存储电路为了把电路发生异常时的蓄电池电压记录下来,需要用存储芯片进行数据保存。若采用普通存储器,在掉电时需要备用电池供电,并需要在硬件上增加掉电检测电路,但存在电池不可靠及扩展芯片占用单片机过多口线的缺点。为了解决这一难题,本设计采用具有I2C总线接口的串行E2PROM器件,这里选择AT24C02芯片。AT24CAT24C02是一个2K位串行CMOSE2PROM,内部含有256个字节,采用先进CMOS技术实质上减少了器件的功耗。AT24C02内部有一个8字节页写入数据缓冲器。该器件通过I2C总线接口进行操作,有一个专门的写保护功能。为了更好的使用AT24C02,首先来介绍其各个引脚功能,如表3-3所示表3-3AT24C02管脚描述管脚名称功能A0A1A可编程地址输入端SDA串行数据/地址SCL串行时钟WP写保护Vcc电源端,+1.8V~6.0V工作电压GND地I2C串行总线一般有两根信号线,一根是双向的数据线SDA,另一根是时钟线SCL。所有接到I2C总线设备上的串行数据SDA都接到总线的SDA上,各设备的时钟线SCL接到总线的SCL上。根据各引脚的功能,依据总线系统的典型硬件连接图,AT24C02与单片机连接构成的数据存储电路如图3-13所示。图3-13数据存储电路3.8串口通信电路随着单片机系统的广泛应用和计算机网路技术的普及,单片机的通信功能愈来愈显得重要。单片机通信是指单片机与计算机或单片机与单片机之间的信息交换,不过通常使用的是单片机与计算机之间的通信。通信有并行和串行两种方式。由于并行通信存在使用传输线较多,长距离传送成本高且收、发方的各位同时接受存在困难等诸多问题,所以在现代单片机测控系统中,信息的交换多采用串行通信方式。本设计中加入串行通信电路的目的主要有三个:一是方便给单片机下载程序;二是使控制器具有远程通信或远程监控的功能;三是将控制器每天采集到数据的极限值和发生异常状态时的数据记录下来,供用户查看。由于单片机的电平和计算机电平不兼容,设计中采用MAX232芯片进行TTL电平和RS-232电平之间的转换。而且系统采用易于实现的异步串行通信方式,用最简单也最实用的奇偶校验作为串行通信错误校验方式。MAX232芯片是专门为电脑的RS-232标准串口设计的单电源电平转换芯片,使用+5v单电源供电。其主要特点:(1)符合所有的RS-232C技术标准(2)只需要单一+5V电源供电(3)片载电荷泵具有升压、电压极性反转能力,能够产生+10V和-10V电压V+、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-14MAX232的引脚图按照串行通信原理,根据RS-232串口协议和MAX232芯片的引脚功能,结合STC89C52单片机串行中断方式,本设计采用串口方式1(10位数据的异步通信)来构建串口通信电路。电路如下图3-15所示。设计中T1IN连接CMOS电平的单片机的串行发送端;T1OUT连接电脑的RS-232C串口的接收端PCRXD;同理,R1IN连接电脑的RS-232C串口的发送端PCTXD;R1OUT连接CMOS电平的单片机的串行接收端。当然单片机和DB9要共地,这是实现串行通信的前提条件。图3-15串口通信电路本章对充放电控制器的原理以及具体的硬件实现电路进行了详细的介绍,并对电路中使用到的芯片也予以描述,使读者通过阅读可以清晰的明白控制器的设计思路和实现过程。4太阳能充电控制器的软件设计软件设计采用C语言来实现,受C语言模块化编程设计思想的启发,本系统软件设计采用模块化设计思路,即整个控制软件由许多独立的子程序(子函数)模块组成,它们之间通过函数调用实现连接。既便于调试,连接,又便于移植、修改。系统软件主要完成蓄电池电压采集转换,PWM脉冲充电控制、实时LCD显示,异常报警等。包括以下几部分:系统主程序设计,电压采集转换模块,显示模块和异常数据存储模块。4.1系统主程序设计系统主程序流程图如图4-1所示。图4-1系统主程序流程图系统主程序是整个电压测控系统中最重要的程序,是一个顺序执行的无限循环程序。蓄电池电压的采集、转换显示和异常数据的存储都在测控子程序中进行,系统应用主程序采用模块化结构,首先完成初始化,然后就开始按顺序调用各个模块子程序,通过系统自检和控制指令来实现数据处理和电路控制,有效的控制蓄电池充放电。4.2电压采集转换模块为了更好理解模数转换器的对蓄电池电压采集转换过程,下面首先对ADC0804的启动和读取时序图予以介绍。时序图如图4-2所示。图4-2ADC804时序图如图,当CS与WR同时置低,为低电平时,A/D转换器被启动,且在WR上升沿后,经过约100uS后,模数完成转换,转换结果存入数据锁存器,同时,INTR自动变为低电平,表示本次转换已结束。在INTR变为低电平后,若CS、RD同时来低电平,则数据锁存器的三态门打开,把数字信号送出,此时直接读取数字端口数据,便可得到转换后的数字信号。反之,若RD为高电平,三态门处于高阻状态,数据被锁存。芯片的时序图是对芯片的操作的关键依据。按照ADC0804芯片的时序图,此模块通过对其进行启动和读取操作,主要来完成对蓄电池电压的采集转换,并对结果进行数据处理,送给后面的显示模块予以显示。由于ADC0804的转换时间很短,本设计未用中断读取A/D的数据,而是在启动A/D转换后,稍等一会时间(程序中用延时函数实现),直接读取A/D的数字输出口即可。软件设计中AD转换模块的流程图如图4-3所示。图4-3A4.3显示模块通过电压采集转换子程序,通过单片机处理就可以得到蓄电池的实际电压值,本设计用液晶1602作显示器来进行显示。液晶1602通常用并行操作,作为一款显示芯片,为了使其能够正常的工作,首先必须对其进行初始化,然后按照其时序图进行正确操作,才能够得到满意的显示效果,这就是软件设计中显示模块的任务。下面就1602的初始化指令和操作时序进行介绍。液晶1602的初始化,是让其正确显示的前提,其初始化通常如下:EN=0;首先关闭使能,防止开始时显示乱码,同时为以后高脉冲写入数据做准备。write_com(0x38);//设置16X2显示,5X7点阵,8位数据接口write_com(0x0c);//设置开显示,不显示光标write_com(0x06);//写一个字符后地址指针加1write_com(0x01);//显示清零,数据指针清零了解液晶1602的基本操作时序,读懂其操作时序图,是对其读写操作的关键。1602的基本时序如下:读状态输入:RS=L, =H,E=H 输出:DO~D7=状态字读数据输入:RS=H, =H,E=H 输出:无写指令输入:RS=L,=L,DO~D7=指令码,E=H高脉冲输出:DO~D7=状态字写数据输入:RS=H,=L,DO~D7=数据,E=H高脉冲 输出:无作为显示用的芯片,通常对其进行写操作,1602液晶写操作时序图如图4-4所示。图4-41602液晶写操作时序图分析时序图可知,对1602液晶进行写操作的流程如下:(1)通过RS确定是写数据还是写操作,写命令包括使液晶的光标显示/不显示、光标是否闪烁、需/不需要移屏、在液晶的什么位置显示,等等。写数据是指要显示什么内容。(2)读/写控制端设置为写模式,即低电平。(3)将数据或命令送到达数据线上。(4)给使能端E一个高脉冲将数据送入到液晶控制器,完成写操作。关于时序图中的各个延时,不同厂家生产的液晶延时不同,不过大多数基本为纳秒级,而单片机操作最小单位为微秒级,因此在写程序是可不做延时,不过为了使液晶运行稳定,最好做简短延时即可。本设计采用C51库中自带的延时函数_nop_()(延时一个机器周期的意思)来实现简短延时。按照1602液晶的写操作时序图,结合硬件连接电路,软件设计中电压显示模块的流程图如图4-5所示。图4-5电压显示流程图4.4数据存储模块在对蓄电池充放电控制过程中,会出现电压值过高或过低的异常情况,很有必要对其进行存储,作为以后分析优化使用;同时我们可以按一定周期间隔性的对蓄电池电压进行采集,然后求取电压的平均值,通过分析每天的平均值情况,可以大致了解蓄电池的充电情况,这对以后优化充放电很有用。本设计用常见E2PROM器件AT24C02作为存储器对数据进行保存记录。AT24C02芯片的优点:采用总线标准,串行操作,可以简化硬件电路;同时具有很好的掉电保护功能。由于STC89C52单片机没有总线接口,所以使用时要先通过软件模拟总线的工作时序,正确的调用函数就可方便的扩展总线接口部件。总线模拟时序图如图4-6所示。图4-6总线模拟时序图按照时序图,设计中为了模拟总线通信,写出了几个关键部分的程序:总线初始化、启动信号、应答信号、停止信号等。下面以启动信号为例进行介绍。启动信号的程序如下:在SCL为高电平期间,SDA一个下降沿为启动信号。voidstart()//启动信号{ sda=1; delay1(); scl=1; delay1(); sda=0; delay1();}作为存储芯片最重要的是对其进行写操作,下面将给出总线发送一个字节的流程图如图4-7所示。并根据AT24C02字节写入方式,结合总线时序图,软件中实现异常数据存储的流程图如图4-8所示。图4-7发送字节流程图 图4-8异常数据存储流程图当检测蓄电池充电使电压值超过14.5v造成过充电时,首先蜂鸣器报警,标志位置1,然后调用数据存储函数把此时刻的电压值保存下来;当发生过放电时,同理如此。由于单片机的处理速度很快,因此很容易实现循环检测,做到对蓄电池状态的实时监控。4.5软件调试和仿真为了检验自己设计的单片机系统是否可以正常工作以及设计合理性,很有必要对系统进行模拟仿真。通过仿真可以看出系统硬件设计的不合理部分,以方便改善使得系统更加合理;同时更重要的是验证自己编写的软件程序是否已经实现其功能,完成了相应的设计要求和设计任务。软件调试的过程:首先根据太阳能充电控制器软件设计要完成的设计任务,然后按照C语言模块化设计的编程方法,设计出各个子模块和主程序的算法流程图,最后在KEILC51中去编写相应的程序去实现。当然在编写程序进行软件实现过程中,遇到的第一个问题就是:程序的调试。程序编写后,进行编译,一开始发现了很多错误,一下子把自己卡住了;后来通过查看相关资料,同时咨询指导老师和同学的经验,,在软件的提示下,慢慢地修改,最终把出现的错误都改正过来了。最终在显示输出信息窗口出现了一下信息:Buildtarget'Target1' //创建目标'Target1'compiling控制器移屏.c... //编译文件控制器移屏.c…linking... //链接….ProgramSize:data=21.1xdata=0code=1572 //项目大小:存储空间RAM和ROM的数据存储量creatinghexfilefrom"充放电控制器"...//创建了十六进制的目标文件"充放电控制器"-0Error(s),0Warning(s).//工程“充放电控制器”,编译结果-0个错误,0个警告。当看到这个信息时,我很激动,知道自己编写的程序终于调试成功了。通过编写和调试程序,深深的体会到了程序编写的不易和艰辛,同时积累了很多的经验,收益匪浅。更十分地感谢我的同学和指导老师的无私帮助,是在他们的指导下,我才把程序调试无误完成了软件调试工作。程序调试成功后,下一步就是软件仿真,是检验程序运行是否正确的关键所在,更是优化系统所必须的。Proteus软件为单片机系统提供了良好的仿真环境,所以程序调试完成后,把在KEIL中生成的目标文件HEX文件,下载在仿真系统的单片机中,进行KEIL和proteus联合调试,看系统是否能正常工作。和自己当初预料的一样,在刚开始仿真时,遇到了许多的问题,如1602液晶不显示,系统工作状态指示灯指示状态不正确等等,调试很久找不到关键所在。无奈之下,最后去咨询指导老师该怎么办,老师说可以在模拟的电池板和蓄电池附近并联虚拟的电压表,通过电压表的示数,用以时刻监测蓄电池的充放电状态。果然加上虚拟电压表,通过监测后发现蓄电池两端电压表的示数一直显示为零,明白是AD转换部分出现问题,然后通过修改AD转换模块的子程序,同时调整硬件引脚部分与软件相一致,慢慢的调试,最终蓄电池两端电压表有了示数,液晶1602也正确的显示了。然后再慢慢调试主程序,修改控制指令,最终三个工作状态指示灯也正确指示了。系统共三种状态:正常充电、过充、过放。这里仅列出系统在正常工作状态下的仿真图,如下图4-9所示,以便更形象的看出充电控制器内部结构设计和实现功能。正常工作时的状态:(此时电压13.4V)图4-9正常工作状态仿真其工作原理如下,单片机在软件程序控制下,控制着各个部分硬件电路有序工作,把从模数转换器得到的蓄电池的电压值,用1602液晶去显示,同时绿灯亮起表示系统正在充电。(注:这里为了得到更加逼真效果,仿真时采用直流电机作为负载)。由于利用C语言开发单片机与汇编语言相比,具有易于操作、规范性好、适合模块化处理且容易移植的优点,所以本设计采用C语言作为编程语言。按照C语言模块化程序设计方法,论文编制了系统主程序和各个子程序模块来实现PWM脉宽调制控制策略和各种保护,完成了软件设计任务。5总结与展望5.1设计总结通过复习以前学过的专业知识,同时对相关的资料和论文进行解读与综合分析、研究加上参与课题的实践,在导师的指导和同学的帮助下,最后基本完成了开题报告中确定的设计任务。太阳能已经成为21世纪非常重要的新能源之一。在光伏发电系统中,太阳能充电控制器起着枢纽作用,其性能优劣直接影响实际应用的效率。为了克服市场上常见充电控制器存在的对蓄电池保护不够充分的缺点,本设计基于太阳能充电控制器要实现的具体功能,加上实际工业应用严格要求,从模块化的思想出发具体开展各方面的设计工作,把硬件电路和软件编程有效结合在一起来完成设计任务。具体来讲,论文主要做了下面一些工作:(1)对铅酸蓄电池的充放电原理、影响蓄电池使用寿命的各种因素作了一定的分析,提出了改进的充、放电方式,确定了太阳能充电控制器的总体设计方案。(2)论述了基于单片机的太阳能充放电控制系统的硬件电路组成及其工作原理,并详细分析了各组成单元电路的性能及其工作原理,完成了充电控制器的硬件电路设计。控制器以STC89C52单片机为主控芯片,在软件程序控制下输出PWM控制信号,系统硬件电路设计包括单片机及外围电路设计、充放电电路设计、光耦驱动电路设计、电压显示电路设计、数据存储电路设计、串口通信电路设计等。整个系统的硬件设计采用了模块化设计结构,可以根据实际需要灵活配置,从而有利于实际应用的推广。所涉及的相关模块的电路设计,有的采用的是常见的经典电路的结构,有些是在原有结构的基础上,采用了集成度更高的现代芯片,从而使电路变得更加简单、可靠。不论怎样说,硬件电路设计,其实是一个对自己所学的专业知识吸收、分析、理解、掌握同时再创新的过程,能够灵活使用,遇到新问题能够解决目的也就达到了(3)在硬件设计的基础上,对太阳能充放电控制器进行了算法分析并编制了程序,软件编程实现对蓄电池的过充、过放、反接等保护。在软件设计过程中,深刻体会到了软件设计的灵活和多样性,在确定整体布局方案的思路指导下,先确定每个程序的结构框架即流程图,然后按照自顶向下的层次逐渐完成程序的模块化设计。设计要求是从实际应用需求中抽取而来,由于实际需求往往很复杂,因而一定要把设计要求层次化,首先实现最低要求,解决根本问题,然后再去完善、提高,这就是总结出来的软件开发思路。本设计针对太阳能充放电控制系统的研究,是对单片机技术、通信技术、电子技术和自动化等专业知识的综合运用。在设计和开发的过程中,紧密结合充电控制器的实际情况,综合了目前一些先进的充电控制策略。5.1展望由于实践经验缺乏,以及技术水平和实验条件的限制,本系统部分功能尚未完成,需要进一步完善,主要表现在以下几个方面:(1)对系统中的单片机控制功能需要进一步研究,以便找到功能更加强大的主控芯片去代替,从而更好更快的实现设计要求。(2)对蓄电池电压的采集方式过于简单,精度较低,需要探索采集精度更加精准的经典电路,使得对蓄电池的充电控制更加准确。(3)系统软件设计可增加串行中断控制方式,从而方便用上位机(如微机)通过串行通信进行有效的监控,增强对系统的在线检测和控制功能。参考文献[1]余发山,王福忠.单片机原理及应用技术.徐州:中国矿业大学出版社,2008.6[2]何立民.单片机高级教程.北京:航空航天大学出版社,2001[3]艾永乐,付子义.模拟电子技术基础.北京:中国电力出版社,2008.11[4]郭天祥.新概念51单片机C语言教程—入门、提高、开发、拓展全攻略.北京:电子工业出版社,2009.1[5]谈世哲.ProtelDXP2004电路设计基础与典型范例.北京:电子工业出版社,2007.9[6]马忠梅,张凯等.单片机的C语言应用程序设计(第四版).北京:北京航空航天大学出版社,2007.1[7]侯玉宝,陈忠平,李成群等编著.基于Proteus的51系列单片机设计与仿真.北京:电子工业出版社,2008.9[8]杨金焕.太阳能光伏发电应用技术.北京:电子工业出版社,2009.1[9]周志敏,纪爱华.太阳能光伏发电系统设计与应用实例.北京:电子工业出版社,2010.7[10]魏学业等.太阳能充电控制器研究.新能源,2009.[11]何朝阳,戴君,吴立琴.基于STCl2C54lOAD的太阳能路灯控制器设计.电子设计工程报,2007:27—30.[12]冯垛生.太阳能发电原理与应用[M].人民邮电出版社,2007[13]钟勇等.风光互补发电系统中蓄电池充放电控制器的研究.合肥:合肥工业大学,2006.11[14]张艳红等.一种新型光伏发电充放电控制器.可再生能源,2006.5[15]刘文刚等.基于单片机的新型太阳能控制器研究.广州:华南理工大学2008.11致谢回顾大学的四年学习生涯,有很多收获但也存在不足,在学习生涯即将结束之际,对四年来关心、指导、帮助和鼓励过我的老师、同学们表示衷心的感谢。本毕业论文是在高庆华老师的悉心指导下进行的。从最初的定题,到资料收集,到写作、修改,直至论文定稿,高老师都给了我耐心的指导和无私的帮助,使得我的毕业设计课题能够深入地进行下去,从而使我接触到了许多新知识和实际应用的新问题,使我做了许多有益的思考,加深了对本专业核心知识的认识和对工程设计的思考。在此首先对高老师表示诚挚的感谢和由衷的敬意!还要非常地感谢大学学习期间的授课老师和同学在学习中给我的教导和帮助,谢谢!最后,自己之所以能顺利完成,更要感谢自己的父母,如果没有他们每日辛苦的劳动与从小对我学习严格的要求,而且培养我认真做事的态度,也没有今天的我,可以说正是他们的养育和教导,才使我有了现在的成绩。附录Ⅰ源程序系统主程序代码controller.c:#include<reg52.h> #include<intrins.h> //库函数头文件,代码中引用了_nop_()函数#include"define.h" //变量定义和函数的声明#include"init.h" //初始化模块#include"AD.h" //AD转换模块#include"yj1602.h" //液晶1602显示模块#include"AT24C02.h" //数据存储模块/*主函数*/voidmain(){ init(); init1602(); init24c02(); battery_v=get_ad(); yj1602(); if(battery_v<108)PWM=0;//首次要直接充电 elsePWM=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(); } elseif(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; } } elseif(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(); } }}/*****定时中断函数*****/voidtimer0()interrupt1{ TH0=(65536-50000)/256; TL0=(65536-50000)%256;//定时时间为50ms,每50ms中断一次 count++;} 以下代码为define.h //变量定义和函数的声明#defineucharunsignedchar#defineuintunsignedint//定义控制信号端口//充放电控制端口sbitPWM=P3^2;//蓄电池开关sbitFuZai=P3^3;//负载开关sbitLED=P2^3;//充电指示灯sbitLED1=P2^4;//充电指示灯sbitLED2=P2^5;//欠压指示灯sbitbeep=P2^6;//蜂鸣器控制位ucharcount,battery_v;//AD转换sbitcsad=P2^7; //定义AD的片选位sbitadwr=P3^6; //定义AD的WR端口sbitadrd=P3^7; //定义AD的RD端口unsignedcharV1,V2,V3,adval,ad_vo; //1602液晶显示sbitRS=P2^0;//P2.0sbitRW=P2^1;//P2.1sbitEN=P2^2;//P2.2unsignedcharcodetable1[]="TYNCFDKZQXTSJ";unsignedcharcodetable2[]="D:12.0N:";unsignedcharcodelcdd[]="0123456789";ucharxs_vo,num;//AT24c02保存数据bitwrite=0;//写24C02的标志;sbitscl=P2^4;sbitsda=P2^5;ucharp=2,a1;RS232串口通信sbitRXD=P3^0;sbitTXD=P3^1;/*声明调用函数*/voidinit();//初始化主函数voiddelay(unsignedintt);//可控延时函数voiddelay1();//软件实现延时函数,5个机器周期voidbuzzer();ucharget_ad(); // AD程序//1602液晶显示部分voidwrite_com(ucharcom);voidwrite_data(uchardate);voidinit1602();voidyj1602();//AT24c02保存数据voidinit24c02();voidstart();//启动voidstop();//停止voidrespons();//应答voidwrite_byte(uchardate);//ucharread_byte();voidwrite_add(ucharaddress,uchardate);//ucharread_add(ucharaddress);voidAT24c02();以下代码为init.h //初始化模块voidinit()//初始化主函数{ TMOD=0x01; TH0=(65536-50)/256; TL0=(65536-50)%256;//定时时间为50ms,每50ms中断一次 EA=1; ET0=1; PWM=1;//初始化时先关闭充电 LED=0;//开启正常工作指示灯 LED1=1;//关闭异常指示灯 LED2=1; beep=1; write=0; }/*延时函数*/voiddelay(unsignedintt){unsignedintj,i;for(i=0;i<t;i++)for(j=0;j<110;j++);}/*延时函数1*/voiddelay1(){_nop_(); _nop_();_nop_(); _nop_();_nop_();}//蜂鸣器报警函数voidbuzzer(){ beep=0; delay(10); beep=1;}以下代码为AD.h //AD转换模块//ad转换程序ucharget_ad() // AD程序{ csad=0;//置CSAD为0, adwr=1; _nop_(); adwr=0; //启动AD转换 _nop_(); adwr=1;delay(2);//AD转换时间 P1=0xff;//读取P1口之前先给其写全1adrd=1;//选通ADCS _nop_(); adrd=0;//AD读使能 _nop_(); adval=P1; //AD数据读取赋给P1口,得到ad转换的结果 adrd=1;ad_vo=(float)adval*150.0/256.0;//得到蓄电池的电压 return(ad_vo); }以下代码为yj1602.h //液晶1602显示模块/*LCD1602显示部分子函数*/voidinit1602()//LCD初始化函数{ EN=0; write_com(0x38);//设置16X2显示,5X7点阵,8位数据接口 write_com(0x0c);//设置开显示,不显示光标 write_com(0x06);//写一个字符后地址指针加1 write_com(0x01);//显示清零,数据指针清零}voidwrite_com(ucharcom)//1602写命令函数{ RW=0; delay1(); RS=0;//RW=0,RS=0,写LCD命令字 delay1(); EN=1;//E端时序 delay1(); P0=com;//将com中的命令字写入LCD数据口 delay1(); EN=0; delay1(); delay(5); }voidwrite_data(uchardate)//1602写数据函数{RW=0;delay1();RS=1;//RW=1,RS=0,写LCD数据delay1();EN=1;//E端时序delay1();P0=date;//将dat中的显示数据写入LCD数据口delay1();EN=0;delay1();delay(5); }voidyj1602(){ ucharxs_vo; init1602(); xs_vo=battery_v; V1=xs_vo/100;V2=x
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024年度研学旅行学生研学档案管理合同3篇
- 快递咨询服务租赁合同
- 2025数字程控交换机保护合同范本
- 2024年影视制作派遣公司与企业影视制作劳务派遣合同2篇
- 广告制作服务招标合同三篇
- 2024年儿童游乐场地租赁合同附安全责任协议2篇
- 网络推广运营委托合同三篇
- 消费借款合同三篇
- 2024年GRC装饰构件新型产品研发与应用推广合同3篇
- 2024年个人租赁公司车辆合同3篇
- Unit 1 Making friends Part B(说课稿)-2024-2025学年人教PEP版(2024)英语三年级上册
- 北京市西城区2023-2024学年六年级上学期数学期末试卷(含答案)
- 跨学科实践活动5基于碳中和理念设计低碳行动方案九年级化学人教版上册
- 【MOOC】概率论与数理统计-重庆大学 中国大学慕课MOOC答案
- 车位租赁合同标准版可打印
- 机械工程技术训练(北京航空航天大学)知到智慧树章节答案
- 生活垃圾发电企业安全生产双体系
- 【初中化学】二氧化碳的实验室制取课件-2024-2025学年九年级化学人教版上册
- 外研版三年级起点五年级上册英语集体备课教案
- 电子竞技赛事裁判员培训教程
- 期末 (试题) -2024-2025学年人教PEP版英语六年级上册
评论
0/150
提交评论