Thông báo

Collapse
No announcement yet.

Sine wave Inverter 12VDC-220VAC sử dụng PWM của PIC

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

  • Sine wave Inverter 12VDC-220VAC sử dụng PWM của PIC

    Hi,
    Mấy ngày lục lọi trên diễn đàn với mong muốn tìm được nhiều thông tin bổ ích để làm bộ inverter tui tìm được tài liệu từ link này: http://www.dientuvietnam.net/forums/...ad.php?t=25476. Đây là inverter sử dụng VĐK 89C2051 tui thấy cũng khá hay và khá hiệu quả. Tuy nhiên tui đang nghiên cứu làm việc với VĐK PIC nên tui dùng PIC để làm vả lại PIC có tích hợp sẵn PWM nên sẽ đơn giản trong vấn đề coding hơn. Mặc dù dùng phương pháp sine đa bậc theo dì Lan Hương thì có lẽ hiệu quả cao nhất nhưng để bắt đầu tui chọn cái đơn giản là làm phương pháp PWM có hiệu suất cũng tương đối. Trước khi bắt tay vào làm thật, tui phải test trên Protues xem thế nào rồi phải post lên đây cho các bác đánh giá, kiểm tra lỗi trước, khi mọi thứ tương đối tốt, tui sẽ tiến hành ráp thử vì từ xưa đến giờ tui chưa đụng đến điện tử công suất lần nào nên chắc sẽ có nhiều thiếu sót.
    Ý tưởng thực hiện:
    Chúng ta hình dung sóng sine ra sẽ được ghép bởi nhiều đoạn có mức điện áp khác nhau, nếu sóng sine được ghép càng nhiều đoạn thì càng tốt. Ở trong mạch của tui thì tui chọn mỗi bán kỳ được ghép bằng 40 đoạn, vậy cả chu kỳ là 80 đoạn (không biết nên chọn số lẽ hay chẵn cho nó đúng hàm sine vì tui học toán hơi bị chuối, tui chọn 80 là vì nó khớp với tần số PWM để tính toán cho dễ). Mỗi đoạn có % duty PWM khác nhau sẽ tạo ra những mức điện áp khác nhau. Các bác kiểm chứng giùm xem tui hiểu thế này có đúng không: nếu duty = 50% thì điện áp trung bình sẽ bằng 50% biên độ của PWM, duty = 30% thì điện áp trung bình = 30% biên độ PWM. Cái này học lâu rồi mà không dùng giờ không còn nhớ lắm. Nếu không đúng như vậy thì các bác cho xin cái công thức tính rồi tui lập trình lại cho đúng. OK, khi đã chọn được số đoạn cần ghép thì ta tiến hành tính toán giá trị điện áp của mỗi đoạn hay cụ thể là tính %duty của mỗi đoạn.
    Cách tính đơn giản như sau: Lấy Excel ra, tính toán sine của 40 đoạn tương ứng với bước nhảy góc là pi/40 bắt đầu từ 0 rad. Cái này chỉ cần nhập công thức vào rồi kéo cái rẹc là xong bảng dữ liệu để tạo sóng sine.
    Nếu các bác sử dụng bộ PWM1 của PIC thì nó sẽ dùng Timer2 để tạo PWM và chu kỳ ngắt của Timer2 chính là chu kỳ của PWM. Ở trong mạch của tui, tui chọn tần số PWM là 20KHz do vậy mỗi đoạn sine sẽ bằng 5 chu kỳ PWM. Như vậy cứ 5 lần ngắt Timer2 ta sẽ thay đổi duty của PWM tương ứng với từng bước trong bảng dữ liệu tạo sóng sine.
    Chúng ta sẽ lập trình để bán kỳ này sẽ đưa xung PWM ra chân này, bán kỳ kia đưa xung PWM ra chân kia để kích cho 2 FET điều khiển biến áp xung.
    Một số phần bổ trợ như nút Start/Stop, cắt khi quá tải... không cần đề cập
    Biến áp xung tui dự định dùng lõi của biến áp trong bộ nguồn máy tính để quấn.
    Tui phác thảo sơ ý tưởng như vậy cho các bác hình dung, bài sau sẽ có hình ảnh mạch cũng như các kết quả mô phỏng Protues.
    Thân ái.
    Last edited by Hard; 20-04-2010, 17:22. Lý do: Nhầm số
    Đường đến những ngày vinh quang không còn xa
    Con đường chúng ta... chúng ta đã chọn.

  • #2
    Hi,
    Dạng sóng sau khi qua lọc (lọc thử xem có sine không) của 2 kênh PWM.
    Đường đến những ngày vinh quang không còn xa
    Con đường chúng ta... chúng ta đã chọn.

    Comment


    • #3
      Hi,
      Tiếp theo là sơ đồ mạch, chưa chính xác các thông số và còn thiếu vài linh kiện vì mục đích là để test, phần công suất được copy từ mạch ở link trên.

      Thân ái.
      Đường đến những ngày vinh quang không còn xa
      Con đường chúng ta... chúng ta đã chọn.

      Comment


      • #4
        Code:
        Code:
        #include "D:\WORK_2010\Inverter\PIC_Inverter\Inverter.h"
        #define CLOCKS        249
        
        //Sine wave by 40 segments per half of cycle
        unsigned int const SineWave[40] = 
                        {
                            0,        20,    39,    58,    77,    96,    113,    131,    147,    162,
                            177,    190,    202,    213,    223,    231,    238,    243,    247,    249,
                            250,    249,    247,    243,    238,    231,    223,    213,    202,    190,
                            177,    162,    147,    131,    113,    96,    77,    58,    39,    20
                        };
        volatile unsigned int UpperDuty, LowerDuty;
        #byte UpperDuty = 0x15    // CCP1
        #byte LowerDuty = 0x1B    // CCP2
        volatile unsigned char Counter, Seg;
        volatile int1 Negative;
        volatile int1 Run;
        
        #int_EXT
        void  ext_isr(void)
        {
            Run ^= 1;
            if(!Run)
            {
                UpperDuty = 0;    // Set duty = 0
                LowerDuty = 0;
                Seg = 0;
            }
        }
        
        #int_TIMER2
        void timer2_isr(void)
        {
            if(++Counter >= 5)    //5 PWM per Sine wave segment
            {        
                UpperDuty = 0;
                LowerDuty = 0;
                if(Run)
                {
                    if(Negative)
                    {
                        LowerDuty = SineWave[Seg];    // Set duty
                        //UpperDuty = 0;
                    }
                    else
                    {
                        UpperDuty = SineWave[Seg];
                        //LowerDuty = 0;
                    }
                }
                if(Seg == 0)
                    Negative ^= 1;        
                if(++Seg > 39)
                    Seg = 0;    // Reset Seg
                Counter = 0;    // Reset Counter
            }
        }
        void main()
        {
            setup_adc_ports(NO_ANALOGS);
           setup_adc(ADC_OFF);
           setup_psp(PSP_DISABLED);
           setup_spi(SPI_SS_DISABLED);
           setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
           setup_ccp1(CCP_PWM);    // Use for upper half
           setup_ccp2(CCP_PWM);    // Use for lower half
           setup_timer_2(T2_DIV_BY_1,CLOCKS,1);
           setup_comparator(NC_NC_NC_NC);
           setup_vref(FALSE);
           enable_interrupts(INT_EXT);
           ext_int_edge(0, H_TO_L );   // Sets up EXT
           enable_interrupts(INT_TIMER2);
           enable_interrupts(GLOBAL);
        
           // TODO: USER CODE!!
            Counter = 0;
            Seg = 0;
            Negative = FALSE;
            Run = FALSE;
            set_tris_c(0B10000000);
            while(1)
            {
            }
        }
        Đường đến những ngày vinh quang không còn xa
        Con đường chúng ta... chúng ta đã chọn.

        Comment


        • #5
          Hi,
          Một vài điểm nhỏ xin các bác tư vấn giùm:
          - Để tạo ra mức điện áp đỉnh của sóng sin có nên cho duty của PWM là 100% luôn không hay là nhỏ hơn? Nếu để 100% thì sẽ có 5 xung PWM liền nhau và ở mức cao trong khoảng thời gian khá dài: 5*50uS, không biết biến áp có vấn đề gì không. Nếu chọn nhỏ hơn ví dụ duty = 90% thì các xung sẽ tách rời nhau nhưng lúc này điện áp sơ cấp chỉ là 90%*12V mà thôi, có nghĩa là phía thứ cấp phải quấn nhiều vòng hơn một chút. Theo tui cảm giác thì để 90% cái biến áp có thể hoạt động tốt hơn.
          - Một số inverter hiện nay thường có thêm chức năng gì ngoài bảo vệ quá tải/ngắn mạch, báo hiệu mức bình ắc quy? Tui nghĩ con PIC còn làm được vô vàn thứ nữa nhưng chưa biết là cái gì quan trọng liên quan đến inverter.
          Thân ái.
          Đường đến những ngày vinh quang không còn xa
          Con đường chúng ta... chúng ta đã chọn.

          Comment


          • #6
            Chỉ cần đảm bảo dạng sine khi lắp tải động cơ quá ổn rồi, trên thị trường có nhiều loại ra sine nhưng cho động cơ vào thì dạng sóng bị loằng ngoằng , chẳng ra hình gì nữa, người ta hay gọi " sine giả" . Bạn có thể làm cho dạng sine luôn ổn định với bất kì tải nào thì quá tuyệt vời, PIC chủ yếu PWM liên tục thế cũng đủ mệt rồi, cũng không cần cho nó làm thêm việc gì nữa.Thêm phần ổn dòng nạp acquy nữa là thành cái UPS ngon. Đấy là ý kiến của mình .
            Cung cấp Oscilocope , Inverter , Switching , DC power supply , AC millivolt meter ....

            Comment


            • #7
              Hi,
              Cái mạch này tui học hỏi ý tưởng từ mạch converter version 2.0 của Lan Hương nhưng bộ phận tạo PWM tui dùng PIC thay vì dùng các linh kiện analog. Nếu mạch của Lan Hương đã hoạt động tốt thì tui cũng hi vọng cái này cũng dùng được. Mọi thứ vẫn đang nằm ở lý thuyết vì tui chưa có điều kiện để ráp thử, cái mạch này cũng đơn giản có thể ráp trên board đục lỗ cũng được vì quá ít linh kiện, có điều là tui chưa có tiền với lại ở Huế mua mấy con FET này hơi khó nên phải đợi gửi mua từ Sài Gòn.
              Các bác cho ý kiến xem nên phát hiện sụt áp của ắc quy bằng cách nào sau đây: Dùng ADC của PIC để đo và cảnh báo. Cách này thì sẽ cần ít linh kiện nên việc ráp mạch đơn giản nhưng phải đầu tư cho coding một chút để mạch chạy thật tối ưu. Cách thứ 2 là ráp mạch so sánh mức điện áp rồi đưa tín hiệu ra vào ngay vị trí nút nhấn Start/Stop và Protector luôn. Ưu điểm của cách này là không cần code thêm dòng nào cả nhưng nhược điểm là phải ráp thêm mạch và cân chỉnh để đạt độ chính xác.
              Thân ái.
              Đường đến những ngày vinh quang không còn xa
              Con đường chúng ta... chúng ta đã chọn.

              Comment


              • #8
                Nguyên văn bởi Hard Xem bài viết
                Hi,
                Cái mạch này tui học hỏi ý tưởng từ mạch converter version 2.0 của Lan Hương nhưng bộ phận tạo PWM tui dùng PIC thay vì dùng các linh kiện analog. Nếu mạch của Lan Hương đã hoạt động tốt thì tui cũng hi vọng cái này cũng dùng được. Mọi thứ vẫn đang nằm ở lý thuyết vì tui chưa có điều kiện để ráp thử, cái mạch này cũng đơn giản có thể ráp trên board đục lỗ cũng được vì quá ít linh kiện, có điều là tui chưa có tiền với lại ở Huế mua mấy con FET này hơi khó nên phải đợi gửi mua từ Sài Gòn.
                Các bác cho ý kiến xem nên phát hiện sụt áp của ắc quy bằng cách nào sau đây: Dùng ADC của PIC để đo và cảnh báo. Cách này thì sẽ cần ít linh kiện nên việc ráp mạch đơn giản nhưng phải đầu tư cho coding một chút để mạch chạy thật tối ưu. Cách thứ 2 là ráp mạch so sánh mức điện áp rồi đưa tín hiệu ra vào ngay vị trí nút nhấn Start/Stop và Protector luôn. Ưu điểm của cách này là không cần code thêm dòng nào cả nhưng nhược điểm là phải ráp thêm mạch và cân chỉnh để đạt độ chính xác.
                Thân ái.
                trên lý thuyết thì thấy ngon đấy... chỉ e lắp vào nó lại không ngon... còn đo điện áp thì làm hẳn 1 con pic như 12f683... hoặc riêng 1 con lớn cho ra màn hình các thông số.

                Comment


                • #9
                  Nguyên văn bởi phuchiepjsc Xem bài viết
                  trên lý thuyết thì thấy ngon đấy... chỉ e lắp vào nó lại không ngon... còn đo điện áp thì làm hẳn 1 con pic như 12f683... hoặc riêng 1 con lớn cho ra màn hình các thông số.
                  Hi,
                  Cái mạch này có chổ nào không ổn bác chỉ giùm luôn đi, tui không có tiền để mua linh kiện ráp thử mà bác còn nỡ để tui đóng học phí nữa xao??
                  Vấn đề hiển thị này nọ thì tui không đặt nặng lắm vì cứ tiêu chí tiết kiệm năng lượng hàng đầu với lại cái này cũng chẳng cần hiển thị gì nhiều cũng hiểu được tình trạng của nó.
                  Thân ái.
                  Đường đến những ngày vinh quang không còn xa
                  Con đường chúng ta... chúng ta đã chọn.

                  Comment


                  • #10
                    Hình như mạch này là một sản phẩm của sự hoang tưởng nên không thấy ai tham gia thảo luận gì cả. Nhưng mà ai đã ghé vào đây rồi thì xin chỉ giúp vài kinh nghiệm quấn biến áp xung cho tui với. Tui đang kẹt chổ quấn biến áp, nếu quấn xong cái này thì mới biết độ hoang tưởng như thế nào và hậu quả của nó ra sao. Mọi thứ vẫn đang nằm ở lý thuyết nên chưa biết thực hư thế nào. Đây là lần đầu tiên tui lao vào mảng công suất nên có thể chấp nhận đóng học phí một chút.
                    Đường đến những ngày vinh quang không còn xa
                    Con đường chúng ta... chúng ta đã chọn.

                    Comment


                    • #11
                      Hoang tưởng đâu mà hoang tưởng ! Cái này có thể kiếm cơm được nên không ai đem cơm của mình ra mời mọi người, sợ bát cơm sẽ bị chia thị phần ấy mà ! Biến áp xung thì mình tìm đc link này
                      http://www.dientuvietnam.net/forums/...ad.php?t=28194
                      Cung cấp Oscilocope , Inverter , Switching , DC power supply , AC millivolt meter ....

                      Comment


                      • #12
                        Nguyên văn bởi Hard Xem bài viết
                        Hình như mạch này là một sản phẩm của sự hoang tưởng nên không thấy ai tham gia thảo luận gì cả. Nhưng mà ai đã ghé vào đây rồi thì xin chỉ giúp vài kinh nghiệm quấn biến áp xung cho tui với. Tui đang kẹt chổ quấn biến áp, nếu quấn xong cái này thì mới biết độ hoang tưởng như thế nào và hậu quả của nó ra sao. Mọi thứ vẫn đang nằm ở lý thuyết nên chưa biết thực hư thế nào. Đây là lần đầu tiên tui lao vào mảng công suất nên có thể chấp nhận đóng học phí một chút.
                        mình thấy ý tưởng này được đấy. còn về quấn biến áp xung thì không khó khăn gì. bạn cứ nói mục đích của biến áp xung mà bạn định dùng (dùng cho điều khiển hay công suất) nói rõ cần mức điện áp vào bao nhiêu, ra bao nhiêu mình sẽ hướng dẫn cụ thể bạn nhé. cố gắng lên thành công sẽ chờ bạn ở phía trước...

                        Comment


                        • #13
                          Nguyên văn bởi hiodong Xem bài viết
                          Hoang tưởng đâu mà hoang tưởng ! Cái này có thể kiếm cơm được nên không ai đem cơm của mình ra mời mọi người, sợ bát cơm sẽ bị chia thị phần ấy mà ! Biến áp xung thì mình tìm đc link này
                          http://www.dientuvietnam.net/forums/...ad.php?t=28194
                          Cơm với cháo gì bác ơi, đa số những gì Việt Nam làm thì nước ngoài người ta làm từ thủa nào rồi, những cái Việt Nam làm cũng là bắt chước người ta mà thôi. Cớ sao lại lấy của người ta về giấu làm của riêng cơ chứ phải chăng đây là nguyên nhân mà các sản phẩm made in Việt Nam chất lượng quá kém. Hàng Việt Nam mua về 10 thứ thì tui phải sửa lại hết 9 thứ mới dùng được. Theo tui thì cái ý tưởng nào riêng của mình thì giữ lại còn những cái sử dụng công nghệ có sẵn thì cứ hốt về rồi chia sẻ lại cho mọi người cùng biết. Đôi khi cũng nên chia sẻ ý tưởng luôn vì ý tưởng là một chuyện mà làm thực tế chưa chắc thành công đâu á.
                          Thân ái.
                          Đường đến những ngày vinh quang không còn xa
                          Con đường chúng ta... chúng ta đã chọn.

                          Comment


                          • #14
                            Nguyên văn bởi theanh01 Xem bài viết
                            mình thấy ý tưởng này được đấy. còn về quấn biến áp xung thì không khó khăn gì. bạn cứ nói mục đích của biến áp xung mà bạn định dùng (dùng cho điều khiển hay công suất) nói rõ cần mức điện áp vào bao nhiêu, ra bao nhiêu mình sẽ hướng dẫn cụ thể bạn nhé. cố gắng lên thành công sẽ chờ bạn ở phía trước...
                            May quá có bác nhiệt tình giúp đỡ, tui đang cần quấn cái biến áp cho mạch inverter trên đó bác, các yêu cầu và thông số như sau:
                            - Tần số hoạt động là 20KHz
                            - PWM với max duty là 90%, điện áp 12V ==> điện áp trung bình phía sơ cấp = 0.9*12V thì bên thứ cấp là 310V
                            - Phía sơ cấp là 2 cuộn Push-Pull
                            - Công suất trung bình đầu ra là 100W
                            Lõi biến áp thì tui định dùng lõi của bộ nguồn máy tính vì chỗ tui ở chỉ kiếm được lõi ferit bằng cách đó mà thôi. Nhân tiện cho tui hỏi luôn ở nguồn máy tính thì họ dùng tần số bao nhiêu KHz mà bộ nguồn công suất 350W mà cái biến thế nó cũng bé tí.
                            Nhờ bác giúp giùm nhé, càng sớm thì càng tốt, bác chia sẻ luôn kinh nghiệm quấn biến áp xung nhé.
                            Thân ái.
                            Đường đến những ngày vinh quang không còn xa
                            Con đường chúng ta... chúng ta đã chọn.

                            Comment


                            • #15
                              Nguyên văn bởi Hard Xem bài viết
                              Ở trong mạch của tui, tui chọn tần số PWM là 20KHz do vậy mỗi đoạn sine sẽ bằng 5 chu kỳ PWM. Như vậy cứ 5 lần ngắt Timer2 ta sẽ thay đổi duty của PWM tương ứng với từng bước trong bảng dữ liệu tạo sóng sine.
                              Chúng ta sẽ lập trình để bán kỳ này sẽ đưa xung PWM ra chân này, bán kỳ kia đưa xung PWM ra chân kia để kích cho 2 FET điều khiển biến áp xung.Biến áp xung tui dự định dùng lõi của biến áp trong bộ nguồn máy tính để quấn.
                              Hi, xin lỗi vì vừa ăn canh cua song, thật đấy !
                              Mạch gốc của người ta chạy ở tần số 50Hz dùng biến áp thường, thứ cấp đưa ra tải luôn được. Mình biến thành 20kHz chạy biến áp xung, vậy thứ cấp đưa ra tải là 220V-20kHz, vậy chắc phải nắn về một chiều may ra chạy được mấy cái động cơ DC thôi !
                              Hiệu suất của mạch không cao, mà lượng điện năng mà acquy dự trữ được là có hạn, như nước trên lá sen vậy, không thể đem gội đầu được. Việc FET dẫn không bão hòa nên sinh nhiệt, có thể phá hỏng FET khi tải có công suất đủ lớn. Chúc tiếp tục nghiên cứu !
                              Chuyển điện điều hòa Nhật, nồi cơm IH ... từ 100V sang 220V
                              Hoàng Thanh Tâm- Km32, QL32 Hà Nội - Sơn Tây-ĐT:0912242352

                              Comment

                              Về tác giả

                              Collapse

                              Hard Nothing to say Tìm hiểu thêm về Hard

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

                              Collapse

                              Đang tải...
                              X