找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 533|回复: 6
打印 上一主题 下一主题
收起左侧

stc8g1k08a单片机改造方波逆变器

[复制链接]
跳转到指定楼层
楼主
#include        "STC8.H"  //  用于普通方波 逆变器的改造, 就只要把 原来输出的TL494的,8,11的脚调起来,分别接入 P33 P55

typedef unsigned int          u16; //45HZ  @30.000MHz
  u16   tt; //1111点计算,为1个周期 22.22ms, ;即是每点20us
typedef unsigned char          u8;

  u16 dg,df;        
u16 a;b;c;d;e;f;g;h;
u8  overA;        
         void Timer0_Isr(void) interrupt 1
{            
                   if(df<=19) //软启信号对,df==19退出软启动。
                                   {
                         dg=190-df*10;
                                   
                                          if(tt==1111)
                                        df++;
                                           if(dg<=10)
                                          dg=0;

                 e=45+dg                 ;                  
              f=510-dg;         
                                             
                  g=600+dg  ;
             h=1067-dg ;

                 a=e;
                 b=f;
                 c=g;
                 d=h;
                                             
                                                 }                                                                                                                     
        /////////////////////////////
                           if(P30==1&&df>18) //电压过高,比如。>245v
                  {  if(tt==1111)                    
                  df--;        //电压下降3---6V
                          
                  }                        
           /////////////////////         
           if(tt==0||(tt>=(a-41)&&tt<=(a-38))||(tt>=(a-33)&&tt<=(a-31))||(tt>=(a-25)&&tt<=(a-24))||(tt>=(a-18)&&tt<=(a-17))||tt==a-10||tt==a-3   )
                   {        P33=0;
                                    // // |0,4-7,12-14,20-21,27-28,35,42
                         P55=0;
           
        }         
if(tt==b+4||tt==b+11||(tt>=(b+18)&&tt<=(b+19))||(tt>=(b+2)&&tt<=(b+26))||(tt>=(b+32)&&tt<=(b+34))||(tt>=(b+39)&&tt<=(b+42)))         //
                   {        P33=0;
                                    //514,521,528-529,535-536,542-544,549-552         
                         P55=0;
           
        }                 
                                   if( tt==556||(tt>=(c-40)&&tt<=(c-37))||(tt>=(c-32)&&tt<=(c-30)) ||(tt>=(c-24)&&tt<=(c-23))||(tt>=(c-17)&&tt<=(c-16))||tt==c-9||tt==c-2  )        
                   {        P33=0;
                                    //         
                         P55=0;         //556 ,560-563,568-570,576-577,583-584,591,598
           
        }        

                           if(tt==d+3||tt==d+10||(tt>=(d+17)&&tt<=(d+18))||(tt>=(d+24)&&tt<=(d+25))||(tt>=(d+31)&&tt<=(d+33))||(tt>=(d+38)&&tt<=(d+41)) )        //
                   {        P33=0;
                                    //1070,1077,1084-1085,1091-1092,1098-1100,1105-1108
                         P55=0;
           
        }
           ////////////////////////////////////////////////////
                        if( (tt>=(a-44)&&tt<=(a-42))||(tt>=(a-37)&&tt<=(a-34))||(tt>=(a-30)&&tt<=(a-26))||(tt>=(a-23)&&tt<=(a-19))||(tt>=(a-16)&&tt<=(a-11))||(tt>=(a-9)&&tt<=(a-4)||(tt>=(a-2)&&tt<=(a-1)))           ////////////////////////////////////////////////////
)        //正半波前斜坡几个脉冲(1-3,8-11,15-19,22-26,29-34,36-41,43-44)
                   {
                P33=0;
                                    //
                  P55=1;
    }

         if(tt>=a&&tt<=b)                                           //中间为220V         45--600
                 {        P33=0;
                                    //
                         P55=1;
           
        }
        
               
          if((tt>=(b+1)&&tt<=(b+3))||(tt>=(b+5)&&tt<=(b+10))||(tt>=(b+12)&&tt<=(b+17))||(tt>=(b+20)&&tt<=(b+24))||(tt>=(b+27)&&tt<=(b+31))||(tt>=(b+35)&&tt<=(b+38))||(tt>=(b+43)&&tt<=(b+45)))        //正半后斜坡

           {        P33=0;
                                    //511-513,515-520,522-527,530-534,537-541,545-548,553-555
                  P55=1;
    }

        //////////////////////////////////////////
               

           if(  (tt>=(c-43)&&tt<=(c-41)) ||(tt>=(c-36)&&tt<=(c-33))||(tt>=(c-29)&&tt<=(c-25))||(tt>=(c-22)&&tt<=(c-18))||(tt>=(c-15)&&tt<=(c-10))||(tt>=(c-8)&&tt<=(c-3))||(tt>=(c-1)&&tt<=(c-0))        )         //负半波前斜坡
                   {        P33=1;
                                    //557-559,564-567,571-575,578-582,,585-590,592-597,599-600         
                P55= 0;
   }        
                     

                 if(tt>=c&&tt<=d)         //中间为220V           600-1067
                 {        P33=1;
                                    //
                         P55=0;
                        
        }
if( (tt>=(d+1)&&tt<=(d+2))||(tt>=(d+4)&&tt<=(d+9))||(tt>=(d+11)&&tt<=(d+16))||(tt>=(d+19)&&tt<=(d+23))||(tt>=(d+26)&&tt<=(d+30))||(tt>=(d+34)&&tt<=(d+37))||(tt>=(d+42)&&tt<=(d+44)) )//负半后斜坡
         {        P33=1;
                                    //1068-1069,1071-1076,1078-1083,1086-1090,1093-1097,1101-1104,1109-1111
                   P55= 0;
     }

   /////////////////////////////////

                tt++;
           if(tt==1111) //一个周期完成
                     tt=0;
  /////////////////////////////

}

void Timer0_Init(void)                //20微秒@30.000MHz
{
        AUXR &= 0x7F;                        //定时器时钟12T模式
        TMOD &= 0xF0;                        //设置定时器模式
        TMOD |= 0x02;                        //设置定时器模式
        TL0 = 0xCE;                                //设置定时初始值
        TH0 = 0xCE;                                //设置定时重载值
        TF0 = 0;                                //清除TF0标志
        TR0 = 1;                                //定时器0开始计时
        ET0 = 1;                                //使能定时器0中断
}

void Delay200ms()                //@30.000MHz
{
        unsigned char data i, j, k;
                 
        i = 23;
        j = 205;
        k = 120;
         
        i = 23;
        j = 205;
        k = 120;
        do
        {
                do
                {
                        while (--k);
                } while (--j);
        } while (--i);
}


void main(void)
{         overA=0;
     P3M0 = (P3M0 & ~0x01) | 0x08; P3M1 = (P3M1 & ~0x08) | 0x01;         //p3.3 推挽输出
                                           // p3.0 高阻输入         如果,电压过高240 则,P30=1;

         //      P3M0 = 0x00; P3M1 = 0x00;  //  准双向口

          //   P5M0 &= ~0x30; P5M1 &= ~0x30;  //P54, P55,   准双向口

        //  p3.1 准双向口, p3.3  p3.0
               
            //  P5M0 |= 0x30; P5M1 &= ~0x30;   //P54, P55,         推挽输出
//  P5M0 = (P5M0 & ~0x10) | 0x20; P5M1 &= ~0x30;  // P55推挽输出,P54准双向口 用于过流
   P5M0 = (P5M0 & ~0x10) | 0x20; P5M1 = (P5M1 & ~0x20) | 0x10; // P55推挽输出,P54高阻输入        

                     for(a=0;a<10;a++)
                  {  Delay200ms()        ;         }         //2秒后开始逆变输出
                        dg=0;
                        df=0;
                        P31=0;
                          P30=0;
                        P33=0;
                          P55=0;
                         tt=0;
                        
                          
         Timer0_Init();         
         
     EA = 1;                //允许全局中断

  while (1)
  {         
                    
        ////////////////////////////////////////////////////////////////
           if( P54==1)    //过流关闭中断。
          {    EA = 0;           //        关定时。
                              ET0 = 0;
                       P33=0;
                         P55=0;         
                             tt=0;
                                dg=0;
                            df=0;
                       Delay200ms()        ;
                      Delay200ms()        ;
                             P54=0;
                  
                        if(        ( overA+1)%2==0)  //第二次过流 ,或者 奇数次 过流,为负半波的 tt计数。
                            tt=555        ;  //tt 负半波开始
                           
                          Timer0_Init();        //
                              EA = 1;         
                   if(        overA>= 254)  //过流超过254次 ,22ms*250=5.5秒,就不再重新启动,人工重启         
                {                   //        关定时。
               //        关定时。                 ET0 = 0;
                  //        关定时。                EA = 0;  
                 PCON |=0x02 ;//停机模式
                 }
                        overA++;                  
  }
          ///////////////////////////////////////
//                  //软启动后, 判断是否电池电压小于设定值,比如9.5v
        /*        if(P30==1)        //P30 两个用途,235v 过压, 和12V电池电压过低。
            {                  /////////////// //
                               if(tt==1100)
                              { if(df>=19)
                                      df++; }        //22ms计数增加
                            //////////////////////////        
                               if(df==700)         //22ms*700=15.4s,连续15.4秒是低电压,就关闭逆变输出
                            {
                                  EA = 0;           //        关定时。
                                      ET0 = 0;
                            P33=0;
                             P55=0;         
                                 tt=0;
                                 dg=0;
                                df=0;
                                        PCON |=0x02 ;//停机模式
                                        }
                                                   

                }//        .0  
                    else
                         df=20; //如果是瞬间 电压下降,就重新从20计数
                                                //df=20是之前,软启动结束值   
                       
                  
                      */                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  
           /////////////////////////////////////////

}
  }

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏2 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:675799 发表于 2024-2-2 08:47 | 只看该作者
用在 最大500w ,实际300w.的方波逆变器, 可以启动 电机 ,风扇,没有明显大的噪音。

51hei图片_20240202084529.jpg (356.05 KB, 下载次数: 40)

51hei图片_20240202084529.jpg
回复

使用道具 举报

板凳
ID:675799 发表于 2024-2-2 08:49 | 只看该作者
可以 驱动 电机,等,没有明显噪音。

55555.jpg (357.67 KB, 下载次数: 40)

55555.jpg
回复

使用道具 举报

地板
ID:68189 发表于 2024-2-2 10:00 | 只看该作者
没有电路原理图,表示不太懂,只说了P33 P35如何接替原电路TL494,没有说明P30 P31 P54  P55是何作用,代码中却使用了。
回复

使用道具 举报

5#
ID:1064915 发表于 2024-2-2 11:10 | 只看该作者
改造原理没有依据
回复

使用道具 举报

6#
ID:675799 发表于 2024-2-2 11:42 | 只看该作者
电路图。

51hei图片_20240202114146.jpg (324.25 KB, 下载次数: 41)

51hei图片_20240202114146.jpg
回复

使用道具 举报

7#
ID:675799 发表于 2024-2-2 13:43 | 只看该作者
wpppmlah 发表于 2024-2-2 10:00
没有电路原理图,表示不太懂,只说了P33 P35如何接替原电路TL494,没有说明P30 P31 P54  P55是何作用,代码 ...

打错 P35 应该P55, ,p54稳压用的, 发现方波逆变有了。如果要接。要加三极管。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表