
【浙江理工电赛】LED闪光灯电源(H题)
简介
设计的核心部分为直流-直流稳流电源变换器,电压变换后通过恒流控制电路实现恒流输出。以STM32为控制器,实现对于输出脉冲的控制,同时配置独立按键和蜂鸣器组成的模式选择、报警模块。
简介:设计的核心部分为直流-直流稳流电源变换器,电压变换后通过恒流控制电路实现恒流输出。以STM32为控制器,实现对于输出脉冲的控制,同时配置独立按键和蜂鸣器组成的模式选择、报警模块。开源协议
:GPL 3.0
描述
本项目获浙江理工大学第五届电子设计竞赛一等奖
队伍编号:ZSTU013
队伍成员:吴庆鹏、孙璟、谢周杨
指导教师:金海
《校级电子设计竞赛》 设计总结报告
摘要:
在使用电池供电的某些设备中,很多是通过直流升压电路获得所需要的高电压,例如照相机中的闪光灯。本设计要求将电池的电能转变为恒流输出,驱动高亮度白光 LED。设计的核心部分为直流-直流稳流电源变换器,电压变换后通过恒流控制电路实现恒流输出。以STM32为控制器,实现对于输出脉冲的控制,同时配置独立按键和蜂鸣器组成的模式选择、报警模块。该设计电路主要由DC/DC电压变换模块、控制模块、模式选择模块、恒流控制模块、保护电路模块、报警电路模块组成。
一、课题任务
- 设计并制作一个 LED 闪光灯电源。该电源的核心为直流-直流稳流电源变换器,它将电池的电能转换为恒流输出,驱动高亮度白光 LED。电源有连续输出和脉动输出两种模式,并具有输出电压限压保护和报警功能。
1.基本要求
(1)输入电压3.0V~3.6V。
(2)连续输出模式输出电流可设定为100、150、200mA三档,最高输出电压不低于10V,最低输出电压为0V(输出短路)。
(3)在规定的输入电压和输出电压范围内,输出电流相对误差小于2%。
(4)等效直流负载电阻过大时,输出电压限幅值不高于10.5V并报警。
(5)输出电流200mA,输出电压10V时,效率不低于80%。
(6)自制一个 LED 闪光灯,用于演示。
2.发挥部分
(1)具备脉动输出模式,输出占空比为1∕3,相对误差小于2%。
(2)输出电流峰值可设定为300、450、600mA三档,相对误差小于5%,间歇期电流小于1mA。
(3)脉冲周期可设定为10、30、100ms三档,相对误差小于2%,上升时间、下降时间均不大于100μs,电流过冲不大于10%。
(4)输出脉冲个数可设定为1到5个和连续的脉冲串(以便测试),每按一次启动键输出一次脉冲串。
(5)其他
二、方案比较与选择
2.1 系统总体方案
系统以STM32单片机为核心组成DC/DC升压电路,为输出端提供满足要求的大电压。通过INA282构成恒流电路,使得电路能够输出稳定的受控电流以满足设计精度要求。过压检测电路通过获取负载两端电压差值与参考电压比较输出过压信号并回传给单片机。系统控制模块基于STM32单片机设计,包括键盘电路、蜂鸣器报警电路、显示电路、模式选择电路、恒流模块等。
系统功能框图如图1所示。

图1 系统功能框图
2.2 电源变换模块
- 方案一:使用TPS61088升压芯片实现。TPS61008是一款高功率密度的全集成升压转换器。虽效率高,能满足设计要求,但成本高,故应用较少。
- 方案二:自行搭建BOOST直流升压电路。电路各部分设计参数可自主选择,可调节性好,设计灵活。但是因为元件质量、精度等方面的限制,功能稳定性差。额外增加稳定、保护电路后电路效率降低。
- 方案三:搭建双向DC-DC模块,利用STM32单片机控制PWM波占空比从而控制电路的输出电压,且单片机的操作简单,精度高,稳定性强,电路效率高,电路所需元器件少且可以提供稳定的电压。
综合以上分析,本方案需要输入电压低、输出电压高、功率大、精度高、电源效率高的升压模块,因此选择采用方案三。
2.3 恒流控制电路
- 方案一:采用一只恒流二极管。优点是电路构造简单,缺点是恒流二极管的恒流特性并不是非常好,电流规格比较少,无法满足设计精度要求。
- 方案二:采用两只相同型号的三极管,利用三极管相对稳定的be电压作为基准。这种恒流源简单易行,但是即使是相同型号的三极管be电压也存在个体差异,因此并不适合高精密度的恒流要求。
- 方案三:采用INA282将电路的电流转换为电压信号,便于采集与反馈,且INA282的放大倍数大,工作稳定。
综合以上分析,本设计采用方案三。
三、电路设计
3.1 单片机功能模块电路设计
本设计采用STM32单片机作为控制器。除单片机最小系统外,在外围搭建了输入键盘、显示输出、蜂鸣器报警电路等部分。通过按键输入改变端口输出信号,控制调整输出电流。
通过输入端口接受过压检测模块的过压信号后触发蜂鸣器报警,实现对于10.5V以上输出电压的报警。显示输出由液晶显示屏完成,监视电路中部分参数的变化并实时显示。输入键盘由6个独立按键组成,分别设置为:模式选择按键、电流选择按键、脉冲周期选择按键、脉冲次数选择按键、脉冲触发与关闭按键。
单片机功能模块原理图如图2所示,按键连接图如图3所示。

图2 单片机功能模块原理图

图3 按键连接图
3.2 升压模块电路设计
本设计采用双向DC-DC电路进行升压。通过控制开关T1和T2,达到双向直流升压与降压的目的。在升压运行时,T2动作,T1截止,变换器工作在Boost状态;当T1动作,T2截止时,变换器工作在Buck状态,实现降压功能。
本次设计只用到了该电路的Boost功能,但相比于纯Boost电路,能够提高电路的稳定性。本次设计利用IR2103作为信号放大芯片驱动开关管的导通实现升压。
升压模块电路原理图如图4所示。

图4 升压模块电路原理图
3.3 恒流模块设计
本设计采用INA282作为恒流模块,INA282接在采样电阻两端,能将微小的电流信号转化成电压信号并放大,将电压信号传输回单片机,与单片机共同合作完成恒流。
恒流模块电路原理图如图5所示。

图5 恒流模块电路原理图
3.4 过压检测及报警信号产生电路
本设计采用分压检测式电压检测报警。在负载两端并联高阻值电阻,并利用单片机的ADC功能对电压进行采集以及换算,当电压超出限压值时发出报警信号。
报警信号产生电路使用蜂鸣器,检测电压过高时,单片机发出高电平信号,控制三极管导通,蜂鸣器发出报警音。
过压检测及报警信号产生电路原理图如图6所示。

图6 过压检测及报警信号产生电路原理图
3.5显示电路
采用TFTLCD作为显示,可以显示当前模式、当前设置电流、当前设置周期以及当前设置周期次数。
3.6 LED灯电路
采用经典LED白光灯作为负载,具有3V3W的额定功率和额定电压,多个串联即可满足设计要求,具有发光稳定,亮度高的特点。
四、程序设计
1. 单片机IO口引脚分配表
IO口 | 功能 |
PA0 | 脉冲触发按键 |
PA3 | 电流选择按键 |
PA12 | 模式选择按键 |
PC6 | 脉冲周期选择按键 |
PC7 | 脉冲次数加1按键 |
PC8 | 脉冲次数减1按键 |
PA2 | 继电器控制 |
PD2 | 脉冲控制 |
PB5 | 警报信号控制 |
PA8 | PWM波输出 |
PC3 | 电流反馈 |
PC1 | 负载上端电压检测 |
PC0 | 负载下端电压检测 |
PA13 | LCD_PWR |
PA1 | LCD_RST |
PA6 | LCD_DC |
PC4 | LCD_CS |
PA5 | SPI口 |
PA7 | SPI口 |
表1 单片机IO口引脚分配表
2. 程序软件流程图
系统上电后进入模式选择界面,单片机扫描实现按键检测。通过按键分别选择连续/脉动输出模式、输出电流、脉冲周期、脉冲个数。单片机通过定时器确定输出脉冲定时,并输出相应的脉冲控制信号。同时在主程序中循环检测过压信号,当有过压信号输入时,蜂鸣器报警。

图7 程序软件基本流程图
五、测试方案
5.1 测试仪器
序号 | 名称 |
---|---|
1 | 万用表 |
2 | 电源台 |
3 | 示波器 |
4 | 滑动变阻器 |
表2 测试仪器表
5.2 测试方法
5.2.1 电流测试:
在电源输出端串接万用表与滑动变阻器,调节滑动变阻器的值,选择100mA档输出时,记录测量数据,不断调节滑动变阻器并观察电流是否变化。同理测试150mA和200mA电流档。
5.2.2 效率测试:
在LED闪光灯电源输入端接入电源台并串接一个万用表,在LED闪光灯电源输出端串接滑动变阻器,将滑动变阻器调至50Ω。计算公式为:

5.2.3 脉动输出测试:
在输出端接入等效电阻,选择脉动输出模式,设定周期并确定输出,将示波器接地端接在输出负端,示波器探头接输出正极,观察示波器占空比、周期、上升时间、下降时间等数据并记录。
六、系统调试
6.1 输入电压为3V时,选择电路模式为“连续输出+100mA”。调节负载大小,测得输出电流值在100mA附近。


6.2 输入电压为3V时,选择电路模式为“连续输出+200mA”。调节负载大小,测得输出电流值在200mA附近。


6.3 选择电路模式为“脉动输出+300mA+周期10ms+连续脉冲串”。调节负载大小,测得占空比为1/3,周期在10ms附近,输出电流值在300mA附近。

七、数据测试与处理
7.1 基础要求测试
通过外接滑动变阻器,在100mA、150mA、200mA电流值下不断增加负载阻值,观察输出电流变化。
电阻(Ω) | 设置电流(mA) | 实测电流(mA) | 误差(%) | 效率 |
---|---|---|---|---|
35.00 | 100 | 99.2 | 0.8 | |
150 | 148.4 | 1.066666667 | ||
200 | 199 | 0.5 | ||
40.00 | 100 | 98.7 | 1.3 | |
150 | 147.5 | 1.666666667 | ||
200 | 196.5 | 1.75 | ||
45.00 | 100 | 98.6 | 1.4 | |
150 | 147.5 | 1.666666667 | ||
200 | 198.5 | 0.75 | ||
50.00 | 100 | 98.6 | 1.4 | |
150 | 147.2 | 1.866666667 | ||
200 | 197.2 | 1.4 | 90.70% |
表3 数据记录(输入电压=3V)
当输入电压为3V时,记录到的数据与理想值之间的误差较小,各参数符合题目要求。
7.1.2 当输入电压为3.3V时,相关参数记录如下。
电阻(Ω) | 设置电流(mA) | 实测电流(mA) | 误差(%) | 效率 |
35.00 | 100 | 99.3 | 0.7 | |
150 | 148.2 | 1.2 | ||
200 | 199.1 | 0.45 | ||
40.00 | 100 | 99.1 | 0.9 | |
150 | 147.6 | 1.6 | ||
200 | 198.2 | 0.9 | ||
45.00 | 100 | 98.7 | 1.3 | |
150 | 147.9 | 1.4 | ||
200 | 198.1 | 0.95 | ||
50.00 | 100 | 98.8 | 1.2 | |
150 | 147.3 | 1.8 | ||
200 | 198 | 1 | 92.20% |
表4 数据记录(输入电压=3.3V)
当输入电压为3.3V时,记录到的数据与理想值之间的误差较小,各参数符合题目要求。
7.1.3 当输入电压为3.6V时,相关参数记录如下。
电阻(Ω) | 设置电流(mA) | 实测电流(mA) | 误差(%) | 效率 |
35.00 | 100 | 99.4 | 0.6 | |
150 | 147.9 | 1.4 | ||
200 | 199.3 | 0.35 | ||
40.00 | 100 | 98.8 | 1.2 | |
150 | 148.2 | 1.2 | ||
200 | 199.1 | 0.45 | ||
45.00 | 100 | 99 | 1 | |
150 | 148.3 | 1.133333333 | ||
200 | 198.8 | 0.6 | ||
50.00 | 100 | 99.1 | 0.9 | |
150 | 148.1 | 1.266666667 | ||
200 | 198.9 | 0.55 | 90.20% |
表5 数据记录(输入电压=3.6V)
当输入电压为3.6V时,记录到的数据与理想值之间的误差较小,各参数符合题目要求。
7.2 发挥部分测试
电阻(Ω) | 设置电流(mA) | 实测峰值电流(mA) | 设置周期(ms) | 实际高电平时间(ms) | 实际低电平时间(ms) | 实际周期(ms) | 电流误差% | 周期误差% |
30 | 300 | 295 | 10 | 3.36 | 6.6 | 9.96 | 1.67 | 0.4 |
30 | 9.9 | 20.1 | 30 | 0 | ||||
100 | 33.2 | 66.4 | 99.6 | 0.4 | ||||
20 | 450 | 451 | 10 | 3.32 | 6.6 | 9.92 | 0.22 | 0.8 |
30 | 10 | 20 | 30 | 0 | ||||
100 | 33.2 | 66.4 | 99.6 | 0.4 | ||||
15 | 600 | 572 | 10 | 3.4 | 6.6 | 10 | 4.67 | 0 |
30 | 10 | 20 | 30 | 0 | ||||
100 | 32.4 | 67.6 | 100 | 0 |
在脉动输出模式下,测得的各项参数与理想值之间的误差较小,各参数基本符合题目要求。
八、总结
本次设计经过了长达两个星期的时间,队员在整个过程中得到了大幅度的锻炼。电赛很大部分都是在考验我们的基础是否扎实,敢不敢与所学的知识较真。我们在这两个星期的时间里巩固了之前学到的知识,也学到了更多新知识,这些使我们获益匪浅。
学以致用,光学不用等于白学。学工科的人更要注重动手能力。这次任务中,需要动手的部分很多,不光是电路,还有怎么把各个模块连接到一起,使电路更简洁,外观更美观,使作品的性能也更加优越及稳定。这都在考验着我们,最终我们还是克服了这些困难,完成了任务。
在刚开始知道题目时,我们构想了多个方案,并且一一尝试,最后采用的双向DC-DC电路升压稳定,便于控制,而且精度和效率也符合要求。在确定最终方案以后,我们对方案做了进一步优化,调整pwm波最合适的输出频率,进一步提升升压效率,从而达到要求。
在测试过程中,我们遇到了许多问题,经过讨论和上网查资料,我们一一解决了困难,但是设计中还存在着一些不足。
校赛已接近尾声,这期间我们小组有过争论,有过欢笑,也有过烦闷。不过最后我们做出了一个尽力而为的作品。这次比赛极大得锻炼了我们的各方面能力,进一步加强了我们对电源设计的理解,也认识到团队的重要性。我们会继续努力,总结自己的不足,提升自己的知识与技能水平。
九、参考文献
1.《LED闪光灯电源》赵晓莹 安徽机电职业技术学院 安徽芜湖 241000;
2.《LED闪光灯电源的设计》彭雯 湖南工业职业技术学院 湖南长沙 410000。
十、附录
A. 设计电路图(原理图、PCB图)
(a)原理图

(b)PCB图

B. 程序
#include "led.h"
#include "delay.h"
#include "sys.h"
#include "usart.h"
#include "tftlcd.h"
#include "spi.h"
#include \
#include "timer.h"
#include "key.h"
#include "dac.h"
#include "adc.h"
#include "pwm.h"
#include "pwmplus.h"
vu8 key = 0;
u16 temp;
int kp = 10;//比值
int e1 = 0;//当前误差
int u = 0;//增量
void run(u16 I,u16 Pe,u16 Pu ){
int i,j;
j=1;
LED0=0; //继电器关闭
if(Pu!=9999){
delay_ms(Pu*Pe);
}
else if(Pu==9999){
while(j){
key=KEY_Scan(0);
switch(key){
case WKUP_PRES:
j=0;
break;
}
}
}
}
int main(void)
{
u16 mode\_flag\,i\_flag\,period\_flag\,pulses\_flag;
u16 adcxI_T,adcxI,adcxU;
delay_init(); //延时函数初始化
NVIC\_PriorityGroupConfig\(NVIC\_PriorityGroup\_2\);// 设置中断优先级分组2
LED_Init(); //初始化与LED连接的硬件接口
KEY_Init();
LCD_Init(); //初始化LCD
Adc_Init();
Dac1\_Init\(\); //DAC通道1初始化 TIM1\_PWM\_Init\(7199\,0\);//72000000/7200=10khz
// TIM3\_PWM\_Init\(7199\,999\);//72000000/7200/1000=10;//pe=100 a=999 pe=30 a=299 pe=10 a=99
uart_init(9600); //9600
TIM1->CCR1=4390;//恒压模块//100 4390 //150 2790 //
mode_flag=1;
i_flag=100;
period_flag=0;
pulses_flag=0;
LED2=0; //蜂鸣器关闭//B5
LED1=0; //脉冲关闭//D2
LED0=1;//继电器打开//A2
while(1)
{
adcxU=Get\_Adc\_Average\(ADC\_Channel\_11\,50\);//输出电压 c1上端 adcxI\_T=Get\_Adc\_Average\(ADC\_Channel\_10\,50\);//两端电压c0 //下端 adcxI=Get\_Adc\_Average\(ADC\_Channel\_13\,50\);//检测电压,C3 LCD\_ShowString\(0\, 0\, 64\, 32\, 32\,"mode"\);//模式
LCD_ShowString(0, 40, 64, 32, 32,"i");//电流
LCD_ShowString(0, 80, 64, 32, 32,"peri");//周期
LCD_ShowString(0, 120, 64, 32, 32,"puls");//脉冲数量
LCD\_ShowxNum\(80\, 0\,mode\_flag\,8\, 32\, 0\);
LCD\_ShowxNum\(80\, 40\,i\_flag\,8\, 32\, 0\);
LCD\_ShowxNum\(80\, 80\,period\_flag\,8\, 32\, 0\);
LCD\_ShowxNum\(80\, 120\,pulses\_flag\,8\, 32\, 0\);
LCD_ShowxNum(0, 160,adcxU,4, 32, 0);
LCD\_ShowxNum\(80\, 160\,adcxI\_T\,4\, 32\, 0\);
LCD_ShowxNum(0, 200,adcxI,4, 32, 0);
LCD_ShowxNum(80, 200,TIM1->CCR1,4, 32, 0);
key=KEY_Scan(0);
switch(key)
{
case KEY0\_PRES: //A12//模式选择 if\(mode\_flag==1\) \{
mode_flag=2;
i_flag=300;
period_flag=10;
pulses_flag=1;
}
else if(mode_flag==2){
mode_flag=1;
i_flag=100;
period_flag=0;
pulses_flag=0;
}
break;
case KEY1\_PRES: //A3//电流选择 if\(mode\_flag==1\)\{
if\(i\_flag==100\) i\_flag=150;
else if\(i\_flag==150\) i\_flag=200;
else if\(i\_flag==200\) i\_flag=100;
}
else if(mode_flag==2){
if\(i\_flag==300\) i\_flag=450;
else if\(i\_flag==450\) i\_flag=600;
else if\(i\_flag==600\) i\_flag=300;
}
break;
case WKUP_PRES: //A0//触发脉冲
if(mode_flag==2)
{
LED0=0; //继电器关闭
TIM3\_PWM\_Init\(7199\,period\_flag\*10\-1\);//72000000/7200=10000;//pe=100 a=999 pe=30 a=299 pe=10 a=99
TIM3->CCR4=2400;
run\(i\_flag\,period\_flag\,pulses\_flag\);
TIM_CtrlPWMOutputs(TIM3,DISABLE);
LED0=1; /继电器打开
}
break;
case KEY2_PRES: //C6//脉冲周期选择
if(mode_flag==2){
if\(period\_flag==10\.0\) period\_flag=30\.0;
else if\(period\_flag==30\.0\) period\_flag=100\.0;
else if\(period\_flag==100\.0\) period\_flag=10\.0;
}
break;
case KEY3_PRES: //C7//脉冲数量选择加
if(mode_flag==2){
pulses_flag++;
if\(pulses\_flag==6\) pulses\_flag=9999;
else if\(pulses\_flag==10000\) pulses\_flag=1;
}
break;
case KEY4_PRES: //C8//脉冲数量选择减
if(mode_flag==2){
pulses_flag--;
if\(pulses\_flag==0\) pulses\_flag=9999;
else if\(pulses\_flag==9998\) pulses\_flag=5;
}
break;
}
//¾¯±¨
if(adcxU-adcxI_T>2126){
LED2=1; //B5报警
delay_ms (1000);
LED2=0; //B5报警
delay_ms (1000);
LED2=1; //B5报警
delay_ms (1000);
LED2=0; //B5报警
delay_ms (1000);
TIM1->CCR1=4390;
}else{
LED2=0;
}
//电流控制
if(i_flag==100)
{
if(adcxI>448 && adcxI<454)
{
if(adcxI<448)
{
TIM1->CCR1 -= 5;
if(TIM1->CCR1<=400) TIM1->CCR1=4390;
if(TIM1->CCR1>=7000) TIM1->CCR1=4390;
}
else if (adcxI>454)
{
TIM1->CCR1 += 5;
}
}
e1 = adcxI - 450;
u = 1 *e1;
TIM1->CCR1 +=u;
if(TIM1->CCR1<=400) TIM1->CCR1=4390;
if(TIM1->CCR1>=7000) TIM1->CCR1=4390;
}
else if(i_flag==150){
if(adcxI<702){
TIM1->CCR1-=5;
if(TIM1->CCR1<=400) TIM1->CCR1=4390;
if(TIM1->CCR1>=7000) TIM1->CCR1=4390;
}
if(adcxI>708){
TIM1->CCR1+=5;
}
e1 = adcxI - 705;
u = 1 *e1;
TIM1->CCR1 +=u;
if(TIM1->CCR1<=400) TIM1->CCR1=4390;
if(TIM1->CCR1>=7000) TIM1->CCR1=4390;
}
else if(i_flag==200){
if(adcxI<965){
TIM1->CCR1-=5;
if(TIM1->CCR1<=400) TIM1->CCR1=4390;
if(TIM1->CCR1>=7000) TIM1->CCR1=4390;
}
if(adcxI>971){
TIM1->CCR1+=5;
}
e1 = adcxI - 968;
u = 1 *e1;
TIM1->CCR1 +=u;
if(TIM1->CCR1<=400) TIM1->CCR1=4390;
if(TIM1->CCR1>=7000) TIM1->CCR1=4390;
}
else if(i_flag==300){
if(adcxI<1464){
TIM1->CCR1-=5;
if(TIM1->CCR1<=400) TIM1->CCR1=4390;
if(TIM1->CCR1>=7000) TIM1->CCR1=4390;
}
if(adcxI>1469){
TIM1->CCR1+=5;
}
e1 = adcxI -1467;
u = 1 *e1;
TIM1->CCR1 +=u;
if(TIM1->CCR1<=400) TIM1->CCR1=4390;
if(TIM1->CCR1>=7000) TIM1->CCR1=4390;
}
else if(i_flag==450){
if(adcxI<2280){
TIM1->CCR1-=5;
if(TIM1->CCR1<=400) TIM1->CCR1=4390;
if(TIM1->CCR1>=7000) TIM1->CCR1=4390;
}
if(adcxI>2286){
TIM1->CCR1+=5;
}
e1 = adcxI -2283;
u = 1 *e1;
TIM1->CCR1 +=u;
if(TIM1->CCR1<=400) TIM1->CCR1=4390;
if(TIM1->CCR1>=7000) TIM1->CCR1=4390;
}
else if(i_flag==600){
if(adcxI<2920){
TIM1->CCR1-=5;
if(TIM1->CCR1<=400) TIM1->CCR1=4390;
if(TIM1->CCR1>=7000) TIM1->CCR1=4390;
}
if(adcxI>2926){
TIM1->CCR1+=5;
}
e1 = adcxI -2923;
u = 1 *e1;
TIM1->CCR1 +=u;
if(TIM1->CCR1<=400) TIM1->CCR1=4390;
if(TIM1->CCR1>=7000) TIM1->CCR1=4390;
}
}
}
C. 作品图片




设计图
BOM


评论