cnshibo 发表于 2023-8-4 12:26:51

请教各位大牛:双向户外电源如何通过ADC检测AC频率和相位

正在开发双向逆变电源,需要检测输入AC的频率和相位。要做到50Hz,60Hz兼容,大家有什么样的思路?以前做其他产品用过光耦采集过零点,但是抗干扰稳定性不太理想。

yz_altang 发表于 2023-8-4 16:48:42

可以看看自动重合闸的设计思路

gumogumo 发表于 2023-8-14 14:15:04

很早之前用电压电流FFT计算相位差,不知道是否可以用于你说的情况。

hushaoxin 发表于 2023-8-14 14:20:59

如果做逆变器产品,还在考虑这个问题建议趁早放弃,数字锁相环是逆变器的入门环节。当然如果你是做毕业设计那就另说哈。

Stm32Motor 发表于 2023-8-15 08:44:07

数字锁相环,坛里有个仿真的,可以找来看看.搜索PSIM就有.

Stm32Motor 发表于 2023-8-15 08:46:44

这几年搞新能源的很火?看一下搞逆变和BMS工资好高,上次有家给我35/38,没去.我一直干的是自动化,{:lol:}

Stm32Motor 发表于 2023-8-15 08:51:05

我用PSIM仿真过三相的,可以检查出频率和相位,AD采样后,clark->park->PID->积分->反馈到park变换.

Stm32Motor 发表于 2023-8-15 08:55:59

void SimulationStep(
                double t, double delt, double *in, double *out,
               int *pnError, char * szErrorMsg,
               void ** reserved_UserData, int reserved_ThreadIndex, void * reserved_AppPtr)
{
g_nStepCount++;
Time_20KHz++;

if(Time_20KHz==50/clock)//20KHz
    {
         Time_20KHz=0;
         U=in;
         U=U;
         U=U-U;   
         U=U;   

       Ual=U;                                                //U
       Ube=63.6646*(U*0.2+U*0.8);      //U
   
      
      angle=angle_temp;   
      Ud= Ual*cos(angle)+Ube*sin(angle);
      Uq=-Ual*sin(angle)+Ube*cos(angle);


//*********************    ***************************//
   //一阶低通滤波
   Uq_rms=0.1*Uq_rms+0.9*Uq;

    PLC_Error_1 = PLC_Error_0;                                    //            
    PLC_Error_0 =Uq_rms;                                    //      (    )                       


    PLC_PID+=( PLC_Kp *PLC_Error_0-PLC_Ki *PLC_Error_1 );
    //PLC_PID=PLC_PID+PLC_Kp*PLC_Error_0-PLC_Ki*PLC_Error_1;                           
    //PLC_PID=PLC_PID+PLC_kp*(PLC_Error_0-PLC_Error_1)+PLC_ki*PLC_Error_0;

        count++;
        Hz_sum+=PLC_PID;
        angle_temp+=PLC_PID;
    if(angle_temp>PI2)
                angle_temp=0;

        if( count==400)//50us*400=20000us=20ms
        {
                count=0;
                Hz=Hz_sum/400*3180;   //3184W=2*pi*f =>f=W/2Pi=(Hz_sum/400)*20*1000/2Pi20*1000/6.2831853=3184
                Hz_sum=0;
    }

        out=Ud;
        out=Hz;   
        out=angle_temp;

}

Stm32Motor 发表于 2023-8-15 08:58:12

程序很简单,这个是检测是单相锁相环的.没搞懂单相如何转成Ualf和Ubet,就是下面几句.
U=in;
         U=U;
         U=U-U;   
         U=U;   

       Ual=U;                                                //U
       Ube=63.6646*(U*0.2+U*0.8);      //U

cnshibo 发表于 2023-8-17 23:20:05

Stm32Motor 发表于 2023-8-15 08:58
程序很简单,这个是检测是单相锁相环的.没搞懂单相如何转成Ualf和Ubet,就是下面几句.
U=in;
         ...
(引用自9楼)

感谢!
就是时下流行做法 SOGI PLL。

cnshibo 发表于 2023-8-17 23:28:04

Stm32Motor 发表于 2023-8-15 08:58
程序很简单,这个是检测是单相锁相环的.没搞懂单相如何转成Ualf和Ubet,就是下面几句.
U=in;
         ...
(引用自9楼)

alpha 和 beta 是SOGI 的输出,通过一次积分和二次积分获得。

cnshibo 发表于 2023-8-17 23:30:01

gumogumo 发表于 2023-8-14 14:15
很早之前用电压电流FFT计算相位差,不知道是否可以用于你说的情况。
(引用自3楼)

这样其实也可以,但是实时性欠佳。

Stm32Motor 发表于 2023-8-18 07:54:18

那个63.6648怎么来的,还有后面的0.2和0.8

cnshibo 发表于 2023-8-18 12:17:05

Stm32Motor 发表于 2023-8-18 07:54
那个63.6648怎么来的,还有后面的0.2和0.8
(引用自13楼)

这个代码比较清晰,x1,x2 就是alpha,beta vectors

void updateSOGI(SOGI *sogi, double input, double frequency, double samplingTime) {
    double omega = 2.0 * M_PI * frequency;
    double alpha = 1.0 / (1.0 + omega * samplingTime);

    sogi->x1 = alpha * (sogi->x1 + omega * sogi->x2 + input * samplingTime);
    sogi->x2 = alpha * (sogi->x2 - omega * sogi->x1 + input * samplingTime);
}

cnshibo 发表于 2023-8-18 12:17:56

hushaoxin 发表于 2023-8-14 14:20
如果做逆变器产品,还在考虑这个问题建议趁早放弃,数字锁相环是逆变器的入门环节。当然如果你是做毕业设计 ...
(引用自4楼)

感谢指明方向:)
页: [1]
查看完整版本: 请教各位大牛:双向户外电源如何通过ADC检测AC频率和相位