1、陕 西 理 工 学 院课 程 设 计课 题 :基于单片机直流电压源设计班 级 : 电子 103 学生学号 : 1013014093 学生姓名 : 赵颂镭 指导老师 : 王文洋 1 设计任务及要求 .12 方案比较并确定 .12.1 方案一: .12.2 方案二: 22.3 两种方案比较 33系统硬件设计结构框图 43.1 8051 简介 .43.2 主要特性 .43.3 芯片引脚排列与名称 54 键盘控制器 MM74C922.64.1 简介 .64.2 主要特性 .74.3 芯片引脚排列与名称 74.4 D/A 转换器 DAC0832 .74.4.1 简介 .74.4.2 主要特性 84.4.
2、3 芯片引脚排列与名称 .85硬件电路设计 95.1 MM74C922 接口电路 .95.2 DAC0832 接口电路 95.3 ADC0809 接口电路 .105.4 LCD1602C 接口电路 .115.5 可调稳压源电路 .125.6 流稳压电路 126程序设计 146.1 主控程序 146.2 D/A 子程序 .146.3 A/D 子程序 156.4 键盘子程序 .1611 设计任务及要求1.设计任务: 设计制作具有一定电压范围和功能的数控电源 .原理如题目所示(1) 基本要求: a 输出电压:范围 015V .步进 0.1V纹波不大于 10mvb 输出电流: 500mAc 输出电压由
3、数码显示d 用”+”.”-”键控制输出电压进行增/减调整2 方案比较并确定根据设计要求,小组成员拟列了 2 个方案,原理上基本能够实现要求2.1 方案一:是以型号 89C51 单片机为控制核心进行设计的,通过按键进行控制,单片机控制数模转换芯片 DAC0832,其输出 07.5V 的电压,因为要求电压为 015V 所以必须再经过放大器放大,并通过三端可调正稳压器进行稳压,输出一个较稳定的直流电压,并在数码管上显示出来,并时刻刷新调整电压后的幅值。a方框图如下:稳压器 放大器 数模转换 单片机键盘显示输出电源输入2b原理图如下:2.2 方案二:是以单片机 89C51 为控制核心,外接按键进行控制
4、,单片机控制 8 个继电器,且每个继电器串联一个一定阻值的电阻,电阻之间的关系为以 2为参数的等比数列,继电器之间为并联形式。最终电压幅值可经过一个稳压电路后稳定输出。且最后输出的电压值可通过单片机控制在数码显示管上显示出来,并时刻刷新调整电压后的幅值。a 方框图如下稳压器等比电阻网络 8 个继电器 单片机键盘输入电源输入稳压输出 显示输出3b。原理图如下2.3 两种方案比较方案一的电源电压切换采用 DAC 控制速度比较快,切换方便,且可以输出较高频率的几种波形,所需器件较少,元器件较常见而且便宜,缺点是放大器的电压要求比较高,需要 015V 的输出,需要多种电源供电。方案二采用继电器控制为机
5、械式。基本原理简单,实现比较方便,电源电压也可以调整到较精确的数值,但是它需要较大的工作电流,原器件价格较贵,而且继电器会产生噪声污染。比较之后,两种方案各有优缺点,所以可以任意选取一种进行软硬件组装。直流数控电压源设计P1 P289C51P3LED显示 键盘输入继电器 电阻网络 稳压器电压输出外部电源部分43系统硬件设计结构框图本数控直流稳压电源的设计以一稳压电源为基础,以高性能单片机系统为控制核心,以稳压驱动放大电路、短路保护电路为外围的硬件系统,在检测与控制软件的支持下实现对电压输出的数字控制,通过对稳压电源输出的电压进行数据采样与给定数据比较,从而调整和控制稳压电源的工作状态及监测开关
6、电路的输出电流大小。本数控直流稳压电源实现以下功能:键盘可以直接设定输出电压值;可快速调整电压;LCD显示电压值等。AT89S51矩阵键盘LCD显示D/A 转换DAC0832A/D 转换ADC0809可调稳压源稳压电源+5V+15-15V键盘编码MM74C9223.1 8051 简介我们采用8051系列的AT89S51作为CPU,AT89S51是一种带4K字节FLASH可编程可擦除只读存储器(FPEROMFlash Programmable and Erasable Read Only Memory)的低电压,高性能CMOS8位微处理器。该器件采用ATMEL高密度非易失存储器制造技术制造,与工
7、业标准的MCS-51指令集和输出管脚相兼容。3.2 主要特性1)与MCS-51兼容 ;2)8位字长的CPU;53)可在线ISP编程的4KB片内FLASH存储器,用于程序存储,可擦写1000次;4) 256B的片内数据存储器,其中高128字节地址被特殊功能寄存器SFR占用;5)可编程的32根I/O口线(P0P3);6)2个可编程16位定时器;7)一个数据指针DPTR;8)1个可编程的全双工串行通信口;9)具有“空闲”和“掉电”两种低功耗工作方式;10)可编程的3级程序锁定位;11)工作电源的电压为5(10.2)V;12)振荡器最高频率为24MHz;13)编程频率3 24 MHz,编程电流1mA,
8、编程电压为5V。3.3 芯片引脚排列与名称DIP封装形式的AT89S51的芯片引脚排列与名称如图1所示。VCC:供电电压。GND:接地。P0口:P0口为一个8位,并行, 图1 AT89S51的芯片引脚排列与名称漏极开路双向I/O口,作为输出时可驱动8个TTL负载。该口内无上拉电阻,在设计中作为D/A,A/D及液晶显示器的数据口。P1口:P1口是一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4个TTL门电流。P1口管脚写入1后,被内部上拉为高,可用作输入,该口在设计中低四位作为键盘输入口,高四位与RST作为在线编程下载口。P2口:P2口为一个内部上拉电阻的8位双向I/O口,P2口
9、缓冲器可接收/输出4个TTL门电流,当P2口被写“1”时,其管脚被内部上拉电阻拉高,可作为输入。在作为输出时,P2口的管脚被外部拉低,将输出电流。该口在设计中作为6D/A,A/D及液晶显示器的控制口。P3口:P3口管脚是带内部上拉电阻的8位双向I/O口,可接收输出4个TTL门电流。当P3口写入“1”后,它们被内部上拉为高电平,并用作输入。作为输入,由于外部下拉为低电平,P3口将输出电流,这是由于上拉的缘故。P3口也可作为AT89S51的一些特殊功能口,如下表1所示:表1 各端口引脚与复用功能表端口引脚 复用功能P3.0 TXD(串行输入口)P3.1 RXD(串行输出口)P3.2 /INT0(外
10、部中断0)P3.3 /INT1(外部中断1)P3.4 T0(记时器0外部输入)P3.5 T1(记时器1外部输入)P3.6 /WR(外部数据存储器写选通)P3.7 /RD(外部数据存储器读选通)该口在设计中使用其特殊功能作为D/A,A/D读写信号的控制口。和A/D的中断输入口。RST:该引脚为复位信号输入端,高电平有效。在振荡器稳定工作情况下,该引脚被置成高电平并持续两个机器周期以上是系统复位。ALE/PROG:当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的地位字节。在FLASH编程期间,此引脚用于输入编程脉冲。该引脚在设计中作为锁存器器和A/D的时钟信号。/PSEN:外部程序存储器的
11、选通信号。/EA/VPP:/EA为访问芯片内部和芯片外部程序存储器的选择信号。在FLASH编程期间,此引脚也用于施加12V编程电源(VPP) 。XTAL1:芯片内振荡器放大器的输入及内部时钟工作电路的输入。XTAL2:芯片内振荡器放大器的输出。 74 键盘控制器 MM74C9224.1 简介键盘的作用是对单片机输入数据,设计中要求能是电压进行“+” , “-”,及电压值的设定,所以采用键盘为 44 的薄膜矩阵键盘, 用 MM74C922 芯片进行识别按键后送 AT89S51 的并行口 P1, P1.0P1.3 作为键盘输入口。传统的44 矩阵键盘识别处理程序的编写相对烦琐。所以采用 MM74C
12、922 芯片来将44 矩阵键盘的键值转换成 4 位 BCD 码以简化程序的编写。4.2 主要特性CMOS 工艺技术制造,工作电压 3-15V, “二键锁定”功能,编码输出为三态输出,可直接与微处理器数据总线相连,内部振荡器能完成 44 矩阵键盘扫描,亦可用外部振荡器使键盘操作与其他处理同步,通过外接电容避免开关发生前、后沿弹跳所许的延时。有按键按下时数据有效线变高,同时封锁其他键,片内锁存器将保持键盘矩阵的 4 位编盘,可由微处理器读出4.3 芯片引脚排列与名称DIP 封装形式的 MM74C922 的芯片引脚排列与名称如图 4 所示。VCC:供电电压(+5+15) ;GND:接地;Y1Y2:矩
13、阵键盘行输入, 图 4 MM74C922 芯片引脚排列与名称其内部接有上拉电阻;X1X2:矩阵键盘列输入;OUT1OUT2:矩阵键盘列输出;OSC:振荡器输入;DA:按键有效输出,当有任意键按下是 DA 输出高电平;8/OE:输出有效端,低电平有效。4.4 D/A 转换器 DAC08324.4.1 简介设计要求电压输出范围是 0.0V9.9V,步进 0.1V,共有 100 种状态,因此采用 8 位的 D/A 转换器就能满足设计要求。因此采用常用的 DAC0832 芯片。8位字长的 D/A 转换器 DAC0832 具有 256 种状态,能满足设计要求。DAC0832 芯片是具有两个输入数据寄存器
14、的 8 位 DAC,它能直接与 AT89S51 单片机相连接,4.4.2 主要特性1)8 位分辨率;2)电流型输出,稳定时间为1uS;3)可双缓冲输入,单缓冲输入或直接数字输入;4)单一电源供电(+5+15V);5 低功耗(20mW;)4.4.3 芯片引脚排列与名称DIP 封装形式的 DAC0832 的芯片引脚排列与名称如图 51 所示。VCC:电源电压,+5V。GND:地线输入端。 图 5 DAC0832 的芯片引脚排列与名称D0D7:8位数字量输入引脚。单片机由这8根线传送给D/A转换数字量。D7为最高有效位,D0为最低有效位。Vref:参考电压端。/CS:片选信号,当/CS为低电平时候,
15、芯片被选中工作。ILE:允许数字量输入线。高电平有效。9/XREF:传送控制输入线,低电平有效。/WR1,/WR2:写命令输入线。Ffb:运算放大器反馈线。Iout1,Iout2:模拟电流输出线,Iout1+Iout2为一常数。5硬件电路设计5.1 MM74C922 接口电路设计中 MM74C922 的输出口与 P1 口的低四位相接,DA 端通过反向器与P32 相接。每当有按键按下时,DA 就产生高电平,同时向 P1 口低四位传送16 进制的 BCD 码,分别对应 16 个按键。MM74C922 与键盘及 AT89S51 的接线图见图 9图 9 MM74C922 接口电路5.2 DAC0832
16、 接口电路DAC0832 最具特色是输入为双缓冲结构,数字信号在进入 D/A 转换前,需经过两个独立控制的 8 位锁存器传送。其优点是 D/A 转换的同时,DAC 寄存器中保留现有的数据,而在输入寄存器中可送入新的数据。系统中多个 D/A 转换器内容可用一公共的选通信号选通输出。10设计中用 2 个电压控制字代表 0.1V 当电压控制字从 0,2,4,到 198时,可调稳压源输出 0.0,0.1,9.9。由于 DAC0832 是电流输出型,输出的电流随输入的电压控制字线性变化。若要得到电压,还需要外接一片运放来实现电流到电压的转换。由于 DAC0832 输出级没有加集成运放,所以需外加LM32
17、4 相配适用。考虑到设计需要,采用了单缓冲双级性的接法,如图 10 所示:图 10 DAC0832 接口电路其计算公式为: 256)(101DVref)()(12 RYXZ其中 Vref 为参考电压,D 为 DAC0832 接收到的数据。5 为 DAC0832 基准电压。如果图中所示电阻 RX,RY,RZ 的阻值选取适当,则输出电压范围在电压控制字从 0,2,4,到 198 变换时根据上式计算可得输出电压为+4.9V-5V,正好满足后续电路的要求。其中 P2.7 为 DAC0832 的片选控制端。5.3 ADC0809 接口电路由于输出电压范围是0.0V9.9V超出了ADC0809的测量范围,
18、因此使用电位11器将输出电压分压后送至ADC0809的输入端。ADC0809与AT89S51的接口电路如图11所示图11 ADC0809接口电路其中P2.6为0809的片选信号,与WR和RD分别通过或非门接到0809的START和OE上,EOC通过非门与AT89S51的INT0相接。由于0809需要时钟信号,因此可以从AT89S51的ALE端得到6分频的振荡信号,为了使6分频后的信号能满足0809的需求,我们采用的是4M的晶体振荡器。5.4 LCD1602C 接口电路LCD1602C与AT89S51的接口电路如图12所示图 12 LCD 显示电路125.5 可调稳压源电路为了获得大的负载电流,
19、可调稳压部分使用了最大输出电流为 1A 的 7805 三端集成稳压块。7805 原本是输出固定电压为 5V 的集成稳压块,但可以外接电路来改变输出电压值。可调稳压的电路见图 13:设运放理想。这时,可认为运放输入电压很小。即: 图 13 可调稳压电路 5Vinout其中 Vin 为 D/A 部分输出的双级性电压,5 为 7805 的稳压值。由上式可见,Vout 与 Vin 之间成线形关系,当 Vin 变化时,输出电压改变。由于 Vin 是DAC0832 输出的范围是+4.9V-5V 的电压,因而 Vout 的变化可以从0.0V9.9V。经实验证明:这种可调稳压输出具有良好的负载特性,输出最大负
20、载电流可达到 1A。电压输出端接上 500mA 负载与未接负载(空载)之间输出电压仅相差 0.04V 以内。由于。5.6 流稳压电路本设计共用到电源有三种:即15V,+5V 。可选用的有开关电源和稳压电源两种,由于开关电源的纹波系数比较大,且设计要求电压纹波不大于 10mV 。因此采用常用的稳压电源来作为整个系统的电源。稳压电源由电源变压器、整流电路、滤波电路和稳压电路组成,如图 14 所示13图 14 电源方框及波形图整流和滤波电路:整流作用是将交流电压 U2 变换成脉动电压 U3。滤波电路一般由电容组成,其作用是脉动电压 U3 中的大部分纹波加以滤除,以得到较平滑的直流电压 U4。再通过稳
21、压电路得到平直的直流电压 U5。电源变压器采用了双 17.2V 的变压器,输入 220V,50Hz 交流电,经全桥整流,滤波,稳压后得到15V 和+5V 三种输出,+5V 部分供单片机及 D/A,A/D,显示等部分使用,电流最大约 400mA;+15V 和-15V 部分供运放使用,最大电流不超过 50mA。电路如图 15 所示:图 15 电源部分原理图图中继电器部分是一个开关电路及短路保护电路。当系统接到 220V 交流电后经变压器降压,整流桥整流后接到 K1,此时由于 U1(7815)没有输入,所以K1 没有供电,整个后续系统处于关闭状态,当按下 SW_ON 键时 U1 得到输入,产生+15
22、V 的输出,同时 K1 得电吸合,形成自锁状态,同时 79L15 也得电输出-15V 电压。松开 SW_ON 键后由于 K1 处于自锁状态,整个系统处于开启状态。当按下 SW_OFF 键时,K1 被短路,从而断开电源达到关机的目的。同样,在任一时刻如果产生短路,则 K1 也会断开达到短路保护的目的。+5V 部分的供电电流在 400mA 左右,因此采用了最大输出电流为 1A 的7805 三端稳压集成电路,由于功耗大,负载重,加装了散热片。而+15V 和-15V部分最大电流不超过 50mA。在设计过程中发现中两片 7805 的均使用了散热片且温度偏高,因此加装了风扇,使用+15V 电源,将 78L
23、15 该为 7815 后可满足14风扇需求。这样在保证性能的同时也降低了成本。6程序设计6.1 主控程序图16为系统主控程序。开始系统初始化D/A 子程序键盘处理子程序A/D 子程序有键按下?显示子程序是否图16 系统主控程序框图6.2 D/A 子程序图17为D/A子程序框图。15开始将显示值转换成对应的数字量数字量送 D/A返回1图17 D/A子程序框图可以看出,D/A子程序的作用是将设定的数字量通过变换送给D/A。6.3 A/D 子程序开始返回将输出电压转换成数字量与送 D/A 数字量相比较是否相等?将送 D/A 数字量减 01H相等不等大于送 D/A 数字量?是否将送 D/A 数字量加
24、01H1图18 A/D子程序框图由A/D子程序框图看出,修改精度为一个数字量,由于A/D和D/A的精度16限制,修改量只能达到0.05V,但足已满足设计需要。6.4 键盘子程序图19为键盘子程序框图。开始判断按键+ - 设 置 其 它步进,步减子程序设 置子程序返回A、程 序 实 现单片机系统初始化和存储器分配程序$NOMOD51; MOV DPTR,#XDATASTARTMOV R7,#LOW (XDATALEN)IF (LOW (XDATALEN) 0MOV PPAGE_SFR,#PPAGEENDIF17键盘扫描程序#include#define uchar unsigned char#d
25、efine uint unsigned intsbit key1=P10;sbit key2=P11;void delay(uint z); uchar keyscan() / 键盘扫描程序uchar temp,num;num=17;P1=0xfe; / p1.0 口置 0temp=P1;temp=tempwhile(temp!=0xf0)delay(20);temp=P1; temp=temp if(temp!=0xf0)/ delay(10); /延迟去抖P1=P1 while(P1!=0xf0);switch(temp)case 0xe0:num=7;break; /0xf0 和 0xe
26、0 的交处,即 p1.0 与p1.4 的交处case 0xd0:num=8;break; / p1.0 与 p1.5 的交处,case 0xb0:num=9;break;case 0x70:num=15;break; default:break;else break;P1=0xfd;temp=P1;temp=tempwhile(temp!=0xf0)18delay(20);temp=P1;temp=tempif(temp!=0xf0)/delay(10);P1=P1while(P1!=0xf0);switch(temp)case 0xe0:num=4;break;case 0xd0:num=5
27、;break;case 0xb0:num=6;break;case 0x70:num=14;break;default:break;else break;P1=0xfb;temp=P1;temp=tempwhile(temp!=0xf0)delay(20);temp=P1;temp=tempif(temp!=0xf0)/delay(10);P1=P1while(P1!=0xf0);switch(temp)case 0xe0:num=1;break;case 0xd0:num=2;break;case 0xb0:num=3;break;case 0x70:num=13;break;default
28、:break;else break;19P1=0xf7;temp=P1;temp=tempwhile(temp!=0xf0)delay(20);temp=P1;temp=tempif(temp!=0xf0)/delay(10);P1=P1while(P1!=0xf0);switch(temp)case 0xe0:num=10;break;case 0xd0:num=0;break;case 0xb0:num=11;break;case 0x70:num=12;break;default:break;else break;return num;主程序#include#include#includ
29、e#include#include“keyscan.h“#define uchar unsigned char#define uint unsigned int#define dac0832 XBYTE0X7FFF /P2.7 作片选,启动 DA 转换#define int0 XBYTE0X7FF8 /结束 AD 转换,锁存通道 0,读出 AD 值uchar code table=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef; /数组temp1=temp1-1; if(int09)volt1=volt1-1;volt0=9;if(weishu=3)if(dot=1)21volt1-;if(volt19)volt2-;volt1=9;else volt0-;if(volt09)volt1-;volt0=9;if(volt119) volt1=19;volt0=9;weishu=2; if(int0dac0832)temp1=temp1-1;if(int0dac0832) temp1=temp1+1; / ADC 转换后于输入数字量比较运算程序display(weishu); / 调用显示程序,显示位数的值