您的位置:首页技术文栏单片机C51
内容搜索:
阅读内容
背景:#EDF0F5 #FAFBE6 #FFF2E2 #FDE6E0 #F3FFE1 #DAFAF3 #EAEAEF 默认  

过零检测及单片机调压

[日期:2008-02-16 ] [来源:东哥开发网(www.picavr.com) 作者:] [字体: (投递新闻)

首先用PWM(脉宽调制)方法用于可控硅控制是有条件的,即调制频率不能大于市电频率(50Hz),也就是周期不能小于20mS,否则就不能达到调制作用,调制频率超过市电频率时,可控硅即处于连续导通状态而不能达到调压目的。只有调制频率低于市电频率才能起到调压目的,即限制市电的周波通过可控硅的数量而起到调压的目的。因此用该种方法调制的电压周波数一定是小于50HZ,超过了人眼视觉暂留效应,此就是用于调光产生闪烁的原因。该调压方法用在调功或对脉动电压不敏感的用途上尚可。如果采用可控硅调压用在调光上,须采用移相的调制方法,可使光连续可调。采用移相方法就需过零检测作为移相基点。过零检测其实并不难,如果要求调压比不是很高采用简单的方法即可奏效;用一只三极管即可。用单片机进行移相调压控制可以做得很精。

/********************************************************************************/
#i nclude      <pic.h>
__CONFIG (CPD&PROTECT&BOREN&MCLRDIS&PWRTEN&WDTEN&INTIO);
/********************************************************************************/
//
void      init         (void);
/********************************************************************************/
//
                      bit   fg_pw,fg_vs,fg_zq;
volatile    unsigned  char  fg_count;
volatile    unsigned  int   time1_temp,buff;
/********************************************************************************/
#define      powon          GPIO|=0B00110000
#define      powoff         GPIO&=0B00001111
#define      vpp            GPIO2
#define      feedback       GPIO0
/********************************************************************************/
        void      init         (void)
    {   CLRWDT();
        TRISIO=0B11001111;
     WPU=1;
     IOCB=4;               //使能过零信号中断
     VRCON=0;
     PIE1=1;
     OPTION=0;
     INTCON&=7;
     INTCON|=0B10001000;
     CMCON=7;
        T1CON&=1;
     T1CON|=0x10;
 }
/*********************************************************************************/
        void      interrupt  isr_power   (void)
    {   GPIO=GPIO;
           if     (TMR1IF&&TMR1ON)
         { TMR1IF=0;
              if      (fg_pw)
             { if  (!fg_vs)
               {powon;fg_vs=1;TMR1L=112;TMR1H=0xfe;}  //触发宽度400US(256+144)
                else
               {fg_vs=0;
                powoff;       //关闭
                TMR1ON=0;
               }
             }
              else    {powoff;fg_count=0;}
         }
            if    (GPIF)
         {   GPIF=0;
             if (fg_pw)
             {fg_zq=1;
              TMR1H=(time1_temp>>8);
              TMR1L=(time1_temp&0xff);
              //if    (vpp==0)   TMR1H-=3;     //上下沿检测,下沿时间补偿(3*256)US
              TMR1ON=1;
             }
             else
           { if     (vpp)   {TMR1ON=1;TMR1L=TMR1H=0;}  //l-->h
              else
             {time1_temp=(TMR1H<<8|TMR1L);    //h-->l
              TMR1ON=0;
              TMR1L=TMR1H=0;
              time1_temp=~time1_temp;         //同步信号周期检测(时间)
              time1_temp+=1000;               //一个半周时间中缩短1MS开始触发
              buff=time1_temp;
              if   (++fg_count>=4)    fg_pw=1;//连续周期检测4次
             }
           }
         }
     }
/************************************************************************************/
         void        main         (void)
    {     unsigned int i;
          TMR0=0;
          init();
          while   (1)
       {    if     (fg_pw&&fg_zq)
           {  fg_zq=0;
              if     (feedback)  {if(time1_temp<0xffff-1000) time1_temp+=20;}//功率(电压)上限
              else
              {if  (time1_temp>buff)time1_temp-=20;}  //功率(电压)下限
             for  (i=1000;i!=0;i--) {;}
             init();
           }
       }
    }

阅读:
录入:petta

推荐 】 【 打印
本文评论
      全部评论
发表评论


点评: 字数
姓名:
站长推荐