基于STC89C52单片机数控直流电压源资料.docx
《基于STC89C52单片机数控直流电压源资料.docx》由会员分享,可在线阅读,更多相关《基于STC89C52单片机数控直流电压源资料.docx(36页珍藏版)》请在冰豆网上搜索。
基于STC89C52单片机数控直流电压源资料
1前言
在现代家庭中各种电器的不断出现,并要求着各种不同值的电源出现,使得家庭购买不同值得电源。
数字化的也更加贴近人们的生活,因为它更加的直观,易被接受,大家都开始追求数字化的各类电子产品。
数控直流电源有着直观,易操作,各种电压集一身,输出精度和稳定性都较高等优点,所以越来越受广大人们的喜爱。
以后家里的电视遥控,电动玩具等都可以共用一个电源。
稳压电源按输出电压的类型分为直流稳压电源和交流稳压电源。
其中直流稳压电源是电子技术常用的设备之一,直流稳压电源有许多基本功能要求,例如输出电压值能够在额定输出电压值以下任意设定和正常工作;对输出的电压值要求精确的显示和识别。
而普通的直流稳压电源或多或少存在这样或那样的问题,他们的电源输出时通过波段开关盒电位器来控制的,当输出电压需要精确输出,或者在一个小范围内微调时,困难相对来说就很大;而且随着使用时间的增加,模拟电路元件在使用过程中难免发生磨损,波段开关与电位器均会或多或少产生接触不良现象,这会造成电压输出的误差。
另外,传统的串联型稳压电路构成较为复杂,稳压精度不高。
总体来说,传统稳压电源实现方式亟待改进。
现当代社会是信息技术不断发展的社会,模拟技术逐渐被更为优越方便的数字技术取代,大规模的社会化生产也要求更高的技术和效率。
众多家用电器以及各类电子电器设备均需要直流稳压电源对其进行供电。
而我们生活中用电均为220V的交流供电,这就需要通过变压、整流、滤波、稳压电路将交流电转换为稳定的直流电。
滤波器用于滤除整流输出中的纹波,一般传统电路由于滤波扼流圈和电容器组成,若由晶体管滤波器来代替,则可缩小直流电源的体积,减轻其重量,而且晶体管滤波直流电源不需要直流稳压器就能作家用电器的电源,这既降低了家用电器的成本,又降低了其成本,又缩小了其体积,使家用电器小型化。
基于单片机控制的数控直流电压源可以克服稳压电源构成复杂,元器件磨损严重,稳压精度不高,读数不方便等缺点,更稳定更直观的完成模拟稳压电源的任务。
而且成本小,经济实惠,便于在大规模的社会生产中采用。
所以,对于数控直流电压源的研究与设计进步是技术上的革新,而且有实际的经济性,可以提高生产效率,是现代工业生产应用中的不二选择。
2设计要求
设计并制作有一定输出电压调节范围和功能的数控直流稳压电源,基本要求如下:
1、输出直流电压调节范围1.4-9.9V,纹波小于10mv;
2、电压误差少于1%;
3、输出电流为500mA;
4、稳压系数小于0.2,直流电源内阻小于0.5Ω;
5、输出直流电压能步进调节,步进值为0.1V;
6、由“+”“-”两间分别控制输出电压步进增和减。
3总体设计方案
3.1设计方案
本设计采用以单片机作为控制元件来实现数控元件直流电压源的设计。
本设计采用STC89C52芯片作为单片机的控制单元,以常用的DAC0832作为D/A转换单元,STC89C52芯片的P0口和DAC0832的数据口直接相连,DA的
,
,
,
接地,让DA工作在直通方式下。
DA的8脚接参考电压,DA的参考电压接5V电源,所以在DAC0832的8脚输出电压的分辨率为5V/256约为0.02V,也就是说DA输入数据端每增加1,电压增加0.02V。
通过运放UA741将DA的输出电流转化为电压,再通过UA741将电压反相并放大。
最后经LM350调整输出电压并稳压。
其具体硬件框图如图1所示:
图1原理框图
3.2设计方案优势
STC89C52单片机作为一个整体,完成整个数控部分的功能。
STC89C52作为一个智能化的可编程器件,便于系统功能的扩展。
方案中使用运算放大器放大电压,由于运算放大器具有很大的电源电压抑制化,可以大大减少输出端的纹波电压,避免了线性调压电源整流滤波后的纹波对输出的影响。
该方案中采用三位数码管直接对电压值进行显示,可以直观明了的反映电压值以及其对按键所作出的电压变化。
根据上述数控直流电压源硬件框图1,我们选用以下芯片来实现该数控直流电压源的硬件电路接线:
STC89C52单片机,DAC0832数模转换器,集成运放UA741,电压稳压器LM350等。
4设计原理
本系统选用的模块包括:
单片机系统,D/A转换模块,LED显示模块,直流电源模块,具体的电路图参照附录一。
4.1单片机模块
4.1.1单片机介绍
STC89C52是一种带8K字节FLASH存储器的低电压、高性能CMOS8位未处理器。
该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。
其特点是拥有8K字节可编程FLASH存储器,256*8位内部RAM,三个16位定时器/计数器,8个中断源,拥有低功耗的闲置和掉电模式,以及片内振荡器和时钟电路。
STC89C52内部有一个用于构成振荡器的高增益反相放大器,引脚RXD和TXD分别是此放大器的输入端和输出端。
时钟可以由内部方式产生或外部方式产生。
内部方式是在RXD和TXD引脚上外接定时元件,内部振荡器就产生自激振荡。
定时元件通常采用石英晶体和电容组成的并联谐振回路。
晶体振荡频率可以在1.2-12MHz之间选择,电容值在5-30pF之间选择,电容值的大小可对频率起到微调的作用。
外部方式是RXD接地,TXD接外部振荡器。
对外部振荡信号无特殊要求,只要求保证脉冲宽度,一般采用频率于12MHz的方波信号。
片内时钟发生器把振荡频率两分频,产生一个两相对时钟P1和P2,供单片机使用。
此次设计时钟电路采用的是内部方式。
CPU即中央处理器的简称,是单片机的核心部件,它完成各种运算和控制操作,CPU由运算器和控制器两部分电路组成。
STC89C52的引脚功能如下:
a.主电源引脚(2根)
VCC(Pin40):
电源输入,接+5V电源。
GND(Pin20):
接地线。
b.外接晶振引脚(2根)
XTAL1(Pin19):
片内振荡电路的输入端。
XTAL2(Pin20):
片内振荡电路的输出端。
c.控制引脚(4根)
RST∕VPP(Pin9):
复位引脚,引脚上出现2个机器周期的高电平将使单片机复位。
ALE∕PROG(Pin30):
地址锁存允许信号。
PSEN(Pin29):
外部存储器读选通信号。
EA∕VPP(Pin31):
程序存储器的内外部选通,接低电平从外部程序存储器读指令,如果接高电平则从内部程序存储器读指令。
d.可编程输入∕输出引脚(32根)
STC89C52单片机有4组8位的可编程I/O口,分别是P0、P1、P2、P3口,每个口有8位(8根引脚),共32根。
P0口(Pin39-Pin32):
8位双向I/O口线,名称为P0.0-P0.7。
P1口(Pin1-Pin8):
8位双向I/O口线,名称为P1.0-P1.7。
P2口(Pin21-Pin28):
8位双向I/O口线,名称为P2.0-P2.7。
P3口(Pin10-Pin17):
8位双向I/O口线,名称为P3.0-P3.7。
单片机处理周期包括12个振荡周期每12个振荡周期用来完成一项操作如取指令和计算指令执行时间可把时钟频率除以12取倒数然后指令执行所须的周期数因此如果你的系统时钟是11.059MHz除以12后就得到了每秒执行的指令个数为921583条指令取倒数将得到每条指令所须的时间1.085ms。
STC89C52的管脚图如图2:
图2STC89C52的管脚图
4.1.2单片机外围电路
a.电压预置复位电路
复位是单片机的一个重要工作方式。
在单片机工作时,上电时首先要复位,发生故障后也要复位。
复位操作有两种基本形式:
一种是上电复位,另一种是按键复位,即要复位时,只要按图中的KEY1键,电源VCC经电阻R1和R2分压,在RESET端产生一个高电平。
在上电复位时,电路要求接通电源后,通过外部电容来充电实现单片机自动复位操作。
上电瞬间RESET引脚获得高电平,随着电容充电,RESET引脚的高电平将逐渐下降。
RESET引脚的高电平只要能保持足够的时间(2个机器周期),单片机就可以进行复位操作。
单片机复位期间不产生ALE和PSEN信号,即ALE=1和PSEN=1。
这表明单片机复位期间不会有任何操作。
复位后:
PC值为0000H,表明复位后程序从0000H开始执行:
SP值为07H,需要重新置SP值:
单片机复位后,已使P0—P3口每一端线为“1”,为这些端线用作输入口做好准备。
复位电路图如图所示:
图3复位电路
b.时钟振荡电路
单片机控制中心的各项工作都是在时钟信号的控制下协调工作的,单片机的时钟电路可为单片机提供一个时钟信号。
单片机本身就如一个复杂的同步时序电路,为保证工作方式的实现,电路应在唯一的时钟信号控制下严格地按时序进行工作。
单片机内部有一个用于构成振荡器的高增益反相放大器,其输入端为芯片引脚XTAL1,其输出端为引脚XTAL2。
而在芯片内部,XTAL1和XTAL2之间跨接晶体管振荡器和微调电容,从而构成一个稳定的自激振荡器。
单片机时钟电路可分为内部时钟电路和外部时钟电路。
只要在单片机的XTAL1和XTAL2引脚外接晶体振荡器就构成了自激振荡器并在单片机内部产生时钟脉冲信号。
电容C1和C2的只要功能是协调振荡器频率及帮助振荡器起振,其电容值一般在20pF-60pF,典型值为30pF。
外部时钟方式是把外部已有的时钟信号引入到单片机内。
此方式常用于多单片机同时工作,以便于个单片机的同步。
一般要求外部信号高电平的持续时间大于20us,且为频率低于12MHz的方波。
本设计采用内部时钟电路来确保整个电路的协调工作。
电路图如图所示:
图4时钟电路
4.2D/A模块
4.2.1数模转换器DAC0832
DAC0832是8分辨率的D/A转换集成芯片。
与微处理器完全兼容。
它的特点有,分辨率为8位,电流稳定时间1us,可单缓冲、双缓冲或直接数字输入,需要+5V―+15V的电源供电。
DAC0832是一种典型的8位转换器,内部为双缓冲寄存器既输入寄存器和DAC寄存器,
、
分别为该寄存器的写信号输出端,ILE为输入锁存使能端,高电平有效,
为片选端,VREF为传输控制端,它和
共同控制DAC寄存器的工作状态。
DAC0832有两个接地端,一般情况下,这两个地端均并联在接地。
DAC0832的D/A转换电路为倒T型R-2R电阻网络,故有Iout1和Iout2两个电流输出端,根据不同的电路组成,该芯片可以有两种输出模式,一种是电流输出模式,这种模式基准电压加在VREF端,由Iout1和Iout2输出的电流经运算放大器相加后输出;另一种为电压输出方式,这种模式基准电压加在Iout1和Iout2之间,模拟电压从VREF端输出。
本设计采用电流输出模式,再使输出电流通过一个高输入阻抗的线性运算放大器实现相应的模拟信号电压输出,该D/A转换器有三种工作方式,单缓冲工作方式,双缓冲工作方式,直通方式,该电路采用直通方式,DA的
、
、
和
接地,让DA工作在直通状态下。
DAC0832的管脚图如图3所示:
图5DAC0832管脚图
管脚的具体名称和用法:
D0~D7:
数字量输入端;
:
片选信号,低电平有效;
ILE:
数据锁存允许信号,高电平有效;
:
第1写信号,低电平有效;
:
第2写信号,低电平有效;
:
数据传送控制信号,低电平有效;
Iout1:
电流输出端1;
Iout2:
电流输出端2;
RFB:
反馈电阻端;
Vref:
基准电压,基电压范围为-10V~+10V;
GND:
数字地;
AGND:
模拟地;
单片机与DAC0832的接口可按二级缓冲器方式、单缓冲器方式和直通方式联接。
如上图4的联接方式是直通方式联接方式。
由OUT1脚输出的为一个模拟电流值,经过运算放大器后为一个电压值,这电压值输入到后面的运算放大部分,作为后面部分的输入。
4.2.2D/A转换电路工作原理
本设计是采用DAC0832实现数据的数模转换,其数据口与单片机的P0口直接相连,DA的
、
、
和
相互连接后接地,让DA工作在直通方式下。
DA的8脚接参考电压,为简化设计,在本次设计中采用5V的参考电压,DAC的8脚输出电压的分辨率为5V/256=0.0195≈0.02V,也就是说DA输入数据端每增加1,就意味着电压输出增加0.02V。
再在DA的电压输出端接运放UA741,将DA
输出的模拟电源转换为电压。
如此一来,我们只要改变单片机P0口的数据输出便可以改变DAC0832的输出电压,设当P0口的输出数据位00H时,DAC0832的输出电压就为0V。
其电路图如图所示:
图6D/A转换电路图
4.3电压调整电路模块
4.3.1集成运放UA741
UA741是一款集成运算放大器,集成运算放大器是一种高增益多级直接耦合放大器,其各部分作用如图7所示:
(1)差动输入级使运放有尽可能高的输入阻抗级共模抑制比。
(2)中间放大级由多级直接耦合放大器组成,以获得足够高的电压增益。
(3)输出级可使运放具有一定幅度的输出电压、输出电流和尽可能小的输出电阻。
在输出过载时有自动保护作用以免损坏集成块。
输出级一般为互补对称推挽电路。
(4)偏执电路为各级提供合适的静态工作点。
为使工作点稳定,一般采用恒流源偏置电路。
在本设计中用到UA741共有两个作用:
放大电压和反相作用。
其引脚图如图8所示:
图7集成运放UA741组成框图
图8UA741管脚图
4.3.2电路工作原理
本设计这一部分的工作原理为:
将前一步电路输出的反相电压再接上一个UA741进行放大,此UA741采用反相接法,由于前一个UA741中输出的电压是负电压,所以该部分接上的UA741作为负反馈放大电路对输出电压进行反相放大,
再通过一个可调的滑动变阻器调节该运算放大器的电压放大倍数。
接下来,该集成运放UA741的输出端通过电阻接到LM350的调整端,通过改变UA741的输出电压即可控制LM350的输出电压,也就是数控电压源的最终输出电压值。
如图9所示,因为输出电压Vout=Vref*(1+R10/R11)+Iadj*R10。
设节点A的电压为Ux,运放UA741的输出电压为U,则有Vout—Ux=Vref,又有Ux=[(Vout-U)/(R10/R11)]*R10+U,由此可见,Vout与U之间存在线性关系,Vout随着U的变化而变化,改变电位器RV1的阻值即可改变U的值,进而改变整个电路的输出Vout。
数值计算:
(1)输出电压最小值Vmin的计算
由LM350的输出电压公式可知Vmin=1,25×(1+27/220)=1.4V
(2)单片机送给DAC0832的数值
在设计时,要求单片机送给DAC0832的数值为00H时,输出端输出的电压为1.4V,及单片机送给DAC0832的数值为0FFH时输出电压值为9.9V,所以每当电压增加0.1V时,单片机送给DAC0832的数值就要增加3。
所以在编程时,按一下步进键,P0口的数据便要变化3.所以可以通过调节电位器来改变运放的放大倍数,使单片机送给DAC0832的数值增加3,输出电压就要增加0.1V。
电压调整电路的工作电路如图9所示。
Vout口输出电压即是最终电压。
图9电压调整电路图
4.4键盘电路模块
4.4.1键盘电路的分类
键盘接口通常包括硬件和软件两部分。
硬件是指键盘的结构及其主机的连接方式;软件是指对键盘的操作的识别与分析,即键盘管理程序。
键盘一般是一组开关(按键)的集合。
常用的按键有三种:
机械触点式:
利用金属的弹性使键盘复位。
导电橡胶式:
利用橡胶的弹性使按键复位。
柔性按键:
外形及面板布局等可按整机要求设计,在价格、寿命、防潮、防锈等方面显示出加强的优越性。
键盘按其工作原理又可分为编码式键盘和非编码式键盘。
这两类键盘的主要区别是识别键符及给出相应键码的方法。
编码键盘主要是用硬件来实现对键的识别。
非编码键盘主要是由软件来实现键盘的定义与识别。
非编码式键盘按照与主机连接方式的不同,分为独立键盘和矩阵式键盘。
(1)独立式键盘:
独立式键盘中,每个按键占用一根I/O口线,每个按键电路相对独立。
I/O口通过按键与地相连,I/O口有上拉电阻,无键按下时,引脚为高电平,有键按下时,引脚电平被拉低。
I/O口内部有上拉电阻时,外部可不接上拉电阻。
(2)矩阵式键盘:
行列式键盘采用行列电路结构,当按键较多时所占用的口线相对较少,键盘规模越大,其优点越明显。
所以,当按键数目大于8时,一般采用矩阵式键盘结构。
本设计采用机械触点式键盘按非编码方式工作。
4.4.2键盘电路的工作原理
当无键按下时,单片机的P1.0、P1.1口为高电平。
当有按键按下时,单片机相应口线通过按键与地相连的电路被接通,单片机接口被拉成低电平,此时其他口线的电平状态不变。
所以,通过检测P1.0、P1.1口的电平状态,即可判断键盘上哪个键被按下。
键盘电路工作原理图如图10所示:
图10键盘电路图
4.5LED数码管显示模块
4.5.1数码管显示简介
LED显示器是一种通过控制半导体发光二极管的显示方式,用来显示图像等各种信息的显示屏幕。
本设计所用到的LED显示器由七个发光二极管组成,因此也称为七段LED显示器。
此外,在本设计所用到的LED显示器中还有一个圆点型发光二极管(在图中以dp表示),作为小数点的显示使用。
通过七段发光二极管的不同组合,可以显示多种数字、字母或者其他符号。
LED中的发光二极管有两种接法:
a.共阳极接法:
把发光二极管的阳极连在一起构成公共阳极。
使用时将公共阳极连接到+5V电源上。
这样若阴极端输入低电平,则该发光二极管就导通点亮,若阴极端输入高电平,则不点亮。
b.共阴极接法:
把发光二极管的阴极连在一起构成公共阴极。
使用时公共阴极接地,这样若二极管的阳极端输入高电平,则该发光二极管就导通点亮,若阳极端输入低电平,则该发光二极管不点亮。
本设计采用共阴极接法。
七段发光二极管,再加上一个小数点,共计8段。
采用LED显示器。
LED显示器由七个发光二极管组成,本设计采用共阳极接法。
显示器采用动态显示方式。
原因在于:
静态显示方式要求口线多,占用资源多,成本就高,而动态显示方式,电路简单、节省口线、成本低。
LED通常有两种显示方法:
动态显示和静态显示。
动态显示:
即逐位点亮显示器的每一位,对于显示器的每一位而言,每隔一段时间点亮一次显示器的亮度与导通电流有关,也与点亮时间和间隔时间有关。
在多位LED显示时,为了简化电路、降低成本,将所有位的段选码并联在一起,由一个8位输入端口控制,而共阴极或共阳极点分别由相应的口线控制。
静态显示:
是当显示器显示某一个字符时,相应的发光二极管恒定地导通或截止,并且显示器的各位同时显示。
静态显示时,较小的驱动电流就能得到较高的显示亮度。
LED显示器工作在静态显示方式下,共阴极点或共阳极点连接在一起接地:
每位的段选(a-dp)与一个8位并行口相连。
静态显示显示效果好,但是功耗大,但不占用端口,只需两个串口线输出,变成较为简单。
而且采用静态显示需要的驱动器件多,硬件成本相对更高。
比较以上两种方案,方案一硬件简单程序复杂,方案二硬件复杂程序简单,考虑到实惠和对自己的编程锻炼,选择方案动态显示。
本次设计用到的是三位动态显示。
动态显示是一位一位地轮流点亮各位数码管。
在本次设计中采用的是共阳极的三位一体的LED,1、2、3分别为三个数码显示的分别为三个数码管显示的控制引脚,其原理与单个LED的显示原理完全相同。
显示部分电路图:
图12显示部分电路图
4.5.2数码管编码表
7段数码管可以包括小数点的0~9的数字和部分的英文字母,为了获得不同的字符,数码管各段所加的电平也不同,编码也不一样。
共阴极数码管的字型,字段和编码的关系如下表1:
十六进制数
hgfedcba
显示代码
0
11000000
0xc0
1
11111001
0xf9
2
10100100
0xa4
3
10110000
0xb0
4
10011001
0x99
5
10010010
0x92
6
10000010
0x82
7
11111000
0xf8
8
10000000
0x80
9
10010000
0x90
.
01111111
0x7f
表1数码管编码表(共阳)
5软件部分
5.1开发工具介绍
单片的使用除了硬件,同样也要软件的使用,我们写汇编程序编程CPU可执行的机器码有两种方法,一种是手工汇编,一种是机器汇编。
机器汇编通过汇编软件变为机器码,用于MSC-51单片机的汇编软件有早期的A51,随着单片机开发技术的不断发展,从使用普通汇编语言到高级语言的不断发展,Keil是目前最流行开发MCS-51系列单片机的软件。
Keilc51汇编,PLM语言和C语言的程序设计,界面友好。
Keil是美国keilsoftware公司出品的52系列兼容单片机c语言开发系统。
用过汇编语言后再使用C语言来开发,体会更加深刻。
KeilC51软件提供丰富的库,与汇编相比,C语言在功能上,结构上,可读性,可维护性上有明显的优势,因而易学易用函数和功能强大的集成开发调试工具,全Windows界面。
另外重要的一点,只要看一下编译后生产的汇编代码,就能体会到KeilC51DE生成的目标代码效率非常之高,多数语句生成的汇编代码很紧凑,容易理解,在开发大型软件时更能体现高级语言的优势。
5.2直流电压源软件系统的设计
5.2.1主程序源程序
本设计的关键是对直流电压源的控制和显示。
其中,当电源打开的时候,单片机控制单元STC89C52进行复位,寄存器清零,单片机送给DAC0832的数值为00H,输出电压为0V,此时经过两个运算放大器的倒相放大后,电压仍为0V,再经过稳压器LM350后,输出为Vout=1.25*(1+27/220)=1.4V。
调整单片机的输出数值到0FFH时,令输出电压变为9.9V。
也即每当单片机数值增加3时,电压增加0.1V。
所以,软件程序负责循环检测是否有按键信号,如果KEY2按下,则输出电压增加0.1V;如果KEY3按下,则输出电压减小0.1V;如果KEY1按下,则单片机复位,返回初始状态,单片机输出再次变为00H,输出电压再次变为1.4V。
主程序的工作是循环调用键扫描函数,根据键扫描函数的值判断有无按键按下。
若无按键按下,直接调用显示函数,显示当前的电压值。
若KEY2按下,令P0的数据加3,令输出电压增加0.1V,然后调用显示子函数,显示当前电压值。
若KEY3按下,令P0口的数据减3,令输出电压减小0.1V。
然后再次调用显示子函数,显示减小后的电压值。
主程序流程图如图13所示。
主程序源代码见附录2.1。
5.2.2显示子程序源程序
本设计采用LED显示器动态显示电压数值,所以需要两组单片机接口,一组为P0口,一组为P2口,P2口负责接收段控码。
先将显示电压的整数位表示出来,再将小数点后第一位表示出来,最后表示出小数点后第二位。
再通过一个循环语句依次点亮三位LED显示器,使它们的值对应显示三