简易数控直流电源介绍
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
C题:简易数控直流电源
一、任务
设计并制作具有一定输出电压范围和功能的数控直流电源。
二、要求
1.基本要求
1)输出电压:范围-5V~+5V,步进0.1V,纹波≤10mV。
2)输出电压可预置在-5V~+5V之间的任意一个值。
3)输出电流≥500mA。
4)数字显示输出电压值和电流值。
5)为实现上述几部件工作,自制稳压直流电源,输出±15V,+5V。
2.发挥部分
1)用自动扫描代替人工按键,实现输出电压变化(步进0.1V不变)。
2)增加输出电流至1.5A。
3)输出电压调整率≤0.5%(输入电压220V变化范围+15%~-20%下,空载到
满载)。
4)输出电流10mA~100mA可调。
5)其他
三、评分意见
数据分析单位:V 负载电阻:50Ω/2W
简易数控直流电源(C题)
作者:胡泽志、黄晓岚、严军
摘要:
该电源系统以ATMEGA8单片机为核心控制芯片,实现数控直流稳压电源功能的技术方案。
设计采用8位精度的DA转换器DAC0832、精密基准源LM336-5.0、7805和两个CA3140运算放大器构成稳压源,实现了输出电压范围为-5V~+5V,电压步进0.1V的数控稳压电源,最大纹波只有6mV,具有较高的精度与稳定性。
另外该技术方案只采用了3按键实现输出电压的方便设定,显示部分我们采用了诺基亚3310手机夜晶显示器来显示输出电压值和电流值。
关键词:数控直流稳压源 DAC0832 运算放大器CA3140 精密基准源LM336-5.0 诺基亚3310手机液晶A VR单片机Atmega8
1.系统技术方案选择和论证
1.1 题目要求
1.1.1 基本要求
6)输出电压:范围-5V~+5V,步进0.1V,纹波≤10mV。
7)输出电压可预置在-5V~+5V之间的任意一个值。
8)输出电流≤500mA。
9)数字显示输出电压值和电流值。
10)为实现上述几部件工作,自制稳压直流电源,输出±15V,+5V。
1.1.2 发挥部分
1)用自动扫描代替人工按键,实现输出电压变化(步进0.1V不变)。
2)增加输出电流至1.5A。
3)输出电压调整率≤0.5%(输入电压220V变化范围+15%~-20%下,空载到满载)。
4)输出电流10mA~100mA可调。
5)其他
1.1.3 说明
1.2 系统基本技术方案
根据题目要求,系统可以划分为输出部分,人机接口部分和直流稳压电源。
其中输出部分是由D/A转换后再放大得到的,人机接口包括4个按键和液晶显示部分,直流稳压电源包括两组电源。
1.2.1 技术方案选择和论证
技术方案一: 三端稳压电源
采用可调三端稳压电源构成直流可调电源的电路如图1.1所示。
怎样实现数控呢?我们把图 1.1中的可变电阻RP用数字电位器来代替,就能实现数控了。
但由于三端稳压芯片LM317和LM337的输出电压不能从0V起调,输出公式:Vout=1.25×(1+R2/R1)。
所以,可以采用在输出的地方加两个二级管,利用PN节的固有电压来实现从0V起调,如图1.2所示。
图1-1
图1.2
优点:该技术方案结构简单,使用方便,干扰和噪音小
缺点:数字电位器误差较大,控制精度不够高,误差电压较大。
同时更重要的是几乎所有的数字电位器能够容忍的电流都在20mA以下。
所以,这种技术方案就被否决了。
技术方案二:采用A/D和D/A
采用A/D和D/A构成直流电源的电路如图1.3和图1.4所示。
采用单片机构成直流电源的电路如图1.3所示,利用AVR单片机自带的D/A口DAC0输出0-2.5V的电压,然后经一级反相放大器和跟随器,此时可以输出0到-5V电压。
但是因为A/D变换器只能采集0到+2.56V的电压,所以再在跟随器后面加一级反相放大器器然后送回到A/D采样,MCU比较发现DAC0输出为正确电压时,则从跟随器后直接输出电压,这样就可以输出0到-5V的电压了。
当需要正相电压时从DAC1口输出电压,这时就不需要反相,其它原理与DAC0相似。
图1.3
优点:精确度高,纹波小,效率和密度比较高,可靠性也不错。
缺点:电路相对复杂,AVR单片机的IO口不能容忍负电压,否则会被损坏。
所以,这种技术方案也行不通。
技术方案三:采用数字电位器与运放到组合
如图1.4所示,在该技术方案中我们用两个数字电位器代替了MCU中的D/A,这样可以降低成本,同时简化电路,从两个串连的数字电位器可以直接输出-5V到+5V的电压同上面技术方案一样,当输出反相电压时在送电压回A/D采样时要先经过一次反相。
但同样存在上面的问题。
图1.4
优点:电路结构更简单,降低了成本
缺点:因为数字电位器电阻误差大,且单片机的A/D口容易损坏。
技术方案三:采用7805构成直流电源
采用7805构成直流电源的电路如图1.5所示,改变RP阻值使7805的公共端的电压在0到-10V之间可调,则7805的输出端电压就可实现-5V-+5V之间可调了。
这种技术方案是利用了7805的输出端与公共端的电压固定为+5的特性来设计的。
但同样存在不好数控的
问题。
图1.5
技术方案四技术方案三与技术方案四结合,然后再以+5V为参考输出
如上图所示,采用数模转换器输出电流,经电压转换和反向放大之后得到-10V~0V的电压,把这个电压送到三端稳压器件7805的公共端,然后,再以+5V作为参考则输出的电压就能实现在-5V~+5V任意可调。
采样时,是对地采样的,就省去了负电压不好采样的麻烦,这也是我们的创新之处。
1. 主要单元电路设计
电源电路单元
该电路用了7805、7815和7905、7915制成了两组稳压直流电源电路分别得到±15V和±5V的电源。
为了防止恒流源电路中的较大电流对控制部分产生干扰,将控制部分的电源和恒流源电路电源分成独立的两部分,分别由两组变压器供电,并且,在电源的输出极加上LC滤波电路。
通过实际测量发现加LC滤波器之前的纹波高达50~60mV,但是通过滤波之后,电压输出,有了明显的改善,纹波只有10mV左右了。
人机接口部分的单元电路设计
按键键盘:
LCD显示界面:
数模转换电路:
DAC0832接口电路:
用单片机的P3口来控制DAC0832输出电压。
0832输出电路:
DAC0832输出的电压通过两个CA3140的两级放大,从Vout1 和V out2两路输出实现输出正负5V的电源。
精密基准源:
用LM334和一个10K的可调变阻构成了一个精密5V基准电压,提高系统的精密度。
纹波、尖峰干扰处理:
未加电源滤波器之前,从电源电路输出端测得的纹波有50~60mV,当加了电源滤波器之后,电源电路输出端的纹波只有6~8mV了。
在主控板的电源输入端分别再对±15V、±5V加一级LC滤波,最后把纹波控制在6mV以下了。
主控电路保护二极管:
二极管用以防止电流倒灌,防止烧坏电源。
功率放大驱动电路
+15V
-15V 输出
输
入
上图是由OP放大器与推挽射极跟随器相组合的电路。
因为使用将NPN与PNP晶体管的共同连接的推挽射极跟随器,该电路在输出端不取电流时,发射极无电流流动,所以电路的效率非常高。
这是该电路的一大特点。
没有反馈回路时,推挽射极跟随器的开关失真很大,假如反馈后,开关失真变小,但仍然存在。
为了解决这个问题我们加入了偏置电路,由于在各自的晶体管上加两个二级管的V F电压(≈1.2V),所以在发射极电阻上分别加一个PN 节的电压(≈0.6V)。
该电压用发射极设定电流(零点几至数毫安)来除就求出发射极电阻。
在偏置电路里流动的电流,是由比晶体管基极电流大得多的值来决定的,但若太大,则OP放大器就不能驱动偏置电路,所以设定该电流在1mA以下是比较妥善的。
3.系统的软件设计
3.1
4.系统测试及数据分析4.1 测试仪器与设备
测试使用的仪器如表4.1.1所示。
表4.1.1测试所使用的仪器设备
4.2 指标测试
1、 输出电压:范围-5V ~+5V ,步进0.1V ,纹波≤6mV 。
初始状态时,可以通过4
个按键输入-5.0V ~+5.0V 之间的任意电压值,并实时显示。
显示值与实际测量值同步,且在-5.0V ~+5.0V 之间的调节过程中最大误差为0.03V ;
2、 输出电压可预置在-5V ~+5V 之间的任意一个值,并且设有电压步进0.1V 的增
减键,实时可调,有自动扫描代替人工按键功能,步进0.1V ; 3、 输出电流≤500mA ;
4、 输出电压调整率≤0.5%(输入电压220V 变化范围+15%~-20%下,空载到满载)。
输出电压/ 输出电流特性:
5.00
4.944.70
4.55
-1-2
-3
输出电流/mA
电
压/
%输
出电压
/V
分析:上图表示的是输出电压与输出电流的曲线图(输出电压在无负载时,已调整到5.00V )。
在500mA 输出电流流动时,输出电压为4.94,要比此时无负载电压5.00V 低0.06V (1.2%)。
因此对电源的等效输出电阻进行计算为0.12Ω(0.06V/500mA )
由于射极跟随器的输出阻抗为数欧,可以知道,加上负反馈之后大大减小了电源的输出阻抗。
5、带负载时可以显示电流值,并通过功能键进行切换,换到电流控制档,可控制电
流在10mA~100mA自由调节。
6、线性度:(数据分析)
给定电压 5.0 4.9 4.8 4.7 4.6 4.5 4.4 4.3 4.2 4.1 4.0 3.9 3.8 实测电压 5.00 4.91 4.8 4.69 4.60 4.51 4.40 4.29 4.20 4.11 4.02 3.93 3.82 给定电压 3.7 3.6 3.5 3.4 3.3 3.2 3.1 3.0 2.9 2.8 2.7 2.6 2.5 实测电压 3.70 3.59 3.48 3.37 3.29 3.20 3.10 3.00 2.89 2.78 2.68 2.59 2.50 给定电压 2.4 2.3 2.2 2.1 2.0 1.9 1.8 1.7 1.6 1.5 1.4 1.3 1.2 实测电压 2.40 2.31 2.22 2.09 2.01 1.91 1.82 1.73 1.62 1.51 1.40 1.31 1.22 给定电压 1.1 1.0 0.9 0.8 0.7 0.6 0.5 0.4 0.3 0.2 0.1 0.0 -0.1 实测电压 1.09 0.99 0.91 0.80 0.71 0.61 0.50 0.39 0.30 0.22 0.10 0.01 -0.11 给定电压-0.2 -0.3 -0.4 -0.5 -0.6 -0.7 -0.8 -0.9 -1.0 -1.1 -1.2 -1.3 -1.4 实测电压-0.21 -0.32 -0.41 -0.50 -0.59 -0.70 -0.79 -0.87 -0.99 -1.10 -1.19 -1.30 -1.41 给定电压-1.5 -1.6 -1.7 -1.8 -1.9 -2.0 -2.1 -2.2 -2.3 -2.4 -2.5 -2.6 -2.7 --实测电压-1.52 -1.63 -1.72 -1.81 -1.90 -2.01 -2.11 -2.20 -2.31 -2.39 -2.50 -2.59 -2.71 给定电压-2.8 -2.9 -3.0 -3.1 -3.2 -3.3 -3.4 -3.5 -3.6 -3.7 -3.8 -3.9 -4.0 实测电压-2.80 -2.91 -3.01 -3.12 -3.22 -3.30 -3.41 -3.49 -3.60 -3.69 -3.80 -3.89 -4.01 给定电压-4.1 -4.2 -4.3 -4.4 -4.5 -4.6 -4.7 -4.8 -4.9 -5.0
实测电压-4.11 -4.20 -4.29 -4.40 -4.51 -4.61 -4.70 -4.79 -4.89 -4.99
8.纹波测试结果:
不带负载时的纹波测试图:
带负载时的纹波测试图:
从波形图中可以看出,加负载后,纹波变得更加密集了。
是因为,加了负载之后,就在电路中形成了回路,在负反馈的过程中,相应的调整管就需要作调整,以保证输出的电压的稳定性。
所以,我们看到了以上的现象。
但是,纹波的幅值并没有增加,仍为5.44mV这也说明了电路的稳定性比较好。
5.结论
本设计制作完成了题目要求的基本部分的和发挥部分要求,达到了预期目标。
本系统以高性能AVR单片机A TMEGA8芯片和8位精度的DA转换器DAC0832为核心部件,利用常用的三端稳压器件7805的公共端与输出端固定的5伏电压特性,最终实现了数字显示输出电压值和电流值可实时控制并显示的高性能数控电源。
参考文献:
《全国大学生电子设计竞赛训练教程》(黄智伟主编王彦陈文光朱卫华编著)
《单片微型计算机与接口技术(第2版)》(李群芳张士军黄建编著)
《单片机原理及应用》(张毅刚主编)
附录1:程序清单
#include<iom8v.h>
#include<macros.h>
#include "lcd3310.h"
#define osccal 0x7d
void main(void)
{
uchar key,num_flag=0,gb_b=40,flag=0,dac_dat=0。
char theta=0。
short mid=0,midd=0,m_v=0。
OSCCAL=osccal。
//УÕý¾§ÕñƵÂÊ
port_init()。
LCD_init()。
//³õʼ»¯Òº¾§
LCD_clear()。
LCD_write_chinese_string(0,4,16,5,0,0,1)。
//д¡±Êý¿ØµçÔ´¡°LCD_write_chinese_string(0,0,12,3,0,0,0)。
//д¡±µçѹ:¡°
LCD_write_String(40,0,"0 00")。
LCD_draw_map(47,0,point,7,14)。
//СÊýµã
LCD_draw_map(73,0,voltge,12,12)。
//Êä³öV
LCD_write_chinese_string(0,2,12,3,0,0,2)。
//д¡±µçÁ÷:¡°
LCD_write_String(46,2,"123")。
LCD_draw_map(68,2,current,16,12)。
//Êä³ömA
dac_wr_0。
//ʹÄÜDAC Vo=(Êý×ÖÂë-128)*Vref/128 PORTD=0x7f。
while(1)//Õý¸ººÅÊäÈë¼ì²â£¬ÓÉÈ·Èϼü½áÊø
{
//¼üÅÌɨÃè
key=PINB&0x02。
//PB1¶ÔÓ¦"+"if(key==0x00) {
delay_nms(85)。
key=PINB&0x02。
if(key==0x00)
{
LCD_draw_map(30,0,plus,8,12)。
//Êä³ö+。
num_flag=0。
//±íʾÕýÖµ
flag=1。
}
}
key=PINB&0x80。
//PB7¶ÔÓ¦"-"if(key==0x00)
{
delay_nms(85)。
key=PINB&0x80。
if(key==0x00)
{
LCD_draw_map(30,0,reduce,8,12)。
//Êä³ö-。
num_flag=1。
//±íʾ¸ºÖµ
flag=1。
}
}
key=PINB&0x40。
//PB6¶ÔÓ¦"È·ÈÏ"if(key==0x00) {
delay_nms(85)。
key=PINB&0x40。
if(key==0x00)
{
if(flag==1)
{
flag=0。
break。
}
else
{
}
}
}
while(1)
{
volt_disp()。
delay_nms(80)。
//¼üÅÌɨÃ裬Åжϼӻ¹ÊǼõ
key=PINB&0x02。
//PB1¶ÔÓ¦"+"if(key==0x00) {
delay_nms(85)。
key=PINB&0x02。
if(key==0x00)
{
dis_num[num_bit]++。
if((dis_num[num_bit]-'0')>=9)
{
dis_num[num_bit]=9+'0'。
}
}
}
key=PINB&0x80。
//PB7¶ÔÓ¦"-"if(key==0x00)
{
delay_nms(85)。
key=PINB&0x80。
if(key==0x00)
{
dis_num[num_bit]--。
if((dis_num[num_bit]-'0')>=255)
{
dis_num[num_bit]=0+'0'。
}
}
}
key=PINB&0x40。
//PB6¶ÔÓ¦"È·ÈÏ"if(key==0x00) {
delay_nms(85)。
key=PINB&0x40。
if(key==0x00)
{
num_bit++。
if(num_bit==4)//µçѹÉèÖÃÍê±Ï
mid=(short)(100*(dis_num[0]-'0')+10*(dis_num[2]-'0')+(dis_num[3]-'0') )。
if(mid>=500)//°ÑÉèÖõĵçѹֵÏÞ¶¨ÔÚ-5~+5V·¶Î§Ö®ÄÚ
{
dis_num[0]=5。
dis_num[2]=dis_num[3]=0。
}
if(num_flag==0)//É趨µÄÊÇÕýµçѹ
{
}
else//É趨µÄÊǸºµçѹ
{
mid=-mid。
}
dac_dat=(uchar)(0.25*mid+128)。
PORTD=dac_dat。
volt_disp()。
break。
}
elseif(num_bit==1)
{
num_bit++。
}
}
}
}
//½øÈëʵʱµ÷ѹ½×¶Îwhile(1)//´Ó¸öλµ½Ê®·Öλ¡¢°Ù·ÖλÒÀ´ÎÉ趨ÊýÖµ£¬ÓÉ"+"¡¢"-"¼üÀ´½øÐÐÉ{
key=PINB&0x02。
//ÓÐ"+"¼ü°´ÏÂʱif(key==0x00)
{
delay_nms(85)。
key=PINB&0x02。
if(key==0x00)
{
if(mid>=490)
{
mid=500。
}
else
mid+=10。
}
}
}
key=PINB&0x80。
//ÓÐ"-"¼ü°´ÏÂʱ if(key==0x00)
{
delay_nms(85)。
key=PINB&0x80。
if(key==0x00)
{
if(mid<-490)
{
mid=-500。
}
else
{
mid-=10。
}
}
}
if(mid>=0)//ÊÇÕýµçѹ
{
LCD_draw_map(30,0,plus,8,12)。
//Êä³ö+。
}
else//ÊǸºµçѹ
{
LCD_draw_map(30,0,reduce,8,12)。
//Êä³ö-。
}
dac_dat=(uchar)(0.238*mid+128)+theta。
//0.24938 132.80
PORTD=dac_dat。
midd=mid。
////mid¶ÔÓ¦¸ø¶¨µçѹ µÄ100±¶if(midd<0)
{
midd=-midd。
}
else
{
}
dis_num[0]=midd/100+'0'。
dis_num[2]=midd/10%10+'0'。
dis_num[3]=midd%10+'0'。
volt_disp()。
m_v=volt_mesue(40,2,0)。
current_mesue(40,4,1)。
m_v=m_v-500。
//ʵ²âµçѹ,Ïà¶ÔÓë5VµÄµçѹ //ʵ¼Êµçѹ µÄ100±¶ if(m_v>mid)
{
theta--。
}
else
{
theta++。
}
}
}
附录2:系统使用说明
1、系统上电;
2、设置所需电压的正负号;
3、设置-5.0V~+5.0V之间的任意电压值,先设置个位,按确认键后,在设置十分位,
再按确认键,最后同样的设置百分位;
4、按确认键,从输出端口输出的电压即为所需电压;
5、此时可以按‘+’‘-’来微调电压,按着不放,它会不断的按0.1V的步进增减或减
少。