久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1969|回復: 0
打印 上一主題 下一主題
收起左側

單片機可控硅移相調壓程序和電路原理圖 光耦過零檢測

  [復制鏈接]
跳轉到指定樓層
樓主
電路原理圖如下,左邊是由光耦組成的過零檢測電路:



單片機源程序如下(多路可控硅移相調壓)程序注釋很詳細:
  1. #include <STC15F2K60S2.H> //STC15系列單片機頭文件都是這個。
  2. #define uchar unsigned char
  3. #define uint unsigned int

  4. #include <STC15F2K60S2.H>

  5. #define         MAIN_Fosc                24000000UL        //定義主時鐘

  6. uchar num=0; //對可控硅移相角控制
  7. uchar jishuqi=0;  //記錄中斷次數,有軟起動作用,值不電輸出電壓不變

  8. uchar  sec1=0;
  9.   uchar  sec10=0;
  10.    uchar  sec100=0;
  11.           uchar  sec1000=0;


  12. sbit cdqd=P3^3;//啟動充電信號0開1關

  13. sbit fdqd=P3^4;//啟動放電信號0開1關

  14. //sbit cdr=P3^5;//充電停止信號 1關,0開

  15. sbit fd=P3^7;//充電可控硅通斷  0:放電 1:關閉

  16. sbit pwm1=P3^5;//放電可控硅位通  0導通,1關閉
  17. sbit pwm2=P3^6;//放電可控硅位通  0導通,1關閉
  18.   // sbit led=P1^0;        實驗板指示燈
  19.     sbit led=P1^2;
  20.         sbit cf=P1^0;

  21. unsigned char i;
  22. unsigned int ms;

  23. void        delay_ms( ms);
  24. /////////////主程序
  25. void main()
  26. {   cdqd=1;        

  27.         fd=1;
  28.         pwm1=1;
  29.         cf=1;
  30.                
  31.          //初始化
  32.         TMOD=0x01;

  33.   // TL0 = 0xa6;                //設置定時初始值 0.1ms
  34. //         TH0 = 0xFf;                //設置定時初始值
  35. // TL0 = 0x4a;                //設置定時初始值0.2ms
  36. //        TH0 = 0xFf;                //設置定時初始值
  37.   //  TL0 = 0x91;                //設置定時初始值0.4ms
  38. //        TH0 = 0xFe;                //設置定時初始值
  39.    // TL0 = 0x38;                //設置定時初始值0.5ms
  40. //        TH0 = 0xFe;                //設置定時初始值

  41.         
  42.    TL0 = 0x9c;                //設置定時初始值        0.1ms
  43.         TH0 = 0xFf;                //設置定時初始值

  44.    // TL0 = 0x68;                //設置定時初始值        1ms
  45.         //TH0 = 0xFC;                //設置定時初始值

  46.         EA=0;
  47.         ET0=1;
  48.         EX0=1;         
  49.         IT0=0;//必須設外部中斷觸發方式為上升沿下降沿同時觸發。STC最新15系列單片機外部中斷INT0口有上下沿同時觸發功能
  50.         pwm1=1;
  51.         pwm2=1;
  52.         led=1;
  53.           //   EA=1;
  54.         //         TR0=1;
  55.         while(1){  
  56.                     while(cdqd==0){EA=1; }                         //充電啟動
  57.                           //  if(cdqd==0){EA=1;        cf=0; }                         //充電啟動
  58.               jishuqi=0;
  59.                     if(cdqd==1){EA=0; jishuqi=0;  }                          //充電關閉

  60.                           if(fdqd==0){jishuqi=0; fd=0;        for(i=0;i<3;i++); fd=1;        for(i=0;i<3;i++);         }//放電延時2us};

  61.                         //        fd=1;
  62.          // if(cf==0)        {
  63.                    ////////////////////////////////////////
  64.                          //        delay_ms(500);
  65.                                  
  66.                                 led=~led;
  67.                 //                pwm=0;
  68.                                        
  69.                  // delay_ms(500);
  70.                 //                 pwm=1;
  71.                     // led=0;
  72.                
  73.                           // }
  74.                 /////////////////////////////////////////////
  75.                }




  76. }

  77. //延時程序
  78.    void  delay_ms(ms)
  79. {
  80.      unsigned int i;
  81.          do{
  82.               i = 200;
  83.                   while(--i)        ;   //14T per loop
  84.      }while(--ms);
  85. }


  86.           void Timer0Init(void)                //1000微秒@24.000MHz
  87. {
  88.         AUXR |= 0x80;                //定時器時鐘1T模式
  89.         TMOD &= 0xF0;                //設置定時器模式
  90.         TMOD |= 0x01;                //設置定時器模式
  91.         TL0 = 0x40;                //設置定時初始值
  92.         TH0 = 0xA2;                //設置定時初始值
  93.         TF0 = 0;                //清除TF0標志
  94.         TR0 = 1;                //定時器0開始計時
  95. }



  96. //1毫秒定時器中斷程序                  
  97. void t0() interrupt 1
  98. {
  99.         unsigned char i;

  100. TL0=0x9c;
  101. TH0=0xff;                   //1haomiandingshi
  102.   // TL0 = 0xa6;                //設置定時初始值 0.1ms
  103. //         TH0 = 0xFf;                //設置定時初始值
  104. // TL0 = 0x4a;                //設置定時初始值0.2ms
  105. //        TH0 = 0xFf;                //設置定時初始值
  106.   //  TL0 = 0x91;                //設置定時初始值0.4ms
  107. //        TH0 = 0xFe;                //設置定時初始值
  108.    // TL0 = 0x38;                //設置定時初始值0.5ms
  109. //        TH0 = 0xFe;                //設置定時初始值

  110.         
  111. //  TL0 = 0x9c;                //設置定時初始值        0.1ms
  112. //        TH0 = 0xFf;                //設置定時初始值

  113.         // led=~led;
  114. //         pwm=~pwm;
  115.          num++;
  116.          
  117.          // jishuqi=8;                固定電壓輸出               
  118.    //        if(jishuqi>4) {jishuqi=5;  if(cdqd==0){}}  //全導通

  119. //jishuqi=4;
  120.         //第一個半波
  121. if(jishuqi==1){
  122.                         if(num==75)                //延時1毫秒導通,改變num的值即可改變移相觸發時間,即改變負載功率大小。num的范圍:0<num<10
  123.                      {
  124.                         TR0=0;
  125.                         pwm1=0;        //觸發MOC3021導通,即觸發可控硅導通
  126.                         pwm2=0;        //觸發MOC3021導通,即觸發可控硅導通
  127.                         for(i=0;i<2;i++);//延時2us
  128.                         pwm1=1;        //延時2us之后,關掉脈沖輸出,因為可控硅在非過零點情況下觸發信號丟失,會繼續保持導通。
  129.                         pwm2=1;        //觸發MOC3021導通,即觸發可控硅導通
  130.                         num=0;        //清零變量
  131.                // led=~led;        //驗證指示LED
  132.                          //led=0;
  133.                      }         
  134.              }                //



  135.                   if(jishuqi==2){
  136.                         if(num==70)                //延時1毫秒導通,改變num的值即可改變移相觸發時間,即改變負載功率大小。num的范圍:0<num<10
  137.                      {
  138.                         TR0=0;
  139.                         pwm1=0;        //觸發MOC3021導通,即觸發可控硅導通
  140.                                 pwm2=0;        //觸發MOC3021導通,即觸發可控硅導通
  141.                         for(i=0;i<2;i++);//延時2us
  142.                         pwm1=1;        //延時2us之后,關掉脈沖輸出,因為可控硅在非過零點情況下觸發信號丟失,會繼續保持導通。
  143.                         pwm2=1;        //觸發MOC3021導通,即觸發可控硅導通
  144.                         num=0;        //清零變量
  145.          // led=~led;        //驗證指示LED
  146.                          //led=0;
  147.                      }         
  148.              }                //


  149.                  
  150.                   if(jishuqi==3){
  151.                         if(num==65)                //延時1毫秒導通,改變num的值即可改變移相觸發時間,即改變負載功率大小。num的范圍:0<num<10
  152.                      {
  153.                         TR0=0;
  154.                         pwm1=0;        //觸發MOC3021導通,即觸發可控硅導通
  155.                                 pwm2=0;        //觸發MOC3021導通,即觸發可控硅導通
  156.                         for(i=0;i<2;i++);//延時2us
  157.                         pwm1=1;        //延時2us之后,關掉脈沖輸出,因為可控硅在非過零點情況下觸發信號丟失,會繼續保持導通。
  158.                         pwm2=1;        //觸發MOC3021導通,即觸發可控硅導通
  159.                         num=0;        //清零變量
  160.           //led=~led;        //驗證指示LED
  161.                          //led=0;
  162.                      }         
  163.              }                //

  164.                            if(jishuqi==4){
  165.                         if(num==60)                //延時1毫秒導通,改變num的值即可改變移相觸發時間,即改變負載功率大小。num的范圍:0<num<10
  166.                      {
  167.                         TR0=0;
  168.                         pwm1=0;        //觸發MOC3021導通,即觸發可控硅導通
  169.                                 pwm2=0;        //觸發MOC3021導通,即觸發可控硅導通
  170.                         for(i=0;i<2;i++);//延時2us
  171.                         pwm1=1;        //延時2us之后,關掉脈沖輸出,因為可控硅在非過零點情況下觸發信號丟失,會繼續保持導通。
  172.                         pwm2=1;        //觸發MOC3021導通,即觸發可控硅導通
  173.                         num=0;        //清零變量
  174.          // led=~led;        //驗證指示LED
  175.                          //led=0;
  176.                      }         
  177.              }                //


  178.                            if(jishuqi>=5){
  179.                         if(num==50)                //延時1毫秒導通,改變num的值即可改變移相觸發時間,即改變負載功率大小。num的范圍:0<num<10
  180.                      {
  181.                         TR0=0;
  182.                         pwm1=0;        //觸發MOC3021導通,即觸發可控硅導通
  183.                                 pwm2=0;        //觸發MOC3021導通,即觸發可控硅導通
  184.                         for(i=0;i<2;i++);//延時2us
  185.                         pwm1=1;        //延時2us之后,關掉脈沖輸出,因為可控硅在非過零點情況下觸發信號丟失,會繼續保持導通。
  186.                         pwm2=1;        //觸發MOC3021導通,即觸發可控硅導通
  187.                         num=0;        //清零變量
  188.          // led=~led;        //驗證指示LED
  189.                          //led=0;
  190.                      }         
  191.              }                //


  192.                            if(jishuqi==6){
  193.                         if(num==40)                //延時1毫秒導通,改變num的值即可改變移相觸發時間,即改變負載功率大小。num的范圍:0<num<10
  194.                      {
  195.                         TR0=0;
  196.                         pwm1=0;        //觸發MOC3021導通,即觸發可控硅導通
  197.                                 pwm2=0;        //觸發MOC3021導通,即觸發可控硅導通
  198.                         for(i=0;i<2;i++);//延時2us
  199.                         pwm1=1;        //延時2us之后,關掉脈沖輸出,因為可控硅在非過零點情況下觸發信號丟失,會繼續保持導通。
  200.                         pwm2=1;        //觸發MOC3021導通,即觸發可控硅導通
  201.                         num=0;        //清零變量
  202.              //  led=~led;        //驗證指示LED
  203.                          //led=0;
  204.                      }         
  205.              }                //


  206.           if(jishuqi==7){
  207.                         if(num==30)                //延時1毫秒導通,改變num的值即可改變移相觸發時間,即改變負載功率大小。num的范圍:0<num<10
  208.                      {
  209.                         TR0=0;
  210.                         pwm1=0;        //觸發MOC3021導通,即觸發可控硅導通
  211.                                 pwm2=0;        //觸發MOC3021導通,即觸發可控硅導通
  212.                         for(i=0;i<2;i++);//延時2us
  213.                         pwm1=1;        //延時2us之后,關掉脈沖輸出,因為可控硅在非過零點情況下觸發信號丟失,會繼續保持導通。
  214.                         pwm2=1;        //觸發MOC3021導通,即觸發可控硅導通
  215.                         num=0;        //清零變量
  216.          // led=~led;        //驗證指示LED
  217.                          //led=0;
  218.                      }         
  219.              }                //

  220. if(jishuqi==8){
  221.                         if(num==20)                //延時1毫秒導通,改變num的值即可改變移相觸發時間,即改變負載功率大小。num的范圍:0<num<10
  222.                      {
  223.                         TR0=0;
  224.                         pwm1=0;        //觸發MOC3021導通,即觸發可控硅導通
  225.                                 pwm2=0;        //觸發MOC3021導通,即觸發可控硅導通
  226.                         for(i=0;i<2;i++);//延時2us
  227.                         pwm1=1;        //延時2us之后,關掉脈沖輸出,因為可控硅在非過零點情況下觸發信號丟失,會繼續保持導通。
  228.                                 pwm2=1;        //觸發MOC3021導通,即觸發可控硅導通
  229.                         num=0;        //清零變量
  230.          // led=~led;        //驗證指示LED
  231.                          //led=0;
  232.                      }         
  233.              }                //

  234.                  if(jishuqi>=9){
  235.                         if(num==60)                //延時1毫秒導通,改變num的值即可改變移相觸發時間,即改變負載功率大小。num的范圍:0<num<10
  236.                      {
  237.                         TR0=0;
  238.                         pwm1=0;        //觸發MOC3021導通,即觸發可控硅導通
  239.                                 pwm2=0;        //觸發MOC3021導通,即觸發可控硅導通
  240.                         for(i=0;i<2;i++);//延時2us
  241.                         pwm1=1;        //延時2us之后,關掉脈沖輸出,因為可控硅在非過零點情況下觸發信號丟失,會繼續保持導通。
  242.                                 pwm2=1;        //觸發MOC3021導通,即觸發可控硅導通
  243.                         num=0;        //清零變量                                                                         if(jish                        
  244.          // led=~led;        //驗證指示LED
  245.                          //led=0;
  246.                      }         
  247.                       }                //


  248.         

  249.                 //第二個半波                                                
  250.         //                  if(jishuqi>=10){
  251.                 //        if(num==5)                //延時1毫秒導通,改變num的值即可改變移相觸發時間,即改變負載功率大小。num的范圍:0<num<10
  252.                     // {
  253.                 //        TR0=0;
  254.         //                pwm=0;        //觸發MOC3021導通,即觸發可控硅導通
  255.         //                for(i=0;i<2;i++);//延時2us
  256.         //                pwm=1;        //延時2us之后,關掉脈沖輸出,因為可控硅在非過零點情況下觸發信號丟失,會繼續保持導通。
  257.         //                num=0;        //清零變量
  258.           //      led=~led;        //驗證指示LED
  259.                          //led=0;
  260.                    //  }         
  261.            //  }                //
  262.                 //第二個半波                                                                                                  
  263.         
  264.                                    //第10和大于10個半波
  265.                  
  266.                                       //        pwm=1;


  267.                            //if(num==7){led=~led;}
  268.                                    // led=~led;                //驗證指示LED

  269.                                           //10MS計時器
  270.           // if(sec1>=10)        {sec1=0;sec10++;}
  271.                 //  if(sec10>=10)        {sec10=0;sec100++;}
  272.                 //         if(sec100>=10)        {sec100=0;sec1000++;}
  273.                 //                 if(sec1000>=8)        {sec100=0;sec1000++;}



  274. }               


  275.           //中斷程序
  276. void ex0() interrupt 0
  277. {
  278.         IE0=0;
  279.         num=0;
  280. //        jishuqi++;        //軟起過程的半波個數
  281.         TR0=1;          //交流過零點的時候,清楚標志、計數變量并啟動定時器。 /
  282. //        cf=0;
  283. sec1++;
  284.    if(sec1>=10){sec1=0;jishuqi++;}                                        //sec可以改移相角導通時間
  285.         //jishuqi=1;         
  286.          if(jishuqi>=7){jishuqi=7;}                                        //sec可以改移相角導通時間           

  287. }                                 
復制代碼



評分

參與人數 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏9 分享淘帖 頂2 踩
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 91久久综合亚洲鲁鲁五月天 | 久久爱黑人激情av摘花 | 天天躁人人躁人人躁狂躁 | 久久国产精品72免费观看 | 日韩欧美三区 | 亚洲精品99999 | 亚洲精品久久久9婷婷中文字幕 | 亚洲性人人天天夜夜摸 | 久久久久久久久淑女av国产精品 | 亚洲毛片一区二区 | 国产精品亚洲欧美日韩一区在线 | 国产成人精品久久久 | 新超碰97| 麻豆久久久久久久 | 日韩视频中文字幕 | 黄色电影在线免费观看 | 久久精品久久综合 | 久久国产精品视频 | a毛片视频网站 | 韩国久久 | 国产精品一区二区三区四区五区 | 日本高清中文字幕 | 天天艹逼网 | 91视频网| 国产 日韩 欧美 在线 | 综合久| 视频一区在线观看 | 91亚洲一区 | 91精品国产一区二区三区香蕉 | 欧美另类视频在线 | 久久九精品 | 超碰美女在线 | 日韩五月天 | 久久久91| 日韩精品一区二区三区中文在线 | 精品一区二区免费视频 | 精品视频一区二区三区 | 成人欧美一区二区三区色青冈 | 中文字幕 视频一区 | 亚洲视频免费在线观看 | 99国产精品视频免费观看一公开 |