【电路设计】+光伏并网发电模拟装置

2019-07-24 17:56发布

本系统采用两块TIMSP430F169单片机为主控芯片, 一块主机,一块从机,并采用专用的PWM控制芯片UC3525采用前置反馈的第一级DC-DC电路,稳定输入电压Ud,实现最大效率跟踪(MPPT),主机检测输入电压、输入电流、输出电压、输出电流、和反馈波形与标准波形的相位差。从机跟踪标准频率,并发出与标准正弦波同频同相的两路驱动波形。第二级DC-AC电路根据从机发出来的驱动波形实现全桥逆变,输出与标准波形同频同相的正弦波,保证并网安全。根据主机采样来的电压电流信号进行处理,实现过流保护和欠压保护。
QQ截图20141211221157.jpg

1.2总体方案设计 根据题目要求,输入电压是有直流稳压电源提供的60V直流电压,通过一个电压源模拟内阻Rs,在通过DC-DC升压电路,采用UC3525PWM控制芯片,采用前置反馈,使Ud两端的电压稳定在30V,实现最大功率点跟踪(MPPT)功能,MSP430单片机对Ud和输入回路的电流进行AD采样,可以时时检测Ud的变化,如果Ud欠压,就继电器关断主回路,并且再次检测,如果Ud大于24.5V,可以实现输入欠压的自动恢复。题目要求频率,相位跟随,故采用全桥逆变后经过LC滤波,工频变压器输出和反馈。输出交流电压的采样,输出交流电流的采样,输出保护,如果输出电流大于1.3A,输出保护继电器断开,继电器两端的30欧的电阻工作,再次检测输出电流小于0.65A,输出继电器闭合,电路正常工作,从而实现输出过流保护,再通过MSP430单片机采样标准的2V Vpp的正弦信号,通过过零比较器转换为方波,测量出标准正弦信号的频率,在通过软件生成同频率的SPWM波形,从而来实现频率跟踪,在将标准的正弦波信号和变压器反馈电压信号转换为两路方波信号,测量出其相位差,在将相位差转换为对应的点数,从而将反馈电压的相位向左或向右移动相应的点数,从而实现相位跟随。液晶来显示一些被检测的值和关键参数,辅助系统调试。 1.2方案论证与选择        1.2.1主控芯片的选择方案1:用一块DSP做主控芯片,以实现发送SPWM和电压,电流,频率相位检测以及保护电路。DSP的成本略高,但是它的频率高速度快,发送SPWM的正弦点数比较多,输出的波形比较稳定。但是由于检测的信号过多,程序中中断的需求比较多,导致做出来的spwm不太稳定,会有畸变。对程序的要求也比较大,要分析程序与程序之间的干扰。  方案2通过TI的两块MSP430F169为控制芯片,一块用作主机,一块用作从机,主机做电压,电流,相位检测以及保护电路。从机做spwm和频率检测,主机和从机以一组IO直接相连传输相位偏差。在成本方面,两块主控价格略高,但是外围电路需求比较简单,总体成本比低。而且程序之间干扰很少,能做到失真度比较小,频率跟踪稳定。主机还可以做扩展控制。根据以上的分析,根据成本和失真度,我们选用两块MSP430F169做主控芯片。 1.2.2主体电路的选择 方案1:一级DC-AC做主体电路。DC-AC电路有升高负载的作用,虽然可调,但是 调整的范围比较小,做的MPPT不是很稳定。但是只有一级变换效率比较高。 方案2:用一级升压DC-DC做前级,用DC-AC做后级,两级输出。DC-DC做调整MPPT,用前级反馈,实现比较简单。后级用DC-AC输出,输出可调。两级变换效率比较低,但电源的功率做到最大。 根据以上分析,我们选取第2种方案。 QQ截图20141211221308.jpg QQ截图20141211221431.jpg
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
19条回答
flower_huanghua
2019-07-25 21:26
teabottle 发表于 2014-12-15 08:28
有代码分享吗

相位跟踪子程序
/*****************************************************************************
    定时器B中断0  每次进中断改变占空比
******************************************************************************/
#pragma vector= TIMERB0_VECTOR
__interrupt void Time_B0()
{

  n++;
  if(n==N0)
  {   
   n=0;
   i++;
   TBCCR1=tab2;
   if(i==40)
   {
     i=0;
     P5OUT ^=0xff;
   }
  }
}

#pragma vector=TIMERA0_VECTOR
__interrupt void TimerA0(void)
{  

    CCTL0&=~CCIE; // 关闭捕获中断0。
    TACTL |=TACLR;   
    i=35+m;           //设置点位初值,为延迟值+相位差

    CCTL1 |= CCIE; // 开捕获中断1
}
#pragma vector=TIMERA1_VECTOR
__interrupt void Timer_A1(void)
{

  switch( TAIV )
  {
  case  2:  CCTL1 &=~ CCIE; // 关闭捕获中断1。
            old_cap = TACCR1;
            bzfre = old_cap/200;
            old_cap =20000000/old_cap;
            ti[1]=old_cap;
            CCTL0 |= CCIE; // 开启中断0
            break;
  case  4:
            break;
  case 10:  break;
}
}

一周热门 更多>