主要內(nèi)容
本內(nèi)容是基于單片機的開關(guān)電源設(shè)計
包含:
1 設(shè)計源碼
2 電路圖
3 配套程序
4 全套說明資料
(私聊獲取資料)
方案分析
選用STM32F407單片機作為控制芯片,前段整流部分使用直流電源給入,主控電路輸出PWM波信號,即穩(wěn)定的電壓值,經(jīng)增強驅(qū)動力后,再經(jīng)BUCK電路輸出需要的電壓電流值,這些電壓電流值經(jīng)ADC轉(zhuǎn)換電路發(fā)送給主控電路,在電路系統(tǒng)中構(gòu)成電壓,電流反饋系統(tǒng)。最后在液晶屏顯示實時數(shù)據(jù)。按鍵電路信息直接發(fā)給主控電路,主控電路做出反應(yīng),達到按鍵調(diào)節(jié)的數(shù)據(jù)。
系統(tǒng)整體結(jié)構(gòu)
通過按鍵控制單片機輸出PWM,由此即可控制BUCK電路的電壓。本電路由單片機最小系統(tǒng)電路、IR2104驅(qū)動電路,整流濾波電路、BUCK降壓穩(wěn)壓電路、按鍵電路、液晶顯示電路、電壓電流檢測電路等組成。
電路原理介紹
典型BUCK電路如圖2所示。
圖2 BUCK電路拓撲
圖中的T就是一個開關(guān)管,可以把電流看成水流,通過不停的開關(guān)水閘,水的流量就會有很大的變化,同理,電流在這個電路里也會有很大的變化。
開關(guān)電源電壓調(diào)節(jié)和線性電源的電壓調(diào)節(jié)的基本原理是面積等效原理,即脈沖相同,形狀不同的脈沖應(yīng)用于慣性環(huán)節(jié),效果基本相同,當想要從電源10V中獲取5V的輸出電壓時,把10V的電壓分成5個部分看,5V所占的面積大概在1/2,當PWM方波的占空比為50%時,所得到的電壓就是5V,在電路的后面加上濾波電容,是電壓輸出的波紋變低。等效面積圖如圖3所示。
圖3 BUCK等效面積圖
BUCK電路中的開關(guān)管閉合時,輸出的電壓Vin流過電感對電容進行充電并儲藏電能在電感中,同時還提供著負載所需要的能量。
當開關(guān)T斷開時,電感的電流不會消失而是繼續(xù)給電容提供能量,繼續(xù)為負載供電,這樣就可以通過對電感充電的多少來控制電壓。
接下來我們說下PWM波形,通過控制T2的長度就可以控制電壓了,就是所謂的方波占空比,BUCK開關(guān)信號波形如圖4所示。
圖4 BUCK開關(guān)信號波形
通過實時監(jiān)測輸出端的電壓變化,反饋給單片機,單片機調(diào)整PWM方波的占空比即可達到穩(wěn)定輸出電壓的目的,系統(tǒng)降壓工作如圖5所示.
圖5 系統(tǒng)降壓工作原理
硬件電路圖
私聊獲取各模塊電路說明
主程序流程圖
主程序為PWM發(fā)生和電壓即電流檢測,本設(shè)計所使用的STM32F407的單片機內(nèi)部自帶了PWM發(fā)生引腳,頻率高達72kHZ,使用時先寫出PWM初始化程序,電源設(shè)計中所使用的控制方式為按鍵控制,顯示方式是OLED液晶屏顯示,軟件中還要初始化液晶屏和PWM。文章來源:http://www.zghlxwxcb.cn/news/detail-809924.html
源程序關(guān)鍵代碼
#include "sys.h"
#include "delay.h"
#include "usart.h"
#include "led.h"
#include "pwm.h"
#include "exti.h"
#include "OLED_I2C.h"
#include "string.h"
#include "stdlib.h"
#include "stdio.h"
#include "adc.h"
//全局變量定義區(qū)
char buf[20];//緩存數(shù)組
int pwmval=1000;
float cs;
u16 adcx;
void System_SoftReset(void)
{
__set_FAULTMASK(1); //關(guān)閉所有中斷
NVIC_SystemReset(); //復位
}
float volt,ys_vol=5.0;
int Alot;
int main(void)
{
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//設(shè)置系統(tǒng)中斷優(yōu)先級分組2
delay_init(168);//初始化延時函數(shù)
OLED_Init();//OLED初始化
OLED_Clear();//清屏
KEY_Init();
LED_Init();//GPIO初始化
Adc_Init(); //初始化ADC
uart_init(9600);//初始化串口波特率為115200
TIM_PWM_Init(1000,4);//PWM初始化
PID_init();//PID初始化
SD=0;
sprintf(buf,"預(yù)設(shè):%.1fV ",ys_vol);
OLED_ShowCH(0,0,buf);
OLED_ShowCH(0,6,"狀態(tài):暫停");
while(1) //
{
adcx=Get_Adc_Average(ADC_Channel_5,20);//獲取通道5的轉(zhuǎn)換值,20次取平均
volt=adcx/203.5;
adcx=Get_Adc_Average(ADC_Channel_6,20);//獲取通道5的轉(zhuǎn)換值,20次取平均
if(adcx<20){adcx=0;}
Alot=adcx/4;
if(Alot<20){Alot=0;}
sprintf(buf,"電壓:%.1fV ",volt);
OLED_ShowCH(0,2,buf);
sprintf(buf,"電流:%dmA ",Alot);
OLED_ShowCH(0,4,buf);
if(KEY0==0){
SD=!SD;
if(SD){
OLED_ShowCH(0,6,"狀態(tài):啟動");
}else{
OLED_ShowCH(0,6,"狀態(tài):暫停");
}
while(KEY0==0);
}
if(KEY1==0){
ys_vol-=0.1;
if(ys_vol<0){ys_vol=0;}
sprintf(buf,"預(yù)設(shè):%.1fV ",ys_vol);
OLED_ShowCH(0,0,buf);
}
if(KEY2==0){
ys_vol+=0.1;if(ys_vol>12.0){ys_vol=12.0;}
sprintf(buf,"預(yù)設(shè):%.1fV ",ys_vol);
OLED_ShowCH(0,0,buf);
}
if(SD==1){
pwmval-=PID_realize(ys_vol,volt);if(pwmval<1){pwmval=1;}if(pwmval>999){pwmval=999;}//PID控制輸出5V
}
TIM_SetCompare4(TIM2,pwmval);
LED0=!LED0;
}
}
var foo = 'bar';
實物焊接
私聊獲取全套資料~文章來源地址http://www.zghlxwxcb.cn/news/detail-809924.html
到了這里,關(guān)于【畢設(shè)】基于單片機的開關(guān)電源設(shè)計(源碼+電路圖+全套資料+說明文檔)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!