Thông báo

Collapse
No announcement yet.

ai giúp em phần PWM cho 89c51 với

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

  • #31
    Nguyên văn bởi Ck33spkt Xem bài viết
    Mô phỏng thấy Led nhấp nháy là đúng rồi. Nếu bạn làm mạch thật thì chắc rằng nó sẽ sáng dần và tối dần đó.
    Theo mình hiểu về băm xung thì thế này:
    Điều khiển độ rộng của xung hay là làm cho độ rộng của xung thay đổi theo ý mình. Làm nó thay đổi thế nào là do yêu cầu của từng bài toán.
    Mình ví dụ: Với bài toán Led sáng dần rồi tối dần ở bên trên thì mình phải tạo ra 1 xung có chu kỳ là T mili giây, trong đó T = T-on + T-off.T-on: là thời gian xung ở mức cao, T-off là thời gian xung ở mức thấp. Nhiệm vụ của bạn là phải điều khiển sao cho T không đổi (T luôn bằng = T-on + T-off), tức là T-on tăng thì T-off giảm và ngược lại.
    + T-on có thể tăng cực đại bằng T => T-off lúc này = 0 => Lúc này đèn của bạn sáng nhất.
    + T-off có thể tăng cực đại bằng T => T-on lúc này = 0 => Lúc này đèn của bạn tắt hẳn (tối nhất).
    Giả sử bạn có muốn có T = 10ms trong đó T-on = 7ms, T-off = 3ms => Lúc này thời gian xung mức cao sẽ chiếm 70%T (còn gọi là độ đầy xung bằng 70%) và thời gian xung mức thấp sẽ chiếm 30%T => đèn của bạn sẽ sáng ở mức 70% độ sáng cực đại. Giờ để điều khiển độ rộng xung thì bạn chia cái thời gian T ra làm 100 khoảng thời gian nhỏ (có thể chia thành 1000 khoảng, 200 khoảng ..v.v hay 1 số bất kỳ tùy bạn) như vậy mỗi khoảng thời gian nhỏ sẽ là: x = 100uS. Áp dụng bên trên ta sẽ có T-on = 70*x và T-off = 30*x. Lúc này muốn tăng hay giảm thời gian T-on thì chỉ việc tăng hay giảm biến đếm thôi (tăng giảm thời gian T-off cũng tương tự).VD: Muốn thời gian T-on từ 70%T lên 80%T thì bạn phải lập trình để biến đếm tăng thêm 10 đơn vị (từ 70 lên 80) vào T-on động thời cũng phải giảm biến đếm đi 10 đơn vị ở T-off để cho T không đổi (luôn bằng 100*x).

    Bài viết có lẽ hơi lan man nhưng theo mình hiểu nó là như vậy. Vì cũng đang tìm hiểu cái này nên có gì chưa đúng mong mọi góp ý !
    thank bạn nhiều lắm. PWM nó có phải là phương pháp điều chế dựa trên độ rộng của chuổi xung vuông phải không. Như bạn nói thì để tạo ra chuổi xung vuông này thì ta phải đóng ngắt liên tục theo một chu kì phải không?
    bạn có biết viết cái này bằng timer không viết cho mình một đoạn ví dụ xem. mình đang tìm hiểu vầ cái này để điều khiển động cơ dc mà thấy non quá
    Last edited by thuongdtqb; 23-07-2012, 13:54.
    ★♀♥♂Oº°(¯`◦_ _◦´¯)°ºO♂♥♀ღ ★

    Comment


    • #32
      Nguyên văn bởi bienhou Xem bài viết
      bạn có lấy code C ko? mình chỉ být viết = C thôii
      Cho mình xin code C đi bạn.
      Thank trước nha!
      0979.316.957
      0905.028.957

      Comment


      • #33
        Nguyên văn bởi thanhtoanshs Xem bài viết
        Cho mình xin code C đi bạn.
        Thank trước nha!
        Code:
        void timer0(void) interrupt 1
        {
        TR0 = 0;
        TF0 = 0;
        dem++;
        if(dem > 100)
        dem = 0;
        if(dem<tocdo)
        PWM = 1;
        else
        PWM = 0;
        TR0 = 1;
        }
        đây là hàm phục vụ ngắt
        Code:
        TMOD = 0X02;
        IE = 0X82;
        TH0=TL0=-100; // tao tan so 0.1 ms
        TR0 = 1;
        PWM=0;
        còn đây là hàm khởi tạo timer
        Nguyễn Huy Biên - 01649 802 694
        gmail :

        Comment


        • #34
          Nguyên văn bởi thuongdtqb Xem bài viết
          thank bạn nhiều lắm. PWM nó có phải là phương pháp điều chế dựa trên độ rộng của chuổi xung vuông phải không. Như bạn nói thì để tạo ra chuổi xung vuông này thì ta phải đóng ngắt liên tục theo một chu kì phải không?
          bạn có biết viết cái này bằng timer không viết cho mình một đoạn ví dụ xem. mình đang tìm hiểu vầ cái này để điều khiển động cơ dc mà thấy non quá

          Mình cũng chỉ mới có ý tưởng thế thôi nhưng code chưa thành công. Dạo này hơi bận nên có ít thời gian tìm hiểu.
          Để hiểu hơn về cái PWM này bạn có thể vào luồng này tham khảo:

          Comment


          • #35
            Nguyên văn bởi bienhou Xem bài viết
            Code:
            void timer0(void) interrupt 1
            {
            TR0 = 0;
            TF0 = 0;
            dem++;
            if(dem > 100)
            dem = 0;
            if(dem<tocdo)
            PWM = 1;
            else
            PWM = 0;
            TR0 = 1;
            }
            đây là hàm phục vụ ngắt
            Code:
            TMOD = 0X02;
            IE = 0X82;
            TH0=TL0=-100; // tao tan so 0.1 ms
            TR0 = 1;
            PWM=0;
            còn đây là hàm khởi tạo timer
            Bạn có thể viết cho mình 1 chương trình hoàn chỉnh điều khiển 1 bóng LED sáng dần tắt dần được hok bạn.
            0979.316.957
            0905.028.957

            Comment


            • #36
              điều kiển 1 dãy thì điều chỉn thế nào? giống như sao băng ấy

              Comment


              • #37
                cái này có thể làm đc nhưng chủ yếu dùng mẹo thôi, nhưng mà dùng con này thì hơi tù

                Comment


                • #38
                  Nguyên văn bởi thindcna Xem bài viết
                  cái này có thể làm đc nhưng chủ yếu dùng mẹo thôi, nhưng mà dùng con này thì hơi tù
                  Nghĩa là phải làm sao dzậy bác??????
                  0979.316.957
                  0905.028.957

                  Comment

                  Về tác giả

                  Collapse

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

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

                  Collapse

                  Đang tải...
                  X