基于STM32G474RET6单片机的三相逆变器并联运行系统

本文已同步发表在微信公众号:https://mp.weixin.qq.com/s?__biz=MzkzMzQ0NzI2NA==&mid=2247484031&idx=1&sn=01279aaf5843ad618d70984379f86939&chksm=c24d1170f53a9866699d3614c98fdb5e5cd751623f9f3656ba43f46feed8a27ae57bc22cff4e#rd

成品和资料已经在咸鱼上发出:【闲鱼】https://m.tb.cn/h.g5o2ALw?tk=quwDWzEkgoq MF1643 「我在闲鱼发布了【基于STM32G474RET6单片机的三相逆变器并联i运行系】」
点击链接直接打开

微电网模拟系统设计与实现

一、摘 要

本作品是三相逆变器并联供电系统,2024年本人的毕设作品,拿到了校级的优秀毕设,本设计选择STM32G474RET6单片机芯片作为本系统的核心处理器,并采用了闭环PID控制策略,开发了一套高效率的微电网模拟系统。本系统的硬件组成包括STM32G474RET6单片机芯片控制电路模块、辅助电源电路模块、三相逆变电路模块、相电压电路采集模块和线电流采集电路模块。STM32G474RET6微控制器输出6路PWM信号,通过正弦表的控制,进而生成6路SPWM信号,以控制逆变器中MOS管的开关。系统通过电压和电流采样电路对输出进行反馈,经过A/D转换器采样后,将数据传输至微控制器控制电路,形成一个闭环控制系统,确保输出交流电压稳定在24V。

经过实验测试,效能达到96.48%,单个逆变器可以向负载提供输出交流电压24.15V,频率50.12Hz,负载电流增至2A时,总谐波失真小于3%,电流在0到2A范围内变化时,负载调整率低于0.3%。两个逆变器并联运行时,输出交流电流可达3A,频率50.17Hz,电流在1~3A范围内变动时,两个逆变器并联运行时,输出线电流可以按照自动均流分配,根据设定值分别输出线电流。

二、系统方案原理与分析

2.1三相逆变技术分析

逆变器属于一种电子电气装置,其主要功能是在特定的频率和电压下,把电能形态转变成不一样的电能形态,逆变电路就是把直流电转换为交流电。三相逆变电路模块作用是将直流电转换为三相交流电。三相逆变电路模块分为三相电压源逆变电路模块和三相电流源逆变电路模块。三相电压源逆变电路模块是采用低阻抗输入,其直流电压源供电。三相电流源逆变电路模块是采用高阻抗输入,其直流电流源供电。在比较这两种三相逆变电路模块后,三相电压源逆变电路模块因其快速的响应速度而受到青睐,综合考虑后,本设计选用了三相电压源逆变电路模块。三相逆变电路模块如下图 2.1 所示。

1ac4cbf53d044ab3a474e745ae9ccf20.png

图2.1 三相逆变电路模块电路图

图中 Vd为直流输入端电压,UV、VW、WU为三相逆变各线电压,UN、VN、WN为三相逆变各相电压,N为三相逆变的中性点, ia、ib、ic为三相逆变电流,其中UN、VN、WN为三相逆变各相电压。

2.2 PI 算法及参数调节方式

比例-积分-微分(PID)算法大多数用在工业控制,大概有95%的工业自动化闭环运行系统控制都用的PID算法。PID控制策略融合比例、积分和微分控制动作,形成闭环反馈控制。在MCU出现之前,PID是利用模拟电子的组件来组合而成。现在几乎所有的PID控制都利用MCU进行数据运算和控制。PID因其适应性和信赖度,在过程控制领域得到了传统的应用[16]。PID算法通过把电路产生的误差信号比例、积分和微分这三个部分利用线性组合结合成总控制,以这样的方式将电路出现的误差进行反馈控制。 PID闭环方式如下图 2.4 所示。

7bed324430e24be6828b56f784076e0e.png

图 2.2 PID 算法框图

PID控制器因其技术成熟、易于学习和操作、无需复杂的数学模型且控制效果优良而广受欢迎。PID算法分为P算法、PI算法、PD算法和PID算法。P算法环节中只要有误差,它会马上做出控制反应,将控制量调整至减少误差的方向。P算法的控制力度由比例系数KP决定,KP值越大,控制作用越强,但过高的KP值可能会导致系统不稳定。

积分控制把误差的叠加当作输出。电路有误差信号存在,它的输出不断变大。当误差e(t)为零,输出u(t)会固定某个值,这样可以保持系统在设定值r(t)不变也可以达到稳定的状态。积分环节虽然可以清除静态误差,但是它会把减少系统的运行速度和增加超调。TI值越高,TI值叠加的效果越小。提高积分时间常数TI会减缓静态误差的消除速度,可以增强系统的稳定性和减少超调。所以必须根据实际需求设定TI值。

微分环节可以抑制误差的改变,它根据电路中产生的误差的改变速度来调节。误差改变越大,它的输出越高,还可以在误差增高前进行控制调整。微分控制可以降低超调值和克制系统过激,这样系统变得更稳定[17]。但是微分控制环节对于输入信号噪声很灵敏,所以在噪音高的场景不独立用微分控制。合适设置微分常数(TD),可以提高微分控制调节,使电路达到最佳运行效果[18]。综合考虑,PI算法最适合本系统设计的反馈控制要求。

2.3 正弦波SPWM技术原理

PWM信号的基础是正弦波形,它被转换成一系列等幅值,宽度不同的脉冲波形,这些脉冲的宽度由正弦波与三角波的交点确定。正弦波的生成方法包括平均对称规则采样、对称规则采样和不对称规则采样。对称规则采样产生的脉冲宽度较窄,可能导致变频器的输出电压比直流侧电压低;不对称规则采样在一个载波周期内对正弦波采样两次,可以提高输出电压,但是会增加MCU的数据处理量,高载波频率下,对MCU的性能需求更高;平均对称规则采样结合前面两种方法的优点[19]。

SPWM的脉冲宽度遵循正弦波的波形变化,即 SPWM与正弦波具有相同的效果。调整三相逆变电路模块中MOS管的开关状态,使输出脉冲电压面积与期望的正弦波在相应区间内的面积相匹配。改变MCU输出的频率和脉冲宽度比,可以改变三相逆变电路模块输出线电压的频率和幅值[20]。

SPWM调制技术包括单极性和双极性调制。双极性调制方法简单;相比之下,单极性调制方法较复杂。单极性SPWM驱动波形如下图2.3所示。

bbcfc859e6c646fbaaceb942cbf4cce0.png

图2.3 单极性SPWM驱动波形

单极性调制有一对半桥电路当作低频桥控制,用50Hz的频率可以实现开关,另一对半桥电路当作快速变化的桥来进行控制,电感电压在VCC和0之内变化。双极性调制在单极性调制的本质上使两对半桥电路对角导通,电感电压在VCC和-VCC之内变化。产生的噪音比单极性调制大一些,但是控制方法容易。综合考虑,本系统设计用双极性调制。双极性SPWM驱动波形如下图2.4所示。

3571584baac54a4f9b6cc824e0654eee.png

图2.4 双极性SPWM驱动波形

 

三、系统方案设计

3.1 微电网模拟系统结构框图

本系统设计由辅助电源电路模块、两个三相逆变电路模块、相电压采集电路、线电流采集电路模块和STM32G474RET6单片机芯片控制电路模块和构成。本系统设计的框图如下图3.1所示。

9c66227ce83344e897a1861bdf0056ed.png

图3.1 系统结构框图

两个三相逆变电路模块共用一个直流电源,系统采用STM32生成SPWM信号,通过半桥驱动器EG2104控制实现三相逆变过程。MOSFET驱动电路采用具备内置死区时间的桥式驱动EG2104芯片,通过使用ACS712霍尔效应电流传感器来监测电流并进行电流环的反馈控制,同时采用ZMPT101电压传感器进行输出相电压的采集以实现电压环的反馈控制。单片机生成的SPWM信号通过驱动芯片控制三相逆变模块,实现直流到交流的转换,并通过对电压电流的采样以及PI算法来实现功率的分配。三相逆变电路模块1单独工作时,把采样到的电压信息传输给STM32G474RET6单片机芯片,利用 PID算法把STM32G474RET6单片机芯片输出的SPWM信号进行反馈控制,使输出线电压值保持24V不变化。三相逆变电路模块1和三相逆变电路模块并联工作时,把采样到的电压信号和电流信号传输给STM32G474RET6单片机芯片,通过双闭环PID算法对两个三相逆变电路模块的SPWM信号进行反馈调节,以保持输出线电压稳定在24V。

3.2 系统模块功能设计

3.2.1 逆变电路

三相逆变电路模块由LC滤波电路、驱动电路和三相逆变半桥电路组成,是本系统能否输出三相交流电的核心部分,三相逆变电路模块是由STM32G474RET6单片机芯片控制电路模块输出PWM控制的,LC滤波电路中的电感和电容参数值的设计是滤掉高频信号生成三相交流电的关键。 驱动电路输出SPWM控制MOS管的开关,也是MOS管的保护不被大电流冲击。本系统中三相逆变电路部分 输出线电压值为24V,单个三逆变电路模块输出的线电流最大为2A, 逆变电路框图如下图3.2所示。

cc25c5dfd6c74b4fb1fad56671945e13.png

图3.2 逆变电路框图

3.2.2 MCU控制电路模块

STM32G474RET6单片机控制电路是确保系统正常工作的核心,它由基本系统电路、STM32G474RET6芯片、OLED显示电路、按键输入电路、模数转换电路、LED指示电路、串行通信电路和脉宽调制电路组成。脉宽调制电路的输出直接用于控制三相逆变电路模块。AD转换器引脚采集到的电压反馈给相电压采集和线电流采集模块控制三相逆变电路部分的线电压输出和线电流,STM32G474RET6单片机芯片控制电路框图如下图3.3所示。

b592247a049d413eb156a727e9a8c52e.png

               图3.3 STM32G474RET6单片机芯片控制电路框图

 

3.2.3电压电流采样电路模块

相电压采集电路和线电流采集电路模块是本系统工作的主要电路模块。相电压采集电路和线电流采集电路模块采集三相逆变电路模块输出的相电压和线流数据传输给STM32G474RET6单片机芯片控制电路模块进行反馈控制。本系统用的ZMPT101电压互感器对相电压进行采集和ACS712霍尔传感器线电流进行采集。STM32G474RET6单片机芯片控制电路模通过AD转换器把电压采集后,进行反馈稳定微电网模拟系统的运行,电压电流采样电路框图如下图3.4所示。

0292c5892fe84aeb95a2065b27822c0d.png

图3.4 电压电流采样电路框图

3.2.4 辅助电源电路模块

辅助电源电路模块是微电网模拟系统中各个电路模块芯片的供电模块,把45V的直流电压通过SCT2A10降压到12V和5V电压给各个电路模块芯片供电。是微电网模拟系统运行的重要电路模块。

4.微电网模拟系统的实现

4.1 硬件电路设计

4.1.1 STM32 控制电路设计

本系统设计的关键组件是STM32G474RET6单片机芯片控制电路模块。STM32G474RET6单片机控制电路模块包括仿真调试接口、晶振器电路、串行通信接口、电源供应电路、复位逻辑电路、串行通信接口、引导加载电路、按键输入接口、OLED显示模块、LED指示灯电路、ADC电路和PWM电路,确保了系统的稳定运行和灵活的控制能力。

STM32G474RET6单片机是基于32位ARM Cortex™-M4内核的高性能MCU,其工作频率可达170MHz。芯片内部集成CORDIC数学加速器和FMAC滤波器数学加速器,以及512KB的Flash存储器和96KB的SRAM,支持16通道的DMA。具有低功耗、强大的扩展能力和实时处理能力。工作电压范围为2.0V至3.6V,每个外围设备配备独立的时钟控制,通过管理这些控制开关以减少能耗。最高频率运行的低功耗模式下的电流消耗为28mA。

本设计的控制电路的原理图和PCB三维设计分别展示在图4.1和图4.2中,展示了电路的布局和连接细节。通过这些设计,本系统旨在实现一个稳定、高效且易于开发的控制器,以满足设计要求和预期功能。

0f3adf62bd094545a1358d319570078d.png

图4.1 控制电路原理图设计图

4.1.2 逆变电路设计

本系统设计采用STM32G474RET6微控制器芯片来生成SPWM信号,以控制半桥驱动器EG2104实现三相逆变功能。开关管的驱动电路采用具备内置死区特性的桥式驱动芯片EG2104进行驱动,使输出线电压稳定在24V,为了可以稳定输出线电压,输入的直流电压一定要满足条件,输入的直流电压可以根据(式4.1)计算得到34V,其中sqrt(2)是根号2,Uam是幅值电压。因为SPWM调制的最大值为1,输入的直流电压一定要大于34V,取一定余量,综合考虑选择输入直流电压值45V。

本系统选择三相电压型逆变电路模块,三相逆变电路模块由驱动电路、滤波电容、滤波电感和MOS管NCE6080K等组成。电压型三相逆变电路由三组半桥逆变电路构成,输入设定耐压值高高于输入直流电压的大电容。

NCE6080K具有60V的耐压值,本系统的输入直流母线电压值为45V。这将对本系统稳定运行的关键。本系统的输出线电流最大值为3A,而NCE6080K可以流过电流最大值为80A,最终选取的MOS管为NCE6080K。

调节控制脉冲的上升和下降时间、防止震荡,以及降低开关管的漏极端的冲击电压,可以通过减小开关管栅极串联电阻的方式来达成,本系统设计用的电阻为3.3Ω和10Ω并联,在栅极回路上逆向连接一个二极管,可以提高栅极放电速度,本系统采用的型号是1N4148。在MOS管门极和漏极之间添加一个10千欧姆的电阻,有利于减少MOS管关闭过程产生的静态漏电流。MOS管源极和漏极之间反向接入一个二极管,能避免过流和短路等异常导致MOS管损坏,本设计选用耐压值为200V的二极管SS5200,三相逆变部分原理图设计如下图4.2所示。

8d3c33cbd1564fcd9464cc1085a2b6b8.png

图4.2 三相逆变部分原理图设计图

驱动电路将MOS管开关和STM32G474RET6单片机控制芯片起到分隔的功能,对STM32G474RET6单片机控制芯片进行保护,防止烧坏控制芯片,导致系统无法工作。EG2104是一款成本效益高的栅极驱动芯片,适合带有SD功能的MOS管和IGBT管。EG2104芯片的工作电压范围为2.8V至20V,静态功耗小于1uA。通过以上的描述,完全可以满足题目的要求,驱动电路部分原理图设计如下图4.3所示。

e511eff579f149f388796e19c3669362.png

图4.3 驱动电路部分原理图设计图

在三相逆变电路模块的输出信号中,总谐波失真包含输入信号谐波部分。这种失真由于系统操作中的非线性特性所导致。所有额外谐波电平的叠加构成总谐波失真,总谐波失真和频率紧密相关。1KHz频率的总谐波失真是最低点,许多产品将1KHz频率下失真作为衡量性能的指标。由于计算THD较为复杂,本系统使用专业的功率分析仪来直接测量THD值。

开关频率的合适选择可以提高输出线电压的THD效果。然而,当频率过高时,MOS管的耗损也会提升,MOS管的耗损和开关频率之间存在直接的比例关系。综合考虑后,本系统设计的三相逆变电路模块的开关频率设置为30kHz。

4.1.3 滤波电路设计

滤波电路的设计是为了所需要的频率范围信号通过,LC滤波电路由电感和电容共同组成。本系统选择LC滤波器作为三相逆变电路的滤波装置[21]。LC滤波电路的电感值和电容值一定要准确设计,这样才可以达到预设的滤波性能。把电感值增大虽然可以减少输出线电压的畸变率,但是在输出负载不变化时增大电感值可能会影响输出线电压的值,严重直接带不动负载。增大电容值虽然可以提高输出电压的效果,但是会影响输出线电压下降。三相逆变电路模块输出的线电压用来供电,输出电阻要小,综合考虑后选择LC无源滤波电路[22]。

滤波电感的设计要考虑滤波性能,降低纹波和系统运行的速度。电感过小形成不了滤波效果,电感太大会导致系统运行速度下降。通过伏秒平衡得到一个周期内电感电流改变的增加和降低是一样的,设定纹波电流系数取值范围为0.2到0.4为最佳。

4.1.4电压电流采样电路设计

本系统由电压传感器ZMPT101采集相电压值和霍尔传感器ACS712采集线电流值传输给STM32G474RET6单片机芯片控制电路进行反馈调节。电压是通过电磁互感实现采样的,霍尔传感器通过感应流经铜质电流路径的电流所产生的磁场,将其转换为霍尔IC芯片内部成比例的电压信号,从而实现电流的采样。

对于霍尔传感器ACS712-05B,没有检测到电流时它的输出电压是1/2VCC的电压,对应的模拟量输出185mV/A,而且叠加在输出直流电压上。

电压传感器电路中加入了可调电阻100k,可以改变采集到的输出电压,ACS712的输出通过同相比例运放放大电路把霍尔传感器ACS712的输出电压放大3.3倍。相电压和线电流采集电路原理图设计如下图4.4所示。

53989574f719444094d94bdbd8e82629.png

图4.4 电压电流采集电路原理图设计图

4.1.5 辅助电源电路设计

微电网模拟系统中多个地方用到+12V和5V电源,SCT2A10芯片将45V的输入电压通过BUCK降压输出+12V和5V电源。SCT2A10供电范围为4.5V到100V的600mA同步降压芯片,它可以调节开关频率,芯片内部设计了过压保护和过流保护等功能。辅助电源电路原理图如下图 4.5所示。

26621a28dbba4a79b5a46bbba77f8ac9.png

图4.5 辅助电源电路原理图设计图

4.2 软件程序设计

4.2.1 主程序设计

主程序主要对微电网模拟系统进行初始化设置和子程序的调用。在所有配置和初始化步骤完成后,程序进入While循环,等待定时器中断触发。在定时器中断处理函数中,对输入的电压信号执行采样操作,然后再经PID算法计算,随后进行电压环与电流环的控制,将环路控制得到的目标值进行SPWM调制,确保系统稳定运行。主程序的流程图如图 4.6所示。

215160ecbfe5496ea0ffa8217da182e0.png

图4.6 主程序的流程图

4.2.2 PID 控制程序设计

本系统设计的PID算法程序是整个控制函数的重要部分。PID 算法的选择和参数的调节对本系统响应速度和系统稳定运行起到关键作用。PID算法分为位置型和增量型。位置型PID算法的比例部分仅与当前误差值相联系,积分部分与累积的误差总量有关。位置型PID算法结构较为明晰,但是 K值很大后计算量也升高,导致计算速度变慢。增量式 PID算法只和上一次的误差有关,计算速度很快。综合考虑,本系统使用增量式PID算法对微电网模拟系统进行误差补偿,保持输出的稳定性和运行效果。STM32G474RET6单片机芯片的ADC功能把电压传感器采集到的电压有效值为基准通过PID算法进行控制,由STM32G474RET6单片机芯片输出相应的有效值作用于SPWM 脉冲发生表,控制SPWM的输出达到线电压24V的能力。STM32G474RET6单片机芯片的ADC功能把霍尔传感器采集到的电压有效值作为输PID算法控制,STM32G474RET6单片机芯片输出的有效值作用于SPWM 脉冲发生表,控制SPWM的输出达到两个三相逆变电路模块按照设置的电流比例输出线电流的功能。上面提到的是一种双闭环控制策略,包括一个电压外环的P控制器和一个电流内环的PI控制器,它们分别负责调节输出相电压和线电流。

9ff36ddccf134664b4e2fcbd7abeb306.png

图4.7 PID程序控制流程

五、监测系统上位机及通信模块设计

微电网模拟系统的监测是由阿里云开发平台和蓝牙App Inventor开发,实现远程数据传送的作用和对微电网模拟系统稳定运行的起到监测作用。可以接收功率、电压和电流数据等,蓝牙还可以实现本系统工作状态的变换和监测。

5.1开发平台介绍

阿里云隶属于阿里巴巴集团,自2009年起提供云计算服务。它具备世界尖端的云计算技术和服务水平,拥有自主开发的飞天操作系统和分布式架构技术已经达到了国际领先水平,阿里云还拥有全球最大的云计算数据中心之一,覆盖了全球多个国家和地区,致力于为用户提供更加稳定、高效、可靠的云计算服务。 阿里云的成功应用场景包括多个领域,如金融、制造、医疗、零售[25]。

5.2阿里云监测界面设计

如下图 5.1 所示是本系统监测页面,可以看到本系统线电压、线电流和功率数据,从下图可以看到输入直流电压为44.71V,三相逆变器的A相输出相电压为14.09V、B相输出相电压为14.12V、C相输出相电压为14.11V。两个三相逆变器并联带载2.2A时的输出线电流分别为IA1是1.10A、IB1是1.12A、IC1是1.08A、IA2是1.11A、IB2是1.12A和IC2是1.08A。两个三相逆变器每一相的输出功率为WA1是16.50W、WB1是15.53W、WC1是15.53W、WA2是16.50W、WB2是15.53W和WC2是15.53W。这样方便了管理人员远程观察微电网模拟系统的运行状况,确保微电网模拟系统的稳定工作起到关键作用。

c59988493f9041c7a010fe35608e55e3.png

图 5.1 微电网模拟系统监测页面

通讯协议的定义有数据类型、读定义和数据标识定义等。当本系统和监测端的通讯的数据格式相同时,本系统可以通过AT指令把数据传输到阿里云平台。

5.3 阿里云STM32G474RET6 通讯设计

智能监测系统通过AIR700E模块STM32G474RET6单片机的串行接口接收数据,通信代码的设计过程如下所示。

(1)STM32G474RET6单片机芯片和AIR700E模块的串口3通讯;

(2)把需要的数据放入数组中,然后通过串口3发送AT指令的字符串进行通信;

(3)对系统时钟初始化;

(4)登录啊里云平台;

(5)实现微电网模拟系统的数据传输和显示;

保证数据准确性的关键在于通信协议的正确处理。AIR700E的4G模块与STM32G474RET6单片机之间通过串行端口3进行数据交换。串行端口3的奇偶校验位和端口名称等参数需要进行设置。配置细节如下图 5.2展示。

6ab88ec3b0e74de3b0896a5ec8fc66a7.png

图 5.2串口3通讯模式配置图

5.4 AIR700E里云软系统设计

Air700E支持多样方式和阿里云通讯,不同的方式需要刷不一样的固件。AT指令是其中的一种,AT指令操作简单。

AT指令固件与阿里云进行通信有三种方式,包括AT指令通过HTTP进行身份验证的“每机一密”、AT指令直接连接MQTT的“每机一密”,以及基于AT指令的“每型号一密”连接方式。本系统选择“每机一密”的AT指令直接连接MQTT方式。创建阿里云实例后,需要查看MQTT的相关参数。 

如果设备属于公共实例,并且使用“每型号一密”的预注册认证方法,动态注册的参数如(式5.1)、(式5.2)和(式5.3)所示。

mqttClientId:clientId+"|securemode=3,signmethod=hmacsha1,timestamp=132323232|"                                        (式5.1)

mqttUsername: deviceName+"&"+productKey          (式5.2)

mqttPassword: sign_hmac(deviceSecret,content)         (式5.3)

dientld是客户端ID:长度在64个字符内,建议使用IMEI或SN码方便区分不同客户端。securemode是安全模式2、直连模式3和TCP直连模式。

signmethod 是签名算法类型。支持hmacmd5,hmacsha1,hmacsha256。默认为hmacmd5,timestamp是当前时间毫秒值,可以不传输。mqttPassword是前文计算的签名值。

b6db4f5f3da24e2ebafed1291a002af8.png

图5.3 一机一密AT直连MQTT交互图

5.6 蓝牙监测界面设计

蓝牙界面的设计是通过App Inventor完成,App Inventor是一个软件工具,专门用于开发Android智能手机的应用程序,它采用了类似于Scratch的拖拽式编程方法。

在工作界面中可以自由拖拽和搭建,可以根据自己的需求完成蓝牙APP的设计。设计后的工作面板、组件列表和逻辑设计如下图5.4和图5.5所示。

9e107faddc694533b14a1fa007519881.png

图5.4 工作面板和组件列表图

f48f387e31cc40fe99dbf9946c042f03.png

图5.5 逻辑设计图

生成的APP扫码下载和下载到电脑,无需其他操作,极大便利了设计开发人员。生成的APP截图如下图5.6所示。

f39b5f250da74bf589a3a8faf8592709.png

图5.6 APP截图

数据监测和控制开关如下图5.7所示。

beca84c96f6445fbaddcb09d9549d04e.png

图5.7 数据监测图

从上图可以看到输入直流电压为44.92V,三相逆变器的A相输出相电压为13.91V、B相输出相电压为14.02V、C相输出相电压为14.04V。两个三相逆变器并联带载2.2A时的输出线电流分别为IA1是1.08A、IB1是1.09A、IC1是1.06A、IA2是1.08A、IB2是1.09A和IC2是1.06A。两个三相逆变器每一相的输出功率为WA1是15.69W、WB1是15.69W、WC1是15.69W、WA2是15.69W、WB2是15.69W和WC2是15.69W。

5.7 蓝牙STM32G474RET6通讯设计

监测系统通过蓝牙模块与STM32G474RET6单片机芯片通讯,通信代码的设计概述如下。

(1)STM32G474RET6单片机与蓝牙模块通过串行端口1进行通信。 

(2)将待写入的数据存储到缓冲区。 

(3)初始化系统时钟。 

(4)手机应用程序搜索并连接已配对的蓝牙模块设备。 

(5)实现微电网模拟系统的数据展示和传递功能。

(6)运行系统的变换。

保证数据接收的准确性,通信协议的处理至关重要。蓝牙模块与STM32G474RET6单片机之间通过串行端口1传输数据,对串行端口1的数据位和波特率等进行配置。设置方案如下图 5.7所示

d2e8158c108e49c3ba3372059877af94.png

图 5.7串口1通讯模式配置图

6.测试结果与分析

6.1测试步骤与结果(数据)

6.1.1测试步骤

b9b46fc69b1046d6b28feea2a702df37.png

图6.1测试接线图

实际测量仪器:数字万用表(DELIXI-DEM11、DT-9205A、ZT219和VICTOR-33D)、三相负载、直流稳压电源GWINSTEK PST-3202、示波器FNIRSI-1C15+和数字功率计ZLG PA333H。

6.1.2测试数据

(1)只用单个三相逆变电路模块向负载输出。分别测量输入直流电压、输入直流电流、输出线电压、输出线电流和THD,记录于表6.1。 

表6.1单个三相逆变器输入电压电流、输出电压电流、频率和THD测量表

次数

1

2

3

输入电压(V)

44.98

44.99

44.91

输入电流(A)

2.15

2.14

2.13

输出电压RMS(V)

24.18

24.21

24.15

输出电流(A)

2.24

2.25

2.26

频率(Hz)

50.15

50.17

50.14

输出电压THD

0.45%

0.46%

0.50%

 

表 6.5 三相逆变器1输出线电流记录表

 

 

Io=1A

IoA1(A)

0.51

IoA2(A)

0.45

差值IA(A)

0.06

IoB1(A)

0.53

IoB2(A)

0.48

差值IB(A)

0.05

IoC1(A)

0.46

IoC2(A)

0.53

差值IC(A)

0.07

输出电压(V)

24.13

SI2(%)

0.24

表 6.6 三相逆变器2输出线电流记录表

 

 

Io=3A

IoA1(A)

1.54

IoA2(A)

1.49

差值IA(A)

0.05

IoB1(A)

1.56

IoB2(A)

1.48

差值IB(A)

0.08

IoC1(A)

1.49

IoC2(A)

1.55

差值IC(A)

0.06

输出电压(V)

24.19

SI2(%)

0.24

(6)两个三相逆变电路模块并联工作,输出线电流在1A到3A之内改变时,改变输出线电流比值K在(1:2到2:1)内自动分配,分别对两个三相逆变电路模块的输出线电流折算值之差的绝对值进行测量记录于表6.7和表6.8。

表6.7 三相逆变器1输出线电流折算值记录表

K=0.5

Io=2.2A

IoA1(A)

0.69

IoA2(A)

1.42

差值IA(A)

0.04

IoB1(A)

0.68

IoB2(A)

1.42

差值IB(A)

0.05

IoC1(A)

0.71

IoC2(A)

1.49

差值IC(A)

0.07

表 6.8三相逆变器2 输出线电流折算值记录表

K=2

Io=2.2A

IoA1

1.43

IoA2

0.69

差值IA(A)

0.025

IoB1

1.46

IoB2

 0.71

差值IB(A)

0.020

IoC1

1.41

IoC2

 0.75

差值IC(A)

0.045

 

6.2测试分析与结论

表6.1的数据结果输出在相电压在有效值Uo为24V±0.2V的范围之内,频率在为50Hz±0.2Hz的范围之内,输出线电流为2A时计算输出线电压的总谐波失真率(THD)平均值为0.47%。

表6.2逆变器效率达到96.48%。

表6.3的数据得出负载调整率为0.23%。

表6.5和表6.6的数据结果经过计算差值绝对值最大值为0.08A,计算得到负载调整率为0.24%。其中Uo1代表输出1A时的输出线电压,Uo2则代表输出3A时的输出线电压。

表6.7和表6.8在调节线电流比值K在(1:2到2:1)范围内自动分配,分别测量出两台逆变器的输出线电流折算值的差值绝对值最大为0.07A。

七、结论和展望

微电网模拟系统的研究有助于弥补分布式发电技术的不足,本设计搭建的实物微电网模拟系统着重于揭示微电网在实际运行中可能遇到的问题,探讨了系统在并网和独立运行状态下的性能,以及逆变器的效能。测试结果证明了本设计采用的控制策略的有效性。

7.1本文的主要工作及结论

(1)本系统实现了微电网模拟系统的稳定工作,描述PID算法的基本原理和选择PID算法的原因。描述了硬件电路的设计和本作品的程序设计。

(2)达成阿里云软件开发平台与蓝牙模块对系统的监控与管理。完成系统远程监控和操作状态变更的功能。

(3)在本系统的设计中,选用STM32G474RET6微控制器单元作为整个电路的控制核心,用电压外环控制和电流内环控制的PID算法,设计了两个三相逆变电路模块的单独运行和并联运行。本系统的直输出直流电压为45V,利用双极性正弦脉宽调制方法得到输出线电压为24.18V,达到两个三相逆变电路模块完美并联运行的功能。本系统全部完成了题目的要求下,还加入了输出检测和运行状态的切换。频率为50.14Hz,总谐波失真不大于2%,单个三相逆变电路模块输出效率达96.48%。两个三相逆变电路模块并联时可以通过按键和蓝牙模块改变输出线电流的值。系统稳定运行性和安全性高,人机交互良好。

 

7.2有待进一步研究的问题

(1) 本系统设计后期可以并入到电网中,这样更贴合实际,并入电网中可以用孤岛检测法进行并网。

(2)本系统的测试结果都是在低线电压和低线电流下运行,对于实际的微电网模拟系统下高线电压和高线电流运行没有验证,后面应改对本系统的输出线电压和线电流设计进一步提高。

(3)本系统的电压采集和电流采集的芯片可以换成更高精度的芯片进行电压和电流的采集,把精度进一步提高,在两个逆变器并联控制电流比例的时候把两个逆变器的电流误差值减少。

八、实物演示

20ead046d7cf41ddbdd9b24eebbcd4c0.png

波形图

fed59bfd08544b63b5cd5864e8e08e0d.png

实物图

dcac97554599413b9666c32778b46dd7.jpeg

实物改进图

这个实物是把电路都集成在一个电路板上,方便了上电操纵​。

​九、核心代码展示

//控制函数
void control(void)
{
	static uint16_t SPWMA1,SPWMB1,SPWMC1,SPWMA2,SPWMB2,SPWMC2;
	static double MD_A1,MD_B1,MD_C1,MD_A2,MD_B2,MD_C2;
	static float Upid_A,Upid_B,Upid_C;
	static float U_Ki = 0.000075,I_Kp = 0.00001,I_Ki = 0.0000026;
	static short err_sum_A,err_sum_B,err_sum_C;
	static short sum_IA,sum_IB,sum_IC,IA2_target,IB2_target,IC2_target;
	static short rms_IA,rms_IB,rms_IC,rms_IA2_target,rms_IB2_target,rms_IC2_target;
	static short err_IA,err_IB,err_IC;
	static int err_IA_sum,err_IB_sum,err_IC_sum;

	
	//欠压保护
	if(VIN > 1000)
		ON_Flag = 1;
	else if(VIN < 100)
		ON_Flag = 0;
	if(ON_Flag==1)//开启输出
	{
		//计算相位
		if(++PhaseC >= 180)  //C相的相位加法器
		{
			PhaseC = 0;
			SYNC_flag = 1;
		}
		PhaseB = PhaseC + 60 ;//计算B相相位
		PhaseA = PhaseC + 120;//计算C相相位
		if(PhaseB >= 180)//B相位限幅
			PhaseB -= 180;
		if(PhaseA >= 180)//C相位限幅
			PhaseA -= 180;
		
		//软启动
		if(u_target < USET)
			u_target ++;
		
		//计算开环调制深度
		MD_A1=MD_B1=MD_C1=MD_A2=MD_B2=MD_C2=(u_target/(0.58*VIN));	//此公式参考电力电子书籍,输出线电压基波有效值计算公式。
		
		
		//PID算法
		if(u_target == USET && 1 == PhaseC)
		{
			//计算误差积分
			err_sum_A += u_target-UA.rms ;
			err_sum_B += u_target-UB.rms ;
			err_sum_C += u_target-UC.rms ;
			
			//误差积分限幅
			if(err_sum_A > 2000) err_sum_A = 2000;
			else if(err_sum_A < -2000) err_sum_A = -2000;
			if(err_sum_B > 2000) err_sum_B = 2000;
			else if(err_sum_B < -2000) err_sum_B = -2000;
			if(err_sum_C > 2000) err_sum_C = 2000;
			else if(err_sum_C < -2000) err_sum_C = -2000;
			
			//积分控制
			Upid_A = U_Ki * err_sum_A;
			Upid_B = U_Ki * err_sum_B;
			Upid_C = U_Ki * err_sum_C;
		}
		
		//计算稳压PID后的调制深度
		MD_A1 += Upid_A;
		MD_B1 += Upid_B;
		MD_C1 += Upid_C;
		MD_A2 += Upid_A;
		MD_B2 += Upid_B;
		MD_C2 += Upid_C;

		
/**************************

	以下是电流比例控制程序

***************************/
		
		//计算总电流
		sum_IA = IA1.ACvalue + IA2.ACvalue ;
		sum_IB = IB1.ACvalue + IB2.ACvalue ;
		sum_IC = IC1.ACvalue + IC2.ACvalue ;
		rms_IA = IA1.rms + IA2.rms;
		rms_IB = IB1.rms + IB2.rms;
		rms_IC = IC1.rms + IC2.rms;


		
		//计算目标电流
		IA2_target = sum_IA * 10 / (10 + Curr_bili);
		IB2_target = sum_IB * 10 / (10 + Curr_bili);
		IC2_target = sum_IC * 10 / (10 + Curr_bili);
		rms_IA2_target = rms_IA * 10 / (10 + Curr_bili);
		rms_IB2_target = rms_IB * 10 / (10 + Curr_bili);
		rms_IC2_target = rms_IC * 10 / (10 + Curr_bili);
		
		
		
		//逆变器并联且非空载状态
		if(flag==2)
		{
			//均流工作,指示灯量
			HAL_GPIO_WritePin(GPIOC, GPIO_PIN_9, GPIO_PIN_RESET);
			HAL_GPIO_WritePin(GPIOC, GPIO_PIN_13, GPIO_PIN_SET);
			//计算电流误差
			err_IA = (PhaseA < 90)? IA2.ACvalue - IA2_target : IA2_target - IA2.ACvalue ;//实际输出电流和目标输出电流的差值
			err_IB = (PhaseB < 90)? IB2.ACvalue - IB2_target : IB2_target - IB2.ACvalue ;
			err_IC = (PhaseC < 90)? IC2.ACvalue - IC2_target : IC2_target - IC2.ACvalue ;
			if(1 == PhaseC)
			{
				err_IA_sum += rms_IA2_target - IA2.rms;
				err_IB_sum += rms_IB2_target - IB2.rms;
				err_IC_sum += rms_IC2_target - IC2.rms;
			
				//积分限幅
				if(err_IA_sum > 10000) err_IA_sum = 10000;
				else if(err_IA_sum < -10000) err_IA_sum = -10000;
				if(err_IB_sum > 10000) err_IB_sum = 10000;
				else if(err_IB_sum < -10000) err_IB_sum = -10000;
				if(err_IC_sum > 10000) err_IC_sum = 10000;
				else if(err_IC_sum < -10000) err_IC_sum = -10000;
			}
				
			//均流PI控制
			MD_A2 += I_Kp * err_IA + err_IA_sum * I_Ki;
			MD_B2 += I_Kp * err_IB + err_IB_sum * I_Ki;
			MD_C2 += I_Kp * err_IC + err_IC_sum * I_Ki;
		
		}
		else 
		{
			//逆变器2没并联或空载,不执行均流PID
			err_IA_sum = err_IB_sum = err_IC_sum = 0;
		}
		
		//调制深度限幅
		if(MD_A1 > 1)MD_A1 = 1;
		if(MD_A2 > 1)MD_A2 = 1;
		if(MD_B1 > 1)MD_B1 = 1;
		if(MD_B2 > 1)MD_B2 = 1;
		if(MD_C1 > 1)MD_C1 = 1;
		if(MD_C2 > 1)MD_C2 = 1;
		
		//计算逆变器的SPWM值
		SPWMA1 = 2834 + MD_A1*spwm[PhaseA];
		SPWMB1 = 2834 + MD_B1*spwm[PhaseB];
		SPWMC1 = 2834 + MD_C1*spwm[PhaseC];
		SPWMA2 = 2834 + MD_A2*spwm[PhaseA];
		SPWMB2 = 2834 + MD_B2*spwm[PhaseB];
		SPWMC2 = 2834 + MD_C2*spwm[PhaseC];
		
		//更新SPWM
		if(flag==2)//逆变器处于并联状态
		{
			HAL_GPIO_WritePin(GPIOB, GPIO_PIN_6, GPIO_PIN_SET);	
			__HAL_TIM_SetCompare(&htim3,TIM_CHANNEL_2,SPWMA1);
		  __HAL_TIM_SetCompare(&htim3,TIM_CHANNEL_3,SPWMB1);
	    __HAL_TIM_SetCompare(&htim3,TIM_CHANNEL_1,SPWMC1);
			
			HAL_GPIO_WritePin(GPIOA, GPIO_PIN_12, GPIO_PIN_SET);
			__HAL_TIM_SetCompare(&htim2,TIM_CHANNEL_2,SPWMA2);
		  __HAL_TIM_SetCompare(&htim2,TIM_CHANNEL_3,SPWMB2);
	    __HAL_TIM_SetCompare(&htim3,TIM_CHANNEL_4,SPWMC2);
		 	HAL_GPIO_WritePin(GPIOC, GPIO_PIN_6, GPIO_PIN_RESET);
		}
		else if(flag==1||flag1==1) //逆变器没并联,关闭逆变器2
		{
		  HAL_GPIO_WritePin(GPIOB, GPIO_PIN_6, GPIO_PIN_SET);	
			__HAL_TIM_SetCompare(&htim3,TIM_CHANNEL_2,SPWMA1);
		  __HAL_TIM_SetCompare(&htim3,TIM_CHANNEL_3,SPWMB1);
	    __HAL_TIM_SetCompare(&htim3,TIM_CHANNEL_1,SPWMC1);
			
			HAL_GPIO_WritePin(GPIOA, GPIO_PIN_12, GPIO_PIN_RESET);
			__HAL_TIM_SetCompare(&htim2,TIM_CHANNEL_2,0);
		  __HAL_TIM_SetCompare(&htim2,TIM_CHANNEL_3,0);
	    __HAL_TIM_SetCompare(&htim3,TIM_CHANNEL_4,0);
			HAL_GPIO_WritePin(GPIOC, GPIO_PIN_13, GPIO_PIN_RESET);
		  HAL_GPIO_WritePin(GPIOC, GPIO_PIN_6, GPIO_PIN_SET);
			HAL_GPIO_WritePin(GPIOC, GPIO_PIN_9, GPIO_PIN_SET);
		}
		
	}
	if(flag==0||ON_Flag == 0)//关闭输出
	{
		
		u_target = err_sum_A = err_sum_B = err_sum_C = 0;
		 HAL_GPIO_WritePin(GPIOB, GPIO_PIN_6, GPIO_PIN_SET);	
			__HAL_TIM_SetCompare(&htim3,TIM_CHANNEL_2,2834);
		  __HAL_TIM_SetCompare(&htim3,TIM_CHANNEL_3,2834);
	    __HAL_TIM_SetCompare(&htim3,TIM_CHANNEL_1,2834);
			
			HAL_GPIO_WritePin(GPIOA, GPIO_PIN_12, GPIO_PIN_RESET);
			__HAL_TIM_SetCompare(&htim2,TIM_CHANNEL_2,0);
		  __HAL_TIM_SetCompare(&htim2,TIM_CHANNEL_3,0);
	    __HAL_TIM_SetCompare(&htim3,TIM_CHANNEL_4,0);
			HAL_GPIO_WritePin(GPIOC, GPIO_PIN_6, GPIO_PIN_SET);
			HAL_GPIO_WritePin(GPIOC, GPIO_PIN_9, GPIO_PIN_SET);
			HAL_GPIO_WritePin(GPIOC, GPIO_PIN_13, GPIO_PIN_SET)		 }	
	//按键调节输出电流比例
	key_ctrl();
}

 

 

  • 27
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值