引言
许多科学实验都离不开电,并且在这些实验中经常会对通电时间、电压高低、电流大小以及动态指标有着特殊的要求,因此,如果实验电源不仅具有良好的输出质量而且还具有多功能以及一定的智能化,那么就省去了许多不精确的人为操作,取而代之的是精确的微机控制,而我们所要做的就是在实验开始前对一些参数进行预设。这将会给各个领域中的实验研究带来不同程度的便捷与高效。因此,直流电源今后的发展目标之一就是不仅要在性能上做到效率高、噪声低、高次谐波低、既节能又不干扰环境,还要在功能上力求实现数控化、多功能化与智能化。本文所介绍的就是一个数控可调电源,这是一个高性能的直流稳压电源。由于在该电源中引入了单片机控制,故该电源还具有一定的智能化,可实现变压,显示输出电压、电流,预置输出电压值等功能。
本文中研究的单片机控制的线性电源,可以通过键盘预置期望输出电压值,模/数转换器对输出电压进行采样并显示在数码管上。该系统还采用了温度传感器对输出电压进行校正,使得输出电压更稳定精确度也更高。并且该系统可以给芯片提供+12V,+5V及-12V的工作电压。
由单片机控制的数控电源主要由三部分所构成,主要是电源电路,控制电路和校正电路。以LM317三端电压可调器来调节电压,其具有输出电压稳定,可调范围较大,但其缺点是输出的电流较小,所以在设计的时候还加入了扩展电流电路。
1. 概述
1.1课题来源及意义
电源技术是一种应用功率半导体器件,综合电力变换技术、现代电子技术、自动控制技术的多学科的边缘交叉技术。随着科学技术的发展,电源技术又与现代控制理论、材料科学、电机工程、微电子技术等许多领域密切相关。目前电源技术已逐步发展成为一门多学科互相渗透的综合性技术学科。他对现代通讯、电子仪器、计算机、工业自动化、电力工程、国防及某些高新技术提供高质量、高效率、高可靠性的电源起着关键作用。
-- 由于国内微电子技术、阻容器件生产技术以及磁性材料技术与一些技术先进国家还有一定的差距,因而造价不能进一步降低,也影响到可靠性的进一步提高。所以在我国的电子仪器以及机电一体化仪器中,开关稳压电源还不能得到十分广泛的普及及使用。特别是对于无工频变压器开关稳压电源中的高压电解电容器、高反压大功率开关管、开关变压器的磁芯材料等器件,在我国还处于研究、开发阶段。在一些技术先进国家,开关稳压电源虽然有了一定的发展,但在实际应用中也还存在一些问题,不能十分令人满意。这暴露出开关稳压电源的又一个缺点,那就是电路结构复杂,故障率高,维修麻烦。对此,如果设计者和制造者不予以充分重视,则它将直接影响到开关稳压电源的推广应用。当今,开关稳压电源推广应用比较困难的主要原因就是它的制作技术难度大、维修麻烦和造价成本较高。所以选择由单片机控制的线性电源具有成本低,故障少,简单实用等特点,适合推广和应用。
1.2 课题基本要求
(1)设计、制作精密数控直流电源;
(2)使用单片机构成控制系统,通过键盘预置输入电压,可显示预置电压和输出电压;
(3)掌握A/D及D/A转换及芯片使用方法;
(4)掌握数控电源的设计方法;
(5)掌握单片机软件编程方法;
(6)掌握传感器的基本原理和模拟电子电路基本原理等。
1.3相关背景介绍
直流稳压电源按习惯可分为化学电源,线性稳定电源和开关型稳定电源,它们又分别具有各种不同类型:
化学电源:
我们平常所用的干电池、铅酸蓄电池、镍镉、镍氢、锂离子电池均属于这一类,各有其优缺点。随着科学技术的发展,又产生了智能化电池;在充电电池材料方面,美国研制人员发现锰的一种碘化物,用它可以制造出便宜、小巧、放电时间长,多次充电后仍保持性能良好的环保型充电电池。
线性稳压电源 :
线性稳定电源有一个共同的特点就是它的功率器件调整管工作在线性区,靠调整管之间的电压降来稳定输出。由于调整管静态损耗大,需要安装一个很大的散热器给它散热。而且由于变压器工作在工频(50Hz)上,所以重量较大。该类电源优点是稳定性高,纹波小,可靠性高,易做成多路,输出连续可调的成品。缺点是体积大、较笨重、效率相对较低。这类直流稳压电源又有很多种,从输出性质可分为稳压电源和稳流电源及集稳压、稳流于一身的稳压稳流(双稳)电源。从输出值来看可分定点输出电源、波段开关调整式和电位器连续可调式几种。从输出指示上可分指针指示型和数字显示式型等等。
开关型直流稳压电源:
与线性稳压电源不同的一类稳电源就是开关型直流稳压电源, 开关型直流稳压电源的电路型式主要有单端反激式,单端正激式、半桥式、推挽式和全桥式。它和线性电源的根本区别在于它变压器不工作在工频而是工作在几十千赫兹到几兆赫兹。功能管不是工作在饱和及截止区即开关状态;开关电源因此而得名。开关电源的优点是体积小,重量轻,稳定可靠;缺点相对于线性电源来说纹波较大(一般≤1%VO(P-P),好的可做到十几mV(P-P)或更小)。
上述三种电源中,化学电源对环境会产生影响,开关电源的制作成本相对较高并且电路设计也较复杂。相对这两种而言,线性电源实用性更高,成本也较低,输出更稳定。下文中将会详细介绍基于AT89C51单片机的精密数字控制直流电源设计制作。
2 基于单片机的数控直流电源方案设计
基于单片机控制的数控直流电源主要由电源部分、控制部分和校正部分组成。其基本原理如图2.1所示:
图2.1 基于单片机控制的数控直流电源系统原理图
其基本工作原理为:电压通过键盘预置后由单片机控制并调节输出电压,输出电压经过A/D采样校正后送数码管显示。
基于单片机的数字控制直流电源的制作需要考虑以下两个问题:一是制作成本及工艺。在现在的商业化中,产品的成本和工艺往往是倍受重视的,它直接决定了产品的销售和发展;二是电源的输出功率以及精确度。在很多实验和领域中都需要用到精确度很高的电源,另外在民用上也需要可调节的电源。在下面的方案设计中将主要对两种数控直流电源作详细介绍和论证。
2.1 方案设计
2.1.1 方案一:开关稳压电源
开关电源就是用通过电路控制开关管进行高速的道通与截止.将直流电转化为高频率的交流电提供给变压器进行变压,从而产生所需要的一组或多组电压!转华为高频交流电的原因是高频交流在变压器变压电路中的效率要比50Hz高很多。
开关电源的工作原理是:
1.交流电源输入经整流滤波成直流;
2.通过高频PWM(脉冲宽度调制)信号控制开关管,将那个直流加到开关变压器初级上;
3.开关变压器次级感应出高频电压,经整流滤波供给负载;
4.输出部分通过一定的电路反馈给控制电路,控制PWM占空比,以达到稳定输出的目的。
交流电源输入时一般要经过厄流圈一类的东西,过滤掉电网上的干扰,同时也过滤掉电源对电网的干扰;在功率相同时,开关频率越高,开关变压器的体积就越小,但对开关管的要求就越高;开关变压器的次级可以有多个绕组或一个绕组有多个抽头,以得到需要的输出;一般还应该增加一些保护电路,比如空载、短路等保护,否则可能会烧毁开关电源。
其工作原理示意图如图2.2所示:
图2.2 开关电源工作原理示意图
图2.1画出了开关稳压电源的工作原理示意图,它是由全波整流器,开关管V,激励信号,续流二极管VD,储能电感和滤波电容C组成。实际上,开关稳压电源的核心部分是一个直流变压器。
直流变换器,它是把直流转换成交流,然后又把交流转换成直流的装置。这种装置被广泛地应用在开关稳压电源中。采用直流变换器可以把一种直流供电电压变换成极性、数值各不同的多种直流供电电压。
输入交流电压经整流滤波后以直流方式Ui输入开关管V中,由单片机控制开关管的通断。当开关管以某一频率通断时,使得输入的直流信号变为交流信号,再通过续流二极管VD及电感L把交流信号转化为直流信号,经过滤波电容C后输出到负载R上。这就是开关电源的调压原理。
2.1.2 方案二:线性稳压电源
线性稳压电源,是指调整管工作在线性状态下的直流稳压电源。调整管工作在线性状态下,是连续可变的,亦即是线性的。
线性稳压电源主要由调整管、参考电压、取样电路、误差放大电路等几个基本部分组成。另外还包括一些例如保护电路,启动电路等部分。取样电阻通过取样输出电压,并与参考电压比较,比较结果由误差放大电路放大后,控制调整管的导通程度,使输出电压保持稳定。
常用的线性串联型稳压电源芯片有:78XX系列(正电压型),79XX系列(负电压型)(实际产品中,XX用数字表示,XX是多少,输出电压就是多少。例如7805,输出电压为5V);LM317(可调正电压型),LM337(可调负电压型)。
调压原理:
图2.3 稳压调压电路原理说明图
图2.3为稳压调压电路原理说明图。LM317的2脚于1脚之间的电压恒定为恒定值1.25V,所以由固定电阻R1(应小于240Ω)与电位器RW组成取样分压电路,同时也可以作为调节输出电压,输出电压如(1)式。
UO=1.25V(1+RW/R1) (2)式
调整端1的电流极小,所以流过R1和RW的电流几乎相等(几mA电流)。通过改变电位器RW的阻值就能改变输出电压UO。此外为了保证LM317的输出功率及正常工作,还需要添加散热片,二极管D5的作用是防止输出短路。
由上面的介绍中可知,只要改变管脚1的电压,就可以实现输出可调。电位器RW固定在一个值后,通过单片机预置电压,经过D/A转化和运算放大器的电压放大达到对控制端的电压预置。所以由1脚作为控制电压的输入端,接控制部分电路。
2.2 方案论证
2.2.1 方案一分析:
开关电源的主要优点是功耗小,效率高,稳压范围宽,滤波效率高并且电路形式灵活。开关稳压电源的缺点是存在较为严重的开关干扰。开关稳压电源中,功率调整开关晶体管V工作在状态,它产生的交流电压和电流通过电路中的其他元器件产生尖峰干扰和谐振干扰,这些干扰如果不采取一定的措施进行抑制、消除和屏蔽,就会严重地影响整机的正常工作。此外由于开关稳压电源振荡器没有工频变压器的隔离,这些干扰就会串入工频电网,使附近的其他电子仪器、设备和家用电器受到严重的干扰。
另外用89C51对脉宽调制信号PWM进行控制还要考虑到频率问题。由于51系列单片机的工作频率较低,用于控制高频率的开关电源是不显示的,考虑到更换频率更高的单片机会使得制作成本升高,并且在高频下对布线要求较高也更容易产生干扰噪声。
2.2.2 方案二分析:
线性稳压直流电源的特点是:输出电压比输入电压低;反应速度快,输出纹波较小;工作产生的噪声低。通过集成稳压器调节可以使得输出电压的稳压系数较为理想,同时工作输出也很稳定。
使用LM317可调稳压器作为主要的稳压器件,一方面可以降低制作成本,另一方面使得电路的设计更简单,更使用。但和开关电源相比,线性电源的效率较低,这是由于调整管相当于一个电阻,电流流过电阻时会发热,所以工作在线性状态下的调整管,一般会产生大量的热,导致效率不高。这是线性稳压电源的一个最主要的一个缺点,调整管在发热的同时会给系统带来热噪声影响。另外,采用调整管的电源,其电源功耗都较小。当然在实际应用中可以加入扩流电路使得电源的输出功率有所提高,可以为小功率电器及设备提供可靠的电源。同时可以通过使用温度传感器校正由于调整管的发热导致的电压偏差,使得电压输出与预置电压相符合。
综上所述,使用调整管调节输出电压可以获得较稳定的电压输出,而使用开关管调节输出电压可以获得较大的电压调节范围,但是由于AT89C51单片机的工作频率较低,不适用于对开关管的脉宽进行控制,而以单片机为控制系统的线性调节作用较适用于调整管的电压调节,所以本设计采用了调整管调节电压输出的方式。
3 硬件电路设计
图2.4 基于单片机系统的数控电源系统框图
如图2.4所示,硬件电路主要由三个部分组成:一是主电源部分,该部分提供电源输出;二是副电源电路部分,该部分主要提供+12V、+5V、0V和-12V电源,为单片机及A/D、D/A转换、运算放大器提供电源;三是控制部分电路,主要包括单片机、A/D和D/A转换电路、运算放大电路及温度传感器校正电路,为最主要的控制电路,是整个制作的核心。
3.1主电源电路设计
该电路由变压器、全波整流滤波电路、集成稳压器LM317、和电流放大电路
构成。
3.1.1 变压器的选择
根据各级放大器管子的工作负载线求出最大工作电压(以变压器或扼流圈为负载的,取工作点电压)和最大电流,取其中电压最高一级的电压作为放大器供电电压,取各级最大电流之和作为放大器供电电流。通常整流后以CLC或CRC方式滤波,会出现一定的升压,故变压器输出电压可按 放大器供电电压+整流器电压降+第一级放大器前的滤波器电压降的0.8-0.9之间选取,如果整流后采取LC或RC滤波方式的,一般以0.9-0.95为宜;为使放大器有充沛的工作电流供给,变压器输出电流应该选得大些,可取放大器供电电流的1.4倍,一般超过2倍意义并不大。如果根据放大器供电要求已经得出了变压器各次级绕组输出所需要的所有电压、电流,即可按 电压×电流 求出各次级绕组的输出功率,并将这些绕组的输出功率全部相加再除以0.85-0.9的系数(功率在100W以下的系数宜在稍取大一些),这就得出了电源变压器的总功率,计算出变压器的所有设计参数。
本设计中的最大输出工作电压为10V,允许最大工作电流为1.5A,因此所能提供的最大输出功率为15W。主电源电路中LM317稳压器的输入端选择15V的电压输入,以保证输出能达到10V,变压器的功率选择为30W,为提高输出功率提供一定的调节余地。副电源电路作用是提供控制部分的器件正常工作电压,因此在输出功率上不需要太大。
变压器选择参数如表3.1所示:
表3.1 变压器选择参数表
3.1.2 整流滤波电路
整流电路将交流电压Ui变换成脉动的直流电压。再经滤波电路滤除较大的纹波成分,输出纹波较小的直流电压U1。常用的整流滤波电路有全波整流滤波、桥式整流滤波等。本设计采用单相桥式整流电路,图3.1是容性负载单相桥式整流电路。它的四臂是由四只二极管构成,当变压器B次级的1端为正、2端为负时,二极管D2和D4因承受正向电压而导通,D1和D3因承受反向电压而截止。此时,电流由变压器1端通过D4经RL,再经D2返回2端。当1端为正时,二极管D1、D3导通,D2、D4截止,电流则由2端通过D3流经RL,再经D1返回1端。因此,与全波整流一样,在一个周期内的正负半周都有电流流过负载,而且始终是同一方向。
图3.1 整流电路原理示意图
3.1.3 稳压调压电路
稳压调压电路主要用的是LM317集成三端可调稳压器。该元件如图3.2示。
LM317产品介绍:
LM317 是美国国家半导体公司的三端可调正稳压器集成电路。我国和世界各大集成电路生产商均有同类产品可供选用,是使用极为广泛的一类串连集成稳压器。
LM317 的输出电压范围是1.2V 至 37V,负载电流最大为 1.5A。它的使用非常简单,仅需两个外接电阻来设置输出电压。此外它的线性调整率和负载调整率也比标准的固定稳压器好。LM317 内置有过载保护、安全区保护等多种保护电路。
通常 LM317 不需要外接电容,除非输入滤波电容到LM317 输入端的连线超过 6 英寸(约 15 厘米)。使用输出电容能改变瞬态响应。调整端使用滤波电容能得到比标准三端稳压器高的多的纹波抑制比。
LM317 能够有许多特殊的用法。比如把调整端悬浮到一个较高的电压上,可以用来调节高达数百伏的电压,只要输入输出压差不超过 LM117/LM317 的极限就行。当然还要避免输出端短路。还可以把调整端接到一个可编程电压上,实现可编程的电源输出。
图3.3 稳压调压电路原理图
如图3.3所示,LM317的控制端为1脚,通过调节1脚电压从而达到对输出电压Uo的调节,通过调节电位器RP1也可以改变输出电压的范围,二极管DDD用于防止电路短路。
3.1.4 扩流电路
如图3.4所示,为两只不同类型管构成的NPN型管,由三极管TT1、TT2,电阻R2、R3、R4构成电流放大电路。其中TT1和TT2构成互补复合管,R2、R3、R4组成偏置电阻。
图3.4 括流电路原理图
在正确的外加电压下每只管的电流均有合适的通路,且都工作在放大区,为了实现电流放大,应将第一只管的集电极电流作为第二只管的基极电流,由于复合管有很高的电流放大系数,所以只需要很小的输入驱动电流就可以获得很大的输出集电极电流。其电流的放大系数约为两只三极管的放大系数的乘积,这样可以大大地改善电路的性能。
主电源电路的参数选择
集成稳压器的输出电压Vo与稳压电源的输出电压相同。稳压器的最大允许电流Icm<Io max,输出电压Vi的范围为:
Vo max+(Vi-Vo)min≤Vi≤Vo min+(Vi-Vo)max (3)式
式中Vo max为最大输出电压;Vo min为最小输出电压;(Vi-Vo)min为稳压器的最小输入、输出电压差;(Vi-Vo)max为稳压器的最大输入、输出电压差。
性能指标要求 Vo=+3V-+9V,△Vop-p≤5mV,Sv≤3*10-3
选可调式三端稳压器LM317,其参数特性Vo=1.25V-37V,Io max=1.5A,最小输入、输出电压差(Vi-Vo)min=3V,最大输入、输出压差(Vi-Vo)max=40V。由(2)式知,取R1=240Ω,则RP1min=336Ω,RP1max=1.49KΩ,所以RP1取精密可调电位器,用于调节控制端误差。
由(3)式可得输入电压Vi的范围为:
Vo max+(Vi-Vo)min≤Vi≤Vo min+(Vi-Vo)max
9V+3V≤Vi≤3V+40V
12V≤Vi≤43V
综上所述,变压器应选取功率在30W以上,以保证能提供足够的大的电流。整流滤波电容C1选取耐压值为25V3600uF的电解电容,电容C2选取1uF的瓷片电容,输出滤波电容C3取10uF的电解电容。三极管TT1选取型号为D669AC的NPN型的大功率管,TT2选取型号为B649AC的PNP型的大功率管。R2、R3、R4组成偏置电阻取值分别为6.2Ω、10Ω、15Ω的电阻。
需要注意的是,在主电源电路中所选取的所有电阻均应采用2W的大功率电阻,以防止由于负载接入时产生大电流而使电阻损坏。另外在使用LM317时,要注意防管脚接错,稳压电路中还要接上保险丝和二极管防止短路电流过大,另外对于LM317还要加装合适的散热片。
3.2副电源电路设计
副电源主要用于提供供控制部分电路使用的+12V、+5V、0V和-12V电压。其电路结构与主电源电路结构相似,同样采用的是稳压器件来稳定电压。
图3.4中使用的三端稳压为CW7805、CW7812及CW7912三种型号,稳压值分别为+5V、+12V和-12V。CW78**与CW79**系列继承稳压器稳压器引脚图如图3.5所示。CW78**系列稳压器1脚为电压输入端,2脚为地,3脚为电压输出端;CW79**系列稳压器1脚接地,2脚接电压输入端,3脚接电压输出端。
图3.5 CW78**与CW79**系列稳压器引脚图
CW78**系列三端稳压器的输出电压有5V、6V、、9V、12V、15V、18V和24V七个档次。如CW7805表示的是输出电压为5V,最大电流为1.5A,以此类推。CW79**系列三端稳压器和CW78**类似。这2种稳压管内部均由稳压电路和过流保护电路组成。副电源部分电路原理图及调整管接法如图3.5所示:
图3.5 副电源电路原理图
副电源电路参数选择:
整流滤波电容C4、C5选取耐压值为25V3600uF的电解电容,R5、R6、R7选择20K电阻(它们的作用是使得稳压器在开路时仍有工作电流,保证稳压器的正常工作),C6、C7、C8选取的是耐压值为25V10uF的电解电容用于滤波。特别要注意的是电容C5、C8的正负极不能接反,另外副电源中的电阻也采用的是2W大功率电阻。
副电源与主电源使用不同的变压器变压,主要考虑的是主电源要求的输出功率较大,所以不宜采用同一个变压器提供电源。
3.3控制部分电路设计
控制部分电路是整个设计中最关键的核心电路部分,又可以分成键盘部分及转换校正部分。它的主要功能是进行输出数值预置,显示输出电压幅值、预置数,进行A/D、D/A转换,使用温度传感器进行校正,上述功能采用的是AT89C51来控制实现。主要使用的芯片和元器件有AT89C51、ADC0809、DAC0832、LM324、四位七段共阳级数码管及数字温度传感器DS1820。
以AT89C51单片机为核心的控制系统控制外围电路。
AT89C51是一种带4K字节闪烁可编程可擦除只读存储器(FPEROM—Falsh Programmable and Erasable ReadOnly Memory)的低电压,高性能CMOS8位微处理器,俗称单片机。该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的AT89C51是一种高效微控制器,为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。
其主要特性有:与MCS-51 兼容;4K字节可编程闪烁存储器;寿命:1000次写/擦循环,数据保留时间:10年;全静态工作:0Hz-24Hz;三级程序存储器锁定;128*8位内部RAM;32可编程I/O线;两个16位定时器/计数器;5个中断源 ;可编程串行通道;低功耗的闲置和掉电模式;片内振荡器和时钟电路。如图3.5所示为AT89C51的引脚图。
图3.5 AT89C51单片机引脚示意图
3.3.1 A/D及D/A转换电路
转换部分主要进行A/D、D/A转换及数字温度传感器的使用和校正。其电路原理图如图3.6所示。
图3.6 转换部分电路原理图
设计思路:
由于键盘电路中的按键及数码管显示分别占用了单片机的P2口和P0口,剩余的I/O口只有P1口和P3口,同时考虑到节约制作成本这一因素,所以转换部分仍然采用的是键盘部分电路中的同一块单片机,两块转换芯片采用并行接入法,通过单片机的控制片选信号选通。
A/D转换部分:
如图3.15所示,ADC0809的D7~D0口与DAC0832的D7~D0口按顺序并联,然后按顺序接到AT89C51的P1口作为转换数据的输入输出端口。
ADC0809的作用是采集最后的电压输出信号,并转化为8位数字信号,通过单片机的P1口送到单片机做处理并送数码管上显示。其6脚(START)和22脚(ALE)直接与单片机的14脚(P3.4)相连,用于控制A/D转换启动;7脚(EOC)与单片机的15脚(P3.5)相连,用于输入A/D转换结束信号。
ADC0809是带有8位A/D转换器、8路多路开关以及微处理机兼容的控制逻辑的CMOS组件。它是逐次逼近式A/D转换器,可以和单片机直接接口。其引脚功能如图3.6所示。
图3.6ADC0809引脚示意图
主要特性:8路8位A/D转换器,即分辨率8位;具有转换起停控制端;转换时间为100μs;单个+5V电源供电;模拟输入电压范围0~+5V,不需零点和满刻度校准。;工作温度范围为-40~+85摄氏度;低功耗,约15mW。
引脚功能:
ADC0809芯片有28条引脚,采用双列直插式封装,如图13.23所示。下面说明各引脚功能。
IN0~IN7:8路模拟量输入端。
2-1~2-8(D7~D0):8位数字量输出端。
ADDA、ADDB、ADDC:3位地址输入线,用于选通8路模拟输入中的一路。如表13.2所示。
ALE:地址锁存允许信号,输入,高电平有效。
START: A/D转换启动信号,输入,高电平有效。
EOC: A/D转换结束信号,输出,当A/D转换结束时,此端输出一个高电平(转换期间一直为低电平)。
OE:数据输出允许信号,输入,高电平有效。当A/D转换结束时,此端输入一个高电平,才能打开输出三态门,输出数字量。
CLK:时钟脉冲输入端。要求时钟频率不高于640KHZ。
REF(+)、REF(-):基准电压。
Vcc:电源,单一+5V。
GND:地。
ADC0809的工作过程是:首先输入3位地址,并使ALE=1,将地址存入地址锁存器中。此地址经译码选通8路模拟输入之一到比较器。START上升沿将逐次逼近寄存器复位。下降沿启动 A/D转换,之后EOC输出信号变低,指示转换正在进行。直到A/D转换完成,EOC变为高电平,指示A/D转换结束,结果数据已存入锁存器,这个信号可用作中断申请。当OE输入高电平时,输出三态门打开,转换结果的数字量输出到数据总线上。
D/A转换部分:
DAC0832的作用是通过单片机把预置数字信号转换为模拟信号,输出到主电源的控制端,对输出电压进行调节。其2脚(WR1)和18脚(WR2)与单片机的12脚(P3.2)相连,用于控制D/A转换的寄存器的选通;1(CS)脚和17脚(XFER)与单片机的13脚(P3.3)相连,用于控制D/A转换的片选信号和数据传送信号。
DAC0832是采用先进的CMOS工艺制成的双列直插式单片8位D/A转化器。转换速度为1uF。该芯片采用8位DAC寄存器两次缓冲方式,这样可以在D/A输出的同时,送入下一个数据,以便提高转换速度;也可以实现多片D/A转换器的同步输出。其引脚图如图3.7所示。
图3.7 DAC0832引脚图
其各引脚的功能定义如下:
DI7~DI0 :8位的数据输入端,DI7为最高位。
IOUT1 :模拟电流输出端1,当DAC寄存器中数据全为1时,输出电流最大,当DAC寄存器中数据全为0时,输出电流为0。
IOUT2 :模拟电流输出端2, IOUT2与IOUT1的和为一个常数,即IOUT1+IOUT2=常数。
RFB :反馈电阻引出端,DAC0832内部已经有反馈电阻,所以RFB端可以直接接到外部运算放大器的输出端,这样相当于将一个反馈电阻接在运算放大器的输出端和输入端之间。
VREF :参考电压输入端,此端可接一个正电压,也可接一个负电压,它决定0至255的数字量转化出来的模拟量电压值的幅度,VREF范围为(+10~-10)V。VREF端与D/A内部T形电阻网络相连。
Vcc :芯片供电电压,范围为(+5~ 15)V。
AGND :模拟量地,即模拟电路接地端。
DGND :数字量地。
要注意的是DAC0832是电流输出型的,在设计时要求的是电压输出控制,因此需要在D/A转换结果转化为电压输出,可在DAC0832的IOUT2与IOUT1输出端接一个运算放大器,接法如图3.8所示。
图3.8 DAC0832电压转换示意图
输出电压放大部分:
LM324是四运放集成电路,它采用14脚双列直插塑料封装。它的内部包含四组形式完全相同的运算放大器,除电源共用外,四组运放相互独立。
每一组运算放大器可用图1所示的符号来表示,它有5个引出脚,其中“+”、“-”为两个信号输入端,“V+”、“V-”为正、负电源端,“Vo”为输出端。两个信号输入端中,Vi-(-)为反相输入端,表示运放输出端Vo的信号与该输入端的相位相反;Vi+(+)为同相输入端,表示运放输出端Vo的信号与该输入端的相位相同。LM324的引脚图如图3.9所示。
另外在使用集成运算放大器,要注意引脚的连接是否正确,使用前要看是否需要做偏置电压调零以及防止电路中产生自激震荡。
图3.9 LM324芯片引脚图
3.3.2 校正部分电路
美国DALLAS公司生产的单线数字温度传感器DS182,可把温度信号直接转换成串行数字信号供微机处理。由于每片DS1820含有唯一的硅串行数所以在一条总线上可挂接任意多个DS1820芯片。从DS1820读出的信息或写入DS1820的信息,仅需要一根口线(单线接口)。读写及温度变换功率来源于数据总线,总线本身也可以向所挂接的DS1820供电,而无需额外电源。DS1820提供九位温度读数,构成多点温度检测系统而无需任何外围硬件。其引脚排列如图3.10所示。
图3.10 DS1820芯片引脚图
DS1820引脚及功能:DS1820的引脚见图3.1.3(PR35封装)。GND:地;DQ:数据输入/输出脚(单线接口,可作寄生供电);VDD:电源电压。
DS1820的测温原理:内部计数器对一个受温度影响的振荡器的脉冲计数,低温时振荡器的脉冲可以通过门电路,而当到达某一设置高温时振荡器的脉冲无法通过门电路。计数器设置为-55℃时的值,如果计数器到达0之前,门电路未关闭,则温度寄存器的值将增加,这表示当前温度高于-55℃。同时,计数器复位在当前温度值上,电路对振荡器的温度系数进行补偿,计数器重新开始计数直到回零。如果门电路仍然未关闭,则重复以上过程。温度表示值为9bit,高位为符号位。
对DS1820的使用,多采用单片机实现数据采集。处理时,将DS1820信号线与单片机一位口线相连,单片机可挂接多片DS1820,从而实现多点温度检测系统。系统对DS1820的操作以ROM命令和存储器命令形式出现。
3.3.3 键盘及数码管显示电路
在对键盘电路进行介绍之前,首先对键盘的功能和原理进行说明。
键盘是若干按键的集合,是向系统提供操作人员干预命令的接口设备.键可分为编码键盘和非编码键盘两种类型.前者能自动识别按下的键并产生相应代码,以并行或串行方式送给CPU。它使用方便,接口简单,响应速度快,但价格高.后者则通过软件来确定按键并计算键值.这种方法虽然没有编码键盘速度快,但它价格便宜,组态灵活,因此得到广泛的应用.
键盘是计算机应用系统中一个很重要的组成部分,设计时必须解决下述一些问题。
按键的确认:
键盘实际上是一组按键开关的集合,其每一个按键就是一个开关量输入装置.键的闭合与否,取决于弹性开关的合,断两个状态,反应在电压上就是呈现出高电平或低电平,若高电平表示断开,则低电平表明键闭合.所以,通过电平状态(高或低)的检测,便可确定相应按键是否已被按下.键盘中有无按键按下是通过列选线读入扫描字及行线读入行选线的状态进行判断的。判断的过程是:将列选线的所有I/O线均置成低电平,然后将行线的状态读入累加器中。如果有键按下,则至少会有一根行线被拉至低电平,从而使行输入不全为1。
判断按下的是哪一个键的方法是:将列选线依次置为低电平,然后检查所有行线状态,如果不全为1,则按下的键在这一列,而且是在与低电平行线相交交点上的那个键;如果全为1,则按下的键不在此列。因为键盘在按下过程中会产生抖动,单片机可能错误地认为是按下几次,这样会造成误操作,因此在键盘处理程序中要加延时去抖动程序。
键盘抖动的防止:
由于键盘本身的构造或者不规范的操作都会导致键盘抖动,键盘抖动会影响数值的正确输入,造成错误的操作,要防止。
很多实际应用系统均采用较少几个按键组成非编码键盘,也称为开关式键盘,它们与单片机连接,当按键数比较多的时候,为节省I/O口线和减少引线,常将其按矩阵的方式连接。
如图3.11,本设计中采用的8个按键的键盘,以2×4的方式连接,即2根行线和4根列线,每个行线和列线交叉点处即为一个键位。行线和列线一共需要6个I/O口。当某一键按下时,该按键所对应的电平发生变化,单片机通过对I/O口电平的查询来判断是哪一键按下。
图3.11 2×4按键键位图
键盘电路部分由按键,发光二极管、四位七段共阳级数码管、三极管及单片机组成。2×4按键与单片机P2口的6个I/O口相连接。数码管的接口与单片机P0口连接,发光二极管作为操作指示灯。
系统预置及输出显示部分:
本系统中采用4位数码管显示,动态扫描,软件译码实现预置电压、输出电压的实时显示。数码管有共阴和共阳的区分,单片机都可以进行驱动,但是驱动的方法却不同,并且相应的0~9的显示代码也正好相反。
共阴极LED数码管的发光二极管的阴极共地,某个发光二极管的阳极电压为高电平时,二极管发光;而此阳极LED数码管是发光二极管的阳极共接,当某个二极管的阴极电压为低电平时,二极管发光。在设计中选择的是共阳极四位七端数码管。其引脚图如图3.10所示。
图3.10 四位七段共阳级数码管引脚图
部分电路参数选择:三极管采用9015PNP型,电阻均采用的是1K,由于转化部分的ADC0809不需要太高的转换频率,故单片机的石英晶振选取为6M。为方便调试,在单片机的P0口和P2口上都装上插针。
4.软件设计
图4.1 软件设计总流程图
软件设计总流程图如图4.1所示,开始执行程序后,系统等待键盘键入预置电压数,当预制置完成后程序转入D/A转换及数码管显示子程序,完成D/A转换后调校正子程序进行输出电压校正,完成校正后送控制端口输出电压,若有指令要求系统显示输出数值时,系统调用A/D转换子程序及数码管显示子程序,把最终结果输出到数码管上显示并返回程序。
4.1 软件介绍
在设计过程中,主要应用到两种软件。一是用于PCB电路板布线的Protel 99SE;另外一个就是用于调试程序的Keil uVision2。下面将对这两种软件进行简单的介绍。
4.1.1 Protel 99SE
一般来说,设计电路板最基本的过程可以分为4个主要步骤。
1. 电路原理图的设计
电路原理图的设计主要是利用Protel 99SE的原理图设计系统(Advanced Schematic)来绘制一张电路原理图。
2. 生成网络表
网络表是电路原理图设计(Sch)与印制电路板设计(PCB)之间的一座桥梁。网络表可以从电路原理图中获得,也可以从印制电路板中提取。
3.印制电路板的设计
印制电路板的设计主要是针对Protel 99SE的另外一个重要的部分PCB而言的,在这个过程中,借助Protel 99SE提供的强大功能,可以实现电路板的板面设计,完成高难度的布线工作。
4.生成电路板报表
设计印制电路板后,还需生成印制电路板有关报表,并打印印制电路图。
整个电路板的设计过程首先是编辑电路原理图,然后由电路原理图文件产生网络表,最后再根据网络表进行线路板的布线工作。
4.1.2 Keil uVision2
Keil Software 的8051开发工具可以用它们来编译C源码,汇编汇编源程序连接和重定位你的目标文件和库文件创建HEX文件等。
μVision2是KeilSoftware的一个新的IDE,它结合了项目管理、生成工具、源代码编辑、程序调试和在一个强大的环境中完全模拟。μVision2提供了一个简单易用的开发平台帮助您使程序运行得比以前更快。编辑器和调试器集成到一个应用程序中,并提供一个无缝的嵌入式项目开发环境。
μVision2提供了像下面这些独特的功能:器件数据库:自动选择的芯片设置汇编器、编译器和连接器选项。这就节省了配置工具的时间,并更快地编写代码。项目管理器:可以在一个项目文件中对目标创建几个不同的配置。只有Keil μVision2IDE允许创建一个用于模拟的输出文件、一个用于仿真器调试的输出文件和一个向EPROM编程的输出文件,上面的这些文件都来自于同一个项目文件。with automatic dependency generation的集成生成工具。不用指出哪个头文件和包含文件由哪个源文件使用。Keil编译器和汇编器会自动完成这项工作。交互的错误纠正。在编译项目时,错误和警告信息在输出窗口显示。当μVision2仍然在后台编译时,就可以纠正项目文件中的错误。错误和警告相关的行号在对源文件作了修改后会自动重新同步。
uVision2源代码级调试器是一个理想的,快速的程序调试器。此调速器包含一个高速模拟器,能够模拟整个8051系统,包括片上外围器件和外部硬件。
它的应用步骤如下:
1. 启动软件并创建一个项目,从器件库中选择所使用的CPU的型号,并保存到相应的目录下。
2. 创建源文件。创建一个源文件,以扩展名为.C或.ASM的方式保存,用于编译C语言或汇编语言程序。
3. 生成HEX十六进制文件。在源程序语言通过编译后,在OUTPUT窗口中选择生成HEX十六进制文件。
Keil uVision2编译界面如图4.2所示。
图4.2 Keil uVision2编译界面
4.2 编程思想
单片机控制系统软件设计思路:系统扫描键盘输入,当键盘输入预置数,系统立即会做出响应,根据预置电压值,通过DAC0832转换成电压,输出用户期望的电压,随后系统仍扫描键盘,看是否有其他指令输入。当键盘输入指令要求显示输出电压值时,通过片选选中ADC0809,把输出电压显示在数码管上。DS1820的作用是采集电压变化时温度的变化,通过单片机的把应校正的数值通过DAC0832转化成电压校正输出。
软件子程序包括:(1)键盘和数码管扫描子程序,(2)ADC0809转换子程序,(3)DAC0832转换子程序,(4)中断定时处理程序设计,(5)数码显示子程序,(6)温度传感器DS1820校正子程序。
4.2.1 键盘和数码管扫描子程序
八个按键的定义分别是:加1、加10、减1、减10、D/A转换控制、A/D转换显示控制、显示预置值和输出值切换控制、预置值返回零控制。键盘和数码管扫描流程如图4.3所示。
图4.3 键盘和数码管扫描流程图
系统上电后,首先等待键盘输入预置电压数,键入数值后显示于数码管上,并等待确认信息,当确认后系统自动对信息进行数字处理,并送数码管显示,同时程序从中断返回。
4.2.2 ADC0809转换子程序
该芯片用于八位A/D转换,由于输出最大值为9.9V,所以可以由下面的式子(4)算出可采集到的最小幅值为:
幅值÷精确度 (4)式
=9.99V÷28
=0.04V
由于ADC0809只能采样0-5V的电压,超过会损坏芯片,在输出端,通过电阻分压,使得采样的电压总是小于5V,为了显示输出电压值,在程序中采样的电压乘以一个分压系数后在进行显示,这样显示值代表输出电压。A/D转换流程如图4.4所示。
图4.4 A/D转化流程图
当键入命令开始进行A/D转换时,程序转入转换程序入口,并选择ADC0809的IN0口输入模拟量,在第4个时钟CLK下降沿到来之前,采样数据,数据经转换后输入到AT89C51的P0口,待转换结束信号发出后,停止数据转换并把最终的输出电压显示在数码管上,程序返回。
4.2.3 DAC0832转换子程序
DAC0832能转换的精确度计算方式与ADC0809相同,能输出最小幅值为0.04V。其转换流程与A/D转换流程基本相似,选通信号打开后,预置数被送入DAC0832进行D/A转换,转换结束后返回程序。
4.2.4中断定时处理程序设计
当从键盘输入命令时,使得单片机产生中断,程序转向数码显示子程序,使数码管显示出单片机内部寄存器的数值。定时主要作用是设定数码管的显示频率。
89C51系列单片机内部有两个16位的可编程定时器和,分别由和两个8位计数器构成。T0和T1的定时功能是通过对单片机内部计数脉冲的计数实现的。因为每个机器周期产生一个计数脉冲,因此根据单片机的晶振频率就可以计算出定时器的计数频率。这样如果确定了计数值,就能计算出定时时间,而知道了定时时间也可计算出计数器的预置值。定时器控制寄存器(TCON)和工作方式控制寄存器(TMOD)分别控制定时控制定时器的运行和工作方式。计算预置计数值在工作方式1的定时时间计算公式为
定时时间=(65536—计数初值)×机器周期
如本设计中采用6MHz晶振,一个机器周期为2us。设计数初值为x,则有:
TS= (65536—x) × 2us
如程序中设置的定时为:#definetim 65536-2000
4.2.5 数码显示子程序
由于外界有可能产生的噪声和温度变化产生的波动,使得采样电压发生抖动或波动,显示输出可能会不够稳定(在一定范围内抖动),所以需要采样几组数值,对其去平均值作为最后的显示值输出。数据处理程序如下:
s[0]=s[1];
s[1]=s[2];
s[2]=s[3];
s[3]=s[4];
s[4]=P1;
temp=(s[0]+s[1]+s[2]+s[3]+s[4])/5;
return temp;
上式中,S[]数组取的是P1口的数据,当产生抖动时P1口会产生多组数据,建立一个数组用于存放数据,并去平均值作为输出。
4.2.6 温度传感器的电压校正
DS1820测温原理为:在低温度系数晶振的振荡频率受温度影响很小,用于产生固定频率的脉冲信号送给计数器1。高温度系数晶振随温度变化其振荡率明显改变,所产生的信号作为计数器2的脉冲输入。计数器1和温度寄存器被预置在-55℃所对应的一个基数值。计数器1对低温度系数晶振产生的脉冲信号进行减法计数,当计数器1的预置值减到0时,温度寄存器的值将加1 ,计数器1的预置将重新被装入,计数器1重新开始对低温度系数晶振产生的脉冲信号进行计数,如此循环直到计数器2计数到0时,停止温度寄存器值的累加,此时温度寄存器中的数值即为所测温度。内部斜率累加器用于补偿和修正测温过程中的非线性,其输出用于修正计数器1的预置值。
AT89C51的内部寄存器中存放了一组数组,该数组用于校正不同温度下需要校正的电压值。当温度写入单片机后,通过对寄存器的访问,选择出对应的电压,补偿到控制端输出,以达到校正电压的作用。
5. 系统调试
5.1 硬件模块调试
硬件模块主要的调试内容是主电源及副电源的技术性能指标,包括纹波值及稳压系数等。
5.1.1 电源部分技术指标测试
稳压电源的技术指标分为两种:一种是特性指标,包括允许的输入电压、输出电压、输出电流及输出电压调节范围等;另一种是质量指标,用来衡量输出直流电压的稳定程度,包括稳压系数、输出电阻、温度系数及纹波电压等。这些质量指标的含义,可简述如下。
最大输出电流:指稳压电源正常工作时能输出的最大电流,用Io max表示。一般情况下的工作电流I<Io max。稳压电路内部应有保护电路,以防止I>Io max时损坏电路。
输出电压:指稳压电源的输出电压,用Vo表示。其测试过程是:输出端接负载电阻RL,输入端接220V的交流电压,数字电压表的测量值即为Vo。再使RL逐渐减小,直到Vo的值下降5%,此时流经负载RL的电流即为Io max。
纹波电压:指叠加在输出电压Vo上的交流分量,一般为mV级。可将其放大后,用示波器观察出其峰-峰值△Vo p-p。也可以用交流电压表测量其有效值。由于纹波电压不是正弦波,所以用有效值衡量存在一定的误差。一般为毫伏数量级,它表示输出电压的微小波动。
应当指出的是,稳压系数g 较小的稳压电路,它的输出纹波电压也较小。
纹波电压测量方法为:
纹波的测量方法是用示波器观察输出电压波动的峰峰值。注意此时不能简单的用高频电压表测量,因为高频电压表是根据正弦波有效值标定的,对非正弦波的响应,因波形形状的不同,会使高频电压表的指示有所不同, 为简单计,往往以输出电压波动的峰峰值来代表纹波的大小。纹波一般在不同的负载电流条件下测量, 负载电流最大时测得的数值也最大。注意此时须用示波器的交流(AC)耦合方式。只要求大家测出在RL=100Ω条件下的纹波电压的峰峰值。
稳压系数:指在负载电流Io、环境温度T不变的情况下,输入电压相对变化引起输出电压相对变化,即稳压系数。
Sv=(△Vo/Vo)÷(△Vi/Vi) (4)式
硬件调试主要工作在电源部分,主要分析内容是主电源、副电源的输出电压纹波值、输出功率及误差等。
Sv的测量电路如图4.4所示。测试过程是:先调节自耦变压器使输入电压增加10%,即Vi=242V,测量此时对应的输出电压Vo1;再调节自耦变压器使输入电压减少10%,即198V,测量这时的输出电压Vo2,然后在测出Vi=220V时对应的输出电压Vo,则稳压系数
Sv=(△Vo/Vo)÷(△Vi/Vi)
=[220/(242-198)]*(Vo1-Vo2)÷Vo
图4.4 稳压系数测量原理图
主电源技术指标如表4.1所示。
0.58%
表4.1 主电源电路技术指标测量
测量时,首先断开控制部分电路,在220V交流输入下调节LM317 1脚的可调电阻,使得输出电压固定在14.5V。接着调节自耦变压器,分别读出当交流输入在242V和198V时的输出电压,并根据4式求出主电源电路的稳压系数。
从表中数据分析知,主电源电路的电压调整率及稳压系数都较小,符合电源的性能指标要求,用示波器测量观察纹波值,输出的纹波峰值为32mV左右,说明输出电压稳定。
副电源技术指标如表4.2所示。
表4.2 副电源电路技术指标测量
副电源电路技术指标测量步骤与主电源电路测量步骤基本相同。从表4.2分析知副电源电压也较稳定,-12V的稳压系数更低,说明-12V的稳压系数较理想,另外两个电压输出的输出也较稳定。在测试中,输入电压发生变化时,输出基本保持不变,说明副电源电路稳压系数性能较好。用示波器测量输出电压纹波值,+5V、+12V、-12V分别为25mV、49mV和42mV,三个输出端的纹波值较小,符合电源技术要求,可以向控制电路提供合格的电源。
5.1.2 电源输出电压、电流范围测试
调节交流调压器,使电源电路输入电压为Vmin=220×(1-10%)=198v,从键盘预置最小的电压,使输出电压为最小值,取负载电阻为2欧姆,使得输出电流达到最大值1.5A,测量此时电压为3.0v,然后,断开和接通负载,分别观察输出电压的变化情况,当负载从断开到接通时,测得的输出电压没有明显的变化,仍为3.1v左右,由此判断电源可以输出这样的最大电流约为1.5A。
若在测试中发现输出电压有明显的变化,则需要适当限制输出电流或者输出电压。测试方法如图4.4所示。
图4.4 最大电流测试连接电路
控制电压的输出范围只能在12V以内,所以输出电压的变化也在12V以内。由于数码管显示只有3位,若要精确到0.1mV,所以预置电压可以从3V到10V的范围内变化。输出的电压稳定,无大波动,且纹波值较小,是较理想电压输出,符合线行电源要求指标。
5.1.3 硬件模块调试小结
硬件测试中主要针对的是主电源和副电源的输出稳定性做测试,即对调整管的工作状态和稳定性做调试,因为调整管的工作状态和稳定性直接关系到电压的输出。通过调试发现,LM317、7805、7812及7912都能正常的工作,并且稳压系数较为理想。主电源的输出功率也基本达到了预期的数值。
不足之处在于最大的输出电流还偏小,未能达到2A,还要加以改进。另外在副电源电路的变压器选择上,原来选择的电压器副边电压偏小,导致副电源输出电压偏小,在提高副边电压后很好的解决了这个问题。
电源测试结果为:
输出电压范围为3.0v—10.01v;
最大输出电流为1.5A;
电压调整率1.53%;
纹波电压峰峰值32mv。
5.2 软件模块调试
软件调试内容主要是键盘的按键控制和数码管的显示,A/D、D/A的转换控制和温度传感器的数值校正。
5.2.1 键盘按键控制及数码管显示
LED七段共阳极数码管是将所有发光二极管的阳极连在一起,作为公共端,如果公共端接高电平,当某个发光二极管的阴极为低电平时,对应字段点亮。如图4.5所示,a、b、c、d、e、f、g为7段数码显示,dp为小数点显示。
图4.5 LED显示外型图
本设计采用了4位LED数码显示,图4.5显示了其中一位LED的结构图。设计中数码管的显示端接单片机的P0的8个I/O口,有8个I/O口控制显示输出。P0口的P0.7~P0.0分别与数码管的e、d、dp、c、g、a、f、d相连接,另外的位选与按键驱动的三极管连接。
数码管显示说明:如当显示数字1的时候,只有b和c发光,当发光时b和c接低电平,其他管脚为高电平,因此用十六进制可以表示为:
P0.7 P0.6 P0.5 P0.4 P0.3 P0.2 P0.1 P0.0
e d dp c g a f d
1 1 1 0 1 1 1 0
则用十六进制表示此时的I/O口P0的输出为:0xee。其他的数值也按此方法计算类推。
数码管数值代码显示程序如下:
ucharcode distab[16]={0x28,0xee,0x32,0xa2,
0xe4,0xa1,0x21,0xea,
0x20,0xa0,0x60,0x25,
0x39,0x26,0x31,0x71};
0x28~0x71分别表示了数码管显示的十六位数值,1、2、3、4、5、6、7、8、9、A、B、C、D、E、F及G。
十六进制数数码管显示各数值真值如表4.3所示。其中在实际使用中只用了0~9这10个数字。
表4.3 数码管数值显示真值表
小数点显示设置:要求数码管总是显示个位数之后的小数点,即数码管的个位数后的dp总是置0。当dp位发光(dp置低电平)而其他位不发光(其他位置高电平)时,要求个位数要按位与十六进制数0xDF相与,既与0x1101 1111相与,把个位数的dp置0。
键盘及数码管扫描子程序为:
void display ()
{ P2=0xff;
P0=disp[dis];
P2=~numtab[dis];
key0=1;key1=1;
if(!key0) keyx=dis;
if(!key1) keyx=dis+4;
dis=(dis+1)%5;
}
P2口的键盘按键输入置1,从P0口中读入数字控制信息。
由电路按键定义可知:
sbit dis0 =P2^4;
sbit dis1 =P2^5;
sbit dis2 =P2^6;
sbit dis3 =P2^7;
sbit dis4 =P2^1;
sbit key1 =P2^3;
sbit key0 =P2^2;
上述为2×4键盘各按键定义。定义具体见作品使用说明。
5.2.2 A/D、D/A转换控制
ADC0809用于读取输出电压值并转换为数字信号送入单片机内并在数码管上显示。ADC0809的控制端口为其6脚(START)和22脚(ALE)用于控制A/D转换启动;7脚(EOC)用于输入A/D转换结束信号。当有按键键入指令要求启动A/D转换时,单片机向6脚和22脚发送选通开启A/D转换信号,进行A/D转换,当7脚向单片机报告转换结束时,程序自动停止A/D转换,并把采样结果在数码管上显示出来。
其启动子程序为:
char get0809()
{ int temp;
delay(80);
start=1;
delay(8);
start=0;
delay(50);
oe=1;
P1=0xff;
oe=0;
s[0]=s[1];
s[1]=s[2];
s[2]=s[3];
s[3]=s[4];
s[4]=P1;
temp=(s[0]+s[1]+s[2]+s[3]+s[4])/5;
return temp;
}
S数组在上文中解释过是用于对取样电压发生抖动时取其5次采样均值。oe定义为单片机的P3.5口,用于发送A/D转换是否结束的信号。
DAC0832用于单片机把预置数字信号转换为模拟信号,输出到主电源的控制端,对输出电压进行调节。其2脚(WR1)和18脚(WR2)用于控制D/A转换的寄存器的选通;1(CS)脚和17脚(XFER)用于控制D/A转换的片选信号和数据传送信号。当有按键键入指令是,单片机向1脚和17脚发送低电平选通DAC0832,使其开始工作。
D/A转换子程序为:
void put0832(unsigned char a)
{ cs0832=0;
P1=a;
cs0832=1;
}
其中cs0832为片选信号,接单片机的P3.3口,选通DAC0832后,P1口的数据自动存放到DAC0832的内部积存器内,进行转换,转换结束后,cs片选信号置高电平停止转换,等待指令。
A/D、D/A转换结果送数码管显示,其子程序为:
void timer1() interrupt 3
{para[0]=get0809();
if(para[0]>para[3])er--;
put0832(er);
TH1=tim1>>8; TL1=tim1;
display();
}
display()为数码管显示子程序入口。数组para读入A/D转换数据后等待指令,有按键键入时,数据送数码管显示;put0832(er)用于显示预置电压值。
5.2.3 数字温度传感器DS1820的电压校正
DS1820的2脚接单片机的17脚(P3.7)。当输出电压变化时温度会发生变化,温度传感器检测出变化的温度,把数据输入到单片机中进行处理,以消除由温度变化而产生的误差。温度变化使得电压变化需校正的数值由数组存放,通过对数组的查询校正电压。
DS1820的数据读入子程序为:
unsignedint Read_Temperature(void)
{ bytec[2];
unsigned int x;
ow_reset();
write_byte(0xCC);
write_byte(0xbe);
c[1]=read_byte(); //先读出低8位
c[0]=read_byte(); //再读出高8位
if(c[1]&0x08){x=c[1]>>4;x++;}
else x=c[1]>>4;
c[0]&=0x07;
x|=(c[0]<<4);
x=x*100+(c[1]&0x0f)*100/16;
ow_reset();
write_byte(0xCC);
write_byte(0x44);
return(x);
}
其中write_byte(0xCC); write_byte(0xbe);的作用分别是跳过ROM及读可擦写芯片,DS1820的温度是串行方式输入的,依次温度读入时分低8位和高8位依次读入。
5.2.4 软件模块调试小结
软件调试是整个电路调试的重点,在调试过程中分别对键盘显示部分、转换部分及校正部分进行调节,在每个部分都确定能正常工作后,进行总体的软件调试,包括线性化和校正等。
键盘调试主要是分清每个键的键位功能设置,当有键按下时系统是如何反应的,这是整个控制部分最难调的。显示部分主要是预置数、进位及小数点的显示要求正确。转换部分的调节要相对简单,只要在按键按下时片选及控制信号到位就完成了。校正部分的调试主要是温度数据的写入调试,这是在调试过程中遇到的又一个困难。另外线性化处理及利用数组校正都需要进行大量的数据测试和模拟。
6. 技术指标及使用方法
本作品为精密数控直流电源,主要以线性电源作调节,由数字控制方式调节输出电压。具有可预置输出电压,显示输出电压值的功能,输出电流大而且稳定,能为小功率电器和仪器提供电源,其主要技术指标如下:
输入交流电压:220V左右
输出直流电压范围为3.0V—10.01V可调;
电压输出精确度:±0.04mV;
最大输出电流为1.5A;
电压调整率1.53%;
纹波电压峰峰值32mv。
使用方法:所有功能均由八个按键控制,按键编号从1到8的功能依次是①十分位加一计数;②百分位加一计数;③预置电压确认输出;④启动A/D转换并显示输出电压;⑤十分位减一计数;⑥百分位减一计数;⑦预置数与输出电压值显示切换;⑧预置数置零。
7 结论
本文描述了用单片机可以实现对电源的数字控制,实现数字化线性电源的制作。通过键盘预置电压,温度传感器的电压校正,以达到使输出电压更准确稳定性更高。控制电路中使用的八位A/D、D/A转换使得输出电压更准确。由于使用了集成稳压器来稳压,也使得误差能尽可能的减小,同时使得制作的成本也大为降低,输出的电源线性度更好。不足之处就是输出电压的调节范围还不够大,还要加以改进
随着电源技术的发展和应用,要求精确度更高,稳压性能更出色,调节范围更广,输出的功率更大的电源使用在研究领域。单片机在智能化以及可实现的用户友好界面,扩展性强等等方面的优势使其成为未来数控电源重要的发展方向。
谢 辞
在本次设计、调试以及论文撰写过程中,得到了龙老师的热心指导,老师严谨的治学态度,使我深受教育,在此要非常的感谢老师,同时也要感谢所有热心相助的同学们。谢谢你们。
本次设计过程中,从资料准备,方案设计,调试的整个过程当中,查阅了许多的资料,学到了许多宝贵的知识,并在设计实践的过程中,不断验证,对知识有更加正确的理解,掌握了正确的实践研究方法,为日后继续的学习和进步,打下了良好的基础。当然,某些方面的知识准备的不够,许多知识还要在以后的工作、学习当中不断的积累,学无止镜。
在设计过程中,遇到了许多的难题,经过老师的精心指导,都得以一一解决,也正是在解决这些困难的过程中,才慢慢的掌握了合理的研究方法,合理的设计思想,这是本次毕业设计一个很大的收获。
参考文献
[1] 杨旭.裴元庆.王兆安.开关电源技术[M].北京:机械工业出版社,2004.1
[2] 徐德鸿.沈旭.杨成林.译.开关电源设计指南[M].北京:机械工业出版社,2004.1
[3] 郑国川.李洪英.实用开关电源技术[M].福州:福建科学技术出版社,2004.1
[4] 童诗白.华成英.模拟电子技术基础[M].北京: 高等教育出版社,2001. 5
[5] 阎石. 数字电子技术基础[M]. 北京:高等教育出版社,2001.5
[6] 薛永毅.王淑英.何希才.新型电源电路应用实例[M].北京:电子工业出版社,2001.10
[7] 叶慧贞.杨兴洲.新颖开关稳压电源[M].北京:国防工业出版社,1999.1
[8] 刘胜利.现代高频开关电源实用技术[M].北京:电子工业出版社,2001.9
[9] 赵效敏.开关电源的设计与应用[M].上海:上海科学普及出版社,1995.9
[10] 王水平.付敏江.开关稳压电源--原理.设计与实验电路[M].西安:西安电子科技大学出版社,1997.1
[11] 赵学泉.张国华.新型电子电路应用指南[M].北京:电子工业出版社,1995.3
[12] BrownLaszlo , Practical Considerations for MOSFET Gate Drive Techniques in highSpeed ,Switch-mode Application ,Seminar APEC99 .March 1999 .
附 录
主电源电路原理图:
副电源电路原理图:
键盘电路原理图:
A/D、D/A转换电路及传感器电路原理图:
电源电路PCB图:
键盘及A/D、D/A转换电路PCB图:
空载时输出电压纹波:
带负载时输出电压纹波值:
控制电路程序:
#include<reg51.h>
#include<absacc.h>
#defineuint unsigned int
#defineuchar unsigned char
#definetim1 65536-4000 // 定时器2的定时时间 2ms
sbitdis0 =P2^7;
sbitdis1 =P2^6;
sbitdis2 =P2^5;
sbitdis3 =P2^4;
sbitkey1 =P2^3;
sbitkey0 =P2^2;
sbitstart=P3^4;
sbitcs0832 =P3^3;
sbitoe=P3^5;
int r,kp ,kd ,para[8] ,ts ,e2 ,e1 ,e0 ,u ,u0 ,ptr ;
ucharkey ,keyx ,disp[4] ,dis ;
uintpwmh,pwml;
ucharcode numtab[4]={0x80,0x40,0x20,0x10};
ucharcode distab[16]={0x28,0xee,0x32,0xa2,0xe4,0xa1,0x21,0xea,
0x20,0xa0,0x60,0x25,0x39,0x26,0x31,0x71} ;
ucharcode ledtab[8]={0x08,0x10,0x20,0x40,0x88,0x90,0xa0,0xc0} ;
int codeparam[8]={300,255,300,255,255,255,255,8};
uchars[5];
ucharer;
// 延时子程序
voiddelay(uint t)
{
uint i;
for ( i=0 ; i<t ; i++ );
}
// 显示数据放入缓冲区子程序
voiddistran ()
{
disp[0]=distab[para[ptr]%10];
disp[1]=distab[(para[ptr]/10)%10] & 0xdf;
disp[2]=distab[(para[ptr]/100)%10];
disp[3]=~ledtab[ptr];
}
// 键盘及数码管扫描子程序
voiddisplay ()
{
dis= (dis+1)%4;
P2=0xff;
P0=disp[dis];
P2=~numtab[dis];
key0=1; key1=1;
if (!key0) keyx=dis+1;
if (!key1) keyx=dis+5;
}
// 键盘处理子程序 ( 设定各个键功能分别为减1,加1,减10,加10
voidkeyproc ()
{
if (key>0)
{
switch (key)
{ case1:if( ptr != 0 ) {para[ptr]--; } break;
case 5: para[ptr]++; break;
case 2: para[ptr]-=10; break;
case 6: para[ptr]+=10; break;
case 3:para[ptr]-=100; break;
case 7:para[ptr]+=100; break;
case 4: ptr--; break;
case 8: ptr++; break;
}
if (ptr>7) ptr=0;
if (ptr<0) ptr=7;
if (para[ptr]<0) para[ptr]=0;
if (para[ptr]>param[ptr]) para[ptr]=param[ptr];
}
key=0;
}
charget0809()
{ int temp;
//delay(80);
start=1;//f=(double)((fxx*200000000)/(fcc*16));
delay(8);
start=0;
delay(50);
oe=1;
P1=0xff;
oe=0;
s[0]=s[1];
s[1]=s[2];
s[2]=s[3];
s[3]=s[4];
s[4]=P1;
temp=(s[0]+s[1]+s[2]+s[3]+s[4])/5;
return temp;
}
voidput0832(unsigned char a)
{ cs0832=0;
P1=a;
cs0832=1;
}
// 定时数码管显示、数据处理、调用PID算法、修改占空比值子程序
voidtimer1() interrupt 3
{
para[0]=get0809();
if(para[0]>para[3])er--;
put0832(er);
TH1=tim1>>8; TL1=tim1;
display ();
}
unsignedint Read_Temperature(void) //温度传感器的数据读入
{
byte c[2];
unsigned int x;
ow_reset();
write_byte(0xCC); //跳过ROM
write_byte(0xbe); //读可檫写芯片
c[1]=read_byte(); //先读出低八位
c[0]=read_byte(); //高八位
if(c[1]&0x08){x=c[1]>>4;x++;}
elsex=c[1]>>4;
c[0]&=0x07;
x|=(c[0]<<4);
x=x*100+(c[1]&0x0f)*100/16;
ow_reset();
write_byte(0xCC);
write_byte(0x44); //开始翻转
return(x);
}
// 主程序 :设定定时器/计数器方式、给定各个参数的初始值、键盘处理
voidmain()
{
chari;
TMOD=0x11; IE=0x8a; IP=0x02;
TH1=tim1>>8; TL1=tim1;
TR1=1;
dis=0; ptr=0; P1=0xff;
for (i=0;i<7;i++) para=0;
para[2]=150; para[3]=8; para[6]=10;
para[4]=18; para[5]=11; para[7]=3;
distran();
for (;;)
{
if (keyx>0)
{
key=keyx;
while (keyx!=0) {keyx=0; delay(1000);}
keyproc ();
}
delay (400);
}
}
|