资源描述
赛区编号:HLJ-A-035
学校姓名:东北石油大学
队长姓名: 曲记锋
队员姓名: 卢鑫坡 、 宋忠民
指导教师姓名: 邢志方
2015年8月15日
摘要:本设计以STM32F103单片机为控制核心,采用全桥式DC-AC拓扑结构,设计了输出电压和频率稳定,同时输出功率在一定范围内可调的三相逆变器,制作了由两个三相逆变器等组成的微电网模拟系统。本系统由STM32单片机输出SPWM波控制IR2110驱动芯片驱动开关管实现正弦逆变。采用数字PID算法实现电压反馈精准控制输出电压,通过零点检测校正输出电流相位控制相位同步,采用主从设置法实现均流控制,有效地控制了两组逆变器。本系统具有过流保护功能,反馈系统自动调整输出功率,由OLED显示当前工作状态。系统达到了设计要求中的大部分指标,工作稳定,经济简洁,可靠性较高。
关键词:STM32F103 SPWM 正弦逆变
一、系统方案
1.DC-AC模块拓扑结构的选择
系统要求逆变器提供三相对称交流电。考虑以下两种方案能够实现逆变。
方案一:三相三桥式电路结构。三相三桥式电路成本低,能够通过软件进行补偿,电路结构简单,容易实现。但程序控制相对复杂。
方案二:三相四桥式电路结构。三相四桥式电路工作效率高,不会产生泻流,同时具有抗不平衡功能。但电路结构复杂,驱动电路也相对复杂。
结合本题要求,逆变器需提供三相对称交流电且考虑到时间问题,所以采用方案一。
2.控制系统的选择
方案一:采用MSP430单片机。MSP430系列是一种16位超低功耗、具有简单指令集的混合信号处理器。能够在25MHz晶振的驱动下,实现40ns的指令周期,具有16位的数据宽,具有独特的超低功耗,中断源较多,并且可以任意嵌套。
方案二:采用STM32F103处理器。STM32系列运行速度快,时钟频率可达72MHz,11个定时器以及丰富的I/O口,并且内置3个12位的A/D转换器,2个12位D/A转换器,其高级定时器可产生带死区互补的PWM波,性价比较高。
鉴于STM32F103处理器运行速度更快,成本更低,资源也满足设计要求,因此本设计选用方案二。
3.电流检测方案的选择
方案一:霍尔传感器。采用ACS712霍尔传感器实现对电流的采样及检测,其测量精度高,无须考虑共模电压的影响。但其一致性较差,且易受磁场影响。
方案二:精密电阻。采用精密电阻将电流信号转换为电压信号,在该方式下参数一致性好,线性度高,能够达到较高的检测精度。但在精密电阻上会存在一定损耗。
方案三:电流互感器。电流互感器依据电磁感应原理将一次侧大电流转换成二次侧小电流来测量的仪器。其响应频率范围宽、精度高、受外界因素影响小。
考虑到外界因素及电路损耗,选择方案三。
4.整体框图
系统整体框图如图1所示。
电压反馈信号
电压采样模块
三相逆变电路2
三相逆变电路1
负
载
STM32
控 制
系 统
SPWM
电流采样模块
SPWM
电流反馈信号
图1 系统示意图
二、理论分析与计算
1.效率提高方法
系统主要的损耗来源于逆变器在工作条件下的转换效率,逆变器的效率 为逆变器输出功率除以直流电源的输出功率。
能量的损耗主要是在MOS管开关的瞬间,因此选择开关速度快,导通电阻小的MOS管,综合比较后选择IRF3205场效应管,其导通电阻仅为8, 开关时间平均为50ns,开启电压典型值 = 3V,是一款综合性能比较适合本题的MOS管。
同时选择适当的开关频率(SPWM频率),较高的频率有利于提高逆变正弦电压的精度,但由于开关管寄生二极管的存在,随着频率的提高开关管的损耗也会随之增加:
开关管损耗与频率成正比,开关管频率越大,损耗也随之升高。因此,在经过多次尝试之后,开关频率选择较为适中的18kHz。
2. 两台逆变器同时运行模式控制方法
(1)均流控制
为提高系统的可靠性,尽可能不增加外部均流控制措施,采用主从设置法。主从设置法即是认为选定一个模块作为主模块,其余模块作为从模块。用主模块的电压调节来控制其余并联模块的电压调整值,所有并联模块内部具有电流型内环控制。由于各从模块电流按同一基准电流调制,从而与主模块电流一致,实现均流。
(2)同步相位控制方法
两逆变器并联供电之后,必须保证并网后逆变输出的交流电流与电网电压波形保持同频、同相。
为保证频率同步,本系统设计的逆变器硬件结构及软件控制完全相同。系统采用主从法实现相位同步,两逆变器分别由两个独立的STM32最小系统控制,由逆变器1的控制系统检测零点,每经过一次零点传输一次信号给逆变器2的控制系统,逆变器2接收信号后调整相位与逆变器1同步。
三、电路与程序设计
1.主电路设计
主电路如图2所示。
图2 正弦逆变电路
逆变电路中的SPWM信号经由驱动芯片IR2110驱动MOSFET管导通,输出通过一阶LC低通滤波滤除高频成分,即得到50Hz的正弦波形。IR2110为半桥驱动芯片,只需连接少
量的阻容元件,利用内部自举电路即可实现对桥路的驱动。逆变输出的电压波形为含有高频分量的SPWM波,需要增加低通滤波。采用一阶LC滤波低通无源滤波。电路信号中的调制波频率为50Hz载波频率为18KHz,所以设置滤波器的截止频率为100Hz,电感L和电容C取值可按照如下公式选取:
在现有的器件经过多次尝试后,取,。由于电感是手动绕制而成的,电感值存在一定的偏差。
2.控制电路设计
控制电路使用两块STM32最小系统板结合驱动芯片IR2110分别控制两个逆变器配合工作。STM32最小系统板输出原始SPWM波经由驱动芯片IR2110完成对开关管的控制,驱动电路如图3所示。
图3 IR2110驱动电路
3.系统程序框图如图4所示
系统初始化
A/D采样
SPWM输出
数字PID稳压
OLED显示
图4 主程序流程图
四、测试方案与测试结果
1.测试条件
直流稳压源 型号:PF1719A
数字示波器 型号:TDS2022
万用表 型号:FLUKE 115C
2.测试方案与结果分析
(1)外接负载时电流电压的测试
仅使用逆变器1工作时,测试负载线电流有效值,线电压有效值。记录测试结果。测试结果如表1所示。
表1 测量数据
测试序号
电流有效值
电压有效值
1
2.02A
24.02V
2
2.01A
24.01V
3
2.00A
23.99V
分析:外接三相负载情况下,电流有效值为,电压有效值为,偏差不超过0.2V。
(2)效率的测试
测试输入、输出电压和电流,,和,效率,其中 ,。测试结果如表2所示。
表2 测量数据
输入直流电压值
输入直流电流值
负载电压有效值
负载电流有效值
50V
1A
24.01V
2.03A
分析:计算得出96%。
(3)失真度测试及频率测试
经过数字示波器FFT粗略观察,一次谐波分量与基频相比衰减了32dB,高次谐频衰减更加迅速,计算可得,失真度约为=2.51%,正弦波频率显示为50Hz。满足基本部分的要求。
3.结果分析
从以上的分析测试结果中可以看到,本系统实现了基本要求大部分指标。
五、参考文献
[1] 童诗白,华程英.模拟电子技术基础(第四版)[M].北京:高等教育出版社,2009.
[2] 阎石.数字电子技术基础(第五版)[M].北京:高等教育出版社,2009.
[3]黄智伟,王彦,陈文光等.全国大学生电子设计竞赛训练教程[M].北京:电子工业出版社,2007.
[4] 高吉祥,唐朝京.全国大学生电子设计竞赛培训系列教程(电子仪器仪表设计)[M].北京:电子工业出版社,2007.
[5] 杨振江等.基于STM32 ARM处理器的编程技术[M].西安:西安电子科技大学出版社,2016.
[6](美)Sanjaya Maniktala.精通开关电源设计[M].北京:人民邮电出版社,2015.
附录I:完整电路图
附录II:主程序源代码
//#include "stm32f10x.h"
#include "pwm.h"
#include "led.h"
#include "delay.h"
#include "adc.h"
#include "OLED_I2C.h"
#include "stdlib.h"
#include "math.h"
//#include "usart.h"
extern vu16 AD_Value[N][M]; //用来存放ADC转换结果,也是DMA的目标地址
extern vu16 After_filter [M]; ////用来存放求平均值
extern float k;
int main(void)
{
u16 adc1;
//u16 adc2;
float temp,temp1,itemp;
delay_init();
LED_Init();
Adc_Init();
MYDMA_Config(DMA1_Channel1,(u32)&ADC1->DR,(u32)&AD_Value,N*M);
ADC_SoftwareStartConvCmd(ADC1, ENABLE);
DMA_Cmd(DMA1_Channel1, ENABLE); //启动DMA通道
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
TIM1_PWM_Init(1999,1);//PWM 频率=72000/(256)/46
I2C_Configuration();
OLED_Init();
OLED_CLS();//清屏
OLED_ShowStr(0,0,"ADC_CH1_VAL:",1);
OLED_ShowStr(0,2,"ADC_CH1_VOL:0.00V",1);
OLED_ShowStr(0,4,"ADC_CH1_RVL:00.00V",1);
OLED_ShowStr(0,6,"ADC_CH1_xxL:0.0",1);
//OLED_ShowStr(0,6,"ADC_CH1_AOL: 0.000A",1);
k=1;
while(1)
{
Get_Adc_Average();
adc1=After_filter[0];
//adc2=After_filter[1];
OLED_ShowNum(72,0,adc1,5,1);//显示 ADC 的值
//itemp=temp1;
temp=(float)adc1*(3.3/4096);
//temp1=10*temp+0.8;
// temp1=14.3294*temp/1.4142;
// temp1=15.1656*temp/1.4142;
// temp1=14.5687*temp/1.4142;
temp1=15.6692*temp/1.4142-1.7125;
itemp=temp1;
//
if(k<0.99)
temp1=14.7073*temp/1.4142;
else
temp1=14.6392*temp/1.4142;
if((itemp-24.0)>0.04||(24.0-itemp)>0.04)
{
if(k>=0.8)
{ if(itemp-24)
{
if(itemp-24>1)
k-=0.04;
else if(itemp-24>0.5)
k-=0.03;
else if(itemp-24>0.3)
k-=0.02;
else if(itemp-24>0.2)
k-=0.008;
else if(itemp-24>0.1)
k-=0.001;
}
}
if(k<=1.1)
{
if(24-itemp)
{
if(itemp-24>1)
k+=0.01;
else if(24-itemp>0.5)
k+=0.008;
else if(24-itemp>0.3)
k+=0.005;
else if(24-itemp>0.2)
k+=0.002;
else if(24-itemp>0.1)
k+=0.0005;
}
}
}
adc1=k;
OLED_ShowxNum(72,6,adc1,1,1);
adc1=k*100-adc1*100;
OLED_ShowxNum(72+12,6,adc1,2,1);
delay_ms(20);
LED1=!LED1;
adc1=temp;
OLED_ShowxNum(72,2,adc1,1,1);//显示电压值
temp-=adc1;
temp*=100;
OLED_ShowxNum(72+12,2,temp,2,1);
adc1=temp1;
OLED_ShowxNum(72,4,adc1,2,1);//显示基准电压值
temp1-=adc1;
temp1*=100;
OLED_ShowxNum(72+18,4,temp1,2,1);
//
// adc1=itemp;
// OLED_ShowxNum(72,6,adc1,2,1);//显示基准电压值
// itemp-=adc1;
// itemp*=100;
// OLED_ShowxNum(72+18,6,temp1,2,1);
// temp1=(float)adc2*(3.3/4096);
// adc2=temp1;
// OLED_ShowxNum(72,0,adc2,1,1);//显示基准电压值
// temp1-=adc2;
// temp1*=1000;
// OLED_ShowxNum(72+12,0,temp1,3,1);
//
// delay_ms(500);
}
}
展开阅读全文