目录
这个项目本来打算暑假完成的,但是由于我去公司实习了,所以推迟了一段时间,今天我准备从头开始,好好认真的去完成项目。我会记录我项目每个阶段完成的时间以及对于题目的思考和分析。大家可以一起共同进步,今天是2020年8月29日,我正式开始设计这个项目。从容面对,认真思考寻找方法,我们共同加油!!
再说一下我为什么要选择这个题目呢?我个人是比较擅长硬件类的,因为五年级的时候就做了一个无人机(电机驱动),但是由于学习压力就放 弃了这一兴趣爱好,本来是想做智能小车无线充电,可是感觉在动态方面需要软件配合。自己一个人做难度有点大,所以选择了纯硬件的2013年A题,其实还有一个电源类的题目还可以,比如2015年的A题双向DC_DC变换器,2017年的K题单相电分析检测仪,以及2019年的c题线路负载及故障检测仪。
雷超林,Mark Lei
2000年出生,湖南衡阳人。
电子电气专业,主攻集成电路测试技术以及高频信号处理
获奖经历(时间排序)
2020年4月发表论文《基于stm32与PID算法探究》
2020年7月科技创新部电子设计竞赛一等奖
2020年8月立创物联网暑假实战训练营优秀学员
2020年9月学院嵌入式设计竞赛一等奖
2020年10月湖南省电子设计竞赛(TI杯)省一等奖
2021年湖南省职业院校技能竞赛省一等奖(集成电路应用与开发)电气专业保送第一人
未完待续......
上图为向湖南省科技厅厅长(左一)汇报工作
题目:
通过分析题目的基本要求,升压和滤波是我们经常用到的,我觉得难度较为一般,但是要做好并不容易。我在升压方面刚开始准备用XL6019,这款BOOST升压芯片支持10V-32V输入,输出34-38V左右,开关频率50Khz左右,可以根据FB引脚进行电压调节,这款芯片就在我的需求清单里。
看了另外几项题目要求,发现就PFC技术有一定难度,另外的还是比较容易的,在整个系统供电方面(不是升压是单片机供电),我选择用降压型BUCK芯片LM2596,这款芯片的应用数不胜数,在考虑用ADJ还是用固定电压输出型号时考虑到芯片的功率损耗,我采用了LM2596 12V固定电压输出,不仅仅支持宽电压输入(10-35V)还有98%的效率。
LM2596内部包含150KHZ振荡器、1.23v基准稳压电路、热关断电路、电流限制电路、放大器、比较器和内部稳压电路等。因为输入电压有30多V,如果用7812线性稳压芯片会产生大量热量,使芯片不能正常工作。
上图为XL6019的典型应用电路
芯片散热问题:LM2596有两种封装形式,5脚TO-220(T);TO-263(S)。一般情况下,TO-220(T)封装需要加装散热片。
散热片的尺寸由输入电压、输出电压、负载电流和环境温度决定。环境温度越高,对散热的需求也越高。
TO-263(S)封装的LM2596是要焊接在PCB板上的表贴元件,铜和PCB板有助于这种封装器件的散热,如续流二极管、电感器的散热。
焊接这种封装器件的PCB上的覆铜区域至少要有0.4平方英寸,更多的覆铜区域会改善热特性,但大于6平方英寸时,在散热方面的改善就很小,
就应在通风的情况下使用,所以我打算把这一块大功率的电路单独做一块PCB出来,这样不仅仅方便测试,而且可以增加散热效率。
上图为散热效果较好的LM2596封装
那接下来我们来分析一下什么是PFC技术:
随着功率因数校正(PFC)技术在我国的重视与应用,功率因数校正专用控制器的研究渐趋增加。考虑到CAD技术迅速发展的今天,传统的电路设计方法发生了革命性变革。计算机仿真参与产品设计,不仅高效、安全、节省经费,还可以通过调节参数优化系统性能,在产品开发初期,计算机仿真可忽略寄生效应,避免噪声干扰,还可简化复杂电路。然而国内对功率因数校正专用控制器的计算机仿真模型的研究尚不多见,为了更好地利用计算机仿真来进行高频功率变换系统的设计,对功率因数校正专用集成电路的计算机仿真模型的研究很有必要。
目前,PFC专用集成电路有很多品种,国外的一些半导体厂商如Motorola、Unitrode、SiliconGeneral、Siemens、MicroLinear都开发生产了PFC专用集成电路。常见的有专用于升压变换型功率因数校正专用集成电路UCC28019ADR、MC34261、TDA4814、TDA4815、TDA4816、TDA4817、UC3854、ML4819等。各种产品的技术指标和性能有所不同,但其结构与功能模块基本相同。
查了查资料UCC28019是一款优秀的因数功率矫正芯片,随着电子电路的发展而大面积开始应用。很多高功率因数整流器的设计都依靠这款芯片来完成,可见其经典性,该芯片采用平均电流模式对功率因数进行校正,适用于宽范围通用交流输入,输出为100W至2kW的功率因数变换器。该芯片开关频率固定(65kHz),具有峰值电流限制、软过流保护、开环检测、输入掉电保护、输出过压/欠压保护等众多系统保护功能
各引脚功能为:
GND脚——地;
ICOMP脚——电流环路补偿,跨导电流放大器的输出端;
ISENSE脚——电感电流检测;
VINS脚——交流输入电压检测;
VCOMP脚——电压环路补偿,跨导电压误差放大器的输出端;
VSENSE脚——输出电压检测;
VCC脚——电源输入端;
GATE脚——栅极驱动输出端
因为XL6019不支持PFC功率校正所以我放弃了XL6019 ,我将采用UCC28019ADR来进行功率矫正,同时要增加电流和电压实时采样电路,因为题目还有一项要求是电流超过2.5A时进行过载保护,根据欧姆定律,I=U/R,我们输出电压为36V,输出电流为2A,那么我们的负载电阻为18R,那么再算一下过载情况下的电阻值,为36/2.5=14.4R,这样计算之后,我们就准备一个大功率电阻,阻值可以在14R到18R之间变化,或者我们可以进行并联来调节阻值,这里我们需要注意的是必须使用大功率电阻,因为电流要达到2A,根据功率计算公式P=I的平方乘以R,我们至少要准备80W的大功率电阻,这里我们可以选择电子线性假负载,这样不仅仅方便,还可以节约成本。
在单片机控制方面,我将使用STC(国产之光)的89c52RC系列单片机,此单片机特点:
STC89C52RC是STC公司生产的一种低功耗、高性能CMOS8位微控制器,具有8K字节系统可编程Flash存储器。
拥有灵巧的8 位CPU 和在系统可编程Flash,使得STC89C52为众多嵌入式控制应用系统提供高灵活、超有效的解决方案
全静态工作,工作范围:0Hz~24MHz;
三级程序存储器加密;
1、128×8位内部RAM
2、32位双向输入输出线
3、两个十六位定时器/计数器
4、五个中断源,两级中断优先级
5、一个全双工的异步串行口
6、间歇和掉电两种工作方式
7、超强抗干扰: 高抗静电(ESD保护) ,轻松过 2KV/4KV快速脉冲干扰
8、宽电压,不怕电源抖动
9、宽温度范围,-40℃~85℃
10、禁止ALE输出
11 、掉电模式:典型功耗<0.1 μ A
12 、空闲模式:典型功耗2mA
13 、正常工作模式:典型功耗4mA-7mA
14 、掉电模式可由外部中断唤醒,适用于电池供电系统,如水表、气表、便携设备等
单片机选择好之后,我们就要开始来构建系统框架,这样不仅仅方便我们去设计,还方便程序的调试,不会突然忘记
以上为程序框架
这个单片机模块我打算单独做一块电路板,与采样电路集成到一起,刚开始我是想把采样电路与升压电路放一起
但是由于后期调试中发现升压路的高频信号对采样的精度有影响,这让我想起我学长拿不锈钢盆罩着精密运放模块!
吹口气电压就会飘!哈哈
于是我将采样与升压电路板分开,防止电路受升压模块干扰。
有了这些充足的准备,实现题目要求就非常容易了。接下来我就要开始画电路图了。
上图为第一个版本,后续还要继续修改
1、主电源电路
2、辅助电源
3、主采样电路
4、过载保护
5、单片机电路
6、显示模块
7、辅助采样电路
1.4.1 主升压模块
UCC28019ADR
前面已经介绍了UCC28019这款可以矫正PFC的电源功率芯片,现在让我们来看看怎么去设计外围电路
UCC28019具体有以下保护功能
(1)软启动(SS)
(2)VCC脚欠压锁定(UVLO)
(3)输入掉电保护(IBOP)
(4)输出过压保护(OVP)/输出欠压保护(UVD)
(5)开环保护/待机模式(OLP/Standby)
(6)过流保护
(4)栅极驱动
开关器件的参数选取
开关器件的最大峰值电流IDS_PEAK(max)可通过以下公式计算
Uin为我们输入电压34V,Uout为我们输出电压36V,Pout为输出最大功率。
我通过计算得知我需要5A以上的MOS管,这里我选择了IRF540,
D2为了是更快关闭mos管,R12为保护电阻,防止击穿开关芯片
输入滤波电容的选取
在允许有20%的电感电流纹波IRIPPLE和6%的高频电压纹波UIN_RIPPLE的情况下,输入滤波电容的最大值CIN由输入电流纹波IRIPPLE和输入电压纹波UIN_RIPPLE(max)决定。输入滤波电容的值可通过以下公式计算:
通过计算,我选择了470uF*2的滤波电容,值得注意的是还需要100nF的电容来滤除高频信号干扰
** 电感电流检测电阻的选取**
在电感电流超过最大峰值电流25%时,ISENSE脚电压达到软过流保护阈值的最小值,RSENSE将触发软过流保护。RSENSE可通过以下公式计算:
通过计算,我选择220欧姆的电阻
输出电容的选取
输出电容Cout通过满足转换器的延迟要求来计算。在一个线性周期内,tHOLDUP=l/fLINE(min),
电容的最小值可通过以下公式计算:
我选择了1000uF*2=2000uF的电容来滤波,这里我们最好选择固态电容,因为电压经过开关mos管后波动很大
后面同样用了1nF电容来滤除高频信号
电压反馈电阻的选取
为降低功耗并使电压设置误差达到最小,使用1MΩ作为电压反馈顶部的分压电阻RFB1,通过内部5V的参考电压URR选取底部的分压电阻RFB2以满足
输出电压的设计指标:
这里为了适应电源波动我使用了一个精密可调电阻,可调范围10K,这样方便我们之后的调试,大大减少了工作量。
上图为ucc28019芯片工作原理
基于UCC28019设计的高功率因数电源具有功率因数高、谐波含量低的优点。同时,该芯片具有应用简单,保护功能强大,驱动能力强,调试简单等优点,是一种非常优秀的功率因数校正芯片。
我为输入电压和输出电压留出了两个检测引脚,这样方便后续测量和校对电压
1.4.2 辅助电源

.
上图为我设计的12v供电,
采用了LM2596这款经典的降压buck电路,同时我还准备了一个LED来指示12v是否正常,12v为PFC芯片UCC28019供电
同时为下一级的5v降压供电,这里说一下线性降压芯片78XX系列和开关bUCK降压的优缺点。
首先线性适应于要求不高场合,buck用于电压电流比较大的场合,但是因为buck电路的开关频率较高
所以纹波要比线性芯片要高不少,所以我们滤波用料要足可以适当采用钽电容
同样的,我为5v也设计了一个led来指示供电情况,因为纹波不是很大,所以我用了两个贴片电容来滤波
上图为INA180a2电流采样电路,
这里我们要用康铜丝作为采样电阻,因为康铜的电阻不会因为温度升高而改变多少,我为康铜丝接入设计了一个接口,方便更换
采样输出到单片机进行处理,如果电流超过2.5a,单片机随机发出信号来关闭电流
1.4.4 过载保护
上图为过载保护,
我使用继电器的常闭触点,用了一个npn的三极管来控制继电器,因为继电器线圈为感性负载所以我们要为它增加一个续流二极管
1.4.5 单片机电路
上图为单片机模块电路,
我采用的是经典的51单片机,但是为贴片式,减少了体积,大家一定要记得P0口要接上拉电阻,因为我很久没用了,所以后面才发现忘记加了
同样要为烧录程序预留接口
1.4.6 显示模块
上图为数码管的驱动电路,因为电压电流要分开显示,同时要保证显示的速度,所以我采用的是cd4511驱动一个数码管,而不用多位数码管,因为cd4511驱动能力强,所以我也不用担心数码管的亮度
1.4.7 辅助采样电路
上图为经典的ADC采样电路,
通过两个电阻分压,ADC采取小电阻上的电压输入到单片机,因为这款采样芯片速度快同时价格便宜,而且网上有很多这款芯片的资料,
我们尽量采用大电阻串联小电阻来进行分压
在设计电源的PCB之前我们要先了解两件事情,首先就是电源电路一般电流很大,一般PCB敷铜是1OZ,
我们设计连接线的时候最好按100mil 5A的标准布线,我电源为2-3A,
所以我选择了80mil的电源走线,然后还有就是电流必须先过电容再进元件,这样可以大大提高我们电路的效率,我这次选择的是半圆弧布线,更加美观!
各个模块之间最好留一点空间,这样不仅更加美观,还抗干扰。
增加过孔和大面积敷铜来提高电流和增加散热
上图为单片机PCB板,对于单片机,我们要先提前规划好需要的引脚和布局,因为单片机的引脚分布很紧凑,空间要充分利用
我板子上安装了排针,两个电路板可以叠一起,这样就可以实现抗干扰和散热的功能
同样的,我们每个芯片都必须经过电容再进芯片,滤除干扰和杂波,走线尽量走弯线,在高速信号处我们可以走差分线
单片机我同样用圆弧走线,因为大部分都是信号线,到9月6号我已经完成工程,接下来就是打样和焊接了
9月10号电路板和元件都到了,成本大概70左右(未使用优惠券的成本),包括运费
同时我会在文档下面上传视频
焊接方面值得注意的是避免高温把铜箔翻起,还有就是避免烫伤芯片,最好用锡膏焊接。
还有就是开窗的线可以焊锡到铜皮上增加电流,还可以辅助散热!
上图为电源板
上图为控制采样主板

程序部分较为简单,分为3个模块,第一个是输入的电压电流采样,第二个是输出电压电流采样,第三是过载触发及保护
电压采样程序和保护程序会在附件上传
上图为程序流程图
值得注意的地方是ADC采样,我们尽量要先用电源校对好实际电压电流
我从网上找了很多的代码,用proteus仿真,最后都出现了一些奇怪的问题,有的根本没法读取数据,有的数据有错误。
当参考电压为5V时,如果把输入电压从0一直调到5V,读取的数据应该是从0到255,2.5V时应该是128。
但是我发现一些源码在输入0~2.5V时读取出来的是0~255,到2.5V时读取的数据为0,从2.5到5V,读出的值又从0增加到255,始终不正确。
今天下午特地查阅的ADC0832英文原版的DataSheet,又参考了一篇中文文档,终于写出了其完整的程序,
并且先后读取了MSB FIRST DATA和LSB FIRST DATA,进行比较,如果两个数据相等,返回读取的数据,否则返回0,这样可以避免读取发生错误,更稳定可靠。
并通过了Proteus仿真。
下图是ADC0832的时序图:
其中T-SetUp为250ns,由于使用的是51单片机,晶振11.0592MHz,机器周期比这个值大,可以不考虑,但为了防止出现异常,还是延时了两个机器周期。
注意在第11个时钟下降沿之后,DO上的电平既是MSB FIRST输出的最后一位,又是LSB FIRST输出的第一位。
以下是读取ADC0832的代码:
sbit CS_0832 = P1^1;
sbit CLK_0832 = P1^2;
sbit DO_0832 = P1^3;// DI、DO不同时有效,可共用一个接口
sbit DI_0832 = P1^2;
extern void _nop_ ( void );
#define pulse0832();
_nop_();
_nop_();CLK_0832=1;
_nop_();
_nop_();
CLK_0832=0//把模拟电压值转换成8位二进制数并返回
unsigned char read0832()
{unsigned char i, ch = 0, ch1 = 0;CS_0832=0;// 片选,DO为高阻态
DI_0832=1;// 此处暂停
T-SetUp: 250ns (由pulse0832完成)pulse0832();// 第一个脉冲,起始位,DI置高
DI_0832=1;pulse0832();// 第二个脉冲,DI=1表示双通道单极性输入
DI_0832=1;pulse0832();// 第三个脉冲,DI=1表示选择通道1
(CH2)// 51单片机为准双向IO口:应先写入1再读取
DI_0832=1;// MSB FIRST DATAfor(i = 0; i < 8; ++i)
{pulse0832();ch <<= 1;IF(DO_0832==1)ch |= 0x01;}
// MSB FIRST输出的最后一位与LSB FIRST输出的第一位是在同一个时钟下降沿之后,故此处先执行读取,后执行pulse
LSB FIRST DATAfor(i = 0; i < 8; ++i) {ch1 >>= 1;
if(DO_0832==1)ch1 |= 0x80;pulse0832();}
CS_0832=1;// 取消片选,一个转换周期结束
return (ch==ch1) ? ch : 0;// 返回转换结果}
发挥结果给数码管0x23就是显示32,以16进制显示两位数,因为我们使用的是CD4511数码管译码器
同时我提供了ADC0804的程序,因为我实验室经常用ADC0804,但是价格上可能有点小贵
实现一次ADC转换主要包含下面三个过程:
1.启动转换:由图6中的上部“FIGURE 10A”可知,在CS信号为低电平的情况下,将WR引脚先由高电平变成低电平,经过至少tW(WR)I 延时后,再将WR引脚拉成高电平,即启动了一次AD转换。
注:ADC0804使用手册中给出了要正常启动AD转换WR的低电平保持时间tW(WR)I的最小值为100ns,即WR拉低后延时大于100ns即可以,具体做法可通过插入NOP指令或者调用delay()延时函数实现,不用太精确,只要估计插入的延时大于100ns即可。
2.延时等待转换结束:依然由图6中的上部“FIGURE 10A”可知,由拉低WR信号启动AD采样后,经过1到8个Tclk+INTERNAL Tc延时后,AD转换结束,因此,启动转换后必须加入一个延时以等待AD采样结束。
注:手册中给出了内部转换时间“INTERNAL Tc”的时间范围为62~73个始终周期,因此延时等待时间应该至少为8+73=81个时钟周期。比如,若R为150K, C为150pF,则时钟频率为Fclk=1/1.1RC=606KHz,因此时钟周期约为Tclk=1/Fclk=1.65us。所以该步骤至少应延时81*Tclk=133.65us. 具体做法可通过插入NOP指令或者调用delay()延时函数实现,不用太精确,只要估计插入的延时大于133.65us即可。
3.读取转换结果:由图6的下部“FIGURE 10B”可知,采样转换完毕后,在CS信号为低的前提下,将RD脚由高电平拉成低电平后,经过tACC的延时即可从DB脚读出有效的采样结果。
以下是ADC0804的程序:
#include
#include
#define uint unsigned int
#define uchar unsigned char
sbit cs=P3^5;
sbit rd=P3^6;
sbit wr=P3^7;
uint shu[10]={0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09},va1,va3,num=0;
uint shu1[10]={0x00,0x10,0x20,0x30,0x40,0x50,0x60,0x70,0x80,0x90};
float va2;
uint time[2]=0;
void delay(int x)
{ int i,j;
for(i=0;i<120;i++)
for(j=x;j<120;j++);
}
main()
{
TMOD=0x01;
TH0=(65536-917)/256;
TL0=(65536-917)%256;;
EA=1;
ET0=1;
TR0=1;
cs=0;
while(1){
_nop_();
wr = 0;
_nop_();
wr = 1;
delay(5);
_nop_();
rd = 1;
_nop_();
rd = 0;
_nop_();
va1 = P1;
rd = 1;
va2=((va1*1.0/255)*5.0);
va3=va2*100;
time[0]=va3/100;
time[1]=va3%100/10;
}}
void Tim() interrupt 1
{
TH0=(65536-917)/256;
TL0=(65536-917)%256;
num++;
if(num==10)
{
num=0;
P2=shu1[time[1]]|shu[time[0]];
}
}
测试部分准备的是直流稳压电源,先给芯片通20V电压,然后再测试输出电压是否正常,再一步一步调试,调试好之后就可以正式开始录制视频
可以说整个工程最难的地方就是在于调试
上图为测试流程
我最喜欢的阶段就是烤板
设置80摄氏度,烤它个30分钟,再继续测试,这是对PCB板的初步的严格测试
烤完之后有股淡淡的香味!
我们实验室有一台集成电路测试仪,可以测试芯片逻辑功能的好坏,同时还可以测试各个参数,型号为朗讯LK8810S,那我就拿它来测试ADC0804了。
根据ADC0804的时序逻辑可知
CS 先为低电平,WR 随后置低,经时间 tw(WR)L 后,WR 置高,
随后 AD 转换器被启动,并且在经过一段时间后,模数转换完成,转换结果存入数据锁存器,同时 INTR 自动变为低电平,通知单片机本次转换已结束。我们在实际单片机程序启动 A/D 转换时就要遵循上面的时序。但实际使用中,也可以不采用中断方式读取 A/D 转换数据,我们可以在启动 A/D 转换后,经过延时一段时间,直接取 A/D 转换数据结果,读取结束后再启动一次 A/D 转换,如此循环下去,AD 转换继续测试 2 组电压,第一组输入电压 1.65V 给 VIN+,判断得到的码值是否为 0x54,若码值正确,芯片功能正常,否则为不良品;第二组输入电压 3.32V 给 VIN+,判断得到的码值是否为 0xAC,若码值正确,芯片功能正常,否则为不良品。
上图为ADC0804的测试结果
我在测试的过程中遇到了各种各样的问题,但是通过思考和积极修改,克服了难关,希望大家在最后的环节中遇到困难不要轻易放弃!!
首先对于正常输出电压采样显示来说,为了达到一定的准确度好多的参数需要校准,将采样值转换为实际的电压值时,其结果与ADC的参考电压与硬件电路的放大比率值有直接关系,虽然参考电压的值在数据手册已经给定了但实际的参考电压与数据手册,上有一定的差距,信号调理电路的放大比例也可以通过计算得到但元件的容差会使其不准确,而且这两个量是独立的没有联系,所以要在两者之间权衡,根据多次的调试校准,获得相对准确的值,具体的值在附件程序里见。
调试功率因数检测时首先观察程序能不能进入外部中断服务程序,其实只要硬件做好了,这一点问题也没有,实际上也是这样的,程序能够进入中断服务程序,然而在显示器上却看不到结果,显示的只有乱码,后来在仿真可以看到。
由于条件有限制,我只采样输入电压电流,输出电压电流,来计算实际的功率,负载采用的是大功率滑动变阻器,方便调节。
测试结果非常令人振奋,题目中大部分的要求都已经实现,就是因为实验室没有功率测试仪,只能通过初步测量输入输出电压电流来测试功率,但是也非常让人高兴的!!
比赛截止9月20号已经告段落,这段比赛让我体会到赛场上深思熟虑的重要性,在平时生活中也要经常思考,去独立解决问题,这个工程我参考大量的资料,自己从设计电路到完成测试,都是一个人在思考,思考让我学会了怎么去高效处理问题
明年2021年全国大学生电子设计大赛我将会与来自全国各地的小伙伴一决高下,
同时感谢立创对我们学校实验室的大力支持!!
我们实验室属于湖南省重点培养技术类人才实验室,同时为立创电子设计联合实验室!!
希望立创多多举办类似比赛,丰富我们的知识,提高我们的职业素养!!感谢立创!!
评论