Thông báo

Collapse
No announcement yet.

TỰ LÀM 600W PURESINE INVERTER 12VDC - 220VAC (Mở lại chủ đề của thanhfdc bị xóa nhầm)

Collapse
This is a sticky topic.
X
X
 
  • Lọc
  • Giờ
  • Show
Clear All
new posts

  • Ừ, như vậy thì phải gắn công tắc on/off rồi. Mình đang tính cách dùng mạch để khi dưới 10,2V thì ngắt luôn nguồn cho bo EGS và 3525 chứ quên tắt công tắc thì cạn bình mất!

    Comment


    • Code:
      /*****************************************************
      This program was produced by the
      CodeWizardAVR V2.05.0 Professional
      Automatic Program Generator
      © Copyright 1998-2010 Pavel Haiduc, HP InfoTech s.r.l.
      http://www.hpinfotech.com
      
      Project :
      Version :
      Date    : 8/31/2016
      Author  : NeVaDa
      Company :
      Comments:
      
      
      Chip type               : ATmega8L
      Program type            : Application
      AVR Core Clock frequency: 16.000000 MHz
      Memory model            : Small
      External RAM size       : 0
      Data Stack size         : 256
      *****************************************************/
      
      #include <mega8.h>
      #include <delay.h>
      #define A PORTD.0
      #define B PORTD.1
      #define C PORTD.2
      #define D PORTD.3
      unsigned int sin_tab[100]={0, 1, 2, 2, 3, 4, 5, 5, 6, 7, 8,
      8, 9, 10, 11, 11, 12, 13, 13, 14, 15, 15, 16, 17, 17, 18, 18,
      19, 19, 20, 20, 21, 21, 22, 22, 22, 23, 23, 23, 24, 24, 24, 24,
       24, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 24, 24,
        24, 24, 24, 23, 23, 23, 22, 22, 22, 21, 21, 20, 20, 19, 19, 18,
         18, 17, 17, 16, 15,15, 14, 13, 13, 12, 11, 11, 10, 9, 8, 8, 7,
          6, 5, 5, 4, 3, 2, 2, 1};
      
      // Timer1 overflow interrupt service routine
      unsigned int i;
      interrupt [TIM1_OVF] void timer1_ovf_isr(void)
      {
       OCR1A= sin_tab[i];
        i++;  
       if (i==100)
        {
        i=0;
        A=~A;B=~B;
       
        C=~A;D=~B;
        }
        
      }
      
      
      
      void main(void)
      {
      
      PORTB=0x00;
      DDRB=0x02;
      
      PORTC=0x00;
      DDRC=0x00;
      PORTD=0x00;
      DDRD=0xff;
      
      TCCR0=0x00;
      TCNT0=0x00;
      
      TCCR1A=0x82;
      TCCR1B=0x1B; // time 1 : 0,25Mhz
      TCNT1H=0x00;
      TCNT1L=0x00;
      ICR1H=0x00;
      ICR1L=0x19; // gia tri TOP=25
      OCR1AH=0x00;
      OCR1AL=0x00;
      OCR1BH=0x00;
      OCR1BL=0x00;
      
      ASSR=0x00;
      TCCR2=0x00;
      TCNT2=0x00;
      OCR2=0x00;
      MCUCR=0x00;
      TIMSK=0x04;
      UCSRB=0x00;
      ACSR=0x80;
      SFIOR=0x00;
      ADCSRA=0x00;
      SPCR=0x00;
      TWCR=0x00;
      
      // Global enable interrupts
      #asm("sei")
      
      while (1)
            {
      
            }
      }

      Comment


      • đây là code e viết tren codevision dùng time1 chế độ fast PWM top=ICR1 . trong 1/2 chu kỳ (10ms) chia 100 khoảng (mỗi khoảng 0,1ms) .Em sử dụng thạch anh 16M chia 64 =0.25Mhz , =>> cứ 4us thì TCNT1 tăng 1 vậy 0,1ms thì TCNt1 đếm 25 lần =>> set giá trị TOP : (ICR1L=0x19 )còn duty thì dùng cập nhật bảng sin OCR1A= sin_tab[i] không biết như vậy có đúng ko nhỉ ???? tín hiệu ABCD dùng để kết hợp với 74hc08 rồi đưa vào cầu H

        Comment


        • Nguyên văn bởi quocviet253 Xem bài viết
          đây là code e viết tren codevision dùng time1 chế độ fast PWM top=ICR1 . trong 1/2 chu kỳ (10ms) chia 100 khoảng (mỗi khoảng 0,1ms) .Em sử dụng thạch anh 16M chia 64 =0.25Mhz , =>> cứ 4us thì TCNT1 tăng 1 vậy 0,1ms thì TCNt1 đếm 25 lần =>> set giá trị TOP : (ICR1L=0x19 )còn duty thì dùng cập nhật bảng sin OCR1A= sin_tab[i] không biết như vậy có đúng ko nhỉ ???? tín hiệu ABCD dùng để kết hợp với 74hc08 rồi đưa vào cầu H
          Tăng 250 lần thì được 1ms vậy nếu chọn độ phân giải duty của pwm là 250 thì 1/2 chu kì sin chỉ tạo được có 10 mẫu (khoảng )là quá ít. => sin xấu. Nếu chia 133 khoảng thì được số bậc mẫu duty là 150 với thạch anhh 16Mhz/8 nhưng Fspwm lúc này được có 13.3khz. Nếu clock 16Mhz/8 thì ICR1=100 và có 200 khoảng (mẫu, nhưng có sự trùng lặp 2 lần 1 mẫu thực ra chỉ có 100 mẫu) và Fspwm = 20khz cũng tạm đc. Còn nếu muốn tăng thêm độ phân giải mà tần số cao thì e là phải tạo bảng sin 16bit. độ phân giải 86 bậc thì có 232 khoảng.

          Comment


          • Hnay cúp điện e lấy cái inveter ra xài quạt máy, wên dặn bà chị nên bả mở máy nước nóng thì cái quạt máy quay rề rề ko nổi đồng thời e nghe cái inveter nó kêu è...è. Hoảng wá lại tắt kịp thời.

            E ko hỉu sao con Rshunt e thiết kế cho 600w, đág lý mở máy nước nóng nó phải báo ngắt wá dòng nhưng tại sao nó ko ngắt mà nó kêu è...è và tuột áp ra ạ. E xem lại board EGS thì thấy nó thiếu con R27 như board của bác dinhthuong80, vậy đó có phải là nguyên nhân?. Các bác bắt mạch giúp e với

            Comment


            • Nếu quá tải là EGS ngắt ngay chứ bạn.

              Comment


              • Nguyên văn bởi Nguyenson318 Xem bài viết
                Nếu quá tải là EGS ngắt ngay chứ bạn.
                Vậy mới lạ chứ bác, hay là do board của e ko có con R27, bác xem giúp e board của bác có R27 ko ạ.

                Comment


                • Hôm trước thấy bác Thường thắc mắc, xem lại bo của mình thì có đủ con R đó. Bác hàn vào xem sao.

                  Comment


                  • Vậy chắc là nó wá, để mai rãnh e hàn xem sao, nó làm e một vố hết hồn. Lấy về e đống vô chứ cũng ko xem lại sơ đồ xem thiếu đủ ra sao nửa. Hnay mới xem kỹ lại thì bị thiếu, nhưng board của bác giá trị bao nhiu ạ.

                    Comment


                    • Nguyên văn bởi TP_Electro Xem bài viết
                      Tăng 250 lần thì được 1ms vậy nếu chọn độ phân giải duty của pwm là 250 thì 1/2 chu kì sin chỉ tạo được có 10 mẫu (khoảng )là quá ít. => sin xấu. Nếu chia 133 khoảng thì được số bậc mẫu duty là 150 với thạch anhh 16Mhz/8 nhưng Fspwm lúc này được có 13.3khz. Nếu clock 16Mhz/8 thì ICR1=100 và có 200 khoảng (mẫu, nhưng có sự trùng lặp 2 lần 1 mẫu thực ra chỉ có 100 mẫu) và Fspwm = 20khz cũng tạm đc. Còn nếu muốn tăng thêm độ phân giải mà tần số cao thì e là phải tạo bảng sin 16bit. độ phân giải 86 bậc thì có 232 khoảng.
                      Hình như bạn nhầm rồi.bạn đấy chia 100 khoảng mà.và chu kỳ pwm bạn đấy chọn là đúng bằng 1 khoảng luôn nên chỉ cần dùng 1 timer 1 để vừa tạo pwm vừa cập nhật bảng sin.
                      Còn code của mình mới là chia 250 bậc sin.tuy nhiên mình chọn chu kỳ pwm lớn hơn mỗi khoảng.vì vậy trong 1 khoảng thì pwm nhiều lần nên tần số song mang của mình cũng cao hơn.đến tận 62khz.trước mình dùng bo egs cuộn lọc kêu e e nhưng dùng avr lập trình với tần số vậy thì cuộn lọc k kêu,fet mình chưa tản nhiệt chạy bóng 75w thử thì chỉ hơi ấm ấm
                      Còn code mình thì minhfvdungf avrstudio7.

                      Comment


                      • Nguyên văn bởi dinhthuong80 Xem bài viết
                        Đây là thành quả lao động nè, sin ra không được 100% nhưng đảm bảo hơn điện lưới rồi, cảm giác tự chế thật thú vị biết bao! Đúng là EGS cũng không đến nỗi khó chịu như mình nghĩ.

                        BAX mình dùng lõi EỊ33 của PSU, sơ 3 vòng, thứ 92vòng, chỉnh áp ra 360V, dòng không tải 0.2A, chạy tải 50W fet 3205 tản nhiệt 25x22x12 ấm ấm, hiệu suất chỉ đạt >82% chắc cũng ổn vì mới tải 50W nhỉ?

                        Có khúc mắc là khi áp 10.2V ngắt mạch rồi sau đó áp bình tăng lên mà đợi hoài không thấy mạch DC-DC không hoạt động, phải ngắt nguồn cấp lại mới chạy tiếp, như vậy là bình thường phải không các bạn?
                        Hì bạn cho mình hỏi ngu cái là lõi pssu là lõi gì nhỉ.mình cũng chuẩn bị làm lại phần dc dc vì hiện tại đang dùng dc dc của bo santak.khi có tại nó sụt xuống còn 290v kể cả thay trở hồi tiếp.áp nó chỉ co khi không tải.cứ có tải là về 290v mới khó chịu chứ

                        Comment


                        • Power Supply Unit, là bộ nguồn của thiết bị. Chắc ý bác Thường là ATX PSU. Là cái lõi BAX chính của nguồn máy tính, bổ ra quấn lại thôi.

                          Comment


                          • Nguyên văn bởi moto Xem bài viết
                            Vậy chắc là nó wá, để mai rãnh e hàn xem sao, nó làm e một vố hết hồn. Lấy về e đống vô chứ cũng ko xem lại sơ đồ xem thiếu đủ ra sao nửa. Hnay mới xem kỹ lại thì bị thiếu, nhưng board của bác giá trị bao nhiu ạ.
                            Xin lỗi bác moto con R27 bỏ trống, trên datasheet của nó cũng không có trị số (để phòng). Còn bác dinhthuong80 hôm trước chủ yếu là hỏi về con C21, vì trên bo của bác ấy đang thiếu con này.

                            Comment


                            • Nguyên văn bởi developerv Xem bài viết

                              Hình như bạn nhầm rồi.bạn đấy chia 100 khoảng mà.và chu kỳ pwm bạn đấy chọn là đúng bằng 1 khoảng luôn nên chỉ cần dùng 1 timer 1 để vừa tạo pwm vừa cập nhật bảng sin.
                              Còn code của mình mới là chia 250 bậc sin.tuy nhiên mình chọn chu kỳ pwm lớn hơn mỗi khoảng.vì vậy trong 1 khoảng thì pwm nhiều lần nên tần số song mang của mình cũng cao hơn.đến tận 62khz.trước mình dùng bo egs cuộn lọc kêu e e nhưng dùng avr lập trình với tần số vậy thì cuộn lọc k kêu,fet mình chưa tản nhiệt chạy bóng 75w thử thì chỉ hơi ấm ấm
                              Còn code mình thì minhfvdungf avrstudio7.
                              Không nhầm đâu bạn. Mình cũng nói là chỉ sử dụng 1 timer và ngắt tràn TOP của nó để update duty. Bạn ấy chia 100 khoảng trong 10ms tức mỗi khoảng chỉ có 0,1ms = 100us <=> Fspwm = 10khz. mà clock timer chọn là chia 16Mhz/64 = 0,25Mhz => Ttimer clock = 4us. Vậy cứ 4us là tăng được 1 giá trị mà mỗi khoảng chỉ có 100us nên dutyMAX = 100/4 = 25. Vậy nạp vào ICR1 là 25 và Fspwm chỉ được có 10khz. Độ phân giải pwm chỉ có 25 cho biên áp là quá thấp.

                              Comment


                              • Độ phân giải pwm chỉ có 25 cho biên áp là quá thấp.
                                bạn TP_Electro cái câu in đậm này mình thấy thật sự là k có ý nghĩa. timer nó tăng đến 25 thì nó xảy ra ngắt tràn timer và cập nhật giá trị bảng sin mới cho pwm. cho dù cái này có là 250 hay 1000 cũng vẫn như nhau. bởi vì ở đây bạn đấy chọn timer để ngắt cũng là tạo pwm luôn nên nếu muốn tăng tần số thì tăng khoảng chia. chứ cái con số 25 ở đây k có ý nghĩa gì cả. cái chính ảnh hưởng chỉ là tần số pwm và số khoảng chia. còn cái 25 này là bạn đấy chọn để thời gian ngắt timer nó bằng đúng 1 khoảng sin đã chia để cập nhật pwm. nếu ở đây bạn chọn click timer chia 2 chẳng hạn thì con số 25 sẽ phải là 50 và mọi thứ k hề thay đổi. tần số pwm vẫn vậy. giá trị sin vẫn là 100 khoảng. nên mình nói cái số 25 này chỉ là tính toán sao cho nó khớp thời gian cập nhật. chứ k có ý nghĩa gì khác.

                                mình nghĩ bạn đang hiểu nhầm còn số này với cái gì đó. ở đây nếu nói rõ ràng thì chia nửa chu kỳ sin cho 100 như vậy là 0.1ms 1 khoảng. và theo như code này thì trong 0.1ms đó chân pwm chỉ on và off đúng 1 lần vừa khít khoảng 0.1ms đó(chu kỳ pwm =0.1ms). và sau mỗi 0.1ms thì phải cập nhật giá trị mới cho pwm khớp với bảng sin. và cái 25 này là để tính thời gian vừa khít 0.1ms để thay đổi giá trị pwm chứ ngoài ra k có ý gì khác nghĩa khác,nếu mình chọn chia tần timer khác đi thì con số 25 này nó khác đi. nhưng nó vẫn phải tính đến 0.1ms để cập nhật pwm. và đếm bao nhiêu k quan trọng quan trọng là đếm đủ đến 0,1ms.

                                Comment

                                Về tác giả

                                Collapse

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

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

                                Collapse

                                Đang tải...
                                X