锐单电子商城 , 一站式电子元器件采购平台!
  • 电话:400-990-0325

简易数控直流稳压电压

时间:2023-01-04 00:00:01 3843直流降压稳压电路

摘 要:主控为STC15W408AS,调节PWM占空比控制BUCK电路开关管断开,实现不同电压输出。采样反馈电压和设定输出电压通过PID控制器,输出设定电压。采样反馈电流作为过流保护,保护电路。12864液晶显示电压、电流和功率。
关键词: STC15W408AS、BUCK、PID控制、12864液晶

题目要求:
(1)输出电压0~12V,步进0.1V,输出纹波不大于30mV.
(2)输出电流:5000mA;
(3)LCD12864显示电压、电流和功率;
(4)输出电压步进增减由+和-两键控制;
(5)输出电压可预置0~12V之间的任何值;
(6)具有过载保护功能;
一、系统结构图:
在这里插入图片描述
二、硬件电路设计:
1、BUCK电路和LDO对比线性电路方案

(1)、共同点:降压型电路
LDO与Buck电路属于降压电路,因为输入电压大于输出电压,所以是降压电路。
(2)不同点:工作区域:
LDO放大区(线性区)串联管,Buck串联管在电路中的饱和和截止区。
工作效率:DCDC电路效率高
LDO输入电流与输出电流基本相同,效率高=(输出电压输出电流/(输入电压)输出电流),效率等于输出电压与输入电压的比值,当串联管之间的压差较大时,效率较低,消耗的能量以热能排出。Buck电路的效率相对较高,高达90%,因为当管道处于饱和截止区时,电流很小,几乎是mA级的。DCDC可在一定范围内随意调节电路输出电压,可输出0~12V。
结论:BUCK电路效率高,输入电压范围宽,输出电压可调,驱动能力强,静态电流小BUCK电路满足项目需要。

2、STM32F103单片机、AT89C51单片机和STC15W408AS比较单片机方案
方案一:stm32是32位ARM内核主控器,Timer,CAN,ADC,SPI,I2C,USB,UART外设功能多样,价格贵,但项目需求只用PWM和ADC外设功能,性价比低。
方案二:AT89C51是8位51核单片机,具有串口、定时器等外设功能,价格低廉,但没有ADC采样外设不适合项目需要。
方案三:STC15W408AS也是8位51核单片机,有串口、定时器、ADC、PCA、SPI外设功能、价格时钟、复合项目需求等。

(1)供电电路:输入电压15~24V,通过LM7805稳压到5V,给MCU、操作放大器,12864液晶显示屏供电。输入端串联二极管1N4007防止正负极反转,烧坏电路。输入端输出端电容稳定LM7805内部放大器的工作状态。输出端接红色LED方便观察上电情况。

(2)BUCK电路:通过BUCK电路拓扑改造,通过切断开关管的开关时间来调整和降低输出电压,通过无功元件的电感电容储能,实现二极管的续流。单片机输出PWM控制NPN 8050三极管通断,R8和R9防止单片机上电瞬间出现高电平电压突变,使三级管导通。三极管的作用是防止电流倒灌损坏单片机管脚。开关管上方需要并联一个电容器来吸收开关管的浪涌电压。R4和R2用于夹住基级电压,稳定基极导电压。转换公式Vout=D*Vin

(3)电流采样电路:由于输出电流过小,通过0.1欧姆采样电阻,将电流转换为电压,然后将放大器放大10倍到单片机ADC用于过载保护的管脚读取显示。计算公式采样电流I=-R12/R13*Vin

(4)输出电压采样:由于输出电压过大,单片机AD转换引脚只能测量5V因此,输出电压是通过降低电阻分压来测量的。ADC通过计算管脚的输出电压,将输出电压显示在12864液晶屏上。计算公式输出电压实际液晶显示电压Vout=((Vin/1024)*5)*3

(5)12864液晶显示模块:由于单片机引脚过少,采用串行通信模式与液晶屏通信。功能显示电压电流功率。

(6)调试电路:步进按钮 10mV和-10mV,LED开发时用灯调试,STC15单片机输出电流达到20mA,可以驱动LED注意整个单片机输出电流不超过90mA。

(7)主控MCU:供电由LM7805提供5V,内部有35MHz内部晶体振动具有自动上电复位功能,因此单片机最小系统只需要电源。

(8)烧录接口:USB-TTL串口烧录机接单片机15、16脚,下载程序。

三、BUCK电路原理分析
1、BUCK变换器
(1)降压变换器,输出电压小于输入电压的单管不隔离直流变换器。

Q驱动电压为开关管PWM,信号周期Ts,信号频率f=1/Ts,导通时间为Ton,关断为Toff,Ts=Ton Toff,占空比Dy=Ton/Ts。

开关管导通,电感激磁,电流线性上升

开关管关闭,电感去磁,电流线性下降

伏秒平衡:
(2)波形图

(3)两种工作模式:CCM和DCM。
CCM模式:当出现重负载电流时,电感电流总是从正方向流动,电感电流不会降到0,PWM控制恒定开关频率工作,改变空比调节输出。

DCM模式:当出现轻负载电流时,电感电流完全,电感电流不放电到0。当电流降至0时,二极管自然关闭,阻挡电感电流的反向流动。输出由电容器、大纹波、开关频率、输出电压和负载电流提供。

(4)闭环控制思想
①双闭环电流电压模式
②首先要满足电压环路控制,使输出电压输出设定值稳定,然后通过调整负载来满足电流环控制
③当电路出现故障时,电流环首先保护电路,降低输出电压。

四、软件程序设计
程序结构流程图:


1、位置式PID和增量式PID算法比较差异。
①位置式PID控制的输出与过去的整个状态有关,使用误差的累加值;增量型PID输出仅与当前拍摄和前两拍摄的误差有关,因此位置式PID积累误差相对较大;

②增量式PID控制输出是控制量增量,没有积分效应,因此该方法适用于执行机构的对象,如步进电机,位置PID适用于没有积分部件的执行机构,如电液伺服阀。

项目需要通过实际采样电压和设定电压来调整空比,空比累积值是一个增量过程。因此,选择增量型PID。

2.模块软件设计
(1)PWM产生:8位的PWM,最小分辨率可达1/256。可根据单片机数据操作

void Pwm_Init(void);//PWM初始设置寄存器。 void pwm_Set(u8 value);//PWM空比设置。 

(2)ADC电压采集:10位ADC采集外设功能,最小采样分辨率为1/1024。

   void Adc_Init();//ADC电压采样     float code Get_Adc_Average(u8 ch,u8 times);//获取数据ADC

(3)12864液晶显示:串行通行模式

  void Lcd_Init(void);						//12864液晶初始化
  void LCD_Display_Words(u8 x,u8 y,u8*str);//显示字符串
  void SendByte(u8 byte)  ;					//发送一个字节数据
  void Lcd_WriteCmd(u8 Cmd )   ;				//写指令函数
  void Lcd_WriteData(u8 Dat ) ;				//写数据函数

(4)UART收发数据:串口接收和发送数据触发中断,然后处理收发数据。

void uart_init();							//串口初始化函数
char putchar(char c );						//方便调试
void Uart() interrupt 4	using 2;				//串口中断函数
void SendString(char *s);					//串口发送字符串
void RecData();							//串口接收数据

(5)EXIT外部中断:按钮触发下降沿中断

void exit_init();							//KEY0、KEY1外部中断
void key1_exit1() interrupt 2;				//外部中断1服务程序 每次加10mV
void key0_exit0() interrupt 0;				//外部中断0服务程序 每次减10mV

(6)PID控制算法:增量式PID算法

void  pid_init(void);						//PID控制算法初始化
float pid_realize(void);						//PID增量计算

四、实验数据
输入电压15V,输出电压可在0~12V可调,电流超过400mA过载保护,可以预设3.3V、5V、8V、12V输出电压,不管负载和输入电压如何变化输出电压还是预设的电压(PID算法调节占空比)。PWM输出频率32KHz。
六、总结
(1)BUCK电路设计上需要注意问题:空载时需要并联2个1k电阻消耗电容能量才能实现降压,采样电流输出经过运放需要滤波,电压采样电阻分压采样后也需要滤波。
(2)PID算法上,使用增量式PID,而不是位置式PID。需要用软件串口调式和示波器观察波形来实现PID三个参数的调节。
附件:
1、原理图

2、PCB

3、电路板

#include "stc15.h"
#include "lcd.h"
#include "adc.h"
#include "pwm.h"
#include "uart.h"
//#include "exit.h"
#include  //printf用
#include "pid.h"

void delay_ms(unsigned int time);     //延时函数
void main()
{ 
          
 u8 res=20;
 u8 value=0;
 float pwm=0;
 P1=0;
 P2=0;
 //P3=0;//开启之后串口1传输不了数据
 
 Lcd_Init();
 Pwm_init();
 Adc_Init();
 uart_init();
 exit_init();//外部中断
 pwm_Set(128);
 pid_init();
 //time2_init();
 while(1)
 { 
       
   //KEY_JZ();
   showVolSet();//串口接收设定电压,显示设定目标电压值,传设定值给PID
   readADC();//采样实际电压值
    
   pwm=pid_realize(); //接收实际值和设定值,PID调节之后输出PWM占空比
   Set_Vol(pwm); //调节占空比 输出PWM


   showADC(); //显示输出电压和输出电流和功率 
 }
}

void delay_ms(unsigned int time)     //延时函数 
{ 
       
	unsigned int x,y;
	for(x=time;x>0;x--)
	{ 
       
		for(y=70;y>0;y--);
	}
}
锐单商城拥有海量元器件数据手册IC替代型号,打造电子元器件IC百科大全!

相关文章