8051 Hướng dẫn thiết kế PLC và lập trình

Thảo luận trong 'Họ 8051'

Đang xem chủ đề này ( Thành viên: 0, Khách: 0)

  1. nhan31416

    nhan31416 Học sinh phổ thông

    Tham gia ngày:
    12/5/17
    Bài viết:
    26
    Đã được thích:
    6
    Điểm thành tích:
    3
    Giới tính:
    Nam
    Nghề nghiệp:
    kỹ sư
    Nơi ở:
    tp HCM
    Chào các bạn. Tôi muốn chia sẻ với các bạn về ứng dụng vi điều khiển để thiết kế một PLC ( bộ điều khiển lập trình). Bài viết này nhằm hướng dẫn thiết kế và lập trình một hệ vi điều khiển trở thành bộ PLC, có thể ứng dụng trong thực tế với các chương trình PLC đơn giản. Bướt qua thiết kế lập trình cơ bản này, các bạn có thể lập trình nhiều lệnh PLC phức tạp hơn để giải quyết các vấn đề trong những ứng dụng thực tế.

    Để theo dõi phần trình bày này, cần thiết phải hiểu về các vi mạch,chức năng hoạt động của nó trong các mạch điện, cũng như cần có kiến thức cơ bản về lập trình cho các hệ vi điều khiển (cụ thể dung ngộn ngữ Assambly cho họ 8051 cho thiết kế này). Bài viết chủ yếu đi sâu vào phân tích các lệnh PLC và làm thế nào để lập trình cho hệ vi điều khiển trở thành bộ PLC có khả năng lập trình các ứng dụng thực tế và phát triển chúng.

    Sau đây là bo mạch PLC và mạch sơ đồ điện dùng vi điều khiển 89C51RD++

    IMG_0026.JPG

    IMG_0029.JPG
    Bo vi điều khiển 89C51RD++ (họ vi điều khiển 8051).

    Trên bo gồm có:
    · Chip vi điều khiển 89C51RD++
    · Chip nhớ 24C32 (hoặc 24C64)
    · Chip giao tiếp máy tính nối tiếp RS232
    · Mạch ngõ vào 16 ngõ dùng 74245
    · Mạch ngõ ra 16 ngõ dùng 74573 cùng các transitor thúc relay

    Sau đây là mạch sơ đồ điện:

    MCU.

    Mạch vi điều khiển 89C51RD++


    Keyboard.

    Mạch giao tiếp bàn phím và màn hình Lcd


    Input.

    Mạch ngõ vào cách ly, 16 ngõ vào điện áp 24VDC


    Output.

    Mạch ngõ ra, 16 ngõ ra và các transitor thúc relay ngoài 24VDC

    Relay.

    Mạch ngõ ra dùng relay

    Các chương trình viết cho hệ vi điều khiển có các địa chỉ vào ra như trong mạch trên.

    Phần 1. Các chương trình giao tiếp bàn phím và màn hình.

    Bàn phím gồm 16 phím, là những phím có giá trị từ 0 – 9 và từ A – F. trên cùng các phím này cũng được mở rộng thêm 16 phím có chức năng là các lệnh của cơ bản của PLC như: TR/0; DOWN/1; NOT/2; LD/3; OUT/4; OR/ 5; AND/6; UP/7; TIM/8; CNT/9; WRT/A; SHF/B; CLR/NOP/C; INS/D; DEL/E và SRCH/F

    Các phím chức năng sẽ được bàn tới trong chương trình PLC

    Sau đây là các chương trình quét bàn phím:
    ;------------------------------------------------------------------------------------
    ; Chương trình đọc bàn phím có chống nảy phím.
    ; mã phím ra trong Acc và trong codekey

    ;------------------------------------------------------------------------------------

    key_board:
    push 03h
    mov r3,#50d ; vòng lặp chống nảy 50 lần
    back:
    lcall get_key ; gọi CT con nhận phím
    jnc back4 ; không có phím, trở về CT gọi
    djnz r3,back ; có phím ấn, kiểm tra chống nảy phím
    push Acc ; cất mã phím tring ACC
    back2:
    mov r3,#50d
    back3:
    lcall get_key ; đợi phím nhả
    jc back2
    djnz r3,back3 ; vòng lặp chống nảy phím
    setb C ; có phím ấn đặt C:=1
    pop Acc ; lấy lại phím ấn
    mov codekey,a ; cất mã phím trong codekey
    back4:
    mov P1,#0FFh ; P1_1 lên cao
    pop 03h
    ret

    ;---------------------------------------------------------------------------------
    ; Quét và đọc bàn phím.
    ; C:=0 không có phím ấn
    ; C:=1 có phím ấn, mã phím trong Acc

    ;---------------------------------------------------------------------------------

    get_key:
    push 01h
    push 02h
    push 05h
    mov a,#0FEh ; bắt đầu với hàng 0
    mov r1,#4h ; quét 4 hàng
    test:
    mov P1,a ; cho cho hang xuống 0
    nop
    mov r2,a ; cất mã phím
    mov a,P1 ; đọc lại phím ấn, giá trị cột
    anl a,#0F0h ; chọn 4 bit cao
    cjne a,#0F0h,key_hit ; Acc # F0h, có phím ấn?
    mov a,r2 ; không lấy mã hàng vào trong Acc
    rl a ; quay trái cho hàng kế
    djnz r1,test ; đã đủ 4 hàng? Chưa thì tiếp tục
    clr C ; không có phím ấn xóa C
    mov a,#0FFh
    mov P1,a
    sjmp exit ; trở về với C=0
    key_hit:
    mov r2,a ; lấy phím ấn trong R2
    mov a,#4 ; tính mã phím
    clr c ; xóa cờ C
    subb a,r1 ; 4 – r1 = trọng số
    mov r1,a ; cất lại trong r1
    mov a,r2 ; lấy lại mã phím trong R2
    swap a ; tráo 4 bit cao xuống thấp
    mov r5,#4
    again:
    rrc a ; quay phải qua cờ nhớ để tìm mã phím
    jnc done ; nếu C = 0, thoát
    inc r1 ;tăng r1
    inc r1
    inc r1
    inc r1
    djnz r5,again ; lặp đủ 4 lần
    done:
    setb C ; có mã phím, đặt cờ C.
    mov a,r1 ; lấy mã phím trong R1 vào Acc
    exit:
    pop 05h
    pop 02h
    pop 01h
    ret

    Để tạo các phím chức năng trên cùng một phím, ta có thể dùng 2 cách:
    - Gán phím chức năng trong khi ấn một phím khác
    - Ấn phím có chức năng chuyển và các phín ấn sau này sẽ được gán cho công dụng mới.
    Với bàn phím có số phím giới hạn thì việc dung chung rất là hữu ích.

    Cám ơn các bạn đã đọc bài viết. Bài kế sẽ là phần lập trình hiển thị cho màn hình LCD
     
    Last edited: 15/5/17
  2. ga_cong

    ga_cong Kỹ sư

    Tham gia ngày:
    14/10/12
    Bài viết:
    295
    Đã được thích:
    123
    Điểm thành tích:
    43
    Giới tính:
    Nam
    Sao bạn không dùng đầu ra role luôn cho tiện dùng transistor hơi bất tiện với PLC
     
  3. kosovo

    kosovo Học sinh trung cấp

    Tham gia ngày:
    15/5/17
    Bài viết:
    54
    Đã được thích:
    21
    Điểm thành tích:
    8
    Giới tính:
    Nam
    Cái này hay đấy, những kĩ sư nước ngoài cũng làm ra PLC từ những ý tưởng kiểu này, module hóa, thư viện hóa các việc cơ bản, rồi nhân rộng, phát triển lên.....:-) tôi thích là ở chỗ bạn dùng đồ cổ để tạo ra cái mới.
    Nếu nói đến mức như PLC thì chắc là rất xa, hiện giờ bạn vẫn làm lại mấy ví dụ tương tự như với vi điều khiển thôi. Tôi có vài lời khuyên, đừng nghĩ đến làm nó như PLC, chỉ cần làm nó thành module để dùng chung là được rồi. Cần gì thì mình lập trình như vdk thôi. Nhưng như bo mạch hiện giờ thì khó ứng dụng trong máy móc, bạn biết sao không?
    -Chỉ cần một con công suất như contactor nhảy đóng tải là bo mạch của bạn sẽ treo ngay, thí nghiệm trên bàn, trong điều kiện máy lạnh, yên tĩnh, lí tưởng, thậm chí có âm nhạc du dương nữa...thì chẳng sao cả, reset nó lại thôi. Nhưng nếu nó nằm trong cái máy đang làm việc, ví dụ đang làm một mẻ vài trăm sản phẩm seri gì đó, nếu bị đơ thì tiêu rồi, có khi còn ảnh hưởng cho người đứng máy vì sự cố bất ngờ. Vấn đề là ổn định, chống nhiễu tốt.
    -Theo hướng đó, thì input của bạn đã có cách li opto, thêm vài kiểu nữa dập xung, tránh từ trường xung quanh. Output cũng đã có cách li opto, nên sử dụng thêm theo hướng SSR nhé.
    -Nếu bạn dùng cái đó thì làm ví dụ của PLC như dưới đây như thế nào? Thử xem:

    1.
     
  4. nhan31416

    nhan31416 Học sinh phổ thông

    Tham gia ngày:
    12/5/17
    Bài viết:
    26
    Đã được thích:
    6
    Điểm thành tích:
    3
    Giới tính:
    Nam
    Nghề nghiệp:
    kỹ sư
    Nơi ở:
    tp HCM
    đó là tùy chọn bạn ạ. mình thiết kế cả 3 phần: transistor, relay và 2003 hoặc 2853

    Relay.
     
  5. nhan31416

    nhan31416 Học sinh phổ thông

    Tham gia ngày:
    12/5/17
    Bài viết:
    26
    Đã được thích:
    6
    Điểm thành tích:
    3
    Giới tính:
    Nam
    Nghề nghiệp:
    kỹ sư
    Nơi ở:
    tp HCM
    Cám ơn bạn đã đóng góp. Đây là mạch hướng dẫn lập trình cho một hệ Vi điều khiển trở thành PLC. khi ứng dụng thực tiễn thì cần thiết kế kỹ hơn như bạn góp ý.
    mạch này đã được thử nghiệm trên những điều khiển thực tế.
    chương trình PLC của bạn là một chương trình đơn giản. mình đã thử với những CT phứt tạp hơn để test nó.
    Khi thiết kế C trình PLC, nên phân tích ra những dòng lệnh đơn giản.
    hãy xem CT của bạn: ta có thể phân tích thành như hình:
    20170515_162742.
    nhưng Q1 của bạn không bao giờ làm việc.
    Chân thành cám ơn bạn
     
  6. mbed

    mbed Kỹ sư

    Tham gia ngày:
    28/6/15
    Bài viết:
    212
    Đã được thích:
    173
    Điểm thành tích:
    43
    Giới tính:
    Nam
    Nghề nghiệp:
    Kỹ Thuật,Kinh Doanh
    Nơi ở:
    TP.HCM
    Mình tin mạch phần cứng của bạn chạy được, như vậy là đúng tiêu chuẩn thiết kế chống nhiểu của PLC rồi, trong các board mạch của Omron hay Mishubishi củng chỉ có như vậy thôi, của bạn còn thiếu phần lọc nguồn 24VDC đầu vào.

    Cái sơ đồ lapder của bạn kosovo. Sau tiếp điễm thường đóng I1 là hai mạch tự giử ON/OFF ,nhưng chỉ có nhánh Q2 hoạt động được, bạn kosovo đưa ra cái sơ đồ điên rồ.
     
  7. kosovo

    kosovo Học sinh trung cấp

    Tham gia ngày:
    15/5/17
    Bài viết:
    54
    Đã được thích:
    21
    Điểm thành tích:
    8
    Giới tính:
    Nam
    Cái gì có giá trị thì họ không share đâu, bạn ấy chắc là thầy giáo nên có máu giảng dạy, :-) mình không tốt như vậy nên ủng hộ tinh thần thôi. Nói đơn giản cái gì bán được mới tốt, mà muốn bán được thì phải dùng được, ngược lại thì chỉ là thử nghiệm.
    Bo PLC không phải đơn giản như bạn nhìn thấy, chắc là bạn chưa thấy. Sơ đồ mạch ấy, không cần bắt bẻ kĩ thế, dễ hiểu là sự nhầm lẫn, mình làm nhanh để lấy ví dụ thôi. Cứ sửa thành I3, I4 gì đó nhé. Thích nhất là ở chỗ bạn ấy dùng asm, cặm cụi, nhưng hiểu rất rõ mọi thứ cần làm. Giống mình...hehe..
     
  8. nhan31416

    nhan31416 Học sinh phổ thông

    Tham gia ngày:
    12/5/17
    Bài viết:
    26
    Đã được thích:
    6
    Điểm thành tích:
    3
    Giới tính:
    Nam
    Nghề nghiệp:
    kỹ sư
    Nơi ở:
    tp HCM
    Cám ơn bạn. tiếp tục với bài viết của mình, bạn sẽ thấy PLC làm việc như thế nào, không cần quá cầu kỳ như bạn nghĩ. mạch điều khiển trung tâm là mạng độc lập, cách ly với mạch ngoài kể cả nguồn cấp, và là hệ điều khiển vòng kín. nguồn ngoài 24VDC không cần lọc cũng khg ảnh hưởng gì. Phần cứng bạn thiết kế kiểu gì bạn thích khg thành vấn đề. Cái khó các chương trình lệnh để điều khiển nó.
    tôi viết nài này nhằm tiết kiệm thời gian cho những ai thích phát triển các hệ vi điều khiển đa năng, khg phải cặm cụi mất nhiều thời gian như tôi. Tôi chuyên thiết kế và sản xuất máy dệt, nhuộm công nghiệp, có xưởng sản xuất nên vấn đề áp dụng và cải tiến khg phải là khó.
     

Chia sẻ trang này