原创 三相电相序检测程序

2009-5-17 18:00 10697 2 4 分类: MCU/ 嵌入式

/*
程序功能:实现三相电相序的检测,正向:一路指示
                                反向:一路指示
        缺相:一路指示


软件思路:根据测试波形,其中一路信号为基准,当这路信号发生电平,其余两  路信号的电平正好一高一低,即正序时为高,反序是为低,这样就可以区分出相序!


完成日期:2009年4月29日
*/


 


#include <head.h>
#include <c8051f020.h>


void SYSCLK_Init (void); //配置时钟,检测到晶振稳定了后再运行。
void cross_config(void); //交叉配置,配置系统用到的相应功能到端口。
void IO_init(void); //端口初始化程序,初始化端口


void Delay_10ms(unsigned int data time_m);


void power_fwd(void);
void power_rev(void);
void power_error(void);


sbit Pulse_1=P2^3;
sbit Pulse_2=P2^4;
sbit JDQ_1=P2^5;
sbit JDQ_2=P2^6;
sbit JDQ_3=P2^7;


void main(void)
{
    EA = 0;
 WDTCN = 0xde;            // 关闭看门狗
 WDTCN = 0xad;


   SYSCLK_Init();//配置时钟,检测到晶振稳定了后再运行。
   cross_config();//交叉配置,配置系统用到的相应功能到端口。
   IO_init();//端口初始化程序,初始化端口,方便后面的输入输出。
   //feed_WDT;
 
   while(1)   //此处做脉冲循环检测
 {
 while(Pulse_1)   //检测高电平,这是起始需要的
  {  Delay_10ms(100);  //延时,一个脉冲周期为20MS
             //说明:time_m=2  :正反相序指示闪烁,频率高!
       //  time_m=20 :正反相序指示闪烁,频率有所降低!
       //     time_m=50 :正反相序指示和缺相指示交替闪烁
       //  time_m=100:能正常判别相序


   while(Pulse_1)  //若电平还未变化,说明电源有故障
  {
   power_error();  //电源缺相
   break;
   } 
     while(!Pulse_1)     //等待低电平,说明有一“下跳延”
   {
     if(Pulse_2==0)    //电源正序
      {power_fwd();}
  
     else if(Pulse_2==1)    //电源反序
           {power_rev();}
      
    }   
   break;
  } 
  }
 }


void power_fwd(void)   //电源正序
{
 JDQ_1=1;JDQ_2=0;JDQ_3=0;
}


void power_rev(void)   //电源反序
{
  JDQ_1=0;JDQ_2=0;JDQ_3=1;
}


void power_error(void)   //电源缺相
{
 JDQ_1=0;JDQ_2=1;JDQ_3=0;
}



 void Delay_10ms(unsigned int data time_m)  //每一次循环时间10MS(11.0592MHz)
{
 char temp;
 for(temp=time_m;temp>0;temp--)
 {
 unsigned int data ii,jj;
  for(ii=0;ii<73;ii++)
    {
      for(jj=0;jj<100;jj++)
   {
   _nop_(); 
   _nop_(); 
   _nop_();
   }
  }
 }
}

PARTNER CONTENT

文章评论2条评论)

登录后参与讨论

用户1244364 2009-5-19 09:48

不行吧,这样只能检测到固定的一路缺相(Pulse_1).三相的其他相缺相怎么判断.这个程序检测相序还差不多,缺相就不行了..

tengjingshu_112148725 2009-5-18 18:03

学习了
相关推荐阅读
EE直播间
更多
我要评论
2
2
关闭 站长推荐上一条 /3 下一条