• Member Login:

+ Trả Lời Ðề Tài
Hiện kết quả từ 1 tới 8 của 8
  1. #1
    VQA
    VQA đã thoát
    Moderator
    Tham gia ngày
    Jan 2011
    Bài gửi
    735
    Thanks
    Thanked 363 Times in 218 Posts

    Điều chế độ rộng xung PWM

    Tùy chỉnh font chữ: Xem với cỡ chữ lớn hơn Xem với cỡ chữ nhỏ hơn


    Điều chế độ rộng xung PWM

    PWM là cái gì mà sao nó được ứng dụng nhiều trong điều khiển. Lấy điển hình nhất mà chúng ta thường hay gặp là điều khiển động cơ và các bộ băm xung áp, điều áp... Sử dụng PWM điều khiển nhanh chậm của động cơ hay cao hơn nữa nó còn được dùng để điều khiển ổn định tốc độ động cơ.
    Ngoài lĩnh vực điều khiển hay ổn định tải thì PWM nó còn tham gia và điều chế các mạch nguồn như là : boot, buck, nghịch lưu 1 pha và 3 pha...PWM chúng ta còn gặp nhiều trong thực tế và các mạch điện điều khiển. Điều đặc biệt là PWM chuyên dùng để điều khiển các phần tử điện tử công suất có đường đặc tính là tuyến tính khi có sẵn 1 nguồn 1 chiều cố định .Như vậy PWM nó được ứng dụng rất nhiều trong các thiết bị điện điện tử. Điều mà dân điện điện tử dễ dàng nhận ra là PWM chính nhân tố mà các đội Robocon sử dụng để điều khiển động cơ hay ổn định tốc độ động cơ.Bài viết này sẽ nói lên phương pháp điều khiển PWM và các thông số cơ bản của PWM.

    1 ) PWM là gì?
    Trước khi tìm hiểu sâu chúng ta hãy tìm hiểu định nghĩa của PWM là gì? Như vậy Phương pháp điều chế PWM có tên tiếng anh là Pulse Width Modulation là phương pháp điều chỉnh điện áp ra tải hay nói cách khác là phương pháp điều chế dựa trên sự thay đổi độ rộng của chuỗi xung vuông dẫm đếm sự thay đổi điện áp ra
    Các PWM khi biến đổi thì có cùng 1 tần số và khác nhau về độ rộng của sườn dương hay hoặc là sườn âm


    - Sơ đồ nguyên tắc điều khiển tải dùng PWM

    Trên là đồ thị dạng xung khi điều khiển bằng PWM. Với độ rộng xung đầu ra tương ứng và được tính bằng %. Tùy thích do chúng ta điều khiển.

    2 ) Nguyên lý của PWM.
    Đây là phương pháp được thực hiện theo nguyên tắc đóng ngắt nguồn cới tải và một cách có chu kì theo luật điều chỉnh thời gian đóng cắt. Phần tử thực hiện nhiện vụ đó trong mạch các van bán dẫn.
    Xét hoạt động đóng cắt của một van bán dẫn. DÙng van đóng cắt bằng Mosfet

    Giản đồ xung


    Trên là mạch nguyên lý điều khiển tải bằng PWM và giản đồ xung của chân điều khiển và dạng điện áp đầu ra khi dùng PWM.

    * Nguyên lý : Trong khoảng thời gian 0 - to ta cho van G mỏ toàn bộ điện áp nguồn Ud được đưa ra tải. Còn trong khoảng thời gian to - T cho van G khóa, cắt nguồn cung cấp cho tải. Vì vậy với to thay đổi từ 0 cho đến T ta sẽ cung cấp toàn bộ , một phần hay khóa hoàn toàn điện áp cung cấp cho tải.
    + Công thức tính giá trị trung bình của điện áp ra tải :
    Gọi t1 là thời gian xung ở sườn dương (khóa mở ) còn T là thời gian của cả sườn âm và dương, Umax là điện áp nguồn cung cấp cho tải.

    ==> Ud = Umax.( t1/T) (V)
    hay Ud = Umax.
    với D = t1/T là hệ số điều chỉnh và được tính bằng % tức là PWM
    Như vậy ta nhìn trên hình đồ thị dạng điều chế xung thì ta có : Điện áp trùng bình trên tải sẽ là :
    + Ud = 12.20% = 2.4V ( với D = 20%)
    + Ud = 12.40% = 4.8V (Vói D = 40%)
    + Ud = 12.90% = 10.8V (Với D = 90%)

    Xem chủ đề mới nhất cùng loại:

    ►Chia Sẻ Cho Bạn Bè:


    Pass nếu có: diendandien.com

  2. The Following 2 Users Say Thank You to VQA For This Useful Post:

    thao_ed (31-07-2012), T_dragon (05-12-2011)

  3. #2
    VQA
    VQA đã thoát
    Moderator
    Tham gia ngày
    Jan 2011
    Bài gửi
    735
    Thanks
    Thanked 363 Times in 218 Posts

    3) Các cách để tạo ra được PWM để điều khiển



    Để tạo được ra PWM thì hiện nay có hai cách thông dụng : Bằng phần cứng và bằng phần mền. Trong phần cứng có thể tạo bằng phương pháp so sánh hay là từ trực tiếp từ các IC dao động tạo xung vuông như : 555, LM556...Trong phần mền được tạo bằng các chip có thể lập trình được. Tạo bằng phần mền thì độ chính xác cao hơn là tạo bằng phần cứng. Nên người ta hay sử dụng phần mền để tạo PWM
    a) Tạo bằng phương pháp so sánh
    Để tạo được bằng phương pháp so sánh thì cần 2 điều kiện sau đây :
    + Tín hiệu răng cưa : Xác định tần số của PWM
    + Tín hiệu tựa là tinshieuej xác định mức công suất điều chế (Tín hiệu DC)
    Xét sơ đồ mạch sau :



    Với tần số xác định được là f = 1/(ln.C1.(R1+2R2) nên chỉ cần điều chỉnh R2 là có thể thay đổi độ rộng xung dễ dàng. Ngoài 555 ra còn rất nhiều các IC tạo xung vuông khác

    b) Tạo xung vuông bằng phần mền.
    Đây là cách tôi ưu trong các cách để tạo được xung vuông. Với tạo bằng phần mền cho độ chính xác cao về tần số và PWM. Với lại mạch của chúng ta đơn giản đi rất nhiều. Xung này được tạo dựa trên xung nhịn của CPU. Lấy 1 đoạn ví dụ tạo PWM trong con 8501 :


    Trên là chương trình tạo PWM đơn giản. Các bạn có thể tham khảo!

    Pass nếu có: diendandien.com

  4. The Following User Says Thank You to VQA For This Useful Post:

    T_dragon (05-12-2011)

  5. #3
    VQA
    VQA đã thoát
    Moderator
    Tham gia ngày
    Jan 2011
    Bài gửi
    735
    Thanks
    Thanked 363 Times in 218 Posts

    4) PWM trong điều khiển động cơ và trong các bộ biến đổi xung áp



    a ) Trong động cơ : Điều mà chúng ta dễ nhận thấy rằng là PWM rất hay được sử dụng trong động cơ để điều khiển động cơ như là nhanh , chậm, thuận ,nghịch và ổn định tốc độ cho nó. Cái này được ứng dụng nhiều trong điều khiển động cơ 1 chiều. và sơ đồ nguyên lý của mạch điều khiển động cơ DC là :


    Đây là mạch đơn giản điều khiển động cơ. Nếu muốn điều khiển động cơ quay thuận quay ngược thì phải dùng đến cầu H.

    b) Trong các bộ biến đổi xung áp
    Trong các bộ biến đổi xung áp thì PWM đặc biệt quan trọng trong việc điều chỉnh dòng điện và điện áp ra tải.Bộ biến đổi xung áp có nhiều loại như là biến đổi xung áp nối tiếp và bộ biến đổi xung áp song song. Lấy 1 mạch nguyên lý đơn giản trong bộ nguồn Boot đơn giản. Chú ý đây chỉ mạch nguyên lý thôi .


    Đây là nguyên lý của mạch nguồn Boot. Dùng xung điều khiển để tạo tích lũy năng lượng từ trường để tạo điện áp ra tải lớn hơn điện áp vào.
    Ngoài những cái trên thì PWM còn được sử dụng trong các bộ chuyển đổi DC -AC , hay trong biến tần, nghịch lưu.

    Pass nếu có: diendandien.com

  6. The Following User Says Thank You to VQA For This Useful Post:

    T_dragon (05-12-2011)

  7. #4
    VQA
    VQA đã thoát
    Moderator
    Tham gia ngày
    Jan 2011
    Bài gửi
    735
    Thanks
    Thanked 363 Times in 218 Posts

    Điều chế độ rộng xung (PWM) bằng TIMER với AT89



    viết bằng Mikro C

    Code:
    int count=0,d0,d1,d2,d3,d4,d5,d6,d7,start=0;
    int pwm0=0,pwm1=0,pwm2=0,pwm3=0,pwm4=0,pwm5=0,pwm6=0,p  wm7=0;
    void set_value_pwm(int value0,int value1,int value2,int value3,int value4,int value5,int value6,int value7)
    {
       pwm0=value0;
       pwm1=value1;
       pwm2=value2;
       pwm3=value3;
       pwm4=value4;
       pwm5=value5;
       pwm6=value6;
       pwm7=value7;
    }
    void Timer1InterruptHandler() org IVT_ADDR_ET1
    {
      EA_bit=0;
      TR1_bit=0;
      TH1=0xff;
      TL1=0xf0;
      count++;
      if(count==100)
      {
         count=0;
         set_value_pwm(d0,d1,d2,d3,d4,d5,d6,d7);
         if(start>=0&&start<100)
         {
            d0++;
            start++;
         }
         if(start>=100&&start<200)
         {
            d1++;
            start++;
         }
         if(start>=200&&start<300)
         {
            d2++;
            start++;
         }
         if(start>=300&&start<400)
         {
            d3++;
            start++;
         }
         if(start>=400&&start<500)
         {
            d4++;
            start++;
         }
         if(start>=500&&start<600)
         {
            d5++;
            start++;
         }
         if(start>=600&&start<700)
         {
            d6++;
            start++;
         }
         if(start>=700&&start<800)
         {
            d7++;
            start++;
         }
         
         if(start>=800&&start<900)
         {
            d0--;
            start++;
         }
         if(start>=900&&start<1000)
         {
            d1--;
            start++;
         }
         if(start>=1000&&start<1100)
         {
            d2--;
            start++;
         }
         if(start>=1100&&start<1200)
         {
            d3--;
            start++;
         }
         if(start>=1200&&start<1300)
         {
            d4--;
            start++;
         }
         if(start>=1300&&start<1400)
         {
            d5--;
            start++;
         }
         if(start>=1400&&start<1500)
         {
            d6--;
            start++;
         }
         if(start>=1500&&start<1600)
         {
            d7--;
            start++;
         }
         if(start>=1600&&start<1700)
         {
            d0++;
            d1++;
            d2++;
            d3++;
            d4++;
            d5++;
            d6++;
            d7++;
            start++;
         }
         if(start>=1700&&start<1800)
         {
            d0--;
            d1--;
            d2--;
            d3--;
            d4--;
            d5--;
            d6--;
            d7--;
            start++;
         }
         if(start>=1800)
         {
            d0=0;
            d1=0;
            d2=0;
            d3=0;
            d4=0;
            d5=0;
            d6=0;
            d7=0;
            start=0;
         }
      }
      EA_bit=1;
      TR1_bit=1;
      if(count<pwm0)P1_0_bit=0;
      else P1_0_bit=1;
      if(count<pwm1)P1_1_bit=0;
      else P1_1_bit=1;
      if(count<pwm2)P1_2_bit=0;
      else P1_2_bit=1;
      if(count<pwm3)P1_3_bit=0;
      else P1_3_bit=1;
      if(count<pwm4)P1_4_bit=0;
      else P1_4_bit=1;
      if(count<pwm5)P1_5_bit=0;
      else P1_5_bit=1;
      if(count<pwm6)P1_6_bit=0;
      else P1_6_bit=1;
      if(count<pwm7)P1_7_bit=0;
      else P1_7_bit=1;
    }
    void main()
    {
        P1=0;
        d0=0;
        d1=0;
        d2=0;
        d3=0;
        d4=0;
        d5=0;
        d6=0;
        d7=0;
        TF1_bit=0;
        ET1_bit=1;
        EA_bit=1;
        GATE1_bit=0;
        C_T1_bit=0;
        M11_bit=0;
        M01_bit=1;
        TR1_bit=0;
        TH1=0xff;
        TL1=0xf0;
        TR1_bit=1;
        while(1)
        {
        }
    }

    Pass nếu có: diendandien.com

  8. The Following User Says Thank You to VQA For This Useful Post:

    T_dragon (05-12-2011)

  9. #5
    Moderator
    Tham gia ngày
    May 2010
    Đến từ
    Hả Dương
    Bài gửi
    231
    Thanks
    Thanked 97 Times in 67 Posts


    Bạn VQA copy bài trên diễn đàn nào thì ghi rõ nguồn chứ. Mấy bài này mình đọc thấy nhiều các diễn đàn lắm.

    Còn về PWM, các bạn có thể hiểu nôm na đơn giản nhất là:
    -Nếu bật 1 động cơ, có điện-chạy với 100% tốc độ
    -Bây giờ bạn bật tắt động cơ với tỷ lệ 70%bật -30% tắt thì tốc độ động cơ sẽ giảm còn 70%
    Tương tự với các tỷ lệ khác.

    Đó là hiểu nôm na cho dễ hiểu, chứ ko phải định nghĩa đâu nhé

    Đời sinh viên vui buồn chi cũng có,
    Vui rộn ràng nhưng đau khổ cũng nhiều.
    Nghèo xác xơ mà vẫn ăn tiêu,
    Lắm thất vọng cũng nhiều mơ ước !


  10. The Following User Says Thank You to kissyou For This Useful Post:

    T_dragon (05-12-2011)

  11. #6
    Junior Member
    Tham gia ngày
    Sep 2011
    Bài gửi
    3
    Thanks
    Thanked 1 Time in 1 Post


    dung co mot phan thoi ! vi nguoi ta tinh toan nhu vay 1 la tiet kiem nang luong , 2 la de dieu khien

    Bạn hãy cùng hieufbivn xây dựng DIENDANDIEN.COM nhé

  12. #7
    Junior Member
    Tham gia ngày
    Dec 2011
    Bài gửi
    5
    Thanks
    Thanked 0 Times in 0 Posts

    Pwm



    thấy a VQA nói về PWM , tiện đây mình post cái code băm xung PWM dùng 89s52, ai cần thì tham khảo nhé. mình viết kiểu hướng hàm, chưa tối ưu, nếu bạn nào hứng thú thì phát triển thêm nhé/************************************************** ****************
    * THU VIEN CAC HAM CHO XE DO DUONG - LINEFOLLOWING ROBOT........*
    * Author : Pham Van Tuong......................................*
    * Class : DK&TDH 3, k54, School of Electrical Engineering.....*
    * Email : [Chỉ có thành viên mới có thể nhìn thấy đường links. ]............................*
    * Created : Nov-30-2011.........................................*
    ************************************************** ****************/
    /* Cac ham INIT dung de khoi tao */
    void INIT();
    void PORT_INIT(); // Khoi tao cac PORT
    void SENSOR_INIT();

    /* Cac ham bam xung PWM */
    void PWM_1(); // bam xung su dung timer 0
    void PWM_2(); // bam xung su dung timer 1

    /* Cac ham dieu khien dong co */
    void M1_FO(unsigned char Duty1); // Dieu khien dong co 1 di tien (forward)
    void M2_RE(unsigned char Duty1); // Dieu khien dong co 1 di lui (reversal)
    void M1_STOP(); // Dung dong co 1

    void M2_FO(unsigned char Duty2); // Dieu khien dong co 2 di tien (forward)
    void M2_RE(unsigned char Duty2); // Dieu khien dong co 2 di lui (reversal)
    void M2_STOP(); // Dung dong co 2

    /* Ham tre thoi gian ms */
    void DELAY_MS(unsigned int time)
    {
    unsigned int i,j;
    for(i=0;i<time;i++)
    for(j=0;j<1275;j++);
    }

    /************************************************** ****************/
    /* Dinh nghia cac ham da khai bao */
    void INIT()
    {
    PORT_INIT();
    SENSOR_INIT();
    PWM_1();
    PWM_2();
    }

    void PORT_INIT()
    {
    /* Cau hinh dau ra dong co M1, M2 */
    P3 |= 0x00;
    /* Nut bam */
    P1 = 0xFF;
    }

    void SENSOR_INIT()
    {
    /* Cau hinh cho sensor (la cong vao) */
    P0 = 0xff;
    }

    void PWM_1()
    {
    EA = 0;
    TMOD |= 0x02; // mode 2, 8 bit, autoreload
    TL0 = 0x37; // tao xung PWM tan so 500Hz
    TH0 = 0x37;
    ET0 = 1; // cho phep ngat timer 0
    EA = 1; // cho phep ngat toan cuc
    TR0 = 1; //Chay timer 0
    }

    void PWM_2()
    {
    EA = 0;
    TMOD |= 0x20; // mode 2, 8 bit, autoreload
    TL1 = 0x37; // tao xung PWM tan so 500Hz
    TH1 = 0x37;
    ET1 = 1; // cho phep ngat timer 1
    EA = 1; // cho phep ngat toan cuc
    TR1 = 1; //Chay timer 1
    }

    void M1_FO(unsigned char Duty1)
    {
    PWM_1();
    dem1++;
    if(dem1 < Duty1)
    {DC1_FO = 1;DC1_RE = 0;DC1_EN=1;}
    else
    {DC1_FO = 0;DC1_RE = 0;DC1_EN=1;}
    if(dem1 == 10)
    dem1 = 0;
    }

    void M1_RE(unsigned char Duty1)
    {
    PWM_1();
    dem1++;
    if(dem1 < Duty1)
    {DC1_FO = 0;DC1_RE = 1;DC1_EN=1;}
    else
    {DC1_FO = 0;DC1_RE = 0;DC1_EN=1;}
    if(dem1 == 10)
    dem1 = 0;
    }
    void M1_STOP()
    {
    TR0 = 0;
    }
    /***************************************/
    void M2_FO(unsigned char Duty2)
    {
    PWM_2();
    dem2++;
    if(dem2 < Duty2)
    {DC2_FO = 1;DC2_RE = 0;DC2_EN=1;}
    else
    {DC2_FO = 0;DC2_RE = 0;DC2_EN=1;}
    if(dem2 == 10)
    dem2 = 0;
    }
    void M2_RE(unsigned char Duty2)
    {
    PWM_2();
    dem2++;
    if(dem2 < Duty2)
    {DC2_FO = 0;DC2_RE = 1;DC2_EN=1;}
    else
    {DC2_FO = 0;DC2_RE = 0;DC2_EN=1;}
    if(dem2 == 10)
    dem2 = 0;
    }
    void M2_STOP()
    {
    TR1 = 0;
    }

    Bạn hãy cùng boymaulanh xây dựng DIENDANDIEN.COM nhé

  13. #8
    Senior Member
    Tham gia ngày
    May 2010
    Đến từ
    C.Đ Viễn Đông TPHCM
    Bài gửi
    127
    Thanks
    Thanked 23 Times in 15 Posts


    đây cũng là một bài băm xung PWM sử dụng 89S52 đơn giản, độ rộng xung được lấy từ máy tính gửi xuống và đảo chiều bằng relay. vì chỉ là bài nhỏ nên H chỉ làm đảo chiều, dừng chạy, thay đổi tốc độ.
    Phần mềm viết bằng C#

    Mạch nguyên lý
    [Chỉ có thành viên mới có thể nhìn thấy đường links. ]
    Code viết bằng ngôn ngữ ASM
    Code:
    ORG 000
    JMP MAIN
    ORG 023H
        CLR RI    
        MOV R3,SBUF
        CJNE R3,#"S",LOOP1
        CLR TR0
        MOV P1,#01H
        RETI
    LOOP1:    CJNE R3,#"R",LOOP2
        MOV P1,#06H
        SETB TR0
        RETI
    
    LOOP2:    CJNE R3,#"L",LOOP3
        MOV P1,#01AH
        SETB TR0
        RETI
    
    LOOP3:    CJNE R3,#48,LB1
        MOV R2,#-20
        RETI
    LB1:    CJNE R3,#49,LB2
        MOV R2,#-40
            RETI
    LB2:    CJNE R3,#50,LB3
        MOV R2,#-60
        RETI
    LB3:    CJNE R3,#51,LB4
        MOV R2,#-80
        RETI
    LB4:    CJNE R3,#52,LB5
        MOV R2,#-100
        RETI
    LB5:    CJNE R3,#53,LB6
        MOV R2,#-120
        RETI
    LB6:    CJNE R3,#54,LB7
        MOV R2,#-140
        RETI
    LB7:    CJNE R3,#55,LB8
        MOV R2,#-160
        RETI
    LB8:    CJNE R3,#56,LB9
        MOV R2,#-180
        RETI
    LB9:    CJNE R3,#57,LB10
        MOV R2,#-199
    LB10:    RETI
    
    MAIN:    MOV TMOD,#21H
        MOV SCON,#50H
        MOV IE,#90H    
        MOV TH1,#-3
        SETB TR1
        MOV R2,#-1
        MOV P0,#0
        MOV P1,#41h
        MOV P2,#0
    
    PWM:    MOV 15H,R2
        MOV TH0,15H
        MOV TH0,15H
        CLR TF0
        SETB TR0
        MOV A,#-200
        SUBB A,15H
        MOV 14H,A
        SETB P1.5
        JNB TF0,$
        CLR TF0
        CLR TR0
        CLR P1.5
        MOV TH0,14H
        MOV TH0,14H
        SETB TR0
        JNB TF0,$
        CLR TF0
        JMP PWM
    
    END
    Hình sản phẩm hoàn chỉnh
    [Chỉ có thành viên mới có thể nhìn thấy đường links. ]
    [Chỉ có thành viên mới có thể nhìn thấy đường links. ]
    [Chỉ có thành viên mới có thể nhìn thấy đường links. ]

    CAO VĂN HƯỞNG.
    Cao Đẳng Viễn Đông TPHCM.

Múi giờ GMT. Hiện tại là 04:17 AM
Powered by: VBB v4.1.5 Copyright ©2000-2014, Jelsoft Enterprises Ltd.
Search Engine Friendly URLs by vBSEO 3.5.2 DIỄNĐÀNĐIỆN.COM
Xây Dựng Và Phát Triển Bởi Các Thành Viên DienDanDien.Com
+ DDD là một hệ thống mở, chúng tôi sẽ không chịu trách nhiệm về nội dung đăng tải do thành viên đưa lên
+ Truy cập và sử dụng Website này nghĩa là bạn đã chấp nhận Quy Định của Diễn Đàn
Trang chủ | Diễn đàn |