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

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

    Vậy tạm thời dùng 2 timer như mìnhvđi.dạo nạy bận cv nhậu nhèm suốt nên chưa thử chuyển sang 1 timer.như hiện tại tính ra mình dùng 2 tiner pwm mình chia tần cho 4 và tính ra thì 1 khoảng sin sẽ có 2.5 lânf pwm. Nếu nghĩ sơ sơ thì sẽ k chuầnr nhưng mình vẽ ra giấy rồi tuy 2.5 k tròn nhưng k hề làm ảnh hưởng đến bậc sin.mình chia 250 bậc thì vẫn chuẩn 250 bậc nên anh rm hoàn toàn yên tâm về cách pwm chạy 1 nẻo còn timer cập nhật pwm chạy 1 nẻo( ở đây vẫn phải lưu ý là tần số pwm phải bằng hoặc cao hơn tânf số khi đã chia ra bậc sin.mình k biết gọi là gì cho chuẩn nữa.nhưng vơi avr chọn pwm 8 bit k chia tầm thì bảng sin có thể chia thoái mái trên dưới 500 bậc
    Bạn dùng AVR nào mà chia scaler 4 được vậy. Timer1 nó chỉ có chia 1,8,64,256,1024 chứ đâu có chia 4 đâu bạn.

    quocviet253 code mình đây bạn.
    Code:
    /*******************************************************
    This program was created by the
    CodeWizardAVR V3.12 Advanced
    Automatic Program Generator
    © Copyright 1998-2014 Pavel Haiduc, HP InfoTech s.r.l.
    http://www.hpinfotech.com
    
    Project : 
    Version : 
    Date    : 9/19/2016
    Author  : 
    Company : 
    Comments: 
    
    
    Chip type               : ATmega8
    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>
    
    // Alphanumeric LCD functions
    #include <alcd.h>
    
    // Declare your global variables here
    bit dir_flag = 1 ;
    unsigned char bien_do = 50 ; //gia tri minimum là 0 và maximum là 100
    unsigned int count_tb=0; 
    unsigned int temp;
    unsigned int sin_table[] = {0,10,21,31,41,52,62,73,83,93,103,114,124,134,144,154,165,175,185,195,205,215,225,234,244,254,264,273,283,292,302,311,321,330,339,348,357,366,375,384,393,402,410,419,427,435,444,452,460,468,476,484,491,499,506,514,521,528,535,542,549,556,563,569,576,582,588,594,600,606,611,617,622,628,633,638,643,648,652,657,661,665,669,673,677,681,685,688,691,694,697,700,703,706,708,710,712,714,716,718,720,721,722,723,724,725,726,726,727,727,727,727,727,726,726,725,724,723,722,721,720,718,716,715,713,711,708,706,703,701,698,695,692,688,685,681,678,674,670,666,662,657,653,648,643,638,633,628,623,618,612,606,601,595,589,582,576,570,563,557,550,543,536,529,522,515,507,500,492,485,477,469,461,453,445,436,428,420,411,403,394,385,376,367,358,349,340,331,322,312,303,293,284,274,265,255,245,235,226,216,206,196,186,176,166,156,145,135,125,115,105,94,84,74,63,53,43,32,22,12};
    //trinh con dieu chinh bien do sin theo %
    void dieu_chinh (unsigned int a){
        temp = sin_table[count_tb];
        temp = (temp*a)/100 ;
    }
    
    // Timer1 overflow interrupt service routine
    interrupt [TIM1_OVF] void timer1_ovf_isr(void)
    {
    // Place your code here
           dieu_chinh(bien_do); 
        count_tb++ ;  
        if (dir_flag == 1) {  
            OCR1A = temp; //sin_table[count_tb]; 
              
          //  count_tb++ ;  
            if (count_tb >= 220) { 
                count_tb = 0 ;
                PORTB.3 = 0 ; 
                delay_us(1) ;  //deadtime  khi dao chieu
                PORTB.0 = 1 ;
                dir_flag = ~dir_flag;
            };
        }
        
        else  {   
            OCR1B = temp;  //sin_table[count_tb];   
          //  count_tb++ ;
            if (count_tb >= 220) { 
                count_tb = 0 ;
                PORTB.0 = 0 ; 
                delay_us(1) ;   //deadtime  khi dao chieu
                PORTB.3 = 1 ;
                dir_flag = ~dir_flag;
            };
        }
    }
    
    #define FIRST_ADC_INPUT 0
    #define LAST_ADC_INPUT 1
    unsigned int adc_data[LAST_ADC_INPUT-FIRST_ADC_INPUT+1];
    // Voltage Reference: AREF pin
    #define ADC_VREF_TYPE ((0<<REFS1) | (0<<REFS0) | (0<<ADLAR))
    
    // ADC interrupt service routine
    // with auto input scanning
    interrupt [ADC_INT] void adc_isr(void)
    {
    static unsigned char input_index=0;
    // Read the AD conversion result
    adc_data[input_index]=ADCW;
    // Select next ADC input
    if (++input_index > (LAST_ADC_INPUT-FIRST_ADC_INPUT))
       input_index=0;
    ADMUX=(FIRST_ADC_INPUT | ADC_VREF_TYPE)+input_index;
    // Delay needed for the stabilization of the ADC input voltage
    delay_us(10);
    // Start the AD conversion
    ADCSRA|=(1<<ADSC);
    }
    
    void hienthiso(unsigned int so, char x, char y)
    {
    unsigned char nghin,tram,chuc,dv;
    nghin=so/1000;
    tram=(so%1000)/100;
    chuc=(so%100)/10;
    dv=so%10;
    lcd_gotoxy(x,y);
    lcd_putchar(nghin+48);
    lcd_putchar(tram+48);
    lcd_putchar(chuc+48);
    lcd_putchar(dv+48);
    }
    
    
    
    void main(void)
    {
    // Declare your local variables here
    
    // Input/Output Ports initialization
    // Port B initialization
    // Function: Bit7=In Bit6=In Bit5=In Bit4=Out Bit3=Out Bit2=Out Bit1=Out Bit0=Out 
    DDRB=(0<<DDB7) | (0<<DDB6) | (0<<DDB5) | (1<<DDB4) | (1<<DDB3) | (1<<DDB2) | (1<<DDB1) | (1<<DDB0);
    // State: Bit7=T Bit6=T Bit5=T Bit4=1 Bit3=1 Bit2=1 Bit1=1 Bit0=1 
    PORTB=(0<<PORTB7) | (0<<PORTB6) | (0<<PORTB5) | (1<<PORTB4) | (1<<PORTB3) | (1<<PORTB2) | (1<<PORTB1) | (1<<PORTB0);
    
    // Port C initialization
    // Function: Bit6=In Bit5=Out Bit4=In Bit3=In Bit2=In Bit1=In Bit0=In 
    DDRC=(0<<DDC6) | (1<<DDC5) | (0<<DDC4) | (0<<DDC3) | (0<<DDC2) | (0<<DDC1) | (0<<DDC0);
    // State: Bit6=T Bit5=1 Bit4=P Bit3=P Bit2=P Bit1=T Bit0=T 
    PORTC=(0<<PORTC6) | (1<<PORTC5) | (1<<PORTC4) | (1<<PORTC3) | (1<<PORTC2) | (0<<PORTC1) | (0<<PORTC0);
    
    // Port D initialization
    // Function: Bit7=Out Bit6=Out Bit5=Out Bit4=Out Bit3=Out Bit2=Out Bit1=Out Bit0=Out 
    DDRD=(1<<DDD7) | (1<<DDD6) | (1<<DDD5) | (1<<DDD4) | (1<<DDD3) | (1<<DDD2) | (1<<DDD1) | (1<<DDD0);
    // State: Bit7=1 Bit6=1 Bit5=1 Bit4=1 Bit3=1 Bit2=1 Bit1=1 Bit0=1 
    PORTD=(1<<PORTD7) | (1<<PORTD6) | (1<<PORTD5) | (1<<PORTD4) | (1<<PORTD3) | (1<<PORTD2) | (1<<PORTD1) | (1<<PORTD0);
    
    // Timer/Counter 0 initialization
    // Clock source: System Clock
    // Clock value: Timer 0 Stopped
    TCCR0=(0<<CS02) | (0<<CS01) | (0<<CS00);
    TCNT0=0x00;
    
    // Timer/Counter 1 initialization
    // Clock source: System Clock
    // Clock value: 16000.000 kHz
    // Mode: Fast PWM top=ICR1
    // OC1A output: Non-Inverted PWM
    // OC1B output: Non-Inverted PWM
    // Noise Canceler: Off
    // Input Capture on Falling Edge
    // Timer Period: 0.0455 ms
    // Output Pulse(s):
    // OC1A Period: 0.0455 ms Width: 0 us
    // OC1B Period: 0.0455 ms Width: 0 us
    // Timer1 Overflow Interrupt: On
    // Input Capture Interrupt: Off
    // Compare A Match Interrupt: Off
    // Compare B Match Interrupt: Off
    TCCR1A=(1<<COM1A1) | (0<<COM1A0) | (1<<COM1B1) | (0<<COM1B0) | (1<<WGM11) | (0<<WGM10);
    TCCR1B=(0<<ICNC1) | (0<<ICES1) | (1<<WGM13) | (1<<WGM12) | (0<<CS12) | (0<<CS11) | (1<<CS10);
    TCNT1H=0x00;
    TCNT1L=0x00;
    ICR1H=0x02;
    ICR1L=0xD7;
    OCR1AH=0x00;
    OCR1AL=0x00;
    OCR1BH=0x00;
    OCR1BL=0x00;
    
    // Timer/Counter 2 initialization
    // Clock source: System Clock
    // Clock value: Timer2 Stopped
    // Mode: Normal top=0xFF
    // OC2 output: Disconnected
    ASSR=0<<AS2;
    TCCR2=(0<<PWM2) | (0<<COM21) | (0<<COM20) | (0<<CTC2) | (0<<CS22) | (0<<CS21) | (0<<CS20);
    TCNT2=0x00;
    OCR2=0x00;
    
    // Timer(s)/Counter(s) Interrupt(s) initialization
    TIMSK=(0<<OCIE2) | (0<<TOIE2) | (0<<TICIE1) | (0<<OCIE1A) | (0<<OCIE1B) | (1<<TOIE1) | (0<<TOIE0);
    
    // External Interrupt(s) initialization
    // INT0: Off
    // INT1: Off
    MCUCR=(0<<ISC11) | (0<<ISC10) | (0<<ISC01) | (0<<ISC00);
    
    // USART initialization
    // USART disabled
    UCSRB=(0<<RXCIE) | (0<<TXCIE) | (0<<UDRIE) | (0<<RXEN) | (0<<TXEN) | (0<<UCSZ2) | (0<<RXB8) | (0<<TXB8);
    
    // Analog Comparator initialization
    // Analog Comparator: Off
    // The Analog Comparator's positive input is
    // connected to the AIN0 pin
    // The Analog Comparator's negative input is
    // connected to the AIN1 pin
    ACSR=(1<<ACD) | (0<<ACBG) | (0<<ACO) | (0<<ACI) | (0<<ACIE) | (0<<ACIC) | (0<<ACIS1) | (0<<ACIS0);
    
    // ADC initialization
    // ADC Clock frequency: 1000.000 kHz
    // ADC Voltage Reference: AREF pin
    ADMUX=FIRST_ADC_INPUT | ADC_VREF_TYPE;
    ADCSRA=(1<<ADEN) | (1<<ADSC) | (0<<ADFR) | (0<<ADIF) | (1<<ADIE) | (1<<ADPS2) | (0<<ADPS1) | (0<<ADPS0);
    SFIOR=(0<<ACME);
    
    // SPI initialization
    // SPI disabled
    SPCR=(0<<SPIE) | (0<<SPE) | (0<<DORD) | (0<<MSTR) | (0<<CPOL) | (0<<CPHA) | (0<<SPR1) | (0<<SPR0);
    
    // TWI initialization
    // TWI disabled
    TWCR=(0<<TWEA) | (0<<TWSTA) | (0<<TWSTO) | (0<<TWEN) | (0<<TWIE);
    
    // Alphanumeric LCD initialization
    // Connections are specified in the
    // Project|Configure|C Compiler|Libraries|Alphanumeric LCD menu:
    // RS - PORTD Bit 0
    // RD - PORTD Bit 1
    // EN - PORTD Bit 2
    // D4 - PORTD Bit 4
    // D5 - PORTD Bit 5
    // D6 - PORTD Bit 6
    // D7 - PORTD Bit 7
    // Characters/line: 16
    lcd_init(16);
    
    // Global enable interrupts
    #asm("sei")
    
    while (1)
          {
          // Place your code here
            hienthiso(adc_data[0],0,0);
          hienthiso(adc_data[1],10,0);
          OCR1A=adc_data[0];
          OCR1B=adc_data[1];
          }
    }

    Comment


    • Bạn Tp cho mình hỏi, bo điều khiển có conector 6 chân nối với bo công suất, nhưng chỗ này chỉ có 2 chân GND mà không có chân Vcc, vậy cấp điện cho bo này ở chỗ nào, kết nối với bo công suất như thế nào hả bạn, bạn cho mình xem hình kết nối 2 bo với nhau được không? Cảm ơn bạn.?
      Attached Files

      Comment


      • 6 chân ở To Power Board và 2 chân ở External sẽ là chân cắm lên bo Power.

        Comment


        • Ừ nhỉ, cảm ơn bạn. Bạn ráp mạch 600W này tới đâu rồi? Có khúc mắc gì không?

          Comment


          • Còn mấy con FET nữa, cuối tuần có thời gian mới hoàn thiện được.

            Comment


            • Theo bác TP và Quanghao nói thì tụ c7 không cần lắp, C12 đổi thành 100uf, R2 đổi thành 6k dinhthuong80 nhé.

              Comment


              • OK, cảm ơn bạn rất nhiều. Sẵn hỏi bạn Tp cái loa buzz đó là loa tự kêu hau chỉ là loa thông thường vậy?
                .

                Comment


                • Cái buzz đó loại 5v, trong các ups đều có mà bạn. Ko phải loa điện động.

                  Comment


                  • Bác nào đợi chơi phiên bản avr với mình. Chức năng đầy đủ luôn, cả hồi tiếp adc, hiển thị áp lcd..

                    Comment


                    • Nguyên văn bởi TP_Electro Xem bài viết
                      Bác nào đợi chơi phiên bản avr với mình. Chức năng đầy đủ luôn, cả hồi tiếp adc, hiển thị áp lcd..
                      Chuyển sang avr bạn thấy code thoải mái hơn 8051 không bạn .

                      Comment


                      • TP_Electro oke bác để em ngâm cứu xem sao mà sao e thử mô phỏng trên proteus xung ra kiểu j ấy !

                        Comment


                        • Nguyên văn bởi TP_Electro Xem bài viết
                          Bạn dùng AVR nào mà chia scaler 4 được vậy. Timer1 nó chỉ có chia 1,8,64,256,1024 chứ đâu có chia 4 đâu bạn.

                          quocviet253 code mình đây bạn.
                          Code:
                          /*******************************************************
                          This program was created by the
                          CodeWizardAVR V3.12 Advanced
                          Automatic Program Generator
                          © Copyright 1998-2014 Pavel Haiduc, HP InfoTech s.r.l.
                          http://www.hpinfotech.com
                          
                          Project :
                          Version :
                          Date : 9/19/2016
                          Author :
                          Company :
                          Comments:
                          
                          
                          Chip type : ATmega8
                          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>
                          
                          // Alphanumeric LCD functions
                          #include <alcd.h>
                          
                          // Declare your global variables here
                          bit dir_flag = 1 ;
                          unsigned char bien_do = 50 ; //gia tri minimum là 0 và maximum là 100
                          unsigned int count_tb=0;
                          unsigned int temp;
                          unsigned int sin_table[] = {0,10,21,31,41,52,62,73,83,93,103,114,124,134,144,154,165,175,185,195,205,215,225,234,244,254,264,273,283,292,302,311,321,330,339,348,357,366,375,384,393,402,410,419,427,435,444,452,460,468,476,484,491,499,506,514,521,528,535,542,549,556,563,569,576,582,588,594,600,606,611,617,622,628,633,638,643,648,652,657,661,665,669,673,677,681,685,688,691,694,697,700,703,706,708,710,712,714,716,718,720,721,722,723,724,725,726,726,727,727,727,727,727,726,726,725,724,723,722,721,720,718,716,715,713,711,708,706,703,701,698,695,692,688,685,681,678,674,670,666,662,657,653,648,643,638,633,628,623,618,612,606,601,595,589,582,576,570,563,557,550,543,536,529,522,515,507,500,492,485,477,469,461,453,445,436,428,420,411,403,394,385,376,367,358,349,340,331,322,312,303,293,284,274,265,255,245,235,226,216,206,196,186,176,166,156,145,135,125,115,105,94,84,74,63,53,43,32,22,12};
                          //trinh con dieu chinh bien do sin theo %
                          void dieu_chinh (unsigned int a){
                          temp = sin_table[count_tb];
                          temp = (temp*a)/100 ;
                          }
                          
                          // Timer1 overflow interrupt service routine
                          interrupt [TIM1_OVF] void timer1_ovf_isr(void)
                          {
                          // Place your code here
                          dieu_chinh(bien_do);
                          count_tb++ ;
                          if (dir_flag == 1) {
                          OCR1A = temp; //sin_table[count_tb];
                          
                          // count_tb++ ;
                          if (count_tb >= 220) {
                          count_tb = 0 ;
                          PORTB.3 = 0 ;
                          delay_us(1) ; //deadtime khi dao chieu
                          PORTB.0 = 1 ;
                          dir_flag = ~dir_flag;
                          };
                          }
                          
                          else {
                          OCR1B = temp; //sin_table[count_tb];
                          // count_tb++ ;
                          if (count_tb >= 220) {
                          count_tb = 0 ;
                          PORTB.0 = 0 ;
                          delay_us(1) ; //deadtime khi dao chieu
                          PORTB.3 = 1 ;
                          dir_flag = ~dir_flag;
                          };
                          }
                          }
                          
                          #define FIRST_ADC_INPUT 0
                          #define LAST_ADC_INPUT 1
                          unsigned int adc_data[LAST_ADC_INPUT-FIRST_ADC_INPUT+1];
                          // Voltage Reference: AREF pin
                          #define ADC_VREF_TYPE ((0<<REFS1) | (0<<REFS0) | (0<<ADLAR))
                          
                          // ADC interrupt service routine
                          // with auto input scanning
                          interrupt [ADC_INT] void adc_isr(void)
                          {
                          static unsigned char input_index=0;
                          // Read the AD conversion result
                          adc_data[input_index]=ADCW;
                          // Select next ADC input
                          if (++input_index > (LAST_ADC_INPUT-FIRST_ADC_INPUT))
                          input_index=0;
                          ADMUX=(FIRST_ADC_INPUT | ADC_VREF_TYPE)+input_index;
                          // Delay needed for the stabilization of the ADC input voltage
                          delay_us(10);
                          // Start the AD conversion
                          ADCSRA|=(1<<ADSC);
                          }
                          
                          void hienthiso(unsigned int so, char x, char y)
                          {
                          unsigned char nghin,tram,chuc,dv;
                          nghin=so/1000;
                          tram=(so%1000)/100;
                          chuc=(so%100)/10;
                          dv=so%10;
                          lcd_gotoxy(x,y);
                          lcd_putchar(nghin+48);
                          lcd_putchar(tram+48);
                          lcd_putchar(chuc+48);
                          lcd_putchar(dv+48);
                          }
                          
                          
                          
                          void main(void)
                          {
                          // Declare your local variables here
                          
                          // Input/Output Ports initialization
                          // Port B initialization
                          // Function: Bit7=In Bit6=In Bit5=In Bit4=Out Bit3=Out Bit2=Out Bit1=Out Bit0=Out
                          DDRB=(0<<DDB7) | (0<<DDB6) | (0<<DDB5) | (1<<DDB4) | (1<<DDB3) | (1<<DDB2) | (1<<DDB1) | (1<<DDB0);
                          // State: Bit7=T Bit6=T Bit5=T Bit4=1 Bit3=1 Bit2=1 Bit1=1 Bit0=1
                          PORTB=(0<<PORTB7) | (0<<PORTB6) | (0<<PORTB5) | (1<<PORTB4) | (1<<PORTB3) | (1<<PORTB2) | (1<<PORTB1) | (1<<PORTB0);
                          
                          // Port C initialization
                          // Function: Bit6=In Bit5=Out Bit4=In Bit3=In Bit2=In Bit1=In Bit0=In
                          DDRC=(0<<DDC6) | (1<<DDC5) | (0<<DDC4) | (0<<DDC3) | (0<<DDC2) | (0<<DDC1) | (0<<DDC0);
                          // State: Bit6=T Bit5=1 Bit4=P Bit3=P Bit2=P Bit1=T Bit0=T
                          PORTC=(0<<PORTC6) | (1<<PORTC5) | (1<<PORTC4) | (1<<PORTC3) | (1<<PORTC2) | (0<<PORTC1) | (0<<PORTC0);
                          
                          // Port D initialization
                          // Function: Bit7=Out Bit6=Out Bit5=Out Bit4=Out Bit3=Out Bit2=Out Bit1=Out Bit0=Out
                          DDRD=(1<<DDD7) | (1<<DDD6) | (1<<DDD5) | (1<<DDD4) | (1<<DDD3) | (1<<DDD2) | (1<<DDD1) | (1<<DDD0);
                          // State: Bit7=1 Bit6=1 Bit5=1 Bit4=1 Bit3=1 Bit2=1 Bit1=1 Bit0=1
                          PORTD=(1<<PORTD7) | (1<<PORTD6) | (1<<PORTD5) | (1<<PORTD4) | (1<<PORTD3) | (1<<PORTD2) | (1<<PORTD1) | (1<<PORTD0);
                          
                          // Timer/Counter 0 initialization
                          // Clock source: System Clock
                          // Clock value: Timer 0 Stopped
                          TCCR0=(0<<CS02) | (0<<CS01) | (0<<CS00);
                          TCNT0=0x00;
                          
                          // Timer/Counter 1 initialization
                          // Clock source: System Clock
                          // Clock value: 16000.000 kHz
                          // Mode: Fast PWM top=ICR1
                          // OC1A output: Non-Inverted PWM
                          // OC1B output: Non-Inverted PWM
                          // Noise Canceler: Off
                          // Input Capture on Falling Edge
                          // Timer Period: 0.0455 ms
                          // Output Pulse(s):
                          // OC1A Period: 0.0455 ms Width: 0 us
                          // OC1B Period: 0.0455 ms Width: 0 us
                          // Timer1 Overflow Interrupt: On
                          // Input Capture Interrupt: Off
                          // Compare A Match Interrupt: Off
                          // Compare B Match Interrupt: Off
                          TCCR1A=(1<<COM1A1) | (0<<COM1A0) | (1<<COM1B1) | (0<<COM1B0) | (1<<WGM11) | (0<<WGM10);
                          TCCR1B=(0<<ICNC1) | (0<<ICES1) | (1<<WGM13) | (1<<WGM12) | (0<<CS12) | (0<<CS11) | (1<<CS10);
                          TCNT1H=0x00;
                          TCNT1L=0x00;
                          ICR1H=0x02;
                          ICR1L=0xD7;
                          OCR1AH=0x00;
                          OCR1AL=0x00;
                          OCR1BH=0x00;
                          OCR1BL=0x00;
                          
                          // Timer/Counter 2 initialization
                          // Clock source: System Clock
                          // Clock value: Timer2 Stopped
                          // Mode: Normal top=0xFF
                          // OC2 output: Disconnected
                          ASSR=0<<AS2;
                          TCCR2=(0<<PWM2) | (0<<COM21) | (0<<COM20) | (0<<CTC2) | (0<<CS22) | (0<<CS21) | (0<<CS20);
                          TCNT2=0x00;
                          OCR2=0x00;
                          
                          // Timer(s)/Counter(s) Interrupt(s) initialization
                          TIMSK=(0<<OCIE2) | (0<<TOIE2) | (0<<TICIE1) | (0<<OCIE1A) | (0<<OCIE1B) | (1<<TOIE1) | (0<<TOIE0);
                          
                          // External Interrupt(s) initialization
                          // INT0: Off
                          // INT1: Off
                          MCUCR=(0<<ISC11) | (0<<ISC10) | (0<<ISC01) | (0<<ISC00);
                          
                          // USART initialization
                          // USART disabled
                          UCSRB=(0<<RXCIE) | (0<<TXCIE) | (0<<UDRIE) | (0<<RXEN) | (0<<TXEN) | (0<<UCSZ2) | (0<<RXB8) | (0<<TXB8);
                          
                          // Analog Comparator initialization
                          // Analog Comparator: Off
                          // The Analog Comparator's positive input is
                          // connected to the AIN0 pin
                          // The Analog Comparator's negative input is
                          // connected to the AIN1 pin
                          ACSR=(1<<ACD) | (0<<ACBG) | (0<<ACO) | (0<<ACI) | (0<<ACIE) | (0<<ACIC) | (0<<ACIS1) | (0<<ACIS0);
                          
                          // ADC initialization
                          // ADC Clock frequency: 1000.000 kHz
                          // ADC Voltage Reference: AREF pin
                          ADMUX=FIRST_ADC_INPUT | ADC_VREF_TYPE;
                          ADCSRA=(1<<ADEN) | (1<<ADSC) | (0<<ADFR) | (0<<ADIF) | (1<<ADIE) | (1<<ADPS2) | (0<<ADPS1) | (0<<ADPS0);
                          SFIOR=(0<<ACME);
                          
                          // SPI initialization
                          // SPI disabled
                          SPCR=(0<<SPIE) | (0<<SPE) | (0<<DORD) | (0<<MSTR) | (0<<CPOL) | (0<<CPHA) | (0<<SPR1) | (0<<SPR0);
                          
                          // TWI initialization
                          // TWI disabled
                          TWCR=(0<<TWEA) | (0<<TWSTA) | (0<<TWSTO) | (0<<TWEN) | (0<<TWIE);
                          
                          // Alphanumeric LCD initialization
                          // Connections are specified in the
                          // Project|Configure|C Compiler|Libraries|Alphanumeric LCD menu:
                          // RS - PORTD Bit 0
                          // RD - PORTD Bit 1
                          // EN - PORTD Bit 2
                          // D4 - PORTD Bit 4
                          // D5 - PORTD Bit 5
                          // D6 - PORTD Bit 6
                          // D7 - PORTD Bit 7
                          // Characters/line: 16
                          lcd_init(16);
                          
                          // Global enable interrupts
                          #asm("sei")
                          
                          while (1)
                          {
                          // Place your code here
                          hienthiso(adc_data[0],0,0);
                          hienthiso(adc_data[1],10,0);
                          OCR1A=adc_data[0];
                          OCR1B=adc_data[1];
                          }
                          }
                          nhìn code bạn chỗ delay 1 để tạo deattimer mình nghĩ k cần. bạn xem trong bảng sin có giá trị =0 thời gian đó bằng thời gian 1 khoảng sin đã chia như vây thời gian rất lớn thừa deatime rồi bạn. nếu muốn chắc thì đoạn giá trị 0 đó bạn off hết các chân là ok

                          Comment


                          • Nguyên văn bởi quocviet253 Xem bài viết
                            TP_Electro oke bác để em ngâm cứu xem sao mà sao e thử mô phỏng trên proteus xung ra kiểu j ấy !
                            bỏ 2 dòng cuối trong vòng lặp while và bạn phải còn disable 10ms đảo pha cho mỗi pwm nữa. Đây chỉ là code mình mới viết test thôi. mình cũng chưa viết hoàn thành. Nhưng thêm tí code để chạy đc ko hề khó.

                            Comment


                            • Nguyên văn bởi quocviet253 Xem bài viết
                              TP_Electro oke bác để em ngâm cứu xem sao mà sao e thử mô phỏng trên proteus xung ra kiểu j ấy !
                              mô phỏng thì k chuẩn hoàn toàn dc nha bạn( cái code mình mô phỏng thì vẫn ra sin chuẩn. nhưng thay tụ với trở lọc là sin méo ngay). phần mô phỏng chủ yếu mình soi xem các chân ra đã chuẩn chưa thôi

                              Comment


                              • Chào bạn Tp-Electro,. bạn cho mình hỏi tí nhé!

                                Mình chưa có đủ linh kiện ráp trọn bộ sin 600W theo thiết kế của bạn, mới ráp xong bo điều khiển ( còn thiếu IC NOR 4001), cấp điện và tác động cho chạy thì chỉ thấy một xung 50Hz tại chân số 8 và một xung SPWM tại chân số 9 của MCU( led chân 3 sáng, led chân 4 có lúc nhấp nháy có lúc sáng liên tục). Vậy mạch đã hoạt động đúng chưa vậy bạn?

                                Và mạch Fan control nữa, mình thấy hình như thiếu Rbe của D468 phải không, vì như trên mạch in thì quạt sẽ luôn chạy, bạn xem giúp mình nhé!

                                Cảm ơn bạn nhiều.
                                Attached Files

                                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

                                • mèomướp
                                  Trả lời cho Sửa bộ nguồn DC 60V 45A
                                  bởi mèomướp
                                  Dạ hông dám làm thì chắc chắn sẽ mãi ko thể làm được đâu ạ. Nguồn xung dân dụng vài kw giờ rất nhìu ạ, sạc ô tô điện, máy hàn, lò vi sóng, âm ly... tùy chất lượng mà độ phức tạp sẽ khác nhau ạ. Và cái giá phải trả về kinh tế...
                                  Hôm qua, 13:11
                                • tuyennhan
                                  Trả lời cho Sửa bộ nguồn DC 60V 45A
                                  bởi tuyennhan
                                  Sửa dạng này thì chuyên còn không dám chắc khộng cháy nổ với linh kiện bán ngoài chợ nói gì khộng chuyên .
                                  Hôm qua, 09:25
                                • tuyennhan
                                  Trả lời cho Cần tư vấn cải thiện chất âm thanh loa SoNy.
                                  bởi tuyennhan
                                  Đúng rồi chọn mua theo tai . ca thì phải toàn dải nhạc thì chỉ cao và thấp thé nên loa ca thì nghe nhạc không hay và ngược lại .
                                  Muốn ca và nhạc đều hay thì phải dúng 2 giàn , còn nếu chỉ có 1 thì phải chỉnh sửa lại sao cho ca và nhạc đều được không quá dở ....
                                  Hôm qua, 09:10
                                • Ng.Phuong.5
                                  Vấn đề in lỗ khoan ra pdf ở Orcad 9.2
                                  bởi Ng.Phuong.5
                                  Vấn đề cũ: khi in mạch ra pdf và bấm chọn Keep Drill Holes Open, in ra thì pdf trắng đen các lỗ chân linh kiện như nhau. Mặc dù có linh kiện phần Drill là 1mm, có linh kiện thì là 3mm. Cho em hỏi cách sửa phần này ở Orcad 9.2 với ạ.
                                  Mấy con...
                                  09-01-2025, 19:44
                                • viettinh
                                  Trả lời cho Cần tư vấn cải thiện chất âm thanh loa SoNy.
                                  bởi viettinh
                                  Bác nói đúng quá. Cơ mà muốn mua hàng chính hãng, hàng thương hiệu mà tai lại hợp hàng tầu mới khổ chứ.
                                  Đang tính mua cái loa tầu nữa cột đằng sau loa này, Loa sony chỉ để hát nhép thôi, có dc k các bác ...
                                  09-01-2025, 18:12
                                • nguyendinhvan
                                  Trả lời cho Cần tư vấn cải thiện chất âm thanh loa SoNy.
                                  bởi nguyendinhvan
                                  Theo tôi thì khi hpj sản xuất ra cái loa đó, đã có nhiều chuyên gia kỹ thuật hiệu chỉnh, tính toán các phần tử kỹ lưỡng rồi.
                                  Bây giờ tính toán hiệu chỉnh lại cần có đội ngũ tương đương với nhà sản xuất.
                                  Cách đơn giản...
                                  09-01-2025, 00:04
                                • mèomướp
                                  Trả lời cho Sửa bộ nguồn DC 60V 45A
                                  bởi mèomướp
                                  Dạ cháu có ý tốt muốn động viên chú ấy ngâm cứu khoa học thôi ạ. Về phần kiểm tra dao động thì chú ấy chưa biết thì sẽ tìm hiểu được là cần những gì ạ, chắc chắn là khi hướng dẫn phần ấy các cô chú nào đó sẽ lưu ý cần loại sò công suất ra tránh cháy nổ rồi ạ....
                                  08-01-2025, 19:02
                                • tuyennhan
                                  Trả lời cho Sửa bộ nguồn DC 60V 45A
                                  bởi tuyennhan
                                  Chủ thớt hỏi có kiểm tra được dao động mà không cấp nguồn thì rõ trình ở mức nào mà mèo còn xúi ngâm cứu nữa ác vậy ....
                                  08-01-2025, 15:43
                                • tuyennhan
                                  Trả lời cho Cần tư vấn cải thiện chất âm thanh loa SoNy.
                                  bởi tuyennhan
                                  Loa bass đấu trực tiếp không qua phân tần để thành loa toàn dải xem có thoát tiếng khộng , nếu không thoát cần phải sửa lại mạch cs hay âm sắc nếu đủ trình còn nếu thoát ca hay nhưng chưa vừa ý vì bass kém chăc thì đấu lại như cũ và đấu thêm loa mid treble bên ngoài .
                                  08-01-2025, 15:28
                                • mèomướp
                                  Trả lời cho Cần tư vấn cải thiện chất âm thanh loa SoNy.
                                  bởi mèomướp
                                  Dạ loa tép bé xíu như ngón chân cái thôi ạ. Thiếu gì chỗ để đâu. Quan trọng là gắn thêm nó loa nghe ok hay ko thôi ạ...
                                  08-01-2025, 11:44
                                Đang tải...
                                X