1. 引言
开关电源是一种高效节能的电源,要求有较大的输出电流范围和较精确的步进要求以及较小的纹波电流 [1]。其中,电源步进可调,实时显示功能是现在主流电源设计的方向之一。在开关电源出现前,基本采用线性稳压电源作为系统供电模块,但其具有体积大,发热量大,效率低的特点 [2],在半导体激光器温度控制方面不具有良好的应用前景,因此开关电源替代线性电源是技术的发展方向。半导体激光器是非线性器件,受温度的影响较大,工作温度的改变会影响其输出中心波长和功率值 [3]。特别是在外场工作中,温度过低和过高都会引起激光器的损坏。因而,半导体激光器的温度控制环节一直是激光器研究的重要组成部分。
开关电源一般是利用工作在较高频率的晶体管,以通断的方式对输入的直流电压进行斩波,然后利用储能元件释放能量、滤波电路将其转换为直流电压的方式来工作的 [4]。而在斩波过程中,则可以通过控制波形的脉冲宽度或频率来获得不同的输出电压,前者称之为脉冲宽度调制(PWM),后者称为脉冲频率调制(PFM),此外也有利用两种方式混合进行调制的方式。实验中选取PWM方式调制,这种方式重度负载时的效率较高,且后续的滤波电路相对简单,输出电压的纹波相对小,同时简化了设计。在本实验中,应用其输出电流平稳、控制精度到的特点,与激光器温控系统相结合,能够增强激光器输出功率的稳定性,提高激光器光束质量,探索高精度控制激光器实验方案。
2. 系统总体设计
系统中,控制器采用了ATMEGA328PU型8位RISC高效率单片机,利用DAC0832芯片作为数模转换器,将控制器输出的数字信号转换为模拟电流信号;采用运算放大器来构建反向放大器,从而将模拟电流信号转换为电压信号,通过电阻构成的局部反馈网络输入供电输出模组,产生输出电压;霍尔元件作为电流传感器,将采样电流反馈给控制器,程序将其与设定值进行比较,控制器根据比较结果调整输出电压,使输出电流在一定范围内稳定。系统采用字符型液晶屏作为显示当前电流值和设定值的界面,可以通过旋转编码器开关进行设定值输入,操作方便,调整迅速。
采用LM2596-ADJ芯片作为开关稳压芯片,基于对电路原理的研究和计算,搭建了Buck型DC-DC降压电路,通过改变其对应引脚上的反馈电压,便能产生所需的输出电压。该器件内部集成频率补偿和固定频率发生器,且内置开关晶体管,频率为150 KHz,其开关周期恒定,改变脉冲宽度即可改变占空比,即以PWM方式来改变输出电压 [5]。与低频开关调节器相比较,该芯片可以使用更小规格的滤波元件和标准电感,只需极少的外接元件,便可以构成完整电路,这简化了整个系统电路的设计。整体设计如图1所示。
3. 硬件设计
3.1. 控制电路与人机交互设计
采用AVR单片机作为设计的控制系统。本次设计使用的ATmega328P-PU单片机,软件程序可在ArduinoIDE下创建和编译,通过USB接口上传至328芯片中,实现对单片机的编程 [6]。

Figure 2. ATmega328P-PU minimum system
图2. ATmega328P-PU最小系统
ATmega328PU单片机的外围电路如图2所示,使用16 MHz的晶体振荡器和两枚22pF的瓷片电容构成外部时钟,复位电路使用10 KΩ上拉电阻,系统供电和基准电压均由采用5 V直流电源提供。
在设计中,主要采用液晶显示模块或数码管作为显示解决方案,两者都可以满足设计要求。但在实际应用中,数码管占用的资源较多,且体积较大,不适合便携的设计,因此选择LCD1602作为显示界面。液晶屏采用并行口与单片机的数字IO口连接,电位器用于调节液晶屏的显示清晰度,在保证系统稳定同时满足电源模块的简洁 [7]。输入方案采用旋转编码器设置和调节电流大小,采用此种方案能够较为迅速的设定电流参数,同时调整过程中稳定可靠。
3.2. 数模转换电路设计
该电路将单片机输出的数字指令信号转换成为模拟电信号。采用的DAC型号为DAC0832,这是是一款8bit并行输入集成式数模转换芯片,基本原理是输入8位二进制数字量,输出模拟量与数字量呈比例关系。这款芯片由8位输入锁存器、8位DAC寄存器、8位D/A转换电路及转换控制电路构成 [8]。但其输出的模拟信号为电流信号,且幅值较小,因此本设计中在其输出端接入了一个反相放大器,将其转化为控制开关电源的电压信号。实验中选择μA741运算放大器,完整的电路连接如图3所示。

Figure 3. Drive signal generator circuit
图3. 驱动信号发生电路
3.3. 电流反馈电路设计
采用ACS712电流传感器模块可实时监测当前电流值,该模块连接方便,选用5 A量程即可满足设计要求,将该模块串联在负载端,输出端与单片机I/O通信即可反馈至单片机控制端,构成闭环反馈电路 [9],其外围电路设计与布线如图4所示。
3.4. 控制程序设计
系统的控制程序如图5所示:当系统开机后,首先进行系统初始化,将输出电流调整至最小值,以保护设备及用电器安全,初始化完毕后扫描旋转编码器并获取设定电流值,控制器读取电路传感器反馈的电流值并与设定值比较,如果数值相等,则保持输出电流不变,同时扫描旋转编码器动作;若读数与设定值不等,则控制器发出指令,调整开关电源输出电压,读取传感器数据并与设定值比较,直到设定值与检测值相等。
程序中的运算均给予十进制数值,而单片机对DAC的输出命令为十六进制数值,故需要在输出前进行转化。采用查表法设计思想,即预先建立的数制对应表来转换数据,生成对应0~255共计256个不同的十六进制数值,利用程序预先计算出0~255所对应的每一个十六进制数值,并将其写入一个固定的数组,在使用时,只要将欲转换的十进制数赋值给地址变量便能方便地得到对应的十六进制数据。
3.5. 供电模块设计
系统中,需要多种电压为不同器件供电,参考元器件的数据手册,系统中各部分对供电电压的需求如表1所示。

Table 1. Power supply of each module
表1. 各部分模块电源
经过分析研究,本设计决定采用DC12V电源供电,该电源可提供DC ± 12 V电源,并不完全满足设计要求,因此,需要使用三端稳压器LM7805芯片将+12 V电压稳压在+5 V,并为AVR单片机和LCD1602供电。由于μA741芯片作为反相放大器使用,需要负电源供电,采用三端稳压器LM7909芯片将−12 V电压稳压在−9 V,作为反相放大器参考电压,同时使用LM7809将+12 V稳压至9 V,和−9 V一起构成运放的双电源供电。由于采用反相放大器输出控制电压,为实现正电压输出,故运放的输入电压,即DAC芯片的参考电压应为负电压。文中,采用LM7909输出的−9 V作为负电压来源,利用高精度基准电压芯片LM336来实现−5 V的参考电压 [10],电源的设计以及布线结构如图6所示。

Figure 6. Design of each phase power supply circuit
图6. 各相供电电路设计
3.6. 受控直流变换电路
选用LM2596开关电压调节器模块作为受控端,该模块是一款降压型电源管理芯片集成电路,其中LM2596-ADJ是可调版本,可以输出小于37 V的各种电压 [11]。由于该器件只需极少量外接原件,通用标准电感,简化了电路的设计,图7为LM2596外围电路,其中控制电压输入端为V-DAC,程控电压输出端为V-OUT,采用DC12V电源供电。
图7中,LM-2596芯片基准电压Vref = 1.23 V,D2的肖特基二极管压降为0.2 V,根据基尔霍夫电压定律设计系统的控制电压和输出电压,其调节范围主要由R6、R7、R8控制 [12]。计算公式如下:
(1)
(2)

Figure 7. Test circuit and its wiring scheme
图7. 测试电路及其布线方案
整理后得:
(3)
芯片的反馈端电压恒为1.23 V,只需改变控制端电压,输出电压随之改变。经过计算,在控制端给予0~5 V电压,R6、R7、R8分别选取3 KΩ、1 KΩ、8.2 KΩ,理论控制电压范围在11.316 V~1.566 V之间,同时为保证系统安全稳定运行,留出了一定的调整冗余量,调整范围在2~10 V间即可满足设计要求。
4. 实验与测试
4.1. 系统的制备
在实验机制备中,将主要元件焊接在电路板上。制备完成的实验机系统如图8所示。
4.2. 电压输出测试
测试中,将LM2596-ADJ输出端接入大功率滑线变阻器作为负载,并在两端并入示波器,编制程序令电压逐级自动循环变化,在示波器上观察控制信号电压和输出电压值的相互变化关系,信号如图9所示。
(a)
(b)
Figure 9. Periodic changes of control signal and output voltage
图9. 控制信号与输出电压周期性变化图
上图9(a)中黄色折线为控制信号,蓝色折线为输出电压,可见当控制信号电压逐渐升高,输出电压逐渐下降,二者呈现一一映射的反比例关系,说明控制命令和模拟电压之间的精确对应。通过数据分析,输出电压在1.76~10.30 V之间,计算后步进值为0.03375 V,实现较高精度控制调节。图9(b)中为控制信号周期性变化,曲线有拐点,尚未查明原因,但不影响系统的正常工作。
4.3. 系统电流输出测试
该部分实验主要测试系统的输出电流稳定性,具体方案如下:使用TEC制冷片作为负载,连接在系统的输出端;设定输出电流为100 mA,然后改变电位器阻值来模拟实际应用中负载等效电阻的变化;通过外接的电流表和电压表测量输出端的电流电压,数据记录如表2所示。

Table 2. Output voltage and current value of the system
表2. 系统的输出电压与电流值
从表中可以看出,负载电阻由于人为操作呈现不断减小的趋势,而系统的输出电流并未随负载的变化而呈现较大变化,基本稳定在一定值附近,只在负载很小时波动稍大,很快又恢复稳定,结合具体数值计算分析,最大的电流波动在±3%以内,电流输出稳定。
模拟实验后将负载接入TEC并控制激光器的输出,实验中采用DFB激光器,输出的中心波长分别为1392 nm和1410 nm。采用功率计接收激光器工作稳定的出光功率。如图10所示,在实际检测过程中,采用激光功率计连续监测2400秒DFB激光器的输出功率,仅有0.5 mW的波动,说明温控后的激光器输出光功率稳定。

Figure 10. Power stability measurement of laser
图10. 激光器功率稳定性测量
5. 结语
半导体激光器温控电流源模块的设计集成了单片机、D/A芯片和放大器等零件,在保证了激光器的稳定正常工作同时进一步缩小了电源模块的体积,同时本文确定了各项模块的选择以及电路的布局和构造,验证了开关电源技术在激光器稳定性应用的可行性。实际测试结果显示,每一部分模块性能都满足了设计要求,当负载的电阻发生变化时,输出电流能够在一定范围内稳定不变,波动范围在±1%以内,满足电源模块的目标,能够解决半导体激光器恒温冷却系统的使用要求,为半导体激光器温控系统的控制提供了工程参考。
致谢
感谢我指导教师谭勇教授在我硕士三年学习期间指导工作,感谢长春师范大学邓昀老师对本文的指导和修改,二位教师不仅是我学术上的引路人,更是人生路上引路人。同时也要感谢在我硕士三年学习期间曾经帮助过我的老师和同窗们,因为你们的帮助,我的硕士学习生涯才会如此丰富多彩,收益匪浅。
基金项目
基金项目:吉林省科技发展计划项目20190303108SF。
附录
控制器程序如下:
#include < liquidcrystal.h >
LiquidCrystallcd(A0,A1,A2,A3,A4,A5);
#defineWR19
#defineCS8
#defineleft11
#defineright10
floatlastVo,Vo;
inti=0;
/**********************输出十进制–十六进制对应表**********************************/
charvalue[256]= {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F,0x10,0x11, 0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1A,0x1B,0x1C,0x1D,0x1E,0x1F,0x20,0x21,0x22,0x23, 0x24,0x25,0x26,0x27,0x28,0x29,0x2A,0x2B,0x2C,0x2D,0x2E,0x2F,0x30,0x31,0x32,0x33,0x34,0x35, 0x36,0x37,0x38,0x39,0x3A,0x3B,0x3C,0x3D,0x3E,0x3F,0x40,0x41,0x42,0x43,0x44,0x45,0x46,0x47, 0x48,0x49,0x4A,0x4B,0x4C,0x4D,0x4E,0x4F,0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x57,0x58,0x59, 0x5A,0x5B,0x5C,0x5D,0x5E,0x5F,0x60,0x61,0x62,0x63,0x64,0x65,0x66,0x67,0x68,0x69,0x6A,0x6B, 0x6C,0x6D,0x6E,0x6F,0x70,0x71,0x72,0x73,0x74,0x75,0x76,0x77,0x78,0x79,0x7A,0x7B,0x7C,0x7D, 0x7E,0x7F,0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8A,0x8B,0x8C,0x8D,0x8E,0x8F, 0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97,0x98,0x99,0x9A,0x9B,0x9C,0x9D,0x9E,0x9F,0xA0,0xA1, 0xA2,0xA3,0xA4,0xA5,0xA6,0xA7,0xA8,0xA9,0xAA,0xAB,0xAC,0xAD,0xAE,0xAF,0xB0,0xB1,0xB2, 0xB3,0xB4,0xB5,0xB6,0xB7,0xB8,0xB9,0xBA,0xBB,0xBC,0xBD,0xBE,0xBF,0xC0,0xC1,0xC2,0xC3, 0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF,0xD0,0xD1,0xD2,0xD3,0xD4, 0xD5,0xD6,0xD7,0xD8,0xD9,0xDA,0xDB,0xDC,0xDD,0xDE,0xDF,0xE0,0xE1,0xE2,0xE3,0xE4,0xE5, 0xE6,0xE7,0xE8,0xE9,0xEA,0xEB,0xEC,0xED,0xEE,0xEF,0xF0,0xF1,0xF2,0xF3,0xF4,0xF5,0xF6,0xF7, 0xF8,0xF9,0xFA,0xFB,0xFC,0xFD,0xFE,0xFF};
/**********************************************************************************/
voidsetup(){
//putyoursetupcodehere,torunonce:
lcd.begin(16,2);
lcd.print("Initializing...");
DDRD=DDRD|B11111111;//OUTPUT;
pinMode(WR1,OUTPUT);
digitalWrite(WR1,1);
pinMode(CS,OUTPUT);
digitalWrite(CS,1);
Serial.begin(9600);
lcd.clear();
lcd.print("Outputvoltage:");
lcd.setCursor(0,1);
delay(2000);
}
voidloop(){
//putyourmaincodehere,torunrepeatedly:
intk;
k=scankey();
switch(k)
{
case1:i--;break;
case2:i++;break;
default:break;
}
if(i>255)
{
i=255;
}elseif(i<=0)
{
i=0;
}
outputval(value[i]);
lastVo=Vo;
Vo=0.01657*i+0.08;
if(Vo>4.2)
{
Vo=4.2;
}
if(Vo!=lastVo)
{
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Outputvoltage:");
lcd.setCursor(0,1);
lcd.print(Vo);
}
}
voidoutputval(charval)
{
PORTD=val;
//delayMicroseconds(1);
//digitalWrite(CS,0);
//digitalWrite(WR1,0);
//delay(18);
}
intscankey()
{
intkey=0;//right:key=1,left:key=2;
if(digitalRead(left)==0)
{
delay(5);
if(digitalRead(left)==0)
{
key=1;
while(digitalRead(left)==0);
}
}
elseif(digitalRead(right)==0)
{
delay(5);
if(digitalRead(right)==0)
{
key=2;
while(digitalRead(right)==0);
}
}
returnkey;
}
NOTES
*通讯作者。