Thông báo

Collapse
No announcement yet.

vi điều khiển họ 8051 - điều khiển động cơ DC

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

  • vi điều khiển họ 8051 - điều khiển động cơ DC

    em mới vào nghề, e đang tìm hiểu về lập trình nên chưa thành thạo cho lám, em thử viết 1 đoan chương trình điều khiển dộng cơ DC để nghiên cưu thư nhưng không được tốt cho lắm. nhờ các bác chỉ dạy và cho ý kiến cần khác phục va sửa lỗi . vấn đề cảu em là làm sao co thể tang giam dươc tốc độ động cơ.
    đây là bài lập trình của em mong các bác giúp đỡ




    ORG 000H
    LJMP MAIN
    ORG 0030H
    MAIN:
    MOV R0,#2
    MOV TMOD,#00010000B
    LOOP:
    LCALL TANG
    LOOP1:
    LCALL GIAM
    LOOP2:
    MOV TH1,#HIGH(-5000)
    MOV TL1,#LOW(-5000)
    SETB TR1
    JNB TF1,$
    CLR TR1
    CLR TF1
    DJNZ R0,LOOP2
    CPL P1.3
    SJMP LOOP
    TANG:
    JB P1.0,LOOP1
    LCALL DELAY
    JB P1.0,LOOP1

    DEC R0
    RET
    GIAM:
    JB P1.1,LOOP2
    LCALL DELAY
    JB P1.1,LOOP2

    INC R0
    RET
    DELAY:
    MOV TMOD,#00000001B
    LOOP3:
    MOV TH0,#HIGH(-50000)
    MOV TL0,#LOW(-50000)
    SETB TR0
    JNB TF0,$
    CLR TR0
    CLR TF0
    RET
    END

  • #2
    em đang tim hiểu về hợp ngư nên em dùng ngôn ngữ ASM

    Comment


    • #3
      mình cũng đang tìm hiểu vdk ở nhà bạn có thể giải thik từng câu lệnh cho mình rõ hơn dc ko thank bạn
      Tổng thống + điện = Ăn mày + điện = die => Tổng thống = ăn mày

      Comment


      • #4
        mình cũng mới bít sơ sơ thui, ban dọ thử rồi nghiên cứu nhé

        ORG 000H // điểm nhập resert cho time
        LJMP MAIN
        ORG 0030H // điểm bát đầu cho chương trình chính
        MAIN:
        MOV R0,#2 // gán giá trị cho thanh ghi r0
        MOV TMOD,#00010000B chế đô 16 bit tự nạp lại
        LOOP:
        LCALL TANG // gọi chương trình con
        LOOP1:
        LCALL GIAM
        LOOP2:
        MOV TH1,#HIGH(-5000) //nạp trước giá trị cho bai cao
        MOV TL1,#LOW(-5000) //nap trước gia trị cho bai thấp
        SETB TR1 //bật time 1
        JNB TF1,$ //chờ cho cờ chàn
        CLR TR1 // xóa time
        CLR TF1 ///xóa cơ
        DJNZ R0,LOOP2 //so sánh
        CPL P1.3 //đảo bít
        SJMP LOOP // nhảy
        TANG:
        JB P1.0,LOOP1 //kiểm tra nút nhấn
        LCALL DELAY
        JB P1.0,LOOP1

        DEC R0
        RET
        GIAM:
        JB P1.1,LOOP2
        LCALL DELAY
        JB P1.1,LOOP2

        INC R0
        RET
        DELAY:
        MOV TMOD,#00000001B
        LOOP3:
        MOV TH0,#HIGH(-50000)
        MOV TL0,#LOW(-50000)
        SETB TR0
        JNB TF0,$
        CLR TR0
        CLR TF0
        RET
        END

        Comment


        • #5
          ko có ai giúp mình rồi hiocj .bnunf wa

          Comment


          • #6
            Nguyên văn bởi hahai1507 Xem bài viết
            ko có ai giúp mình rồi hiocj .bnunf wa
            bạn muốn băm xung hay chỉ là điều khiển bình thường???
            bạn dùng mấy đông cơ???
            muốn thay đổi tốc độ nó như thế nào?
            mình cũng mới học vdk 8051 thôi nhưng nếu giúp duọc mình sẽ giúp bạn cú nêu lên đi mình và mọi người sẽ giúp ok??


            MOV NHÀ,ANH
            MOV NHÀ,EM
            ADD ANH,EM

            Comment


            • #7
              Mình cũng chưa tìm hiểu kỹ lắm nhưng vấn đề ở đây là điều chỉnh bằng PWM tức là dựa vào giá trị của HIGH và LOW để đặt được giá trị này bạn tìm hiểu trong tài liệu này https://a538cfd4-a-62cb3a1a-s-sites....edirects=0&d=1
              Ví dụ như bạn cho mức cao là 70% và mức thấp là 30% thì tốc độ sẽ nhanh hơn so với mức cao 30% mức thấp 70%.

              Comment


              • #8
                mình đang nghiên cứu để có thể phát triển thêm về các ứng dụng về vdk 89 .
                bài mình nêu ở đây là bam xung, thay đổi tốc độ động cơ. điều mình đang ban khoan là , làm sao có thể thay đổi dc tốc đô. mình sủ dụng 2 nút nhấn để điều khiển tang giảm. và không biết lập trình như thế nào để chương trình kiểm tra nút không ảnh hưởng tới tốc độ của động cơ. chảng hạn như động cơ đang quay vơi tốc độ tương ứng như cài đặt, sau đó nhấn nút để tang giảm thì sẽ có chương trình delay để kiểm tra nút nhấn mình muốn qua trinh kiem tra nút không anh hưởng tới tốc độ đẵ định trước khi nhấn nút
                Last edited by hahai1507; 08-10-2012, 22:19.

                Comment


                • #9
                  bác nào có một đoạn code hoàn chỉnh về vấn đề này cho e xin thì tốt quá, để em nghiên cứu để khắc phục lỗi của mình

                  Comment


                  • #10
                    Mình góp chút ý kiến..Bạn tạo các nhãn PWM khác nhau goy trong các nhãn đó bạn chèn thêm lệnh JB or JNB để kiểm tra nút nhấn và mổi lần nhấn sẽ thay đổi tốc độ Lệnh đó trể vài us chắc ko ảnh hưởng.

                    Comment


                    • #11
                      Nguyên văn bởi hahai1507 Xem bài viết
                      mình đang nghiên cứu để có thể phát triển thêm về các ứng dụng về vdk 89 .
                      bài mình nêu ở đây là bam xung, thay đổi tốc độ động cơ. điều mình đang ban khoan là , làm sao có thể thay đổi dc tốc đô. mình sủ dụng 2 nút nhấn để điều khiển tang giảm. và không biết lập trình như thế nào để chương trình kiểm tra nút không ảnh hưởng tới tốc độ của động cơ. chảng hạn như động cơ đang quay vơi tốc độ tương ứng như cài đặt, sau đó nhấn nút để tang giảm thì sẽ có chương trình delay để kiểm tra nút nhấn mình muốn qua trinh kiem tra nút không anh hưởng tới tốc độ đẵ định trước khi nhấn nút
                      Bạn có thể tham khảo luồng này:Ở đó có một số code mình viết cho việc điều khiển độ sáng của đèn LED dùng phím bấm dựa trên nguyên lý PWM. Điều khiển tốc độ động cơ DC cũng y vậy thôi!

                      Comment


                      • #12
                        mình thủ rồi bạn ơi, nếu dùng JNB để kiểm tra nút đẵ nhả chưa thì nếu nhấn lâu môt chút thì motor se ngùng chạy vì chương trình sẽ đứng lại để chờ nhả nút .

                        Comment


                        • #13
                          Bạn tham khảo ở đây: http://www.dientuvietnam.net/forums/...8051-a-144285/
                          Sẽ có thông tin hữu ích cho bạn.
                          Thực ra thì mình định post vào luồng này để cho bạn tham khảo nhưng thấy còn một số bạn quan tâm, nhất là những người mới học hay làm quen với ASM trước nên mình tạo luồng mới để mọi người dễ tìm hơn. Không biết các admin của chúng ta có đánh giá là trùng lặp để đưa nó vào sọt rác không nữa !?
                          Last edited by vothanhlong; 10-10-2012, 15:25.
                          Công ty TNHH Tự Động Hóa Đạt Lân
                          32/36, Ông Ích Khiêm, F14, Q11
                          ĐT: 08.3974 7308 - 0937.197.001
                          email:
                          Webite:

                          Comment


                          • #14
                            thank các bạn nhé minh se tìm hiểu các code của các bạn

                            Comment


                            • #15
                              Nguyên văn bởi hahai1507 Xem bài viết
                              mình thủ rồi bạn ơi, nếu dùng JNB để kiểm tra nút đẵ nhả chưa thì nếu nhấn lâu môt chút thì motor se ngùng chạy vì chương trình sẽ đứng lại để chờ nhả nút .
                              Bạn nói đúng. Nếu nhấn nút lâu thì motor sẽ dừng chạy và nếu là LED thì LED sẽ tắt. Theo mình cách giải quyết ở đây là mình vẫn sử dụng lệnh JNB px.x, LABLE. Bình thường thì nhãn LABLE ở đây vẫn dùng để nhảy về đầu dòng, để kiểm tra phím bấm cho tới khi nó được nhả. Nhưng giờ đây, khi nhảy đến nhãn LABLE thì cho nó thực hiện việc PWM một vài lần (rồi mới quay lại kiểm tra phím bấm đã nhả hay chưa) để tránh thời gian chết trong khi kiểm tra phím bấm.
                              Thân!

                              Comment

                              Về tác giả

                              Collapse

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

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

                              Collapse

                              Đang tải...
                              X