参考
23年电赛A题
TMS320F280049C 学习笔记27 功率测量正弦分析仪 POWER_MEAS_SINE_ANALYZER
整体思路
- 对于基础部分只需要让逆变器1闭一个电压环做电压源就行。
- 并联运行带负载时逆变器一做电压源先启动提供稳定的电压波形,然后逆变器2做为电流源采集电压锁相,闭电流环。之前我想的是让逆变器12都做电流环,把电流控到4A再扭滑变把电压调到24V。但调试发现,输出的波形很丑,大概是因为没有稳定的参考信号,让逆变器1做电压源就有稳定的参考信号了。是否需要下垂控制(组委会说不能通信)?题目没有要求逆变器12按什么固定的比例分流,所以完全没必要下垂。你就让逆变器2电流闭环到1A,扭滑变到电流4A,逆变器1自然是分到3A电流的。
- 并网部分,逆变器1和2都是电流源,采集电网电压锁相,闭电流环。也是因为没通信,所以我们分流是单独调节每个逆变器的输出电流,来达到固定分流比的。
上面说,逆变器2采逆变器1电压,还是采集电网电压,需要多做采集吗?因为都是并联的,所以采集自己的电压就是逆变器1(电网)的电压。因此,逆变器12都可以做成单独的模块。
电压闭环
电压闭环是直接用算出来的AD值直接PI做的。
电压有效值计算
有效值计算是用的TI POWER_MEAS_SINE_ANALYZER库里的函数算的。
static inline void POWER_MEAS_SINE_ANALYZER_reset(POWER_MEAS_SINE_ANALYZER *v);
static inline void POWER_MEAS_SINE_ANALYZER_config(POWER_MEAS_SINE_ANALYZER *v,
float32_t isrFrequency,
float32_t threshold,
float32_t gridMaxFreq,
float32_t gridMinFreq);
static inline void POWER_MEAS_SINE_ANALYZER_run(POWER_MEAS_SINE_ANALYZER *v);
上面是库里定义的三个函数,要使用首先要建立一个结构体.
POWER_MEAS_SINE_ANALYZER Uo_analyze; //创建一个输出正弦波分析结构体
复位结构体
POWER_MEAS_SINE_ANALYZER_reset(&Uo_analyze);
调用POWER_MEAS_SINE_ANALYZER_config,对结构体初始化
POWER_MEAS_SINE_ANALYZER_config(&Uo_analyze, 20000,0, 100, 5);
20000(20k)是采样频率,0是阈值用于检测输入信号在设定的标幺化阈值之间的穿越,默认情况下,阈值设置为零。100和5确定了采样信号的频率范围.
在定时器中断里(一次采样完成)对电压赋值(这次采到的值),然后送入POWER_MEAS_SINE_ANALYZER_run计算电压有效值
Uo_analyze.v = dtlb_fliter(&vol_dtlb_fliter_Struct, AD_Value[0]); //对原始AD信号做了滤波处理
Uo_analyze.v = Uo_analyze.v - v_offset; //注意要减去偏置,让电压标幺值在-1到1里
POWER_MEAS_SINE_ANALYZER_run(&Uo_analyze);
Uo_analyze.vRms就是计算出来的有效值.
一阶低通滤波器
为了让采集到的电压更加稳定,就使用了低通滤波器。毕竟采的稳定,才能的闭环的稳定。
表达式如下
y
n
=
α
x
n
+
(
1
−
α
)
y
n
−
1
α
=
T
s
T
s
+
1
2
π
f
c
y_{n}=\alpha x_{n}+(1-\alpha)y_{n-1} \\ \alpha = \frac{T_s}{T_s +\frac{1}{2\pi f_c}}
yn=αxn+(1−α)yn−1α=Ts+2πfc1Ts
代码实现如下
typedef struct
{
unsigned short dtlb_Yn_l; //上次滤波值
float dtlb_q; //系数
}dtlb_t;
void dtlb_fliter_init(dtlb_t *dtlb_struct,float q)
{
dtlb_struct->dtlb_q = q;
dtlb_struct->dtlb_Yn_l = 0;
}
/*一阶低通滤波器*/
unsigned short dtlb_fliter(dtlb_t *dtlb_struct, unsigned short xn)
{
unsigned short dtlb_Yn = dtlb_struct->dtlb_q*xn + (1-dtlb_struct->dtlb_q)*dtlb_struct->dtlb_Yn_l;
dtlb_struct->dtlb_Yn_l = dtlb_Yn;
return dtlb_Yn;
}
锁相环
逆变器12输出必须同频同相才行,不然就会炸鸡。所以需要写锁相环。我用的是采集电压过SOGI得到bete轴分量,然后dq变换,把q轴闭环成0.
其实锁相环是为了得到基波的相位也就是wt。具体可以参考我之前写的一篇博客。
基于DQ坐标系的锁相环
电流闭环
电流环是使用的单P。按理使用PR,或者dq解耦控制更稳定。但能力有限,就没使用这些。
注意,这里采集的都是实时的电流电压值.
设定逆变器1电流有效值为1,逆变器2电流有效值为2,并网仿真的波形如上.
上图为并网总电流有效值波形.在0.3s前只有逆变1工作,0.3s后逆变器2以2A有效值并入.
欢迎加入扣扣交流群,群号:807477521