找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 6118|回復(fù): 4
收起左側(cè)

可控硅觸發(fā)單片機(jī)測(cè)試(電路圖+源程序)

[復(fù)制鏈接]
ID:444712 發(fā)表于 2018-12-21 15:19 | 顯示全部樓層 |閱讀模式
可控硅觸發(fā)單片機(jī)測(cè)試
      
       單相通用型可控硅觸發(fā)板是通過(guò)調(diào)整可控硅的導(dǎo)通角來(lái)實(shí)現(xiàn)電氣設(shè)備的電壓電流功率調(diào)整的一種移相型的電力控制器,其核心部件采用國(guó)外生產(chǎn)的高性能、高可靠性的軍品級(jí)可控硅觸發(fā)專(zhuān)用集成電路。輸出觸發(fā)脈沖具有極高的對(duì)稱(chēng)性及穩(wěn)定性,且不隨環(huán)境溫度變化,使用中不需要對(duì)脈沖對(duì)稱(chēng)度及限位進(jìn)行調(diào)整,F(xiàn)場(chǎng)調(diào)試一般不需要示波器即可完成。它可廣泛的應(yīng)用于工業(yè)各領(lǐng)域的電壓電流調(diào)節(jié),適用于電阻性負(fù)載、電感性負(fù)載、變壓器一次側(cè)及各種整流裝置等,
   * 以鎳鉻、鐵鉻鋁、遠(yuǎn)紅外發(fā)熱元件及硅鉬棒、硅碳棒等為加熱元件的溫度控制。
1.jpg 單結(jié)晶體管構(gòu)成晶閘管觸發(fā)電路
* 鹽浴爐、工頻感應(yīng)爐、淬火爐、熔融玻璃的溫度加熱控制。

* 整流變壓器、調(diào)功機(jī)(純電感線(xiàn)圈)、電爐變壓器一次側(cè)、直流電機(jī)控制。

* 單相電焊機(jī)、電阻焊機(jī)、點(diǎn)焊機(jī)控制等各種調(diào)場(chǎng)合。

* 單相風(fēng)機(jī)水泵調(diào)速節(jié)能控制

* 電壓、電流、功率、燈光等無(wú)級(jí)平滑調(diào)節(jié)。

2.jpg 單結(jié)晶體管構(gòu)成晶閘管觸發(fā)電路 波形圖
用單結(jié)晶體管構(gòu)成的晶閘管觸發(fā)電路如圖1 所示,觸發(fā)電路的有關(guān)電壓波形如圖2 所示。與單結(jié)晶體管構(gòu)成弛張振蕩電路相比較,電路的振蕩部分相同,同步是通過(guò)對(duì)電源電路的改進(jìn)實(shí)現(xiàn)的。取自主電路的正弦交流電通過(guò)同步變壓器T 降壓,變?yōu)檩^低的交流電壓,然后經(jīng)二極管整流橋變成脈動(dòng)直流。穩(wěn)壓管VW 和電阻RW的作用是"削波",脈動(dòng)電壓小于穩(wěn)壓管的穩(wěn)壓值時(shí),VW 不導(dǎo)通,其兩端的電壓與整流輸出電壓相等;如果脈動(dòng)電壓大于穩(wěn)壓管的穩(wěn)壓值,將使VW 擊穿,其兩端電壓保持穩(wěn)壓值,整流橋輸出電壓高出穩(wěn)壓值的部分降在電阻RW上。這樣VW 兩端的電壓波形近似與一個(gè)梯形波,用這個(gè)電壓取代弛張振蕩電路中的直流電源,起到同步作用。

由于振蕩電路的電源為梯形波,在主電路正弦波每一半波結(jié)束和開(kāi)始的一段時(shí)間,振蕩電路的電源電壓很小,電路不振蕩,同時(shí)電容電壓釋放到0。當(dāng)電源電壓接近梯形波的頂部時(shí),振蕩電路開(kāi)始工作,當(dāng)電容充電使兩端的電壓達(dá)到單結(jié)晶體管峰點(diǎn)電壓Vp時(shí),單結(jié)晶體管導(dǎo)通電容放電,放電電流流過(guò)R1與被觸發(fā)晶閘管的門(mén)極的并聯(lián)電路形成輸出,為晶閘管提供觸發(fā)脈沖,使晶閘管導(dǎo)通。然后電路進(jìn)入下一振蕩周期,但晶閘管一經(jīng)導(dǎo)通門(mén)極就失去控制作用,一個(gè)電源電壓半周中振蕩電路輸出的脈沖只是第一個(gè)起到觸發(fā)作用,后面的脈沖是無(wú)效的。在主電路電壓的半周接近結(jié)束時(shí),振蕩電路的電源電壓進(jìn)入梯形波的斜邊并迅速下降,振蕩電路停振,同時(shí)電容電壓釋放到0。因此在主電路的每一個(gè)半波中,電容總是從0開(kāi)始充電,保證了觸發(fā)脈沖與主電路電壓的同步。


單片機(jī)源碼:
#include <C:\Keil\C51\INC\REG52.h>  
#include  <C:\Keil\C51\INC\stdlib.h>  

unsigned  int Frequency;
unsigned char Chnnl;
    unsigned long I_Scale , V_Scale , A_Scale ;

    unsigned char code Show_S2[10] ={'0','1','2','3','4','5','6','7','8','9'};
    unsigned char Index1[13];  //
    unsigned char Index3[5];    //
    unsigned char Re_value[5];  // 被取模變量數(shù)組

    unsigned char Hex_H , Hex_L;
unsigned int  Hex_e0;

                sbit Clock_clk  =P1^0 ; // ADC Max186 接口
                sbit CS1_Out   = P1^1 ;
            sbit Dout_Data  = P1^2 ;
                sbit Dout_Input  =P1^3 ;

    sbit Start_Up    = P3^2;  // 過(guò)零同步入口,關(guān)于這個(gè)接口變量是中斷入口
            // 表面上看沒(méi)有必要定意,我在程序中并沒(méi)應(yīng)用,是因?yàn)槲覄h除其內(nèi)容
            // 請(qǐng)記住它有重要意義!!!.如果你應(yīng)用到產(chǎn)品上關(guān)系到你的產(chǎn)品能否成攻
            // 如果你應(yīng)用到一般產(chǎn)品上可以不要其內(nèi)容.

    sbit Control_Out = P3^4;  // 可控硅觸發(fā)控制信號(hào)

                bit Power_OFF  =0;    // 關(guān)閉 PWM 5KV 電源
      bit STOP        = 1 ;

    char bdata Max_Temp _at_ 0x20;

sbit a0 = Max_Temp^0;
sbit a1 = Max_Temp^1;
sbit a2 = Max_Temp^2;
sbit a3 = Max_Temp^3;
sbit a4 = Max_Temp^4;
sbit a5 = Max_Temp^5;
sbit a6 = Max_Temp^6;
sbit a7 = Max_Temp^7;

void New_Main(void);    // 主程序
void Tmod_Step(void);  // 初始化函數(shù)
void Time0_Serve(void); // 可控硅觸發(fā)延時(shí)中斷程序
void Int0_Serve(void);  // 同步過(guò)零觸發(fā)中斷服務(wù)程序
void COM1_Serve(void);  // COM1  中斷函數(shù)
void SBUF_Char(unsigned char Temp);  // 發(fā)送數(shù)據(jù)
void SBUF_Scale(unsigned long Temp01,unsigned long Temp02,unsigned longTemp03); // 發(fā)送檢測(cè)數(shù)據(jù)
void Switch_Gate(void);              // ADC 通道切換函數(shù)
void Model_Data(unsigned int Temp);  // 取模函數(shù)
  int Max_186(unsigned char Temp1);  // ADC Max186 采樣程序

void main () // Main 主程序這樣使用主要防止堆棧溢出
{
    while(STOP)Tmod_Step();
while(1)New_Main();   
}

/****************************** 主程序******************************
* 名稱(chēng): New_Main
* 說(shuō)明: ?
* 功能:
* 調(diào)用: 鍵盤(pán)輸入函數(shù)
* 輸入: 無(wú)
* 返回值:
*********************************************************************/
void New_Main(void)
{
  ES = 1;
  if (Index1[12] == 'A')        // 上位機(jī)命令
  {
    Index1[12] = ' ';
            Switch_Gate();           // ADC 通道切換函數(shù)
    SBUF_Scale (I_Scale , V_Scale , A_Scale);  // 送上位機(jī)計(jì)算處理
  }

  if (Index1[12] == 'B')        // 上位機(jī)命令
  {
    Index1[12] = ' ';
                Hex_e0 = atoi(Index3);// 字幅串?dāng)?shù)組變量轉(zhuǎn)換函數(shù)(該 Hex_e0 變量是可控硅觸發(fā)角)
          // 并接上位機(jī)可控硅觸發(fā)角
    Power_OFF = 1;            // 啟動(dòng)可控硅觸發(fā)      
  }

  if (Index1[12] == 'C')        // 上位機(jī)命令
  {
    Index1[12] = ' ';
    Power_OFF = 0;            // 關(guān)閉可控硅觸發(fā)
  }

return ;
}

/************************ COM1  中斷函數(shù)****************************
* 名稱(chēng): COM1_Serve
* 說(shuō)明: 接收 'A' 'B' 'C' 命令并和上位機(jī)之間全部以 ASCII 方式通信
* 功能: 接收上位機(jī)數(shù)組 Index1[12] 含有命令
* 調(diào)用: 無(wú)
* 輸入: 無(wú)
* 返回值: Index1[] 命令數(shù)組
*********************************************************************/
void COM1_Serve(void) interrupt 4
{
unsigned char j = 0 ;
        RI = 0;
        ES = 0;
    switch (SBUF)
  {
      case 'A':
      for (j = 0 ; j  <= 12 ; j++)
          {
        while(!RI);
                  RI = 0;
              Index1[j] = SBUF;   // 接收數(shù)組 Index1[12] 含有命令
          }
    Index3[0] = Index1[0];    // 接收到字幅串?dāng)?shù)組 Index3[x]
    Index3[1] = Index1[1];
    Index3[2] = Index1[2];
    Index3[3] = Index1[3];
    Index3[4] = Index1[4];
                       break;
  default:;
            break ;
      }
          TI = 0;
          ES = 1;
return ;
}

/********************** 發(fā)送數(shù)據(jù) *************************
* 名稱(chēng): SBUF_Scale(Temp01,Temp02,Temp03)
* 說(shuō)明:
* 功能:
* 調(diào)用: Model_Data(Temp)      取模函數(shù)
* 調(diào)用: SBUF_Char(Temp)  字符發(fā)送函數(shù)
* 輸入:
* 輸入:
* 返回值: 無(wú)
**********************************************************/
void SBUF_Scale(unsigned long Temp01,unsigned long Temp02,unsigned long Temp03)
{
ES = 0;
    SBUF_Char('_');
                 Model_Data(Temp01) ;
        SBUF_Char(Show_S2[Re_value[3]]) ;
        SBUF_Char(Show_S2[Re_value[2]]) ;
      SBUF_Char(Show_S2[Re_value[1]]) ;
    SBUF_Char(Show_S2[Re_value[0]]) ;
                 Model_Data(Temp02) ;
    SBUF_Char('_');
        SBUF_Char(Show_S2[Re_value[3]]) ;
        SBUF_Char(Show_S2[Re_value[2]]) ;
    SBUF_Char(Show_S2[Re_value[1]]) ;
    SBUF_Char(Show_S2[Re_value[0]]) ;
                 Model_Data(Temp03) ;
    SBUF_Char('_');
        SBUF_Char(Show_S2[Re_value[3]]) ;
        SBUF_Char(Show_S2[Re_value[2]]) ;
    SBUF_Char(Show_S2[Re_value[1]]) ;
    SBUF_Char(Show_S2[Re_value[0]]) ;
    SBUF_Char('O');  // OK 是上位機(jī)確定完整收到標(biāo)識(shí)  
    SBUF_Char('K');
ES = 1;
return;
}

/************************ ADC 通道切換函數(shù)***************************
* 名稱(chēng): Switch_Gate()
* 說(shuō)明: 交叉數(shù)據(jù)采樣
* 功能: 通道切換交叉啟動(dòng) ADC
* 調(diào)用: Max_186(Temp1) ADC 返回本次采樣結(jié)果
* 輸入: 無(wú)
* 返回值: I_Scale , V_Scale ,A_Scale
*********************************************************************/
void Switch_Gate(void)
{
    Frequency = 0;
      I_Scale = 0;
      V_Scale = 0;
      A_Scale = 0;
                    Chnnl ='A';

  for (;Frequency  <= 3071;)  // (1024 * 3) - 1 總采樣次數(shù),關(guān)于這個(gè)數(shù)根據(jù)你要求的采樣精度而定
      {      
    switch (Chnnl)
  {
      case 'A':
    I_Scale += Max_186(0x8f); // Max_186 啟動(dòng)通道號(hào) 0
    Chnnl = 'B';
                break;
      case 'B':
    V_Scale += Max_186(0xcf); // Max_186 啟動(dòng)通道號(hào) 1
    Chnnl = 'C';
                break;
      case 'C':
    A_Scale += Max_186(0x9f); // Max_186 啟動(dòng)通道號(hào) 2
    Chnnl = 'A';
                break;
  }
            }

  I_Scale /= 1024.0;  // 計(jì)算 1024 次采樣結(jié)果平均值
  V_Scale /= 1024.0;
  A_Scale /= 1024.0;
return;
}

/*  ******* ADC Max186 采樣程序 ********  */
int Max_186(unsigned char Temp1) // Max186 Temp1 通道號(hào)
{
unsigned char i;
unsigned  int Max_186;
  Max_Temp = Temp1;

    CS1_Out = 0;

Dout_Data = a7;Clock_clk = 1;Clock_clk = 0;
Dout_Data = a6;Clock_clk = 1;Clock_clk = 0;
Dout_Data = a5;Clock_clk = 1;Clock_clk = 0;
Dout_Data = a4;Clock_clk = 1;Clock_clk = 0;
Dout_Data = a3;Clock_clk = 1;Clock_clk = 0;
Dout_Data = a2;Clock_clk = 1;Clock_clk = 0;
Dout_Data = a1;Clock_clk = 1;Clock_clk = 0;
Dout_Data = a0;Clock_clk = 1;Clock_clk = 0;

    for (i = 0 ; i  <= 15 ; i++)
        {
    Clock_clk = 1;
    Clock_clk = 0;
    Max_186  <  <= 1;
    if (Dout_Input) Max_186 |= 0x01;
        }

    CS1_Out = 1;

Frequency ++;  
  Max_186 >  >  = 4;
  return(Max_186);
}

/************************ 發(fā)送數(shù)據(jù) **********************
* 名稱(chēng): SBUF_Char(Temp)
* 說(shuō)明:
* 功能: 發(fā)送數(shù)據(jù)
* 輸入: Temp
* 返回值: 無(wú)
********************************************************/
void SBUF_Char(unsigned char Temp)
{
              SBUF = Temp;
    while(!TI);
            TI=0;
return;
}

/*********************    接同步過(guò)零觸發(fā)中斷服務(wù) *******************
* 名稱(chēng): Int0_Serve
* 說(shuō)明: Hex_e0 變量為過(guò)零角
* 功能: 同步中斷函數(shù)
* 調(diào)用: 無(wú)
* 輸入: 過(guò)零同步入口 Start_Up
* 返回值: 無(wú)
*********************************************************************/
void Int0_Serve(void) interrupt 0
{
              Hex_H = (Hex_e0 / 256);
              Hex_L = (Hex_e0 - (Hex_H *256));
        TH0 = Hex_H;
        TL0 = Hex_L;
  if (Power_OFF == 1)TR0 = 1;
return;
}
/*************************    可控硅觸發(fā)延時(shí)中斷   *****************
* 名稱(chēng): Time2_Serve
* 說(shuō)明:
* 功能: 可控硅觸發(fā)
* 調(diào)用: 無(wú)
* 輸入: 無(wú)
* 返回值:
*********************************************************************/
void Time0_Serve(void) interrupt 1
{
unsigned char Timer;
  TF0 = 0;
  TR0 = 0;
    if (Power_OFF == 1)Control_Out = 0;  // 可控硅觸發(fā)控制信號(hào)
  for (Timer = 0 ; Timer  <= 50 ; Timer++);
    if (Power_OFF == 1)Control_Out = 1;
return;
}

/************************ 取模函數(shù)**********************************
* 名稱(chēng): Model_Data
* 說(shuō)明: 按位取模存入數(shù)組
* 功能: 按位取模
* 調(diào)用: 無(wú)
* 輸入: Temp 被取模變量
* 返回值: Index1[] 數(shù)組
*********************************************************************/
void Model_Data(unsigned int Temp)
{
        Re_value[4] = (Temp / 10000) % 10;  // 得 10000,  萬(wàn)位數(shù)
        Re_value[3] = (Temp / 1000) % 10;  // 得 1000,  千位數(shù)
        Re_value[2] = (Temp / 100) % 10;    // 得 100,  百位數(shù)
        Re_value[1] = (Temp / 10) % 10;    // 得 10,  十位數(shù)
        Re_value[0] = (Temp / 1) % 10;     // 得 1, 個(gè)位數(shù)
return;
}

/* *********  初始化函數(shù) ********* */
void Tmod_Step(void)
{
  STOP = 0;
  PCON = 0x80;
  TMOD = 0x21;
  TCON = 0x00;
  SCON = 0x50;
  TH0  = 0xff;
  TL0  = 0x00;
  TH1  = 0xf9;
  TR1  = 1;
  IP  = 0x12;
  IE  = 0x93;
  return;
}

評(píng)分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎(jiǎng)勵(lì)!

查看全部評(píng)分

回復(fù)

使用道具 舉報(bào)

ID:418295 發(fā)表于 2018-12-22 01:04 來(lái)自觸屏版 | 顯示全部樓層
弄個(gè)壓縮包就好了
回復(fù)

使用道具 舉報(bào)

ID:479061 發(fā)表于 2019-5-14 21:28 | 顯示全部樓層
有電路圖,非常好!
回復(fù)

使用道具 舉報(bào)

ID:144575 發(fā)表于 2020-2-26 22:37 | 顯示全部樓層
學(xué)習(xí)學(xué)習(xí)  謝謝樓主分享
回復(fù)

使用道具 舉報(bào)

ID:614734 發(fā)表于 2021-4-19 19:01 | 顯示全部樓層
樓主有完整電路圖嗎

回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表