|
給大家分享一個(gè)基于STM32單片機(jī)的正弦波逆變器設(shè)計(jì)項(xiàng)目
Altium Designer畫的逆變控制板與逆變直流升壓電路原理圖和PCB圖如下:(51hei附件中可下載工程文件)
逆變電源設(shè)計(jì)概要
大家知道, 市電或其他的交流電可以通過(guò)二極管或可控硅的單向?qū)щ娦哉鞒芍绷麟姽┙o需要使用直流電的場(chǎng)合。這種把交流電變換成直流電的過(guò)程我們叫做整流,也叫做順變。那么逆變呢?我們自然地就會(huì)想到,應(yīng)該就是把直流電變換成交流電的過(guò)程。逆變電源就是相對(duì)于整流器而言通過(guò)半導(dǎo)體功率開(kāi)關(guān)器件的開(kāi)通和關(guān)斷把直流電變換成交流電的這么一個(gè)裝置。 逆變電源也叫做逆變器, 下面分單元地講一下逆變器主要的單元電路。 主要內(nèi)容為:
一.電池輸入電路
二.輔助電源電路
1. 12V 電池輸入的輔助電源電路
2. 24V-48V電池輸入的輔助電源電路
3. 多路隔離輔助電源電路
三.高頻逆變器前級(jí)電路的設(shè)計(jì)
1. 閉環(huán)前級(jí)變壓器匝數(shù)比的設(shè)計(jì)
2. 準(zhǔn)開(kāi)環(huán)前級(jí)變壓器匝數(shù)比的設(shè)計(jì)
四.高頻逆變器后級(jí)電路的設(shè)計(jì)
1. 米勒電容對(duì)高壓 MOS 管安全的影響及其解決辦法
2. IR2110應(yīng)用中需要注意的問(wèn)題
3. 正弦波逆變器 LC 濾波器的參數(shù)
五.逆變器的部分保護(hù)電路
1. 防反接保護(hù)電路
2. 電池欠壓保護(hù)
3. 逆變器的過(guò)流短路保護(hù)電路的設(shè)計(jì)
4. IGBT 的驅(qū)動(dòng)和短路保護(hù)
stm32單片機(jī)逆變器控制軟件源程序如下:
- /****************************************************************
- * Copyright (c) 2010 ,
- * All rights reserved.
- *
- *
- *文件名稱:
- *文件標(biāo)示:
- *摘要 :
- *當(dāng)前版本:v1.0
- *****************************************************************/
- #include "includes.h"
- #include "math.h"
- __align(8) static OS_STK TaskStartStk[500];
- __align(8) static OS_STK TaskLedStk[500];
- #define START_PRIO 1u
- #define LED_PRIO 5u
- OS_EVENT * spk;
- OS_EVENT * lcd;
- OS_EVENT * time_10;
- static void TaskStart( void *parg);
- static void TaskLed(void *parg);
- void MenusTask( void *parg);
- int main()
- {
- NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);
- OSInit();
-
- spk=OSSemCreate( 1 );
- lcd=OSSemCreate( 1 );
- time_10=OSSemCreate( 1 );
- OSTaskCreateExt( TaskStart,
- (void *)0,
- &TaskStartStk[500-1],
- START_PRIO,
- START_PRIO,
- TaskStartStk,
- 500,
- ( void *)0,
- OS_TASK_OPT_STK_CHK+OS_TASK_OPT_STK_CLR);
-
- OSStart();
- return 0;
- }
- #include "math.h"
- static float x_est_last1 = 0;
- static float P_last1 = 0;
- /*/the noise in the system */
- static float Q1 = 0.1;
- static float R1 = 0.8;
-
- static float K1;
- static float P1;
- static float P_temp1;
- static float x_temp_est1;
- static float x_est1;
- static float z_measured1; /*/the 'noisy' value we measured */
- // float z_real = 0.5; /*/the ideal value we wish to measure */
- static float sum_error_kalman1 = 0;
- static float sum_error_measure1 = 0;
- static float kalman1(float z_real)
- {
- /*/do a prediction */
- x_temp_est1 = x_est_last1;
- P_temp1 = P_last1 + Q1;
- /*/calculate the Kalman gain */
- K1 = P_temp1 * (1.0/(P_temp1 + R1));
- /*/measure*/
- z_measured1 = z_real ;
- x_est1 = x_temp_est1 + K1 * (z_measured1 - x_temp_est1);
- P1 = (1- K1) * P_temp1;
-
- sum_error_kalman1 += fabs(z_real - x_est1);
- sum_error_measure1 += fabs(z_real-z_measured1);
-
- P_last1 = P1;
- x_est_last1 = x_est1;
- return x_est1;
- }
- void halfword(FP32 j);
- static void TaskStart( void *parg)
- {
- INT16U i=0,j=0,l=0;
- FP32 vbat=0,k=0,oldk=0,dianliu=0,wendu=0;
- (void)parg;
- OS_CPU_SysTickInit();
- OSStatInit();
-
- OSTaskCreateExt( TaskLed,
- (void *)0,
- &TaskLedStk[500-1],
- LED_PRIO,
- LED_PRIO,
- TaskLedStk,
- 500,
- ( void*)0,
- OS_TASK_OPT_STK_CHK+OS_TASK_OPT_STK_CLR );
-
- LedInit(); //初始化LED指示燈燈
- PWMTimer(25000); //初始化PWM
- DCOut(ENABLE);
-
- ADC1_Configuration(); //采樣初始化
- Getk_adc();
- ReadCanShu();
- OSTimeDlyHMSM( 0, 0, 1, 0 );
- vbat=GetDC310();
- gotoxy(0,0);
- dprintf8("12");
- k=310/vbat;
- k=kalman1(k);
- if(k<1)
- {
- halfword(k);
- ban();
- }
- Time1Config(); //SPWM
- SPWMState(ENABLE );
- //halfword();
- while(1)
- {
- OSTimeDlyHMSM( 0, 0, 0, 50 );
- vbat=GetBATE();
-
- if((vbat<10.5)||(vbat>14.5))
- {
- i++;
- if(i==60)
- while(1)
- {
- LedGreen(0);
- WenKong(0);
- DCOut(DISABLE);
- SPWMState(DISABLE );
- }
- }
- else
- i=0;
-
- dianliu=GetElectric();
- if(dianliu>32)
- {
- j++;
- if(j==40)
- while(1)
- {
- LedGreen(0);
- WenKong(0);
- DCOut(DISABLE);
- SPWMState(DISABLE );
- }
- }
- else
- j=0;
- if(dianliu>55)
- {
- while(1)
- {
- LedGreen(0);
- WenKong(0);
- DCOut(DISABLE);
- SPWMState(DISABLE );
- }
- }
- if(dianliu>2)
- WenKong(1);
- if(dianliu<1.5)
- WenKong(0);
-
- vbat=GetDC310();
- vbat=kalman1(vbat);
- k=310/vbat;
- //k=kalman1(k);
- if(k<1)
- {
- halfword(k);
- }
- else
- halfword(1);
-
- }
- }
- float k_dianya=0.14143920; //電池電壓比例
- extern volatile FP32 vref;
- static void TaskLed(void *parg) //測(cè)試任務(wù)
- {
- INT32U j=0,b=0;
- FP32 vbat=0,k=0;
- //ADC_Config();
- Init_ST7576();
- //Usart1Init(9600);
- DianLiuInit();
- while(1)
- {
- LedGreen(1);
- OSTimeDlyHMSM( 0, 0, 0, 500 );
- LedGreen(0);
- OSTimeDlyHMSM( 0, 0, 0, 500 );
- Getk_adc();
- vbat=GetBATE();
- gotoxy(0,0);
- dprintf("vbat=%0.2f ",vbat);
- vbat=GetDC310();
- gotoxy(0,2);
- dprintf("DC=%0.2f ",vbat);
- k=310/vbat;
- gotoxy(0,4);
- dprintf("k=%0.1f ",k);
- k=GetWenDu();
- gotoxy(0,6);
- dprintf("wen=%0.1f",k);
- k=GetElectric();
- dprintf(" %0.1f",k);
- if(GetAnJian()==0)
- {
- DCOut(DISABLE);
- SPWMState(DISABLE );
- OSTimeDlyHMSM( 0, 0, 3, 500 );
- Getele();
- SaveCanShu();
- DCOut(ENABLE);
- SPWMState(ENABLE );
-
- }
- }
- }
復(fù)制代碼
SPWM數(shù)據(jù)生成軟件VB源程序如下:
所有資料51hei提供下載:
原理圖和PCB.7z
(5.88 MB, 下載次數(shù): 1228)
2021-8-24 17:51 上傳
點(diǎn)擊文件名下載附件
逆變器控制軟件.7z
(2.56 MB, 下載次數(shù): 980)
2021-8-24 17:51 上傳
點(diǎn)擊文件名下載附件
逆變電源設(shè)計(jì)概要.PDF
(312.79 KB, 下載次數(shù): 925)
2018-3-17 20:33 上傳
點(diǎn)擊文件名下載附件
SPWM生成軟件.zip
(11.38 KB, 下載次數(shù): 936)
2018-3-17 20:33 上傳
點(diǎn)擊文件名下載附件
|
評(píng)分
-
查看全部評(píng)分
|