Thông báo

Collapse
No announcement yet.

điều khiển góc mở Thy bắng 89c51

Collapse
X
 
  • Lọc
  • Giờ
  • Show
Clear All
new posts

  • #16
    Nguyên văn bởi han_nang_008 Xem bài viết
    bác nào giúp em đoặn code với, em viết nó cứ loạn cả lên, để điều chỉnh góc mở thì mình điều chỉnh thời gian trễ để xuất xung cho con thy, để điều chỉnh thời gian trễ thì dùng con gì hả bác, chứ ko muốn đổi lại thay dổi giá trị trễ thì ko hay lắm, làm sao dùng con biến trở vặn mà thay đổi đc
    mới cả xuất xung điều khiển 3 con thy loạn hết lên,
    Bác nào có cao kiến giúp em với, thời gian gấp quá rồi các bác ah, em còn 2 ngày nữa thôi.
    giúp em cả phần cứng nữa các bác nhé
    Trong con 8051 có sẵn 2 bộ timer 0 và 1, dùng cái nào cung được. Làm 3
    cái sw: 1 cái mỗi khi nhấn nó công suất ra tăng lên (motor chạy nhanh lên);
    1 cái mỗi khi nhấn, cong suất ra giảm và 1 cái nhấn tắt mở.

    Comment


    • #17
      Theo mình vì mình chỉ sử dụng PIC thôi nên 89xx mình chưa hiểu !
      Nếu bạn mở 3 phase ! 3 SCR dạng gì , hình tia hay hình cầu !
      Nếu hình tia như haidien nói tất nhiên bạn phải có mạch zero-cross detect phase nhưng 3 phase thì phải có 3 port input dectect zero crossing ; như sau 0 do -(U) 60 độ (V) 120 (W) ,
      Thứ 2 89xx ko tạo xung trigger SCR 3 pulse Sawtooth ko nổi nổi đâu ! Vì sau 89XX làm gì có DA ,có nước mở đệm cho PWM cho 3 mạch dao tich thoát dung UjT hoạc PUjt thôi! SCR khó mở lám
      Thứ 2 bạn đả dùng MCU thì ko thể dùng biến trở VR chình để dời phase đâu chỉ dùng 2 port down & up thôi ! trừ khi ban interface thêm ADC808!
      Phải lưu ý tần số !50/60HZ nha !
      VD minh họa nè với PIC16F84 Dimming TRIAC or IGBT Và Source
      Hiểu rồi tự khai triển lên 3 phase



      #define _VERSION_ "V0.0.2"
      /************************************************** **********************
      * phase84.c
      *
      * Simple Phase control using PIC16F84 - 100% C Program.
      * Using even time slicing method for both Triac and IGBT Drive methods.
      * Just change specific #define to choose which method is in use.
      *
      * Output pin for phase ctrl is RA0
      * Zero Cross input is RB0
      * Remainder of PORTB is used for level setting 0 to 255 in incs of 2
      *
      * Output is Active LOW - i.e. it is desigend to pull an LEDs Cathode in an
      * opto-coupler low to turn the output ON.
      *
      * Output Driver Types:
      * Either TRIAC or IGBT control can be used with this software by selecting
      * the appropiate #define command.
      *
      * IGBT Driver:
      * An IGBT driver turns the output ON at the zero cross point and turns
      * the output OFF part way through the cycle - this has really low
      * EMI properties and is one of the few methods allowed for phase control
      * in European countrys (i.e complies with EN55015 EMI standard).
      * Other countries are following suit for example New Zealand and Austrailia
      * are almost there (See AS/NZS 4051 and CISPR15 EMI Standards )
      * This method of dimming is audibly quiet, does not require extra filter
      * componets (If designed properly).It also has a better lamp life and can
      * control a wider range of lamps than the TRIAC method of dimming.
      *
      * TRIAC Driver:
      * A TRIAC driver turns the output OFF at the zero-cross and turns the
      * output ON part way through the cycle - this has high EMI output and needs
      * filter inducors etc. This has been the most popular method of phase
      * control since it was first demonstraited in London in 1962. To make
      * the TRIAC dimmer complient with modern EMI standards it requires
      * carefully designed filter circuits using large Toroid Inductors
      * and mains voltage AC rated capacitors.
      * This is still the simplest method to do, and quite cheap, but not
      * recommended for comercial designs any more.
      * It also has a tendancy to reduce Lamp life, and creates alot of audiable
      * noise in both the inductors and lamps.
      *
      *
      *
      * Processor: PIC16F84 @ 10Mhz
      *
      *
      *
      * Free to use for non-comercial, non-profit personal use only.
      * For Commercial use please contact author (He doesnt Bite) at
      *
      *
      *
      * Started: 10 July 2001 (My 20 something Birthday)
      *
      ************************************************** ***********************
      * Version Information
      ************************************************** ***********************
      * Version 0.0.1 - 10 July 2001
      * Changed Port Pins to match the circuit diagram.
      * Made Input type selectable by #define (Switches or 8bit mode)
      * UNTESTED!!!
      * 98 Words ROM (IGBT Output + Switch Input Version)
      * 99 Words ROM (IGBT Output + 8bit Input Version)
      * 91 Words ROM (TRIAC Output + Switch Input Version)
      * 92 Words ROM (TRIAC Ouptut + 8 bit Input Version)
      ************************************************** ***********************
      * Version 0.0.1 - 10 July 2001
      * Change User Input to an up and DOWN Key on 10ms Interrupt
      * Test as Functional
      * 98 Words ROM
      ************************************************** ***********************
      * Version 0.0.0 - 10 July 2001
      * First Draft of the Project
      * Tested as functional
      * 79 words of ROM
      ************************************************** ***********************/

      #include <pic.h>

      #define ON 0 /* To set Output to ON state */
      #define OFF 1 /* To Set Output to OFF state */

      /*** Select output settings - Choose only one from each ***/

      /** Output Control Method **/
      #define TRIAC /* TRIAC Control Turns ON part way through cycle */
      //#define IGBT /* IGBT Control turnd OFF part way through cycle */


      /** Mains Frequency **/
      //#define HZ60 /* For 60Hz Mains system */
      #define HZ50 /* For 50Hz Maind system */



      /*** Select Input Mode - Switches or 8 BIT ***/
      #define INPUT_SWITCHES /* Use UP/DOWN Switches */
      //#define INPUT_8BIT /* Use 8 Bit I/O port */

      /*********** Reload value for Phase Control ************************
      * ((1/(MainsFreq*2)) / 256) / (1/(Crystal Freq/4)) = TimerCount
      * For 50Hz Mains @ 10Mhz Clock For 60Hz @ 10MHz Clock
      * 1/(50Hz*2) = 10ms 1/(60Hz*2) = 8.3ms
      * 10ms/256 = 39us 8.3ms/256 = 32us
      * 1/(10MHz/4) = 0.4us 1/(10MHz/4) = 0.4us
      * 39us/0.4us = 97 32us/0.4us = 80
      *
      * Subtract Interrupt time and other delays (Guessing at around 5)
      * For 50Hz: 97 - 5 = 93 For 60Hz: 80 - 5 = 75
      *
      * Reload @ 50Hz = -93 or 163 Reload @ 60Hz = -75 or 181
      * (Counter counts up and resets at Zero)
      * NOTE: These allow a MAXIMUM num of intstruction cycles between
      * interrupts of 93 for 50Hz System, or 75 for 60Hz System.
      ************************************************** *****************/

      #ifdef HZ50
      #define TIMER_RELOAD 163
      #endif
      #ifdef HZ60
      #define TIMER_RELOAD 181
      #endif


      /**** I/O Ports ****/
      #ifndef BITNUM
      #define BITNUM(adr, bit) ((unsigned)(&adr)*8+(bit)) /* used for port defs*/
      #endif

      static bit CH_OUT @ BITNUM(PORTA,0); /* Phase Ctrl Output PIN */
      static bit T_CH_OUT @ BITNUM(TRISA,0); /* Tris for above */

      static bit ZERO_INT @ BITNUM(PORTB,0); /* Zero Cross Interrupt PIN*/
      static bit T_ZERO_INT @ BITNUM(TRISB,0); /* Tris for above */

      static bit SW_UP @ BITNUM(PORTA,1); /* Increase Power Switch */
      static bit T_SW_UP @ BITNUM(TRISA,1); /* Tris for above */

      static bit SW_DWN @ BITNUM(PORTA,2); /* Decrease Power Switch */
      static bit T_SW_DWN @ BITNUM(TRISA,2); /* Tris for above */

      #define D_IN PORTB /* Data Input port */
      static bit D_IN_LSB @ BITNUM(PORTA,3); /* LSB For data input PORT */
      static bit T_DIN_LSB @ BITNUM(TRISA,3); /* TRIS for above */



      /**** Global Variables ****/
      unsigned char CH_COUNT; /* Interrupt Counter */
      unsigned char CH_LEVEL; /* Target Level */

      bit INT_10MS; /* 10ms interrupt flag */


      /************************************************** *******************
      * main
      ************************************************** *******************/
      void main(void)
      {
      /***** Set Up OPTION ******
      * RB Pullup = Enabled = 0
      * IntEdge = Rise = 1
      * T0 Src = Internal= 0
      * T0 Edge = L to H = 0
      * Prescale = WDT = 1
      * Prescale = 1:1 = 000
      ***************************/
      OPTION=0b01001000;


      /**** Set up Ports ****/
      TRISA=0xFF; /* Port A as Inputs */
      TRISB=0xFF; /* Port B as Inputs */


      T_CH_OUT=1; /* Output Pin to High Impedance State */
      CH_OUT=0; /* When Tris set to Output, pull LOW */

      T_ZERO_INT=1; /* Zero Cross Interrupt Pin as INPUT */
      ZERO_INT=1;

      SW_UP=1; /* Switch as INPUT */
      T_SW_UP=1;

      SW_DWN=1; /* Switch as INPUT */
      T_SW_DWN=1;



      /**** Initialise Variables ****/
      CH_COUNT=0; /* Set Inital output to 0% */
      CH_LEVEL=0;
      INT_10MS=0; /* Dont check keys till interrupt */

      /**** Set Up Interrupts ****/
      INTCON=0x00; /* Disable All Interrupts and clear flags */

      INTE=1; /* Enable ZeroCross Interrupt */
      /* Note: T0IE enable from Zero Cross Routine */
      GIE=1; /* Enable Global interrupts */


      /**** Main Program Loop ****/
      /* Loop FOREVER */
      while(1)
      {
      /* Check for 10ms interrupt */
      if(INT_10MS)
      {
      INT_10MS=0; /* Clear Flag */

      /* If using UP/Down Switches */
      #ifdef INPUT_SWITCHES
      if(SW_UP==0)CH_LEVEL++; /* Check for INCREASE Switch */
      if(SW_DWN==0)CH_LEVEL--; /* Check for DECREASE Switch */
      #endif

      /* If using 8-bit port */
      #ifdef INPUT_8BIT
      CH_LEVEL=D_IN &0xFE; /* Read in all except LSB */
      if(D_IN_LSB)CH_LEVEL |=0x01; /* Read in LSB */
      #endif

      }
      }
      }
      /************** END OF main *******************/


      /************************************************** *********************
      * PhaseControl
      *
      * This is the Interrupt routine.
      * On Zero Cross it resets the output and reloads the count
      * On Timer it counts down till time to toggle output.
      ************************************************** *********************/
      void interrupt PhaseControl(void)
      {
      /**** Timer OverFlow Interrupt ****/
      if(T0IF)
      {
      TMR0=TIMER_RELOAD; /* Reload the Timer ASAP */
      T0IF=0; /* Clear the Timer Flag */

      if(CH_COUNT==0)
      {
      #ifdef TRIAC /* TRIAC MODE */
      CH_OUT=ON; /* Turn Output ON */
      T_CH_OUT=ON;
      #endif

      #ifdef IGBT /* IGBT MODE */
      T_CH_OUT=OFF; /* Turn Output OFF */
      #endif
      }
      else
      {
      CH_COUNT--; /* Keep Decreasing Till Zero */
      }
      }

      /**** Zero Cross Interrupt ****/
      if(INTF)
      {
      INTF=0; /* Clear Interrupt Flag */
      CH_COUNT=CH_LEVEL; /* Load Level Setting */

      #ifdef TRIAC /* TRIAC MODE */
      T_CH_OUT=OFF; /* Turn Output Off */
      #endif

      #ifdef IGBT /* IGBT MODE */
      if(CH_COUNT !=0)
      {
      CH_OUT=ON; /* Turn Output ON if > 0% setting */
      T_CH_OUT=ON;
      }
      else
      {
      T_CH_OUT=OFF; /* else Ensure it is OFF */
      }
      #endif
      T0IF=1; /* Force Instant entry to Timer 0 Interrupt */
      T0IE=1; /* Ensure that TMR0 Interrupt is enabled */
      INT_10MS=1; /* Indicate 10ms Interrupt Occured */
      }

      }
      /*************** END OF PhaseControl ****************************/
      Attached Files
      Professional Digital Genset & Hydraulic Furukawa ,Tamrock RockDrill
      email:
      forum : gensetvietnam.forumvi.com

      Comment


      • #18
        caniggia nên đọc rõ yêu cầu:
        1- VDK phải là họ MCS-51
        2- Phải là giải quyết được 3 phase.
        Ông bạn của tôi lạc đề rồi, bưng nguyên sơ đồ con PIC qua mà chỉ giải quyết có 1 phase,
        lại nói con 89xx không giải quyết được: "Thứ 2 89xx ko tạo xung trigger SCR 3 pulse Sawtooth ko nổi nổi đâu ! Vì sau 89XX làm gì có DA ,có nước mở đệm cho PWM cho 3 mạch dao tich thoát dung UjT hoạc PUjt thôi! SCR khó mở lám".
        Hình như ông bạn của tôi hiểu hơi quá mức về SCR nên đòi có xung răng cưa để kích.
        Họ MCS-51 làm được nhiều chuyện lắm, không những chuyện đơn giản như ở đây mà còn
        nhiều vấn đề phức tạp hơn nhiều.

        Comment


        • #19
          Vấn đề này rất đơn giản, nhưng các cao thủ đang làm nó rối tinh cả lên
          1- Bài toán này VDK nào không quan trọng
          2- Chẳng cần phải Detect ac-zero của cả ba pha, chỉ cần của một pha là đủ, do việc chỉnh đồng bộ chỉ cần cứ sau 1 chu kỳ chỉnh một lần là được. Sau đó sẽ dùng timer của VDK để tạo ra chùm xung mong muốn, mồi thông cho THY- Cái này các bác chỉ cần xem Điện tử công suất là sẽ biết được quy luật phát xung cho từng loại mạch.
          3- Bài này không có gì khó cho việc đo và điều khiển. Chỉ có 1 điều mà các cao thủ làm thực tế nên quan tâm đó là dùng các ly quang hay dùng biến áp xung để khuếch đại xung mồi cho THY;
          Tui đang bận T7 tui sẽ post phần cứng và phần mềm lên cho nhé
          Hôm nay trời nắng chang chang.
          Mèo con đi học chẳng mang thứ gì.
          Chỉ mang một cái bút chì.
          Và mang một mẩu bánh mì con con.

          Comment


          • #20
            Nguyên văn bởi haidien Xem bài viết
            caniggia nên đọc rõ yêu cầu:
            1- VDK phải là họ MCS-51
            2- Phải là giải quyết được 3 phase.
            Ông bạn của tôi lạc đề rồi, bưng nguyên sơ đồ con PIC qua mà chỉ giải quyết có 1 phase,
            lại nói con 89xx không giải quyết được: "Thứ 2 89xx ko tạo xung trigger SCR 3 pulse Sawtooth ko nổi nổi đâu ! Vì sau 89XX làm gì có DA ,có nước mở đệm cho PWM cho 3 mạch dao tich thoát dung UjT hoạc PUjt thôi! SCR khó mở lám".
            Hình như ông bạn của tôi hiểu hơi quá mức về SCR nên đòi có xung răng cưa để kích.
            Họ MCS-51 làm được nhiều chuyện lắm, không những chuyện đơn giản như ở đây mà còn
            nhiều vấn đề phức tạp hơn nhiều.
            Đó là bạn chưa hiểu về kỹ thuật kích xung SCR rồi ! nếu bạn không dùng sawtooth có sườn xung dốc xuống thì khi mồi bạn sẽ gặp phải hiện tượng nếu RL= tải thuần trở như bóng đèn chẳng hạn điện áp sẽ trào qua SCR trong khoảng thời gian t nhất định rồi mới retifier lại bình thường .
            Nếu bạn dời phase /U out thì không phải giờ kích đạt tới đỉnh ngọn của SCR thì nếu bạn Kích 1 SCR bán kỳ thì với Uin=220V thì Uout sau khi retifier chì đạt cao lắm 60V trong dùng Swth Uout = 80V .Đó là chưa khi bạn dời phase ko thể U = về zero được .
            Thì dùng MSC-51 đi coi nó có đạt tần số kích SCR ko ! chưa kể bị treo ! nhiễu lung tung ! xung out thì phải qua đệm có direct như PIC đâu !
            viết thử 1 xung out rồi cắm vo Osc đi
            Professional Digital Genset & Hydraulic Furukawa ,Tamrock RockDrill
            email:
            forum : gensetvietnam.forumvi.com

            Comment


            • #21
              He, cái này đơn giản thôi, tối post cho, giờ đi học đã.
              Đăng ký Dropbox có ngay 2GB lưu trữ online miễn phí:

              Comment


              • #22
                Từ trước đến nay tôi làm mạch để kích cho SCR và TRIAC luôn luôn sử dụng
                xung kích là xung vuông, có bề rộng khoảng 1mS đối với điện 50Hz, công suất
                ra thay đổi theo đúng yêu cầu từ tối thiểu đến tối đa. Tôi chả cần xung
                răng cưa, mạch hoạt động đúng đối với tải thuần trở lẫn tải là cuộn dây như
                motor.

                Comment


                • #23
                  dùng 555

                  tạo một mạch dao động bằng con 555 có tần số chỉnh được >> 50hz .xung đồng bộ được đưa vào chân số 5 của 555
                  tăng giảm tần số động cơ sẻ thay đổi tốc độ.

                  Comment

                  Về tác giả

                  Collapse

                  han_nang_008 Tìm hiểu thêm về han_nang_008

                  Bài viết mới nhất

                  Collapse

                  Đang tải...
                  X