摘要:本作品的工作方式是以C8051F020单片机为控制核心,外接串联型稳压电路,从而得到可调的数控直流稳压电源,调节范围为3V-9V,额定电流为500mA。通过单片机可以设置想要输出的电压值,电压值范围为3V-9V,分辨率为0.1V,通过DAC输送到电路板中,同时通过电压采样和电流采样,并设计相应的反馈又输送到单片ADC的两个通道中,最后将结果显示在数码管上。其中电流采样采用高边侧测量采样,通过使用INA282芯片实现。高边侧采样具有精度高,噪声影响小等优点,使采样更加精确;电压采样通过同比例分压电阻两端电压得到。系统的显示分辨率为1mA,输出电流范围为0-500mA,精度为±(2%读数+2个字),电压调整率≤0.2%,电流调整率≤1%,纹波电压(峰-峰值)≤10mV。系统采用普通三极管9013和1.4Ω的电阻构成保护电路,使得最大动作电流不超过600mA,具有过流保护功能。整个系统工作可靠,稳定,成本低且效率高。
关键词:C8051F020单片机 数控直流稳压电源 过流保护
1.1设计任务
设计并制作有一定输出电压调节范围和功能的数控直流稳压电源。
1.2基本要求
1.输出直流电压调节范围+3V~+9V。
2.最大输出电流为500mA。
3.键设定输出电压值,分辨率为0.1V。
4.显示稳压电源实际输出电压值,要求精度为±(0.5%读数+2个字)。
5.实时采样并显示输出电流,显示分辨率为1mA,要求精度为±(2%读数+2个字)。
6.电压调整率≤0.2%(输入电压变化范围-10%~+10%下)。
7.电流调整率≤1%。
8.纹波电压(峰-峰值)≤10mV(额定输入电压下,满载)。
9.具有过流保护功能;动作电流不大于600 mA。(动作电流为输出电压下降5%时,对应的输出电流值)
10.要求一路单电源供电(单片机电路允许另接电源)
- 系统整体设计方案
数控稳压电源的系统整体框图如图一。系统功能介绍如下:先根据模拟电路中具有放大环节的串联型稳压电路制作出稳压电路模块,通过电流采集电路和电压采集电路给单片机一个AD信号,再根据电路中的电阻比例设计单片机程序,使得单片机的DA输出一定范围的电压,再由稳压电路经过放大得到+3~+9V电压范围。单片机再讲采集到的电压与电流通过一定的计算显示到LED中。
图1 数控电源原理框图
系统单元电路部分
3.1 具有放大环节的串联型稳压电路设计
稳压电路较常用的串联型线性稳压电路具有结构简单、调节方便、输出电压稳定性强、纹波电压小等优点,其原理图如图2所示。输入电压为整流滤波电路的输出电压。
稳压电路的输出电压为:
(1)
由上式可知输出电压与基准电压为线性关系,当改变Uz的大小,则输出电压也将发生变化。
串联型稳压电路参见图2,其中调整管是核心元件,它的安全工作是电路正常工作的保证,它的选用主要考虑其极限参数ICM,U(BR)CEO和PCM。调整管极限参数的确定,必须考虑到输入电压UI由于电网电压波动而产生的变化,以及输出电压的调节和负载电流的变化所产生的影响。
串联型稳压电路设计图如下
图3 串联型稳压电路设计图
由图可知,调整管的发射极电流IE等于采样电阻R1中电流和负载电流IL之和,即IE=IR1+IL,调整管的管压降UCE等于输入电压UI与输出电压UO之差,即UCE=UI-UO。显然,当负载电流最大时,流过调整管发射极的电流最大,即IEmax=IR1+Ilmax。通常,R1电阻上电流可以忽略,且IEmax≈ICmax,所以调整管集电极最大电流为:
ICmax≈IEmax (2)
当电网电压最高,即输入电压最高同时输出电压最低时,调整管承受的管压降最大,即
UCEmax=UImax-UOmin (3)
当晶体管的集电极电流最大,且调整管承受的管压降最大时,调整管的功率最大,即
Pcmax= ICmax UCEmax (4)
由以上几式即可确定调整管的极限参数。实际选用时,还要考虑留一定的余量。
图4稳压电源性能指标测试电路
串联型稳压电路参见图4,其中调整管是核心元件,它的安全工作是电路正常工作的保证因为输出范围为+3V到+9V,说明调整管两端的电压至少是6V,因为额定电流是0.5A,所以得到功率至少是3W以上,因此选择中功率三极管,根据实验室储备,因此选择BD681。查询数据手册得:BD681的U(CES)=2.5V
电路参数计算:
- 输入电压:
因为考虑到实际电网电压有10%的上下波动,当电压为11.1V时无法达到额定电流0.5A,因此额定输入电压为15V
- 过流保护电阻R0的选取
限流电阻和采样电阻计算:因为当过流时,要使R6上的电压是T1导通。并且T1上的功率为 ,由数据手册得,2N9013的额定功率是0.625W,所以选择2N9013.
限流保护电阻R0:R0=Ubce/Imax=1.4Ω。
因为实验室没有1.4Ω的电阻,所以选择3Ω、5.1Ω、5.1Ω三个电阻并联。
- 分压电阻的选择:
输出电压的公式:Uo=(1+R1/R2)Uz,因为DAC输出的电压最大不能超过2.4V,而且保证精确率,并且要使支路上的电流近似为0,需要采用较大电阻,为了使单片机的输出电压利用效率高,分压电阻的分压比选取为4,即放大倍数为5,为了不影响精度,使电流足够小,则分压电阻选取为3kΩ和12kΩ。
所以单片机输出电压范围为0.6—1.8V。
(4) 电流采样电阻:
电流采样电阻希望是电阻较小,这样上面的压降就比较少,系统采用噪声较小的高边侧采样,使用INA282进行采样。使用两个参考电压接地。因为INA282的输出不能大于2.4V,采样电压的值最好在2/3*基准电压≈1.8V,芯片拥有大约50倍的增益。所以合适的电阻为R≈0.1Ω。
(5)电压采样电阻:
要保证该支路电流较小,所以需要采用大电阻,采用3k和8.2k。
根据稳压电路的放大倍数,设定输出电压范围为0.6——1.8V
- 程序设计原理框图
- 测试数据
表1 电压显示 | ||||||
单片机设定(V) | 显示(V)(空载) | 实际(V) | 显示(V)(满载) | 实际(V) | 误差(空载) | 误差(满载) |
3.0 | 3.01 | 2.996 | 2.97 | 2.965 | 0.47% | 0.17% |
4.5 | 4.51 | 4.493 | 4.48 | 4.462 | 0.38% | 0.40% |
5.0 | 5.01 | 4.991 | 4.98 | 4.958 | 0.38% | 0.44% |
6.0 | 6.01 | 5.988 | 5.98 | 5.956 | 0.37% | 0.40% |
7.5 | 7.52 | 7.483 | 7.48 | 7.444 | 0.49% | 0.48% |
8.0 | 8.02 | 7.980 | 7.98 | 7.945 | 0.50% | 0.44% |
9.0 | .02 | 8.977 | 8.99 | 8.943 | 0.48% | 0.52% |
说明:按键设定输出电压值,分辨率为0.1V。显示稳压电源实际输出电压值,精度在合理范围内。
表2 电压调整率 (满载) | ||||||
单片机设定(V) | 输入13V | 输入14V | 输入15V | 输入16V | 输入17V | 调整率 |
3.00 | 2.963 | 2.963 | 2.963 | 2.963 | 2.964 | 0.03% |
5.00 | 4.956 | 4.956 | 4.956 | 4.956 | 4.956 | 0.00% |
6.50 | 6.445 | 6.454 | 6.450 | 6.450 | 6.450 | 0.08% |
8.00 | 7.942 | 7.943 | 7.943 | 7.942 | 7.943 | 0.01% |
9.00 | 8.942 | 8.942 | 8.943 | 8.941 | 8.942 | 0.02% |
说明:由表可得,在电压上下波动10%时,电压调整率误差在合理范围内,符合项目设计要求。
表3 电流精度 | ||||
输入电压15V | 设定电压 (V) | 显示输出电流(mA) | 测量值(mA) | 误差 |
3V | 30 | 30 | 0.00% | |
82 | 83 | -1.22% | ||
5V | 93 | 90 | 3.23% | |
337 | 335 | 0.59% | ||
6V | 45 | 45 | 0.00% | |
195 | 194 | 0.51% | ||
7V | 339 | 336 | 0.88% | |
447 | 445 | 0.45% | ||
8V | 153 | 152 | 0.65% | |
540 | 542 | -0.37% | ||
9V | 110 | 107 | 2.73% | |
371 | 369 | 0.54% |
说明:电流范围测试将电流从满载到小进行测试,读出电子负载上电流值和单片机显示的电流值,在进行误差分析,误差分析公式为|单片机显示-电子负载显示|/电子负载显示*100%。项目要求精度为2%,由表可知,误差在允许范围内。电流调整率的计算方式为|满载的电压值-空载时的电压值|/满载时的电压值,项目指标为小于1%,由表可得,电流调整率小于1%,结果正确。
表4 过流保护 | ||
设定电压 (V) | 实际输出电压 (V) | 动作电流 (mA) |
3.0 | 2.97 | 525.00 |
4.5 | 4.48 | 552.00 |
6.0 | 5.95 | 549.00 |
7.5 | 7.43 | 519.00 |
9.0 | 8.94 | 571.00 |
说明:动作电流是指输出电压减小为95%时的输出的电流大小。本次设计的指标要求是动作电流要小于600mA。测量方式为先调成CC模式,把电流调成满载,用高精度万用表测出电压值,然后把电子负载转至CV模式,把电压调成电压值的95%,读出此时的电流值。由表可知,符合要求。
由图可知,动作电流小于600mA。
测试结论
本次项目的要求是制作一个输出电压范围(3-9V)可调节和最大输出电流500mA的数控直流稳压电源。本次实验采用单片机按键输入设定电压值,然后通过DAC输送到外部稳压电路,并且通过电流和电压采样,反馈回单片机上,并且将最后结果显示在数码管上。经过对上述测量结果的分析可知本次设计已经达到了设计的要求。可以做到由单片机进行键控的电压输入,改变输入的电压值,且输出电压的误差都控制在误差范围以内。该数控直流稳压电源具有过流保护功能,电压和电流调整率都较小。
附录
单片机代码
#include <C8051F020.H>
#include<ZLG7289.c>
unsigned char count=1;
unsigned int HZ=0;
unsigned int gewei,shiwei;
unsigned long value1,value2,voltage=0,current=0;
void delay(unsigned int k) //定义延时函数
{
unsigned int i,j;
for(i=0;i<k;i++)
for(j=0;j<12670;j++);
}
void key_input(void) interrupt 19 //外部(按键)中断
{
count=ZLG7289_Key();
switch(count)
{
case 0:HZ=0;gewei=0;shiwei=0;break;
case 1:if(gewei==9) {gewei=0;shiwei++;} else gewei++;if(shiwei>=9&&gewei>=0) {shiwei=0;gewei=0;}break;
case 2:if((shiwei>=9&&gewei>=0)||shiwei==9) {shiwei=0;gewei=0;}else shiwei++;break; //数值显示
}
HZ=gewei+shiwei*10;
DAC0L=(HZ*48545/90)%256;
DAC0H=(HZ*48545/90)/256; //DAC输出
ZLG7289_Download(0,0,1,HZ/10); //DAC输出显示
ZLG7289_Download(0,1,0,(HZ)%10);
P3IF&=0x7f;
}
void Volt_Mesure() //电压采集
{
unsigned int i;
value1=0;
AMX0SL=0x01; //AIN1为电压输入
for(i=0;i<200;i++)
{
AD0INT=0; //中断手动清零
AD0BUSY=1; //开启ADC0
while(AD0INT==0);
value1+=ADC0H*256+ADC0L; //值累加
ADC0H=0;ADC0L=0;
}
value1=value1/200; //电压平均值
voltage=24.8*value1*51/4096;
ZLG7289_Download(0,2,1,voltage/100);
ZLG7289_Download(0,3,0,(voltage/10)%10);
ZLG7289_Download(0,4,0,voltage%10);//采样电压的显示
delay(10);
}
void Current_Mesure() //电流采集
{
unsigned int i;
value2=0;
AMX0SL=0x03; //AIN3输入
for(i=0;i<200;i++)
{
AD0INT=0; //中断手动清零
AD0BUSY=1; //开启ADC0
while(AD0INT==0);
value2+=ADC0H*256+ADC0L; //值累加
ADC0H=0;ADC0L=0;
}
value2=value2/200; //平均值
current=2.4*value2*1000/(3*4096);
delay(10);
ZLG7289_Download(0,5,0,current/100);
ZLG7289_Download(0,6,0,(current/10)%10);
ZLG7289_Download(0,7,0,current%10); //采样电流的显示
delay(10);
}
void main() //定义主函数
{
unsigned int i,j;
WDTCN=0XDE; //关闭看门狗
WDTCN=0XAD;
OSCXCN=0x77; //系统时钟切换为外部24Mhz
delay(10);
while(OSCXCN&0x80==0);
OSCICN|=0x88;
XBR2=0X40; //端口配置
P3MDOUT=0x00;
P3=0xFF;
P3IF&=0xf7; //中断配置
EIP2=0x20;
EIE2|=0x21;
EA=1;
REF0CN=0X03; //DAC配置
DAC0CN=0x87; //基准电压2.4v
ADC0CF=0x58; //ADC0转换周期为1Mhz
ADC0CN=0x80;
AMX0CF=0x08;
AD0EN=1; //使能ADC0
AD0TM=0; //除转化周期外,一直处于跟踪方式
AD0CM1=0; //向AD0BUSY写1启动转换
AD0CM0=0;
AD0LJST=0; //ADC0H:ADC0L 右对齐
delay(20);
ZLG7289_Init(80); //ZLG初始化
ZLG7289_Reset();
ZLG7289_Download(0,0,1,0);
ZLG7289_Download(0,1,0,0);
while(1)
{
Volt_Mesure();
Current_Mesure();
j=HZ*10; //反馈模块
if((HZ*10)>voltage) j++;
else if((HZ*10)<voltage) j--;
if((HZ*10)==0) j=0;
DAC0L=(j*48545/900)%256;
DAC0H=(j*48545/900)/256;
Volt_Mesure();
Current_Mesure();
delay(10);
}
}
成果照片