发作品签到
专业版

2023电赛单项逆变并联系统

工程标签

2.7k
0
0
0

简介

整理2023电赛单项逆变器并联系统(省二等奖)相关的内容,我们在比赛开始前10天才开始准备,最终获得江西省二等奖,该作品关键词:SPWM波逆变,H桥,stm32,电压互感器,调制比,IR2104S等。

简介:整理2023电赛单项逆变器并联系统(省二等奖)相关的内容,我们在比赛开始前10天才开始准备,最终获得江西省二等奖,该作品关键词:SPWM波逆变,H桥,stm32,电压互感器,调制比,IR2104S等。

开源协议

GPL 3.0

(未经作者授权,禁止转载)
创建时间:2024-03-21 02:44:01更新时间:2024-04-03 03:39:56

描述

作品在2023年8月比赛完,学校就回收了,所以实物已经无法重新展示

S`TL}_7WQNDIYQM8)A(8QT_tmb.jpg

`Z{9NSLBGKP5@%W{D7MAZIF_tmb.jpg

}11DYK@7OX8EFCLYICFR_tmb.jpg
OQ58~`NBL~_6TW$$MK8DM4_tmb.jpg
{2Q9YVR_BSF9LO)U337CY2_tmb.jpg

本人在比赛中负责软件,所以在这主要详细描述软件相关内容

软件开发平台cubeide,硬件开发平台嘉立创专业版。

软件分析

最小系统板引脚接线图
image.png
软件部分的话核心通过spwm的输出来控制开关管的通断来实现全桥逆变器。spwm通过单片机的高级定时器来输出,想要输出spwm,需要准备好正弦表,通过定时器来调整高级定时器输出PWM的占空比。通过调整spwm的调制比可以来控制最终逆变出来的电压的幅值,而我们通过硬件可以将逆变出来的交流电压按比例缩小,再加上直流偏置,最终可以通过单片机的ADC采集到逆变出来的交流电,通过计算矫正还原实际逆变结果,这里的话要通过专业的仪器来矫正系数,这个系数非常关键,想要达到比赛要求的精度,系数就要矫正好,再使用PI调节动态实现对比赛要求幅值的控制。

ADC

image.png

image.png

为了准确控制ADC采集来还原逆变结果,设置ADC,数据右对齐,扫描模式,由定时器触发,使用DMA来搬运ADC采集数据来提高效率。

定时器TIM

image.png

image.png

image.png

image.png

定时器的话使用的比较多,高级定时器来输出互补的SPWM,普通定时器来实现微秒US延时,定时器来实现正弦规律改占空比,20khz,这里要注意STM32F407VET6定时器的工作频率是有不同的,如图:

image.png

定时器3 (htim3) 定时中断发生时,会执行一系列操作:

	if (htim == &htim3) {
		/*
		 * 直流输入电压电流
		 */
		DC_U[Index_adc1] = 3.3f * ADC1_Value_DMA[2 * Index_adc1] / 4096;
		DC_I[Index_adc1] = 3.3f * ADC1_Value_DMA[2 * Index_adc1 + 1] / 4096;
//		arm_mean_f32(DC_U,400,&Udc_avg);
		DC_U[Index_adc1] = (DC_U[Index_adc1] >= 2.7)?2.7:DC_U[Index_adc1];//直流电压限压最大值

		DC_I[Index_adc1] = (DC_I[Index_adc1] >= 1.8)?1.8:DC_I[Index_adc1];//直流电流限压最大值

		Udc_temp += DC_U[Index_adc1];
		Idc_temp += DC_I[Index_adc1];
		if(Index_adc1 == 399){
			Cycle++;
			if(Cycle == 3)
			Cycle_T = 1;

			Udc_avg = Udc_temp / 400 * UdC_K;
			Idc_avg = Idc_temp / 400 * IdC_K;
			Udc_temp = 0;
			Idc_temp = 0;
		}
		if (Udc_avg >= 60 || Idc_avg >= 10) {
			SD1(0);
			SD2(0);
			SD3(0);
			SD4(0);
			RedLed_on;
		}

		/*
		 * 	逆变电流与电压
		 */
		AC_U[Index_adc2] = 3.3f * ADC2_Value_DMA[2 * Index_adc2] / 4096;
		AC_I[Index_adc2] = 3.3f * ADC2_Value_DMA[2 * Index_adc2 + 1] / 4096;

		AC_U[Index_adc2] = (AC_U[Index_adc2] >= 2.52)?2.52:AC_U[Index_adc2];//逆变电压限压最大值
		AC_U[Index_adc2] = (AC_U[Index_adc2] <= 1)?1:AC_U[Index_adc2];//逆变电压限压最小值

		AC_I[Index_adc2] = (AC_I[Index_adc2] <= 0.16683)?0.16683:AC_I[Index_adc2];//逆变电流限流最小值

		Uac_temp += AC_U[Index_adc2];
		Iac_temp += AC_I[Index_adc2];
		if(Cycle_T == 1){
		AC_U_dc[Index_adc2] = (AC_U[Index_adc2] - Uac_avg) * UAC_K;
		AC_I_dc[Index_adc2] = (AC_I[Index_adc2] - Iac_avg) * IAC_K;
		RMS_Uac_U_temp += AC_U_dc[Index_adc2] * AC_U_dc[Index_adc2];
		RMS_Uac_I_temp += AC_I_dc[Index_adc2] * AC_I_dc[Index_adc2];
		}
		if (Index_adc2 == 399) {
			/*
			 * float RMS_Uac_U_N_1 = 0;
			 float RMS_Uac_U_N = 0;
			 float RMS_Uac_U = 0;
			 */

			Uac_avg = Uac_temp / 400;
			Iac_avg = Iac_temp / 400;
			RMS_Uac_U = sqrt(RMS_Uac_U_temp / 400);
			RMS_Uac_I = sqrt(RMS_Uac_I_temp / 400);
			Uac_temp = 0;
			Iac_temp = 0;
			RMS_Uac_U_temp = 0;
			RMS_Uac_I_temp = 0;
		}

		if (Index_adc2 > 2) {
			if ((AC_U_dc[Index_adc2] > 35 * 1.4142)
					&& (AC_U_dc[Index_adc2 - 1] > 35 * 1.4142)
					&& (AC_U_dc[Index_adc2 - 2] > 35 * 1.4142)) {
				SD1(0);
				SD2(0);
				SD3(0);
				SD4(0);
				YelloLed_on;
			}

			if ((AC_I_dc[Index_adc2] > 3 * 1.4142)
					&& (AC_I_dc[Index_adc2 - 1] > 3 * 1.4142)
					&& (AC_I_dc[Index_adc2 - 2] > 3 * 1.4142)) {
				SD1(0);
				SD2(0);
				SD3(0);
				SD4(0);
				BlueLed_on;
			}
		}
		/*
		 * 	电网电压
		 */
		DW_U[Index_adc3] = 3.3f * ADC3_Value_DMA[2 * Index_adc3] / 4096;
		DW_U[Index_adc3] = (DW_U[Index_adc3] >= 2.7)?2.7:DW_U[Index_adc3];//电网电压限压最大值
		DW_U[Index_adc3] = (DW_U[Index_adc3] <= 0.8)?0.8:DW_U[Index_adc3];//电网电压限压最小值
		Udw_temp += DW_U[Index_adc3];
//		if(Cycle_T == 1){

		DW_U_dc[Index_adc3] = (DW_U[Index_adc3] - 1.7734);
		RMS_Udw_U_temp += DW_U_dc[Index_adc3] * DW_U_dc[Index_adc3];
//		}
		if (Index_adc3 == 399) {
			Udw_avg = Udw_temp / 400;
			RMS_Udw_U = sqrt(RMS_Udw_U_temp / 400);
			Udw_temp = 0;
			RMS_Udw_U_temp = 0;

		}

		/*
		 *	 更新索引
		 */
		Uac_Pid_index = Index_adc1;
		Iac_Pid_index = Index_adc2;
		Udw_Pid_index = Index_adc3;
//		if(Cycle_5 == 1)
//		ADC_PRINTF("%0.5f,%0.5f,%0.5f\r\n", DW_U[Index_adc3],DW_U_dc[Index_adc3],RMS_Udw_U);
//		u3_printf("x0.val=%d\xff\xff\xff", (int) (Udc_avg * 100));
//		u3_printf("x3.val=%d\xff\xff\xff", (int) (RMS_Uac_U * 100));
//		u3_printf("x7.val=%d\xff\xff\xff", (int) (SPWM_km * 100));
		Index_adc1 = (Index_adc1 + 1) % 400;
		Index_adc2 = (Index_adc2 + 1) % 400;
		Index_adc3 = (Index_adc3 + 1) % 400;

	}

首先,将直流输入电压和电流值从ADC数据中提取,并进行限幅处理。然后将它们累加到相应的变量中,并根据累积值计算直流输入电压和电流的平均值。
接着,将逆变电压和电流值从ADC数据中提取,并进行限幅处理。然后将它们累加到相应的变量中,并计算逆变电压和电流的有效值(RMS值),以及逆变电压相对于平均值的偏差。
接下来,将电网电压值从ADC数据中提取,并进行限幅处理。然后将它们累加到相应的变量中,并计算电网电压的有效值(RMS值),以及电网电压相对于一个参考值的偏差。
更新索引以进行下一次数据采集。

htim12根据SPWM的正弦波形进行PI控制调节的部分。代码中执行以下操作:

if (htim == &htim12) {//根据SPWM的sin进行PI调节

				SPWM_sin = 	((float)spwm_table[pwm_table_index]);//算电网相位的sin值
				Uac_target = 24.2 ;//理论值24V
				set_pid_target(&Uac_pid,Uac_target);//目标值设定为
				//Uac_Pid_actual_val = PID_realize(&Uac_pid, RMS_Uac_U);//当前实际值


				VKP = 0.001;
				VKI = 0.0000006;//0.5;
				Vmax = 0.9;

				Vtemp1 = Uac_target - RMS_Uac_U;
				Vtemp5 = RMS_Uac_U;
				Vtemp2 = VKP*Vtemp1;
				Vtemp3 = Vtemp3 + VKI*Vtemp1;



				if(Vtemp3>=0.95)
				{
					Vtemp3 = 0.95;
				}
				else if(Vtemp3<=-0.95)
				{
					Vtemp3 = -0.95;
				}
				else
				{
					Vtemp3 = Vtemp3;
				}

				Vtemp4 = Vtemp2 + Vtemp3;
				if(Vtemp4>=0.95)
			    {
					Vtemp4 = 0.95;
				}
				else if(Vtemp4<=-0.95)
				{
					Vtemp4 = -0.95;
				}
				else
				{
					Vtemp4 = Vtemp4;
				}
				__HAL_TIM_SET_COMPARE(&htim1, TIM_CHANNEL_2,4200 + Vtemp4 * spwm_table[pwm_table_index]);    // 设置比较寄存器的值

				if(Uac_Pid_actual_val >= 0.9) Uac_Pid_actual_val = 0.9;
				else if(Uac_Pid_actual_val <= -0.9 ) Uac_Pid_actual_val = -0.9;
				Uac_Pid_actual_val = 4200 + Uac_Pid_actual_val * spwm_table[pwm_table_index];
				//__HAL_TIM_SET_COMPARE(&htim1, TIM_CHANNEL_2,Uac_Pid_actual_val);    // 设置比较寄存器的值
				//__HAL_TIM_SET_COMPARE(&htim1, TIM_CHANNEL_2,4200+SPWM_km *spwm_table[pwm_table_index]);
				pwm_table_index++;
						if (pwm_table_index == 400)
							pwm_table_index = 0;
				//printf("SPWM_sin = %f,RMS_Uac_U = %f,Uac_Pid_actual_val = %f\r\n", SPWM_sin,RMS_Uac_U,Uac_Pid_actual_val);
	}

计算电网相位的sin值,并将理论值24V作为电网电压的目标值。
设置PID控制器的参数,包括比例增益(VKP)、积分增益(VKI)和最大输出值(Vmax)。
计算PID控制器的输出值,其中包括比例项(Vtemp2)和积分项(Vtemp3)。
对PID控制器的输出值进行限幅处理,确保其在合理范围内。
根据PID控制器的输出值,调整SPWM波形的占空比,并设置比较寄存器的值。
对SPWM波形的占空比进行限幅处理,确保其在合理范围内。
更新SPWM波形表的索引,以便下一次使用新的SPWM波形。
最后,根据需要输出一些调试信息

htim13 输出SPWM波形并计算THD(Total Harmonic Distortion,总谐波失真)。

具体操作包括:

将SPWM波形输出到定时器通道2的比较寄存器中,以控制SPWM波形的占空比。
根据SPWM波形表的索引逐步输出SPWM波形。
如果SPWM波形表的索引达到了最大值(400),则将其重置为0,以便下一次循环继续输出新的SPWM波形。

后面为比赛时提交的设计报告

设计报告

摘要:
本作品基于SPWM波逆变原理,通过监测与控制电路,当输入直流电源时,电路作DC-AC变换。本作品主电路结构为先经SPWM波驱动IR2104S控制IGBT组成的H桥的结构,为实现控制输出电压的检测电路结构。逆变器电路整体由直流电源供电,直流电源给给辅助电源供电,通过辅助电源给单片机、驱动芯片和检测电路供电。第一部分通过调整SPWM波载波频率及LC滤波电路,减小THD。
第二部分通过电压互感器对交流电压采样,通过运放放大电路及加法输入单片机,处理数据,改变调制比,实现输出电压的稳定,减小负载调整率。

关键词:SPWM波逆变,H桥,stm32,电压互感器,调制比,IR2104S

目录
一.方案论证 3
二.理论分析与计算 3
三.电路与程序设计 3
四.测试方案与测试结果 3

单相逆变器并联运行系统(A题)

一、方案论证

1.1结构的选择

方案一:单相逆变器半桥拓扑结构
半桥逆变器电路结构简单,成本低,但缺点是输出电压的一半,且输出电流受到电容的限制,逆变输出功率小,效率较低。
方案二:单相逆变器全桥拓扑结构
单相逆变器H桥拓扑结构采用两个半桥的并联拓扑结构,该方案输出电压可以程序控制,自由度高,且逆变效率远高于半桥结构,缺点是电路结构更复杂,控制更为复杂。
由于全桥拓扑结构可以控制电压,效率高,本组选择方案二。

1.2主控芯片的选择

采用stm32f407系列单片机,STM32是意法半导体公司生产的一款32位的微控制器。STM32系列运算速度快,功耗低;处理器外设接口丰富;库函数开发体系学习资料多,且407系列相对于f103系列主频更高,运算速度更快,且兼容硬件浮点运算单元。本组决定采用stm32f407VET6单片机,价格适中,功能强大。

1.3功率管的选择

此系统使用的为IBGT(FGA25N120),封装为TO-220,正相电流25A,反向耐压1200V,工作温度-55~155℃,适用于大功率场合。

1.4 方案描述

SPWM是一种常用的逆变器调制技术,它通过控制逆变器开关的开关时间来控制逆变器输出电压的幅值和频率。SPWM技术的优点;能够产生近似正弦波的输出电压,且两个半周期之间,电压的变化率较小,电流谐波成分较少,控制简单。1.5.SPWM波逆变电路的论证与选择
方案一:H4IP4081 四路互补驱动+全桥逆变逆变电路
HIP4081 是一个中频,中压,全桥配置,H桥为4个N沟道MOSFET驱动IC,属于中等功率水平的应用。
方案二:IR2104S 四路互补驱动+全桥逆变电路
IR2104S高电压,高转速动力MOSFET和IGBT驱动器与相关的高与低测参考电压输出通道能同时输出一组互补的PWM波电路,实现逆变。
综合以上两种方案,本组方案二

1.6控制系统的论证与选择

由于要求需要两套逆变器进行并联及电网并网,则需要对逆变输出电压和电网电压进行同频同相同压处理。
方案一:硬件锁相+部分软件闭环处理
硬件对电网电压、逆变输出电压、电流进行采样,硬件对采样到的信号进行过零比较及峰值检波,将处理的信号输入给单片机,可以得到相位与幅度关系。单片机将得到的数据处理后,改变SPWM,进行闭环控制。
方案二:全软件闭环处理
硬件电路对电网电压、逆变输出电压、电流进行采样,进行放大和加法电路,采集到波形信号,单片机对数据进行处理,改变SPWM,进行闭环控制。
方案选择:
由于单片机驱动需要快速的驱动IGBT,开关管的迅速开关会出现电压和电流的快速改变,将很可能导致硬件锁相出现两个过零,或者50Hz的方波信号在一个周期内出现多个上升沿。而方案二单片机采集加法电路后的电压,如果开关管的影响导致出现尖峰脉冲,单片机可以对毛刺数据进行处理。经过本组思考,选择方案二。

二.理论分析与计算

2.1输出电路

输出电路采用的是四个IGBT控制的全桥逆变,后使用LC电路滤波。四个IGBT用两个IR2104S进行驱动,能够开关迅速,容易调节,并且使用SPWM进行调控出的波形更加精确。由于所需要的波形为50Hz正弦波,所以需要对低通滤波器进行设计。采用LC滤波,截止频率计算公式为f=1 / 2π√LC,我们决定采用L为500uH的电感,C取22uF和10uF电容的并联,计算得到的截至频率为1258Hz,最后得到失真度较小的正弦波。

三.电路与程序设计

3.1系统整体框图

image.png
图1 系统整体框图

3.2 逆变拓扑结构

image.png
图2 逆变拓扑结构电路图

3.4 检测电路

交流电压采样电路采用ZMPT101B对电压进行感应,交流电流采用ZMCT103C对交流电流进行感应,经运算电路和加法电路输入给单片机,偏置电压信号由REF3318提供一个恒压1.8v的直流信号,运放采用TLC2272低噪声运放。单片机采集到数据,减去直流偏置,乘以放大倍数,得到交流电压有效值。直流电压采集用电阻分压,同向跟随输入给单片机。直流电流采用低边差分放大电路,对直流电流进行检测。

3.5程序设计

image.png

软件核心为spwm的输出来控制开关管的通断来实现全桥逆变器。SPWM(正弦脉冲宽度调制)是一种非常成熟且广泛使用的技术,它基于面积等效原理,即冲量相等而形状不同的窄脉冲加在具有惯性的环节上时,其效果基本相同1。SPWM逆变是一个成熟的技术,无论是单极性逆变还是双极性逆变,都离不开SPWM调制。对于H桥全桥逆变,使用的是双极性SPWM逆变2。单片机可以通过TIM输出PWM。在程序中,可以通过计算ARR和调制比来生成正弦表,然后查表来实现SPWM。利用PWM的事件去触发中断,更新下一次CCR的值。
其次控制器mcu上实现屏幕信息交互,能够实时响应屏幕输入和输出操作。这意味着屏幕上的信息交互可以在用户输入后迅速得到反馈,提供更好的用户体验。通过串口屏幕上位机软件设计好屏幕ui及其信息交互触键,并通过串口与单片机进行通讯实现一些参数的展示或设置。
为了控制逆变电压的稳定,软件上面采集直流输入电压,电流信号,逆变电压,电流及其电网电压信号的瞬时值,计算有效值等数据来进行开环与 闭环的协调配合控制来实现逆变电压的稳定,及其闭环控制。

四.测试方案与测试结果

4.1测试方案及测试条件

①将功率分析仪测量电流线串联进电路,电压档并联进电路,将负载串入电路,测量输出电压能否达到24v,输出电流能否达到2A,观察畸变率能否达到要求。
②调整负载,使电流在0~2A连续变化,测量负载率是否在SI1≤0.2%之内。
③将功率分析仪接入电路,逆变器1开,给负载供电,使其稳定在24v,逆变器2开观察负载电压是不是在24v,观察能否输出4A电流。

4.2 测试结果及其完整性

①将负载接入电路,可以交流输出24v±0.2v,且电流能够达到2A,电压畸变率在2%以内。
②调整负载,使电流在0~2A连续变化,检测电压的变化,进行计算,可以看出负载率SI1≤0.2%之内。

设计图

未生成预览图,请在编辑器重新保存一次

BOM

暂无BOM

附件

序号文件名称下载次数
1
代码ele_game_power_supply_407VET6_V5.zip
941
2
数据波形查看软件serialplot.zip
171
3
stm32死区计算器.rar
121
4
SPWM生成软件.zip
80
5
串口屏幕代码.zip
66
克隆工程
添加到专辑
0
0
分享
侵权投诉

评论

全部评论(1)
按时间排序|按热度排序
粉丝0|获赞0
相关工程
暂无相关工程

底部导航