简易数控直流电源设计论文.docx
《简易数控直流电源设计论文.docx》由会员分享,可在线阅读,更多相关《简易数控直流电源设计论文.docx(27页珍藏版)》请在冰豆网上搜索。
![简易数控直流电源设计论文.docx](https://file1.bdocx.com/fileroot1/2023-1/7/8cff055b-1e15-4270-b491-116d28b47b76/8cff055b-1e15-4270-b491-116d28b47b761.gif)
简易数控直流电源设计论文
xxxxx毕业设计论文
简易数控直流电源设计
学生姓名:
xxx
所在班级:
xxx
学号:
xxxxx
指导教师:
xxx
专业:
xxxx
xxxx学院xx系
二○一x年x月
摘要
随着时代的进步,科技的发展,应用电子技术迎来了新的春天,并已经广泛的应用于各种企业、工厂、军事以及人们的家居生活等各个领域。
而今年正是我面临毕业的时候。
鉴于此,我选择了设计一个简易数控直流电源作为我的毕业设计。
本文始终研究以设计一种简单、科学、实用、经济以及更具人性化的简易数控直流电源为目的。
经过与指导老师的交流与探讨,对方案的论证与比较,实际调查与实用考虑以及思路的整理与最终方案的确定。
从而确了定采用以单片机+数模转换作为本文的最终设计方案,并在最后给出了设计的sch.图纸、pcb图纸及单片机控制电路的主程序。
我的具体设计思路分析和目标是:
要求如何实现0—9.9V步进0.1V,如何保证输出电流应达到500mV,而且稳压特性要优良,输出电压的误差要尽量小。
二是控制电路要求能有效控制输出电压。
三是显示电路。
四是数模转换及放大电路。
从题目和实际分析,它属于一种信号源。
按照电子技术的要求,正弦波,矩形波,三角波自然是不可或缺的,当然加以变换能产生更多的波形固然更好。
鉴于对以上分析和目标,此设计步骤有四个:
一:
电源由稳压电路设计,它采用了LM317作为基本的稳压电路,并在它的基础上加了电压调节电路;二:
控制电路由80C51为控制核心加外围电路控制输出电压;三:
显示部分由数码管显示;四:
数模转换及放大小功率管和精密运算放大器。
在对整个方案的设计、论证过程中。
通过对不同的三种方案的比较,我们最终选择考虑使用单片机控制电路,从而达到了整个系统规模较小,价格低,功能强,可靠性高,应用灵活的优点,这是其他两种方案难以实现的,从而使我的设计整体上达到了预期目标,更好的实现了简单、科学、实用、经济以及更具人性化的设计目标。
最后我和指导老师一致认为该设计“简单、经济、科学、实用、更具人性化”同时具有很好的发展前景。
然而,由于设计的产品还未正式投放市场,还缺少验证,无法估量其广阔的市场价值和前景这也是不足之处。
关键词:
电源单片机显示数模转换及放大
摘要2
1前言4
2系统整体方案设计、比较与论证5
2.1方案设计与论证5
2.2设计方案的比较与最终确定6
3主要思路7
3.1主要电源电路7
3.2控制电路的设计8
3.2.1单片机简介8
3.2.2单片机内部结构9
3.2.3控制电路图10
3.4显示部分11
3.5数模转换及放大13
3.6此设计总电路原理14
4软件设计16
4.1程序框图16
4.2各部分程序17
5电路的PCB图34
6设计的整体评价35
总结
参考文献
一前言
随着时代的发展,自动化产品也越来越贴近人们的生活,无论是在工业还是家居领域中,数字化智能化的产品不断崛起,不断面世,应广大民众的对生活的要求,自动化产品使用越来越广泛。
数控直流电源是一种常见的电子仪器,广泛应用于电路,教学试验和科学研究等领域。
目前使用的可控直流电源大部分是点动的,利用分立元件,体积大,效率低,可靠性差,操作不方便,故障率高。
随着电子技术的发展,各种电子,电器设备对电源的性能要求提高,电源不断朝数字化,高效率,模块化和智能化发展。
以单片机系统为核心而设计的新一代——数控直流电源,它不但电路简单,结构紧凑,价格低廉,性能优越,而且由于单片机具有计算和控制能力,利用它对数据进行各种计算,从而可排除和减少模拟电路引起的误差,电源的外表美观,操作使用方便,具有较高的使用价值。
本设计的题目是简易数控直流电源。
要求有一定输出电压范围和功能的数控电源。
关键电路有四个:
一是输出电路,要求如何实现0—9.9V步进0.1V,如何保证输出电流应达到500mV,而且稳压特性要优良,输出电压的误差要尽量小。
二是控制电路,它利用单片机的功能特点,能有效控制输出电压,三是显示电路,由两个共阴极数码管显示输出的数值,四是数模转换及放大电路,从题目分析,它应当是一种信号源。
按照电子技术的要求,正弦波,矩形波,三角波自然是不可或缺的,当然加以变换能产生更多的波形多多益善。
本设计论文是以单片机为核心设计的。
2方案设计、比较与论证
2.1方案设计与论证
方案一:
采用单片机+数字电位器方案。
此方案就是把常用的电位器调节电源中的机械式电位器用数字电位器代替。
数字电位器是没有机械抽头,具有较小的震动公差和较高的机械可靠性,且允许可重复可靠地返回同一抽头位置,因此此方案线路较为简单、可靠。
但现有的数字电位器分辨率有限,常见的有32抽头、64抽头,构成的分压电路精度不高,不易调试,无法满足设计要求。
因此不选此方案,如图1所示:
图2.1方案一
方案二:
采用直流电源。
此方案是把交流变为直流并输出稳定直流,它由变压器、整流电路、滤波电路和稳压电路四部分组成。
电源变压器是为了用电设备提供所需的交流电压,有降压作用;整流器是把交流电变成脉动直流电;滤波器是将整流后的脉动直流变成平滑的直流电;稳压器是克服电网电压、负载及温度变化所引起的输出电压的变化,提高输出电压的稳定性。
此方案只满足提供电源的部分,然而数控部分功能不能实现,无法满足设计要求。
因此亦不选此方案,如图2所示:
图2.2方案二
方案三:
采用单片机+数模转换方案。
利用单片机控制,实现稳压电源的输出电压调节。
可以经过单片机通过D/A输出稳压电源的基准电压,再通过放大器和输出电压调整管输出可调电压。
此方案是由按钮控制单片机,再由数模转换几放大部分来控制输出的电压,即显示部分。
通过单片机编程完成键盘,数模转换、放大等控制功能以及信号分析、处理。
用80C51型单片机能够很好的完成这些工作,单片机控制的优点在于系统规模较小,价格低,功能强,可靠性高,应用灵活,外围电路简单,所以选此方案。
如图3所示:
图2.3方案三
2.2设计方案的最终确定:
在对上面三个整体系统的具体设计、讨论、论证与对比下并通过结合对实际的调查最后我选择了方案三。
方案一中的缺点是现有的数字电位器分辨率有限,常见的有32抽头、64抽头,构成的分压电路精度有限,不易调试。
方案二中缺点是只满足提供电源的部分,而数控部分功能不能实现,无法满足设计要求。
而方案三的由于使用了80C51型单片机能够很好的完成以上方案一和方案二难以实现的功能,而且由于单片机控制电路时有系统规模较小,价格低,功能强,可靠性高,应用灵活,外围电路简单等诸多优点从而使方案三比方案一和方案二更具有实用价值和科学价值、更趋向于人性化,鉴于此我和指导老师一致选择方案三。
3主要思路:
3.1主要电源电路:
直流稳压电源是由工频变压器、整流滤波电路及稳压电路所组成,各部分的作用:
(1)直流稳压电源工频变压器的作用是将电网220V的交流电压变换成整流滤波电路所需要的交流电压Ui。
变压器副边与原边的功率比为P2/P1=η,式中η是变压器的效率。
(2)整流滤波电路:
整流电路将交流电压Ui变换成脉动的直流电压。
再经滤波电路滤除较大的纹波成分,输出纹波较小的直流电压U1。
常用的整流滤波电路有全波整流滤波、桥式整流滤波等。
(3)三端集成稳压器:
常用的集成稳压器有固定式三端稳压器与可调式三端稳压器。
常用可调式正压集成稳压器有CW317(LM317)系列,它们的输出电压从1.25V-37伏可调,最简的电路外接元件只需一个固定电阻和一只电位器。
其芯片内有过渡、过热和安全工作区保护,最大输出电流为1.5A。
其典型电路如图3.1,输出电压Uo的表达式为:
Uo=1.25(1+R2/R1)式中R1一般取120-240欧姆,输出端与调整端的压差为稳压器的基准电压(典型值为1.25V)。
图4此电路采用了常用的元器件有LM317、LM337、LM7805,常用稳压器LM317可调输出1.2V—37V,1.5A正电压可调稳压器【100kb】,LM337可调输出-1.2V—-37V,1.5A负电压可调稳压器【246kb】,LM7805是三端稳压器可以输出电压5V—24V,电流1A。
由于三端稳压芯片LM317,LM337的输出电压不能从0V起调,输出公式:
Vout=1.25×(1+R2/R1)。
所以。
可以采用在输出的地方加两个二极管,利用PN节的固有电压来实现从0V起调。
此电路利用7805的输出端与公共端的电压固定在+5V的特性。
图3.1电源电路
3.2控制电路的设计:
3.2.1单片机简介
40个引脚大致可分为4类:
电源、时钟、控制和I/O引脚。
1.电源:
(1)VCC—芯片电源,接+5V;
(2)VSS—接地端;
2.时钟:
XTAL1、XTAL2—晶体振荡电路反相输入端和输出端。
3.控制线:
⑴ALE/PROG:
地址锁存允许/片内EPROM编程脉冲
①ALE功能:
用来锁存P0口送出的低8位地址
②PROG功能:
片内有EPROM的芯片,在EPROM编程期间,
此引脚输入编程脉冲。
⑵PSEN:
外ROM读选通信号。
⒋I/O线
80C51共有4个8位并行I/O端口:
P0、P1、P2、P3口,共32个引脚。
P3口还具有第二功能,用于特殊信号输入输出和控制信号(属控制总线)。
图3.2.2引脚功能
3.2.2单片机内部结构:
图3.2.1单片机内部结构
3.2.3控制电路图
图5此电路采用了80C51系列的单片机,成为控制核心,在加上外围电路的两个控制开关来实现电压的多少,单片机是将微处理器(CPU)、存储器(存放程序或数据的ROM和RAM)、总线、定时器/计数器、输入/输出接口(I/O)、中断系统和其他多种功能器件集成在一块芯片上。
图3.2控制电路
图形是有按钮,晶振,复位,显示端口组成:
(1)按钮:
P1_0和P1_1是由软按键接地,另一端连接在单片机的I/O上。
通过按动按钮,使端口电平变成低电平,来出发的。
其特点是不用接限流电阻,计算电阻值,从而担心烧坏单片机。
(2)晶振:
18,19端口组成了通用晶振电路。
由12MHz的晶振和两个22PF的小电容组成。
给单片机提供脉冲信号,相当于人体心脏。
(3)复位:
复位电路分为上电复位,按键复位电路,复合复位三种。
该电路为上电复位。
(4)显示端口:
本项目中采用的是共阳极数码管显示字样的。
是由P0I/O来输出的。
有程序内部设置好段码,通过点动扫描来实现视觉错觉,显示出连续的数字。
3.4显示部分:
图3.4.1显示电路
此部分电路由两个共阳极的数码管组成,共阳极数码管是一类数字形式的显示屏,通过对其不同的管脚输入相对的电流,会使其发亮,从而显示出数字能够显示时间、日期、温度等所有可用数字表示的参数,由于它的价格便宜、使用简单、在电器,特别是在家电领域应用极为广泛,空调、热水器、冰箱等等。
绝大多数热水器用的都是数码管,其他家电也用液晶屏与荧光屏。
LED显示器有共阴极和共阳极两种结构,在共阳极结构中,各段发光二极管的阳极连在一起,将此公共点接地,某一段发光二极管的阴极为高电平时,该段发光。
LED显示0—9某个字符时,则要求在a-dp送固定的字段码,如要使LED显示“0”,则要求a、b、c、d、f、各引脚为高电平,g和dp为低电平,字段码为“3fh”。
共阴极字符0—9七段码如下:
字符:
0123456789
字段码:
3fh06h5bh4fh66h6dh7dh07h7fh6fh
图3.4.2共阴极结构
限流电阻R计算:
普通的LED的平均电流工作为3mA左右(高亮度型为1mA),LED压降如果按1.7V计算,则R=U/I=(5V-2)/0.01=300(Ω)
图3.4.3限流电阻
3.5数模转换及放大:
图3.5.1数模转换及放大
此电路小功率管2N930NPNLOWPOWER硅晶体管[53kb]和OP27A,OP27是低噪音精密运算放大器。
OP27精密运算放大器的低失调和漂移与高速和低噪声结合在一起,失调降到25uV且最大漂移为0.6uV/℃,这使得OP27供精密仪表应用是很理想的。
通过使用偏置电流抵消电路来获得±10nA的低输入偏置电流。
在整个军用温度范围内,该电路一般使Ib和Qs分别保持±20nA和15nA。
其输出级具有很好的负载驱动能力,可保证600欧负载上的±10V振幅以及低的输入失真。
在低电平信号的低噪声,高精度放大中具有极好的性能。
低噪声:
80nVp-p(0.1Hz~10Hz);低漂移:
0.2uV/℃;高速度:
2.8V/us;增益带宽:
8MHz;低失调电压:
10uV;高的开环增益:
1.8x106;电源电源±22V;输入电压±22V;输入短路持续时间不限定;差模输入电压±0.7V;差模输入电流±25mA;存储温度范围-65℃~+150℃;电源电压小于±22V,最大输入电压等于电源电压。
OP27的输入级由背靠背的二级管来保护,为了获得低噪声,不使用电流限制电阻。
如果差动输入电压超过0.7V,输入电源应限制到25mA。
输出级具有良好的负载驱动能力。
±10V保证摆幅和低输出失真。
电源抑制比和共模抑制比均超过120dB。
3.6此设计的总电路原理图如下所示:
图3.6.1总电路
4软件设计
4.1程序框图如下图所示:
图4.1程序框图
4.2各部分程序设计:
程序:
#include
#defineucharunsignedchar
#defineuintunsignedint
sbitKEY1=P1^1;
sbitKEY2=P1^2;
charnum=0,num1=0;
#defineDIYI0x01
#defineDIER0x03
#defineDISAN0x07
#defineDISHI0x0f
#defineDIWU0x1f
#defineDILIU0x3f
#defineDIQI0x7f
#defineDIBA0x10
#defineDIJIU0x30
#defineuDISHI0x70
#defineDISHIYI0xf0
#defineDISHIER0xf1
#defineDISHISAN0xf3
#defineDISHISHI0xf7
#defineDISHIWU0x05
#defineDISHILIU0x09
#defineDISHIQI0x11
#defineDISHIBA0x21
#defineDISHIJIU0x41
#defineDIERSHI0x0a
#defineDIERSHIYI0x12
#defineDIERSHIER0x22
bitclock=0;
voidscankey();
voidKscankey();
voidmain()
{
while
(1)
{
if(KEY1==0)//当按键按下时
{
scankey();//键值+0.1
}
if(KEY2==0)//当按键按下时
{
Kscankey();//键值-0.1
}
}
}
voidscankey()//步进值+的的设置函数
{
if(KEY1==0&&clock==1)
{
num++;
}
if(clock==1)
{
KEY1=0;
}
else
{
KEY1=1;
}
if(num==1)//设置的键值时
{
P0=DIYI;//P0口的值
for(num=2;num<8;num++)//按键按8次
P0=P0<<1;//P0口的值在左移1
if(num==8)//当键值为8时
{
P0=DIER;//重新设置P0
for(num=9;num<15;num++)//键值为9到15
P0=P0<<1;
}
if(num==15)//从新设置键值
{
P0=DISAN;//重新设置P0口的值
for(num=16;num<21;num++)//按键按8次
P0=P0<<1;//P0口的值在左移1
}
if(num==21)//设置的键值时为21时
{
P0=DISHI;//P0口的值
for(num=22;num<26;num++)//按键按8次
P0=P0<<1;//P0口的值在左移1
}
if(num==26)//从新设置键值
{
P0=DIWU;//P0口的值
for(num=27;num<30;num++)//按键按8次
P0=P0<<1;//P0口的值在左移1
}
if(num==30)//从新设置键值
{
P0=DILIU;//P0口的值
for(num=31;num<33;num++)//按键按8次
P0=P0<<1;//P0口的值在左移1
}
if(num==33)//从新设置键值
{
P0=DIQI;//一次数据传送完
}
if(num==34)//从新设置键值
{
P0=DIBA;//P0口的值
for(num=35;num<42;num++)//按键按8次
P0=P0>>1;//P0口的值在左移1
}
if(num==42)//从新设置键值
{
P0=DIJIU;//P0口的值
for(num=43;num<49;num++)//按键按8次
P0=P0>>1;//P0口的值在左移1
}
if(num==49)//从新设置键值
{
P0=uDISHI;//P0口的值
for(num=50;num<54;num++)//按键按8次
P0=P0>>1;//P0口的值在左移1
}
if(num==54)//从新设置键值
{
P0=DISHIYI;//P0口的值
for(num=55;num<59;num++)//按键按8次
P0=P0>>1;//P0口的值在左移1
}
if(num==59)//从新设置键值
{
P0=DISHIER;//P0口的值
for(num=60;num<63;num++)//按键按8次
P0=P0>>1;//P0口的值在左移1
}
if(num==63)//从新设置键值
{
P0=DISHISAN;//P0口的值
for(num=64;num<66;num++)//按键按8次
P0=P0>>1;//P0口的值在左移1
}
if(num==66)//从新设置键值
{
P0=DISHISHI;//P0口的值
}
if(num==67)//从新设置键值
{
P0=DISHIWU;//P0口的值
for(num=68;num<73;num++)//按键按8次
P0=P0<<1;//P0口的值在左移1
}
if(num==73)//从新设置键值
{
P0=DISHILIU;//P0口的值
for(num=74;num<78;num++)//按键按8次
P0=P0<<1;//P0口的值在左移1
}
if(num==78)//从新设置键值
{
P0=DISHIQI;//P0口的值
for(num=78;num<82;num++)//按键按8次
P0=P0<<1;;//P0口的值在左移1
}
if(num==82)//从新设置键值
{
P0=DISHIBA;//P0口的值
for(num=83;num<85;num++)//按键按8次
P0=P0<<1;//P0口的值在左移1
}
if(num==85)//从新设置键值
{
P0=DISHIJIU;//P0口的值
}
if(num==86)//从新设置键值
{
P0=DIERSHI;//P0口的值
for(num=87;num<92;num++)//按键按8次
P0=P0<<1;//P0口的值在左移1
}
if(num==92)//从新设置键值
{
P0=DIERSHIYI;//P0口的值
for(num=93;num<97;num++)//按键按8次
P0=P0<<1;//P0口的值在左移1
}
if(num==97)//从新设置键值
{
P0=DIERSHIER;//P0口的值
for(num=98;num<100;num++)//按键按8次
P0=P0<<1;//P0口的值在左移1
}
if(num==100)//从新设置键值
{
P0=DIYI;//P0口的值
}
}
}
voidKscankey()//键值-0.1函数
{
if(KEY2==0&&clock==1)
{
num1++;
}
if(clock==1)
{
KEY2=0;
}
else
{
KEY2=1;
}
if(num1==100)//从新设置键值
{
P0=DIYI;//P0口的值
for(num1=99;num1>92;num1--)//按键按8次
P0=P0<<1;//P0口的值在左移1
if(num1==92)//从新设置键值
{
P0=DIER;//P0口的值
for(num1=91;num1>85;num1--)//按键按8次
P0=P0<<1;//P0口的值在左移1
}