微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > DSP学习交流 > 光伏并网逆变电源(结项)

光伏并网逆变电源(结项)

时间:10-02 整理:3721RD 点击:
      说来话长,转眼间试用已经两个月了,但是讲个道理,中间回家过了个年(一个月),在家的CCS一直安装不成功,所以一直等到返校了才接着试用啊。中间又出了两个星期的差,简直爆炸。
      我的板子用的是创龙的C6655板子,我自己拥有一个C6748的板子。其中的性能确实上升了一个档次,创龙的例程和相关的支持都十分丰富的。但是用的时间较短,,又立下了个Flag。所以我就在做我的毕设的过程中渐渐的摸索。我拟采用板子作为我的组串式光伏并网发电的主控制器。
     我的设计大致分为两部分,分别是前级的DC-DC升压电路,和后级的DC-AC逆变并网电路两部分。并利用前级作为MPPT(最大功率点跟踪算法)和后级的并网双环PID控制算法。但是时间有限,所以我主要做了后级的并网逆变部分,我主要用了一个变压升压、一个全桥逆变和LCL滤波电路。
                                             


    以上是我的整体思路的框图。
    其中后级的升压电路是一个
                                             


   基本已经调试完成了,前级比较棘手的有两个问题,分别是   1、震荡比较大
   2、磁通偏磁的问题
   由于是上个周写的这个报告,当时偏磁的问题比较严重,由于我的前级是一个DC-AC-DC的结构,利用变压器做一个交流升压处理,在前面我也用了PID控制来进行一个偏磁的处理,就基本解决了。
   由于涉及毕业的问题,所以我的原理图在这里就不一一展示了哈,可以多交流噻。   重点的后级我准备先单环并网,我使用的spwm信号如图所示
                                             


                                             


  对于电网端的反馈 我采用的是过零比较器搭建电路的方式的得到电网的实时相位信息,然后调节相关的输出spwm的相关占空比,得到其中的采样图 如下,
                                                


    并且在没有并网的情况下,我已经成功的输出正弦波,
                                                


                                                


  由于原来没有PID控制的经验,所以踩在巨人的肩膀上,我今天在网上找到了一个PID控制电机的相关的代码,并在它的基础上加以更改,准备明天再看看,估计还要好长时间才可以实现啊(我已经做好了开炸的准备)。
  相关的控制思路:
                                                     


   代码在下边。

  1. //装载初始参数
  2. void PID_init(struct _pid *Current)
  3. {
  4.         Current->SetSpeed=0.0;
  5.         Current->ActualSpeed=0.0;
  6.         Current->err=0.0;
  7.         Current->err_last=0.0;
  8.         Current->voltage=0.0;
  9.         Current->integral=0.0;
  10.         Current->Kp=0.15;
  11.         Current->Ki=80;
  12.         Current->Kp=0.0;
  13. }
  14. //单步更新函数 输入为误差  输出为调制比
  15. //在PID调节过程中 误差小增大积分函数消除静差
  16. //                误差大减小积分函数防止饱和
  17. double PID_realize(struct _pid *Current,double It)
  18. {
  19.         int index=0;
  20.         Current->SetSpeed=It;
  21.         Current->err=Current->SetSpeed-Current->ActualSpeed;
  22.         if(abs(pid.err)>500)
  23.                 index=0;
  24.         else
  25.                 index=1;
  26.         Current->integral+=Current->err*index;
  27.         Current->voltage=Current->Kp*Current->err+Current->Ki*Current->integral
  28.                         +Current->Kd*((Current->err*index)-Current->err_last);
  29.         Current->err_last=index*Current->err;
  30.         //pid.ActualSpeed=pid.voltage*1.0;
  31.         return Current->voltage;
  32. }

  33. //此函数调用前必须调用 加载SIN值
  34. //加载 新的参数值 加载至PWM端
  35. double Iref(unsigned int i,double Iref,double Itest,double Ipower)
  36. {
  37.         //对变量实时化
  38.         if(i<=100)
  39.                 It=(double)G2*Flag00A[i]*Iref;
  40.         else
  41.                 It=(double)G2*Flag00B[i]*Iref;
  42.         pid.ActualSpeed=Itest;  //ad读回来的是实时参数
  43.         return (Ipower+PID_realize(&pid,It))/(double)450.0;//前馈控制 归一化处理
  44. }

复制代码


     总结一下,我的使用总体来说是很短暂的,主要是时间比较紧迫,再加上本人的水平不高,所以熟悉了很长的时间,并且创龙的很多的例程在运行的时候都出现了一些的问题,虽然自己摸索着解决了很多,也学习了很多,但是还是浪费了一点时间。
    本事准备用SYSBIOS的,但是其实还是不太明白,尤其是NDK方面,真的希望创龙可以出一些相关的视频。
    板子现在还在手里,如果有机会的话,可能还会再做几篇分享,,谢谢。   
    最后很愉快能参加这次的试用活动,谢谢发烧友 谢谢创龙  谢谢各种工。

看起来好像有点厉害哦!

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top