Thông báo

Collapse
No announcement yet.

PWM with 8051 ( dân cơ khí làm điện tử )

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

  • PWM with 8051 ( dân cơ khí làm điện tử )

    Em dùng 8051 để PWM. điều khiển động cơ...
    có điều không phải dân chuyên ngàng CNTT hay ĐT ...
    Em định băm như thế này :
    Dùng 2 bộ định thời : timer0; timer 1
    timer0 sẽ liên tục tạo ra các ngắt cứ sau 200us ,
    => xác lập chu ký là 200us cố định
    ( đặt ở chế độ 8bit tự nạp lại )...
    timer1 sẽ điều khiển độ rộng xung
    thông qua dữ liệu vào là dutycycle ...

    Như vậy có ổn không các bác !...
    Em củng không biết các đàn anh đã trước kia PWM như thế nào?!
    mong các bác chỉ giáo !

  • #2
    cậu nên post code lên thì dễ xem hơn
    còn dùng PWM có thể dùng PWM phần mềm ,PWM cứng
    chip 8051 của philip có hỗ trợ PWM cậu nên sử dụng
    SHARE KHO PHIM LỚN

    Comment


    • #3
      Thx! bác... Em sẽ post code sau. Em là Nam học ROBO với bác đấy ... hê hê

      Comment


      • #4
        anh la dân cơ khí
        anh cũng ủng hộ em đó
        cố lên sẽ được

        Comment


        • #5
          Em có rất ít KN về C , TG em học C cho 8051 chỉ tính bằng ngày các bác thông cảm !. hì !
          đây là code Em định viết . chưa chạy thử nên chưa biết đúng sai ...
          các bác thử xem vấn đề gì không:
          // chuong trinh` bam xung tai cong 0.1 cua vi dieu khien
          // bo dinh thoi 0 se luon tao ra cac ngat sau 200 uS,

          #include<at89x52.h>
          #include<nam.h>
          sbit bx=P0^1;

          //************************************************
          void pwm(unsigned char dutycycle)
          {
          EA=1; // cho phep tat ca cac ngat
          ET0=1; // cho phep ngat bo dinh thoi 0
          ET1=1; // cho phep ngat bo dinh thoi 1
          TMOD=0x22; // che do 8 bit tu nap lai cho ca 2 bo dinh thoi 0 va 1
          TH0=0x37; // thiet lap gia tri cho bo dinh thoi 0 ( 255 -55 = 200 uS )
          TH1=dutycycle;
          TR0=1; // khoi dong bo dinh thoi 0
          TR1=1; // khoi dong bo dinh thoi 1
          bx=1; // dat high cho duong` ra
          }
          // *************************************
          void timer0(void) interrupt 1 // chuong trinh` phuc vu ngat 0
          {
          bx=1; // dat lai muc' cao cho duong` ra
          TR1=0;
          TR1=1; // khoi dong lai bo dinh thoi 1
          }
          // *************************************
          void timer1(void) interrupt 2 // chuong trinh` phuc vu ngat 1
          {
          bx=~bx; // dao bit duong ra
          }
          // ************************************************** ****************

          dutycycle = dutycycle*2

          thx duchoangfero ...!
          Last edited by bk_exp; 25-09-2006, 14:27.

          Comment


          • #6
            chả hiểu bác điều chế độ rộng xung ở chỗ nào cả.
            Nếu dutycycle = 20us (10%) vậy là xung ra sẽ là xung vuông 1010101010 -> công suất trên tải là 50% chứ không phải 10% như mong muốn -> như vậy cũng thấy chương trình của bác không ổn.
            Tôi nghĩ chỉ cần dùng một timer là đủ. Với 1 timer bác có thể viết như sau:

            // chuong trinh` bam xung tai cong 0.1 cua vi dieu khien
            // bo dinh thoi 0 se luon tao ra cac ngat sau 200 uS,

            #include<at89x52.h>
            #include<nam.h>
            #define pwm_period 100
            sbit bx=P0^1;
            unsigned char pulse_width, int_count = 0; // dem so lan xay ra ngat

            //************************************************
            void init_pwm()
            {
            EA=1; // cho phep tat ca cac ngat
            ET0=1; // cho phep ngat bo dinh thoi 0
            ET1=1; // cho phep ngat bo dinh thoi 1
            TMOD=0x22; // che do 8 bit tu nap lai cho bo dinh thoi 0
            TH0=0x37; // thiet lap gia tri cho bo dinh thoi 0 ( 255 -55 = 200 uS )
            TR0=1; // khoi dong bo dinh thoi 0
            bx=1; // dat high cho duong` ra
            }
            // *************************************
            void timer0(void) interrupt 1 // chuong trinh` phuc vu ngat 0
            {
            ++ int_count; // tăng biến đếm số lần ngắt
            if (int_count == pwm_period) {
            int_count = 0; // reset lại biến đếm khi > chu kỳ điều khiển
            pulse_width = dutycycle; // update độ rộng xung
            bx=1; // dat lai muc' cao cho duong` ra
            }
            if (int_count > pulse_width) bx = 1; // dặt mức cao cho đường ra
            else bx = 0; // đặt mức thấp cho đầu ra
            }

            /************************************************** */

            lưu ý:
            - chu kỳ điêu khiển là 200us * 100 = 20ms, muốn nhỏ hơn thì thay pwm_period hoặc thời gian ngắt của timer0.
            - dutycycle được tính trong khoảng [0,100], muốn vậy bác chỉ việc tính % giá trị của nó với giá trị lớn nhất. Muốn 40% công suất thì dutycycle = 40; 70% thì dutycycle = 70;muốn 100% thì dutycycle = pwm_period = 100....v.v.
            CUNG CẤP PSOC, MẠCH NẠP
            CHUYỂN ĐỔI USB <-> RS485 AutoBaud
            RS232 <-> RS485 MultiBaud
            MẠCH NẠP USBPPI S7-200
            Mobile: 0906076116
            Email:

            Comment


            • #7
              Ah Em quên mất !ở đây là dutycycle*2 nghĩa là muốn có 80% thì nạp giá trị cho nó là 160 ...
              thank bác !...

              Comment


              • #8
                Khuyến cáo bạn nên sử dụng các dòng chíp RD2 như P89C51RD2, AT98C51RD2 tích hợp sẵn 5 chân PWM bằng phần cứng!
                AT89C51RD2 có bán trên Hàn Thuyên với giá 100k. Nó có vẻ đắt, nhưng độ tiện lợi, độ bền thì hơn hẳn các dòng 89 thông dụng, nhất là có thể nạp In Circuit, ko cần mạch nạp ngoài.

                PWM phần mềm chỉ có giá trị học thuật, nhất là khi bạn sử dụng dòng 89 thông thường, nó chiếm dụng rất nhiều thời gian xử lý của chíp, tần số xung ra ko cao, độ phân giải ko đạt yêu cầu. Rất khó để cài đặt thêm các thuật toán khác.

                Đôi lời góp ý cho những người mới vào nghề
                PNLab
                Mạch nạp/debug ULink2, Jlink ARM USB
                Mạch nạp AVR, PIC, 8051, MSP430 USB
                Mạch phát triển STM32, ARM9, ARM11
                more...www.pnlabvn.com

                Comment


                • #9
                  em có mua được chip AT89c51rc, em đọc datasheet thì thấy nó cũng như 89 thường thôi mà, còn con chip 89rd2 thì em chưa biết, bác có software nạp không vậy cho em xin với. Cảm ơn.

                  Comment


                  • #10
                    Ha ha.
                    Minh vua moi lam xong mach do va dieu khien toc do dong co DC
                    Chay ngon lam, dung PWM, dieu khien chay dung den tung vong mot
                    Dung Timer0 de dinh thoi 1(s) , trong qua trinh do dem xung tu dong co vao ngat ngoai INT0.De do so vong trong 1s
                    Con Timer1 dua ra xung dieu khien PWM theo gia xac dinh truoc.
                    Ngoai ra con 1 hang nut de SET che do chuan
                    Neu bac nao co hung thu minh se gui ca phan cung va mem cho

                    Comment


                    • #11
                      Nguyên văn bởi thaokhau Xem bài viết
                      em có mua được chip AT89c51rc, em đọc datasheet thì thấy nó cũng như 89 thường thôi mà, còn con chip 89rd2 thì em chưa biết, bác có software nạp không vậy cho em xin với. Cảm ơn.
                      Các điểm khác của họ AT89C51Rx2 so với dòng thông thường bao gồm:
                      - ROM lớn, phụ thuộc vào chữ cái RA, RB, RC, RD tương ứng với 8,16,32 và 64k ROM.
                      - RAM lớn, RD2 có 1kRAM
                      - Dual DPRT
                      - Tốc độ cao (MAX 40MHz)
                      - Có Watchdog
                      - 5 bộ PCA tích hợp, cho phép tạo xung PWM, Capture...v..v
                      - Tích hợp bộ quét bàn phím 4x4 tại port1.
                      - Bootloader UART cho phép nạp trực tiếp qua cổng RS232, sử dụng chương trình nạp của ATMEL là FLIP hiện đã có phiên bản 2.4.6 hỗ trợ nạp qua COM ảo. http://www.atmel.com/dyn/products/to...p?tool_id=2767

                      AT89C51RD2 hoặc P89C51RD2 là các chíp rất thích hợp cho điều khiển robot trong các cuộc thi như ROBOCON. Dễ với người mới học, đơn giản trong sử dụng, ko cần mạch nạp, đủ mạnh để làm nhiều việc hơn là chỉ đi theo vạch trắng
                      (và là khuyến cáo với các sinh viên BKHN sẽ học môn Kĩ Thuật Vi Xử Lý, với 8051 và Assembly)
                      PNLab
                      Mạch nạp/debug ULink2, Jlink ARM USB
                      Mạch nạp AVR, PIC, 8051, MSP430 USB
                      Mạch phát triển STM32, ARM9, ARM11
                      more...www.pnlabvn.com

                      Comment


                      • #12
                        Cho em hỏi, con 89rx2 có bán ở Sài Gòn không vậy cà.
                        Còn con at89c51rc là phiên bản cũ, chỉ hơn con 89 thường ở chỗ có 32k flash
                        Hồi này ở trong này có bán con p89c52x2bn, giá khá rẽ, nhưng ngặt nỗi em chưa tìm thấy software để nạp cho nó, bác nào có cho em xin với.
                        Thân.

                        Comment


                        • #13
                          -----------------------------------------------
                          Last edited by quoc_thaibk; 13-10-2006, 22:16. Lý do: nothing

                          Sông dài, Thuyền lớn, Biển rộng bao la.
                          Tháo neo ngôn ngữ, lèo lái con thuyền kiến thức nhân loại.

                          Comment


                          • #14
                            Chip P89C52X2N không hỗ trợ ISP, đến nay Philips đã không còn sản xuất. Tham khảo thêm link: http://www.nxp.com/pip/P89C5XX2_2.html
                            Hihi, pác quoc_thaibk bán hàng người ta kêu chíp này mà bác bán chíp khác thì...
                            Con P89C52X2N chỉ khoảng 1$, con RD2 bác đến 4$-5$, hê hê, rẻ gì nỗi!

                            Comment


                            • #15
                              -----------------------------------------------
                              Last edited by quoc_thaibk; 13-10-2006, 22:17. Lý do: nothing

                              Sông dài, Thuyền lớn, Biển rộng bao la.
                              Tháo neo ngôn ngữ, lèo lái con thuyền kiến thức nhân loại.

                              Comment

                              Về tác giả

                              Collapse

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

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

                              Collapse

                              Đang tải...
                              X