基于at89s52单片机的数控稳压电源设计论文_第1页
基于at89s52单片机的数控稳压电源设计论文_第2页
基于at89s52单片机的数控稳压电源设计论文_第3页
基于at89s52单片机的数控稳压电源设计论文_第4页
基于at89s52单片机的数控稳压电源设计论文_第5页
已阅读5页,还剩36页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、内容摘要: 该电源系统以 AT89S52单片机为核心控制芯片,实现可预设电压数 控直流电源功能的方案。设计采用 8 位精度的 DA转换器 DAC0808和 LT082 运算 放大器构成稳压源,实现了输出电压范围为 0V+9.9V,电压步进可调的数控 稳压电源,具有较高的精度与稳定性。另外该方案采用通过按键实现输出电压 的方便设定,显示部分采用数码管来显示输出电压,通过数字电压表显示实际 输出电压值。 关键词: 数控 AT89S52 DAC0808 稳压电源 1 绪论 电源技术尤其是数控电源技术是一门实践性很强的工程技术,服务于各行 各业。电力电子技术是电能的最佳应用技术之一。当今电源技术融合了

2、电气、 电子、系统集成、控制理论、材料等诸多学科领域。随着计算机和通讯技术发 展而来的现代信息技术革命,给电力电子技术提供了广阔的发展前景,同时也 给电源提出了更高的要求。随着数控电源在电子装置中的普遍使用,普通电源 在工作时产生的误差,会影响整个系统的精确度。电源在使用时会造成很多不 良后果,世界各国纷纷对电源产品提出了不同要求并制定了一系列的产品精度 标准。只有满足产品标准,才能够进入市场。随着经济全球化的发展,满足国 际标准的产品才能获得进出的通行证。数控电源是从 80 年代才真正的发展起来 的,期间系统的电力电子理论开始建立。这些理论为其后来的发展提供了一个 良好的基础。在以后的一段时

3、间里,数控电源技术有了长足的发展。但其产品 存在数控程度达不到要求、分辨率不高、功率密度比较低、可靠性较差的缺点。 因此数控电源主要的发展方向,是针对上述缺点不断加以改善。单片机技术及 电压转换模块的出现为精确数控电源的发展提供了有利的条件。新的变换技术 和控制理论的不断发展,各种类型专用集成电路、数字信号处理器件的研制应 用,到 90年代,己出现了数控精度达到 0.05V 的数控电源,功率密度达到每立 方英寸 50W的数控电源。从组成上,数控电源可分成器件、主电路与控制等三 部分。目前在电力电子器件方面,几乎都为旋纽开关调节电压,调节精度不高, 而且经常跳变,使用麻烦。 矚慫润厲钐瘗睞枥庑赖

4、。 数字化智能电源模块是针对传统智能电源模块的不足提出的,数字化能够 减少生产过程中的不确定因素和人为参与的环节数,有效地解决电源模块中诸 如可靠性、智能化和产品一致性等工程问题,极大地提高生产效率和产品的可 维护性。 聞創沟燴鐺險爱氇谴净。 电源采用数字控制,具有以下明显优点 : (1)易于采用先进的控制方法和智能控制策略,使电源模块的智能化 程度更高,性能更完美; (2)控制灵活,系统升级方便,甚至可以在线修改控制算法,而不必 改动硬件线路; (3)控制系统的可靠性提高,易于标准化,可以针对不同的系统 ( 或 不同型号的产品 ) ,采用统一的控制板,而只是对控制软件做一些调整即可; 残骛楼

5、諍锩瀨濟溆塹籟。 (4)系统的一致性好,成本低,生产制造方便。由于控制软件不像模 拟器件那样存在差异,所以,其一致性很好。由于采用软件控制,控制板 的体积将大大减小,生产成本下降。 酽锕极額閉镇桧猪訣锥。 2 系统设计 2.1 设计任务与要求 2.1.1 设计任务 (1)设计一台微机控制的数控直流电压源,为电子设备供电; (2)在设计过程中,选择 12 个单元电路使用仿真软件(例如 Proteus 等)进行仿真调试; (3)用计算机绘制所有的电路图。 2.1.2 设计要求 (1)输出电压范围 0-9.9v ,步进值可调; (2)电压调整率 Sv0.1%V; (3)用数字显示输出电压。 2.2

6、方案的选择与论证 2.2.1 总体设计方案 方案一:采用各类数字电路来组成键盘控制系统,进行信号处理,如选用 CPLD等可编程逻辑器件。本方案电路复杂,灵活性不高,效率低,不利于系统 的扩展,对信号处理比较困难。 彈贸摄尔霁毙攬砖卤庑。 方案二:采用 51 系列单片机作为整机的控制单元,通过改变输入数字量来 改变输出电压值,从而使输出功率管的基极电压发生变化,间接地改变输出电 压的大小。 謀荞抟箧飆鐸怼类蒋薔。 本设计采用第二种方案。为了能够使系统具备检测实际输出电压值的大小, 利用 51 系列单片机为主控制器,通过键盘来设置直流电源的输出电流,设置步 进等级可调,并可由数码管显示预设电压值,

7、数字电压表显示实际输出电压。 从数字电压表中读出实际电压值,可直观的看出实际电压与预设电压是否有偏 差,并通过键盘更改。通过软件利用单片机程控输出数字信号,经过 D/A 转换 器( DA0808)输出模拟量,再经过运算放大器隔离放大,控制输出功率管的基 极,随着功率管基极电电流的变化而输出不同的电压。 厦礴恳蹒骈時盡继價骚。 2.2.2 显示部分 采用了键盘 / 显示器接口控制器。不仅简化接口引线,而且减小了软件对键 盘/ 显示器的查询时间,提高了 CPU的利用率。采用三位半的数字电压表直接对 输出电压采样并显示输出实际电压值,一旦系统工作异常,出现预制值与输出 值偏差过大,用户可以根据该信息

8、予以处理。 茕桢广鳓鯡选块网羈泪。 3 系统硬件设计 本系统由控制器模块、按键模块、 LED显示模块和 D/A转换模块 4 个模块 组成,系统硬件组成框图如图 1 所示。系统总体电路原理图如图 2 所示。 鹅娅尽 損鹌惨歷茏鴛賴。 图 1 系统组成框图 图 2 系统电路原理图 3.1 控制器模块 本系统控制器芯片采用 AT89S52单片机,其管脚图如图 3 所示 图 3 AT89S52 管脚图 AT89S52是一种低功耗、高性能 CMOS8位微控制器,具有 8K 在系统可编 程 Flash 存储器。使用 Atmel 公司高密度非易失性存储器技术制造,与工业 80C51 产品指令和引脚完全兼容。

9、片上 Flash 允许程序存储器在系统可编程, 亦适于常规编程器。在单芯片上,拥有灵巧的 8 位 CPU 和在系统可编程 Flash , 使得 AT89S52为众多嵌入式控制应用系统提供高灵活、有效的解决方案。 AT89S52的主要特性是:与 MCS-51单片机产品兼容; 8K 字节在系统可编程 Flash 存储器; 1000次擦写周期;三级加密程序存储器; 32 个可编程 I/O 口线; 三个 16位定时器 / 计数器; 8个中断源;全双工 UAR串行通道;低功耗空闲和 掉电模式;掉电后中断可唤醒;有看门狗定时器;双数据指针。 AT89S52具有 以下标准功能: 8k 字节 Flash ,2

10、56 字节 RAM, 32 位 I/O 口线,看门狗定时器, 2个数据指针,三个 16位定时器/计数器,一个 6向量 2级中断结构,全双工 串行口,片内晶振及时钟电路。另外, AT89S52 可降至 0Hz 静态逻辑操作,支 持 2 种软件可选择节电模式。空闲模式下, CPU停止工作,允许 RAM、定时器 / 计数器、串口、中断继续工作。掉电保护方式下, RAM内容被保存,振荡器被 籟丛妈羥为贍偾蛏练 冻结,单片机一切工作停止,直到下一个中断或硬件复位为止 淨。 3.2 按键模块 采用 3x4 键盘与单片机的 P1口相连,连接电路如图 4 所示。 *设为复位键, 按下时,数码管熄灭,电压输出为

11、 0。#设为确定键,按下时数码管显示预设电 压值,数字电压表显示实际电压值。 預頌圣鉉儐歲龈讶骅籴。 图4 按键电路 3.3 D/A 转换模块 D/A转换模块如图 5 所示,由数模转换器 DAC0808和运放 TL082构成。 DAC0808芯片是一个 8位 D/A转换器,有 8个数码输入端, 1 个模拟输出端,能 将控制电路输出的 8 位二进制数字量转换成模拟量的输出。 P2 口与 DAC0808的 输入端相连,通过 D/A 转换电路将输入的数字量转为模拟量,通过 TL082运算 放大器输出实际的电压,从数字电压表读出。 渗釤呛俨匀谔鱉调硯錦。 图 5 D/A 转换电路图 DAC0808引脚

12、图如图 6所示。 DAC0808各引脚功能如表 1 所示。 图 6 DAC0808 引脚图 DAC0808的 COMP引脚的作用为通过调节外接电阻,以达到改善放大器的性 能和输出电压。运放输出电压为 铙誅卧泻噦圣骋贶頂廡。 (1) 式中, VREF为外接参考电压, D7DO为 8位输入数字量。当输入数字量在 0000000011111111之间变化时,其对应的输出模拟电压 U1在 0-VREF之间, 电压分辨率为: V=5V/(28 -1)=19.6mV 。擁締凤袜备訊顎轮烂蔷。 表 1 DAC0808 的引脚功能 引脚 功能 引脚 功能 D7-D 0 8 根数据输入线, D7 为最高位 CO

13、MP 补偿端 IO 电流输出线(由外向内流) VLC 阈值控制输入端 VREF()、 VREF( ) 参考电压输入端 IN- 反相输入端 VCC、VSS 电源输入端 IN+ 同相输入端 GND 模拟地 Io 输出端 VCC-、VCC+ 正负电源供应端 TL082是一通用的 J-FET 双运用算放大器,其引脚图如图 7所示,其中 2、 3管脚分别为正反向输入,对应的 6、5管脚为正反向输出, 8、4 为正负电源。 TL0832特点有:较低输入偏置电压和偏移电流;输出没有短路保护;输入级具 有较高的输入阻抗;内建频率被子偿电路;较高的压摆率;最大工作电压18V。 贓熱俣阃歲匱阊邺镓騷。 3.4 数

14、码管显示模块 数码显示模块电路如图 8所示。显示部分选用的是 7seg-mpx2-cc 两片 7段 共阴数码管。单片机的 P00P07分别接数码管的 ADP口, P20、P21分别接数 码管 1、2 接口,分别控制第一片和第二片的暗亮。外加上拉电阻加强驱动能力, 使数码管更亮。 坛摶乡囂忏蒌鍥铃氈淚。 图 8 数码管显示电路 3.5 硬件元件清单 系统元器件清单见表 2 表2 系统元器件清单 器件 数量 器件 数量 AT89S52 1 TL082 1 3x4 键盘 1 DAC0808 1 7seg-mpx2-cc 1 电容( 220n ) 1 排阻( 4.7k ) 1 电容( 33p ) 2

15、电阻( 5k ) 3 数字电压表 1 晶振器 1 电阻( 1k ) 1 电容( 10uF ) 1 开关 1 4 软件设计与仿真 本系统程序包括主程序、键盘扫描子程序、发送键码子程序、发送数据子 程序、接收命令子程序等。主程序用于系统初始化,子程序调度等。键盘扫描 子程序用于扫描键盘状态,将被按键的位置号存入缓冲器中。发送键码子程序 用于将缓冲区键的接通码或断开码发送给单片机接口。发送数据子程序用于将 数据发给单片机接口。接收命令子程序用于接收单片机接口发来的键盘命令。 蜡變黲癟報伥铉锚鈰赘。 4.1 主程序设计 主程序通过键盘扫描子程序进行各行扫描是否有按键,消抖及重键处理: 通过软件上延时程

16、序来消除抖动;采用后按键优先处理,即多键同时按下时, 只重复发送最后按下键的扫描码。主程序流程图如图 9 所示。 買鲷鴯譖昙膚遙闫撷凄。 图 9 主程序流程图 4.2 仿真软件简介 Proteus 是英国 Labcenter 公司开发的电路分析与实物仿真软件。它运行于 Windows操作系统上,可以仿真、分析 (SPICE) 各种模拟器件和集成电路,该软 件的特点是: 綾镝鯛駕櫬鹕踪韦辚糴。 (1)实现了单片机仿真和 SPICE电路仿真相结合。具有模拟电路仿真、数 字电路仿真、单片机及其外围电路组成的系统的仿真、 RS232动态仿真、 I2C 调 试器、 SPI 调试器、键盘和 LCD 系统仿

17、真的功能;有各种虚拟仪器,如示波器、 逻辑分析仪、信号发生器等。 驅踬髏彦浃绥譎饴憂锦。 (2)支持主流单片机系统的仿真。目前支持的单片机类型有: ARM7(LPC21xx、) 8051/52 系列、 AVR系列、 PIC10/12/16/18 系列、 HC11系列 以及多种外围芯片。 猫虿驢绘燈鮒诛髅貺庑。 (3)提供软件调试功能。在硬件仿真系统中具有全速、单步、设置断点等 调试功能,同时可以观察各个变量、寄存器等的当前状态,因此在该软件仿真 系统中,也必须具有这些功能;同时支持第三方的软件编译和调试环境,如 Keil C51 uVision2 、 MPLAB等软件。 锹籁饗迳琐筆襖鸥娅薔。

18、 (4)具有强大的原理图绘制功能。 总之,该软件是一款集单片机和 SPICE分析于一身的仿真软件,功能极其 强大。 Proteus7.5 是目前最好的模拟单片机外围器件的工具,可以仿真 51 系列、 AVR、PIC 等常用的 MCU及其外围电路(如 LCD、RAM、ROM、键盘、马达、 LED、 AD/DA、部分 SPI 器件、部分 IIC 器件等)。 構氽頑黉碩饨荠龈话骛。 软件编译采用 KEIL C51 软件, Keil C51 是美国 Keil Software 公司出品 的 51 系列兼容单片机 C 语言软件开发系统,与汇编相比, C语言在功能上、结 构性、可读性、可维护性上有明显的优

19、势,因而易学易用。用过汇编语言后再 使用 C 来开发,体会更加深刻。 輒峄陽檉簖疖網儂號泶。 Keil C51 软件提供丰富的库函数和功能强大的集成开发调试工具,全 Windows界面。另外重要的一点,只要看一下编译后生成的汇编代码,就能体 会到 Keil C51 生成的目标代码效率非常之高,多数语句生成的汇编代码很紧凑, 容易理解。在开发大型软件时更能体现高级语言的优势。 尧侧閆繭絳闕绚勵蜆贅。 4.3 仿真结果 先按复位键,系统初始化,再输入数字 12(预设电压值为 1.2V),按下 # 键(确定键),则数码管显示 12,数字电压表显示实际输出电压值。图 10、 11 分别为数码管和电压显

20、示仿真,其中图 10中数码管显示 1.2V,图 11中数字电 压表显示 1.21V。识饒鎂錕缢灩筧嚌俨淒。 图 10 预设电压( 1.2V )数码管显示仿真图 图 11 预设电压( 1.2V )数字电压表显示仿真图 若需要重新设定,则按下 * 号键(复位键)。此时数码管熄灭,数字电压表 读数为 0。此时可重新设定。仿真结果如图 12、 13 所示。 凍鈹鋨劳臘锴痫婦胫籴。 图 12 重设定数码管显示仿真图 图 13 重设定数字电压表显示仿真图 4.4 系统调试 在调试过程中主要是对程序的修改,特别是延时子程序。开始延时较短时, 当按下数字键时,两个数码管同时显示按下的数字。如果延时较长则数字会

21、缓 慢的显示出来。通过修改程序,将延时调到适中,系统正常工作。 恥諤銪灭萦欢煬鞏 鹜錦。 4.5 误差分析 设定预设值后,读取数字电压表电压值,共记录 10组数据如表 3 所示。通 过预设值和实际值的比较进行误差分析。 鯊腎鑰诎褳鉀沩懼統庫。 表3 预设值和实际值的比较(单位: V) 预设值 1.2 22 3.2 4.2 5.2 6.2 7.2 8.2 9.2 9.9 实际值 1.21 2.20 3.18 4.17 5.15 6.16 7.15 8.14 9.12 9.78 差值 0.01 0 0.02 0.03 0.05 0.04 0.05 0.06 0.08 0.12 误差 0.8% 0

22、0.6% 0.7% 0.9% 0.6%. 0.7% 0.7% 0.9% 1.2% 误差平均值 =(0.8%+0.6%+0.9%+0.6%+0.7%+0.7%+0.9%硕+癘鄴颃诌攆檸攜驤蔹。 1.2%+0.7%) 10 0.78% 从数据中可看出 0.78%1%,误差较小 产生误差的因素主要有一下几点: 1)在参数选择的时候没有完全匹配; 2)数字电压表只能读出 3 位有效数字; 3)基准电压设定不适中; 4)转换位数不高。 / 防止 PWLock.h被重复引用 为 0XFF 字位 / 字型码缓冲区 / 位计数 / 输入数字存储区 / 确认键按下与否标志 附录:程序清单 #define_PWL

23、OCK_H #define_PWLOCK_H #include #include #include #include #define uchar unsigned char #define uint unsigned int uchar px; uint a; uint b; uint c;/ uint i; uchar digbit; / uchar dy; uchar wordbuf2; uchar count; uchar pwbuf2; bit enterflag; bit lh; bit pwflag; bit showflag; sbit P20=P20; sbit P21=P21

24、; void display(void); #endif /#include PWLock.h /* 键消抖延时函数 */ void delay(void) uint i; for (i=12000;i0;i-); /* uchar keyscan(void) uchar scancode,tmpcode; P1 = 0 xf0; 行扫描码 if (P1 / 延时去 抖动 if (P1 while(scancode 扫描码 if (P1 /* 返回特征字节码, 为 1 的位即对应于行和列 */ return(scancode)+(tmpcode); else scancode = (scanc

25、ode1)|0 x01;/行扫描码左移一 位 / 无键按下,返回值为 return(0); 0 /* 定时器 0 中断服务子程序, 2ms定时动态扫描显示 */ void time0_int(void) interrupt 1 /* 重置 2ms定时 */ TH0 = -2000/256; TL0 = -2000%256; px+; / 片选 if (showflag=1) display(); / 调用显示函数 /* 根据共阴极字型编码表获取 09, AB字型代码 */ uchar getcode(uchar i) uchar p; switch (i) case 0: p=0 x3f; b

26、reak; /* 0 */ case 1: p=0 x06; break; /* 1 */ case 2: p=0 x5B; break; /* 2 */ case 3: p=0 x4F; break; /* 3 */ case 4: p=0 x66; break; /* 4 */ case 5: p=0 x6D; break; /* 5 */ case 6: p=0 x7D; break; /* 6 */ case 7: p=0 x07; break; /* 7 */ case 8: p=0 x7F; break; /* 8 */ case 9: p=0 x67; break; /* 9 *

27、/ default: break; return(p); void Display(void) /LED 数值显示 switch (px%2) 阌擻輳嬪諫迁择楨秘騖。 case 0:P20 = 1;P21 = 0; P0 = getcode(wordbuf0);break; 氬嚕躑竄贸恳彈瀘颔澩。 case 1:P21 = 1;P20 = 0; P0 = getcode(wordbuf1);break; default: return; /* 显示函数 */ /*void display(void) uchar i; switch (digbit) case 1: i=0; break; ca

28、se 2: i=1; break; default: break; / 关闭显示 / 送字型码 / 送字位码 P2 = 0 x0; / P20=0; / P21=0; P0 = getcode(wordbufi); P2=digbit; digbit=1; if(digbit=1) digbit=2; P20 = 1; P21 = 0; digbit=2; P21 = 1; / 共2 位 / 左移一位 / 关闭数码管显 / T0 ,T1 工作 P20 = 0; if (digbit0 x02) digbit = digbit*2; else digbit = 0 x01; /* 主程序 */

29、void main() uchar j,key; uint temp; P20 = 1; P21 = 1; 示 TMOD = 0 x11; 方式 1 TH0 = 2000/256; /* 2ms 定时设置 */ TL0 = 2000%256; /* 启动计数器 0,关闭计数器 1 */ TR0 = 1; ET0 = 1; TR1 = 0; ET1 = 1; EA = 1; count = 0;/ 初始计数器设为 0 enterflag = 0;/ 没有按下确认键 lh = 0; pwflag = 0;/ 标志先置为 0 digbit = 0 x01; / 从第一位数码管开始动态扫描 /* 刚加

30、电时,不显示 */ for (j=0;j2;j+) wordbufj = 17; showflag = 1;/ 打开数码管显 while(1) key = keyscan(); / 调用键盘扫描函数 switch(key) case 0 x11:/ 1 行 1 列,数字 1 if (count2) wordbufcount = 1;/ 对应位上显示 “1” pwbufcount = 1; if(count=0) a=1; if(count=1) b=1; count+; / 1 行 2列,数 / 对应位上显示“ 2 break; case 0 x21: 字3 if (count2) wordbufcount = 2; pwbufcount = 2; if(count=0) a=2; if(count=1) b=2; count+; 字3 3 break; case 0 x41: if (count2) wordbufcount = 3; pwbufcount = 3; if(count=0) a=3; if(count=1) b=3; c

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论