zoukankan      html  css  js  c++  java
  • Boost PFC 调试与软件程序容错性的思考

             最近做了一个数字电源,本意是使用单片机控制PFC。这个问题的现象引起我对软件程序容错性的思考。


    软件的容错性:当硬件故障的时候,程序不跑飞的能力。

              目前就有这样的一个案例,它的逻辑代码是这样的:

              通过检测输入电压的过零点,然后每检测到一个过零点,计数值重置为零,否则再定时器中断里面递增

              硬件电路:

              分析:

        交流电是50Hz,也就是100个过零点。每两个周期是10ms。受电网供电质量与硬件电路的延时的影响,送到单片机的过零检测波形会有一点点的不对称。

                  理想情况下,Vac2_AD处的波形应该是占空比为50%的方波。

                  现实情况下,受电网供电质量的影响、Q5的影响,Vac2_AD的波形不是50%。

             程序实现:

    //Calculate the input current reference
    for (i = 0 ; i < 1000; i++){
          I_ref[i] = (32767*sin(pi/1000.0f*i)+0.5f);
    }
    //每次检测到Vac2_AD波形的边沿,计数值Count置零。
    void __attribute__ ((__interrupt__,__no_auto_psv__)) _CNInterrupt(void){
        IFS1bits.CNIF = 0; //Clear the interrupt flag
        Count = 0;
        ADCPC0bits.SWTRG1 = 1;
    }
    //定时器10us,递增一次。
    Count++;
    IL1_Err = I_ref[Count] - IL1_Real;

             上面程序是在理想的情况下,Count是在小于1000的情况下,每次计数到1000,也就是10ms,外部刚好检测到过零点,Count又被置

             那么,当检测外部过零点延时到来的时候,Count>1000,那么数组溢出,I_ref[1500]是一个随机数,程序跑

              下面的程序将Count取余,并且在20ms,才置零一次。提高了程序的容错性。         

    //Calculate the input current reference
    for (i = 0 ; i < 1000; i++){
          I_ref[i] = (32767*sin(pi/1000.0f*i)+0.5f);
    }
    //每次检测到Vac2_AD波形的边沿,计数值Count置零。
    void __attribute__ ((__interrupt__,__no_auto_psv__)) _CNInterrupt(void){
        IFS1bits.CNIF = 0; //Clear the interrupt flag
        if(Count > 1980)Count = 0;
        ADCPC0bits.SWTRG1 = 1;
    }
    //定时器10us,递增一次。
    Count++;
    IL1_Err = I_ref[Count%1000] - IL1_Real;

              实验验证:

                     分别将上述代码,在 Boost PFC程序中验证。

                     代码一:存在输入电流正负半周不对称的情况。(负半周期的I_ref不正常,错位溢出

                     代码二:正负半周对称。


             数字电源,控制不仅仅要考虑到程序逻辑的正确性,程序的容错性也是在设计需要考虑的问题。 

  • 相关阅读:
    新基建的福音:智慧楼宇可视化监控系统引领智能化新时代
    基于 HTML5 和 WebGL 的地铁站 3D 可视化系统
    基于 HTML5 WebGL 的医疗物流系统
    基于 HTML5 的 PID-进料系统可视化界面
    基于 HTML5 Canvas 的可交互旋钮组件
    基于 HTML5 WebGL 的民航客机飞行监控系统
    基于 HTML5 Canvas 的元素周期表展示
    基于 HTML5 换热站可视化应用
    基于 HTML5 WebGL 的 3D 智慧隧道漫游巡检
    【python 爬虫】fake-useragent Maximum amount of retries reached解决方案
  • 原文地址:https://www.cnblogs.com/cjyc/p/15405352.html
Copyright © 2011-2022 走看看