
2021年B题-三相整流器-PowerOnP03队
简介
本次大赛B题为三相整流电路,本方案采用三相整流电路级联Buck变换器,以STM32F407VET6单片机作为整流器和Buck变换器的控制器,实现三相AC-DC变换,国测测试现场整机效率可达95.9%
简介:本次大赛B题为三相整流电路,本方案采用三相整流电路级联Buck变换器,以STM32F407VET6单片机作为整流器和Buck变换器的控制器,实现三相AC-DC变换,国测测试现场整机效率可达95.9%开源协议
:GPL 3.0
描述

告功能。系统总框图如图所示。


开关管承受电压和导通电流为整流器输出电压和电流,分别为50V 和2A,开关管选取时应留有余量。同时为减小系统的损耗,需综合考虑开关管的开关损耗和通态损耗,最终选择英飞凌公司的IRF540NPbF,其最大耐压100V,可导通7.5A 电流,其导通电阻为44mΩ,输入电容为1960pF,输出电容为250pF。
(1)输入交流侧电感参数计算
系统交流电感的取值不仅影响系统的动静态性能,还会对输入电流波形等其他因素产生影响。增大电感值可以抑制交流侧电流的谐波,但是会影响电流跟踪的快速性。所以合适的电感值应该满足两个条件。首先,应保证电流跟踪的快速性,其次,应保证电感电流的谐波大小在允许范围内。根据以上两个条件,可以计算出交流侧电感的取值范围表达式为:


Buck 的直流输入电压为50V,设定输出电压为36V,经计算占空比D=0.72。Buck 电感计算公式如下:



三相电压Ua、Ub、Uc 经过坐标变换后得到直流分量Ud、Uq,当锁相成功时,Uq 值为0,若Uq 值存在误差,则将Uq 与参考值0 比较,再将产生的误差信号经过PI 调节器得到ωerr ,再通过与电网理论角频率相加,并经过积分器得到相位θ,该相位即为坐标变换所需要的三角函数相位值。最终可以实现整个锁相环的闭环控制。实现过程如图所示。


以下代码为控制中断中的代码,中断频率为20kHz, 首先进行有效值计算用来计算输入电压有效值,做过压保护,然后利用ADC-DMA进行采样,得到输出电压、输入电压及输入电流,并进行dq变换,之后利用PID做控制器,并加入前馈从而实现稳压控制。红色字体为额外说明
time_count++;
sum_u_a+=adc_6ch.nowI1*adc_6ch.nowI1;
if(time_count==400)计算有效值
{
time_count=0;
I_a=sqrt(sum_u_a*0.0025f);//
sum_u_a=0;//
}
if(I_a>1.1f)对参考电压做修正
{
U_out.U_ref = 36.26f;
}
else
{
U_out.U_ref = 36.13f;
}
ADC_Process_6CH(); 获取采样值
U_out.U_now = adc_6ch.nowUo;
U_in.theta = theta;获取锁相环输出值
I_in.theta = theta;
U_in.sin_value = arm_sin_f32(U_in.theta);
U_in.cos_value = arm_cos_f32(U_in.theta);
I_in.sin_value = U_in.sin_value;
I_in.cos_value = U_in.cos_value;
U_in.ab = adc_6ch.nowU1;
U_in.bc = adc_6ch.nowU2;
U_in.ca = - adc_6ch.nowU2 - adc_6ch.nowU1;
//线电压转相电压
U_in.a = 0.3333333f * U_in.ab - 0.333333f * U_in.ca;
U_in.b = 0.3333333f * U_in.bc - 0.333333f * U_in.ab;
U_in.c = 0.3333333f * U_in.ca - 0.333333f * U_in.bc;
abc_to_dqz(U_in.a,U_in.b,U_in.c,U_in.theta,&U_in.d_now,&U_in.q_now,&U_in.z_now);得到电压dq值
I_in.a = - adc_6ch.nowI1;
I_in.b = - adc_6ch.nowI2;
I_in.c = adc_6ch.nowI1 +adc_6ch.nowI2;
abc_to_dqz(I_in.a,I_in.b,I_in.c,I_in.theta,&I_in.d_now,&I_in.q_now,&I_in.z_now);
U_in.d_now = 0.999f*U_in.d_last + 0.001f*U_in.d_now;
U_in.q_now = 0.999f*U_in.q_last + 0.001f*U_in.q_now;
U_in.d_last = U_in.d_now;
U_in.q_last = U_in.q_now;
//Set reference value
setPIDTarget(&PID_U, U_out.U_ref);进行pid闭环
I_in.d_ref = LocPIDCalc(&PID_U,U_out.U_now);
setPIDTarget(&PID_Id, I_in.d_ref);
setPIDTarget(&PID_Iq, I_in.q_ref);
//Perform PID calculation on D and Q, and output the duty cycle under rotating coordinates
I_in.d_duty = - LocPIDCalc(&PID_Id,I_in.d_now);
I_in.q_duty = - LocPIDCalc(&PID_Iq, I_in.q_now);
//Use feedforward to decouple dq and calculate the midpoint voltage of the board bridge
U_in.d_duty = I_in.d_duty + U_in.d_now + 314.15926f*inductance*0.000001f*I_in.q_now;//算出期待的半桥中点电压
U_in.q_duty = I_in.q_duty + U_in.q_now - 314.15926f*inductance*0.000001f*I_in.d_now;加入前馈
arm_sqrt_f32((U_in.d_duty*U_in.d_duty)+(U_in.q_duty*U_in.q_duty),&U_R);
if(sw.lastPWM_on != sw.PWM_on)对pid进行清零
{
sw.lastPWM_on = sw.PWM_on;
PIDClear(&PID_Id);
PIDClear(&PID_Iq);
PIDClear(&PID_U);
}
if(PLL_Locked == 1&& sw.PWM_on == 1)
TIM_CtrlPWMOutputs(TIM1,ENABLE);
else
TIM_CtrlPWMOutputs(TIM1,DISABLE);
if(lastpll != PLL_Locked || sw.PWM_on == 0)对pid进行清零
{
lastpll = PLL_Locked;
PIDClear(&PID_Id);
PIDClear(&PID_Iq);
PIDClear(&PID_U);
}
if(U_out.U_now>40.f||I_a>3.f)//
protect_sta=0;
if(duty<2000)
SVPWMmodulation(U_R,U_out.U_now/0.85f,theta+atanf(U_in.q_duty/U_in.d_duty));采用SVPWM调制
else if(duty>2000)
SVPWMmodulation(U_R,U_out.U_now/0.72f,theta+atanf(U_in.q_duty/U_in.d_duty));
if(U_in.d_now<24.3f && U_in.d_now>22.5f)
duty = 1260;
else duty = 2352;
if(lock == 1 )
duty = 2352;
TIM_SetCompare2(TIM8,duty);
TIM_ClearITPendingBit(TIM1,TIM_IT_Update);
设计图
BOM
ID | Name | Designator | Footprint | Quantity |
---|---|---|---|---|
1 | 0.33uF | C1 | 0 | 1 |
2 | 0.15uF | C2 | 0 | 1 |
3 | 0.1uF | C3 | 0 | 1 |
4 | 10uF | C4 | 0 | 1 |
5 | 2.2uF | C5 | 0 | 1 |

评论