Phát xung (PTO - PWM) trong PLC Siemens - BeeLab

Thursday, June 9, 2016

Phát xung (PTO - PWM) trong PLC Siemens


Tóm tắt:
Sử dụng wizard sẽ làm cho người lập trình đỡ tốn công lập trình hơn (chủ yếu cài thông số cho phù hợp -> tạo ra hàm -> lôi ra sử dụng trong chương trình chính)

1. Chế độ PWM thì đơn giản, chỉ cần khai báo thông số chu kỳ và độ rộng xung
2. Chế độ PTO thì có nhiều thứ hơn (hay dùng điều khiển động cơ bước và servo), nói sơ ở phần cơ bản nha:
có các thông số sau:
- tốc độ max (mặc định là 100KHz)
- tốc độ min (mặc định là 5kHz)
- thời gian tăng tốc (mặc định 1s)
- thời gian giảm tốc (mặc định 1s)

trong chương trình chính có 2 cách sử dụng:
PTO_CTRL: chương trình luôn luôn thực hiện việc phát xung (nếu ko phát sinh lỗi hoặc có tác động stop của chương trình -> dừng khẩn cấp I-STOP hoặc dừng có giảm tốc D-STOP)
PTO_MAN: việc phát xung tùy thuộc vào điều kiện RUN của hàm

Chương trình tại đây!

I. GIỚI THIỆU:
    Trong PLC S7-200 có hổ trợ chúng ta phát xung tốc độ cao (tức là tạo một chuỗi xung ngỏ ra) tại 2 chân Q0.0 và Q0.1
    Ta dùng instruction PLS để thực hiện phát xung trên PLC S7-200. Chú ý rằng instruction này được chia ra 2 chức năng là phát xung PTO và điều rộng xung PWM
       - PTO (Pulse Train Output) là 1 chuỗi xung ngỏ ra với độ rộng xung ON là 50% của chu kì
       - PWM (Pulse Width Modulation) là 1 chuỗi xung ngỏ ra mà ta có thể thay đổi được độ rông xung ON
    Vậy ta thấy rằng PTO chẳng qua chỉ là 1 trường hợp đặc biệt của PWM mà thôi.
    Khi ta sử dụng chức năng phát xung tại các chân Q0.0 và Q0.1 thì các lệnh xử lý tại các chân này đều được bỏ qua và chú ý rằng trước khi sử dụng phát xung trên       2 chân này ta phải reset chúng về 0 trước




    Khi ta sử dụng cũng như thiết kế phát xung tốc độ cao trong PLC S7-200 sẽ có 1 vùng nhớ đặc biệt SM để điều khiển chúng gồm 1 thanh ghi 8 bit cho điều khiển, 1       thanh ghi 32 bit không dấu dành cho giá trị xung đếm, 1 thanh ghi không dấu 16 bit cho thời gian 1 chu kì và 1 thanh ghi 16 bit không dấu cho độ rộng xung

II. ĐIỀU RỘNG XUNG PWM TRONG PLC S7-200:
     Ta có thể chọn đơn vị thời gian cho cycle time (base time) của PWM là ms hoặc us bởi các bit điều khiển. giới hạn thời gian 1 chu kì cycle time như sau:
      - 50 µs to 65,535 µs (nếu đơn vị thời gian chọn là us)

      - 2 ms to 65,535 ms (nếu đơn vị thời gian chọn là ms)
    Trong 1 số trường hợp đặc biệt như độ rộng xung mà bằng 100% thời gian của 1 chu kì (cycle time) thì ngỏ ra sẽ output liên tục cũng như nếu độ rộng xung bằng         0% thời gian của 1 chu kì thì ngỏ ra sẽ OFF.
    Nếu trong chương trình độ rộng xung mà >= giá trị của cycle time thì PLC sẽ hiểu là độ rộng bằng 100% cycle time
    Nếu trong chương trình độ rộng xung mà =0 thì PLC sẽ hiểu là ngỏ ra OFF
    Nếu trong chương trình chọn cycle time < 2 lần đơn vị base time thì PLC sẽ hiểu là cycle time = 2 lần đơn vị base time

    Có 2 cách để thay đổi đặc tính sóng ngỏ ra trong PWM của PLC S7-200:
        - Synchronous Update: Siemens nói rằng nếu trong chương trình của chúng ta không cần thay đổi đơn vị thời gian time base thì chọn phương pháp điều rộng xung đồng bộ. Việc thay đổi đặc tính sóng ngỏ ra tại vùng biên của 1 chu kì khi mà đơn vị thời gian time base không thay đổi vẫn đảm bảo sóng ngỏ ra mịn và ổn định
        - Asynchronous Update: Trong 1 số trường hợp ta cần thay đổi đơn vị thời gian time base trong chương trình thì cần phải chọn phương pháp điều rộng xung bất đồng bộ. Trong chế độ này bộ phát xung của chúng ta sẽ ngừng hoạt động trong giây lát mỗi khi đặc tính sóng ngỏ ra thay đổi, chính vì vậy nên sóng ngỏ ra cũng sẽ không đồng bộ và điều này dẫn đến hiện tượng gọi là rung pha.
     *** Siemens khuyến cáo chúng ta nên chọn chế độ Synchronous Update trong PWM của PLC S7-200. Chọn chế độ này như thế nào sẽ được đề cập phần sau nhé



III. CÁC BIT CẤU HÌNH VÀ ĐIỂU KHIỂN TRONG PWM CỦA PLC S7-200:
     Trong bài hôm trước về phát xung PTO chúng ta đã tìm hiểu các bit điều khiển trong phát xung PTO, hôm nay ta chỉ tìm hiểu các bit điều khiển trong PWM mà thôi        nên những bit liên quan đên PTO ta sẽ không đề cập đến nữa




      - Byte điều khiển SMB66 và SMB76 chỉ dùng cho cấu hình PTO nên tham khảo bài PTO nhé
      - SM67.0 & SM77.0 : Nếu trong chương trình ta muốn thay đổi thời gian 1 chu kì cycle time thì hãy set bit này lên 1
      - SM67.1 & SM77.1 : Ta phải set bit này lên 1 để thay đổi độ rộng xung (thời gian của xung ON trong 1 chu kì được gọi là độ rộng xung)
      - SM67.2 & SM77.2 : Dùng cho cấu hình PTO 
      - SM67.3 & SM77.3 : Chọn đơn vị thời gian time base (nếu là 0 thì us và nếu chọn là 1 thì ms)
      - SM67.4 & SM77.4 : Chọn bằng 1 thì phương pháp PWM là đồng bộ (synchronous update) và chọn bằng 0 thì phương pháp PWM là bất đồng bộ (asynchronous)
      - SM67.5 & SM77.5 : Dùng cho cấu hình PTO 
      - SM67.6 & SM77.6 : Set bằng 1 để dùng chế độ điều rộng xung PWM trên chân Q0.0 hoặc Q0.1
      - SM67.7 & SM77.7 : Set bằng 1 để cho phép module phát xung hoạt động
      - SMW67 & SMW78: Thanh ghi 16 bit để load giá trị cycle time 
      - SMW70 & SMW80: Thanh ghi 16 bit để load giá trị độ rộng xung 
      - SMD72 &SMD82: Dùng cho cấu hình PTO
      - SMB166 & SMB176: Dùng cho cấu hình PTO
      - SMW168 & SMW 178 : Dùng cho cấu hình PTO
      Ta có thể tham khảo 1 số giá trị điều khiển mẫu thường sử dụng trong bảng sau:



     Ví dụ ta load giá trị 16#D1 (11010001) vào thanh ghi điều khiển SMB67 thì có nghĩa là ta chọn phát xung trên chân Q0.0 của PLC. Chế độ phát xung là PWM,                phương pháp PWM là đồng bộ synchronous (tức là không thay đổi base time trong chương trình), đơn vị thời gian time base là us, cho phép thay đổi thời gian 1 chu      kì cycle time và không cho phép thay đổi độ rộng xung.



IV. LẬP TRÌNH ĐIỀU RỘNG XUNG PWM TRONG PLC S7-200:
     Ta chỉ sử dụng 1 instruction PLS khi muốn phát xung PWM trong PLC S7-200. Nếu muốn phát xung trên chân Q0.0 thì thông số Q0.X =0 và chân Q0.1 thì chọn là 1
    


     Khuyến cáo: Ta nên sử dụng bit SM0.1 để gọi chương trình con và trong chương trình con ta sẽ cấu hình cho PWM, làm như vậy sẽ giảm được thời gian scan time      cho PLC giúp tối ưu hóa lập trình hơn.
     Sau đó trong chương trình con ta thực hiện các bước sau để cấu hình cho PWM:
        B1: load giá trị phù hợp vào thanh ghi điều khiển
        B2: load giá trị cycle time
        B3: load giá trị độ rộng xung 
        B4: thực hiện gọi instruction PLS để bắt đầu phát xung
        B5: nếu trong chương trình tiếp theo sau ta cần thay đổi các thông số như cycle time hay độ rộng xung thì ta load giá trị phù hợp vào thanh ghi điều khiển trước             khi thoát khỏi chương trình con

    Để thay đổi giá trị độ rộng xung cho PWM ta thực hiện gọi 1 chương trình con khác, trong chương trình con đó thực hiện các bước sau:
        B1: Nếu bước 5 ở trên đã được thực hiện thì ở đây ta chỉ cần load giá trị độ rộng xung mới
        B2: Thực hiện gọi instruction PLS để bắt đầu phát chuỗi xung mới
        B3: Nếu trong chương trình tiếp theo sau ta cần thay đổi các thông số như cycle time hay độ rộng xung thì ta load giá trị phù hợp vào thanh ghi điều khiển trước             khi thoát khỏi chương trình con.

V. VÍ DỤ CỤ THỂ:
     Như đã đề cập ở trên trước khi sử dụng phát xung ta phải reset chân phát xung và dùng bit SM0.1 để gọi chương trình con khởi tạo PWM. Vậy trong chương trình        chính ta có Network 1 là reset chân Q0.1 và gọi chương trình con SBR_0. 
     Trong network 2 dùng xung cạnh lên của bit điều khiển M0.0 để gọi chương trình con SBR_1


      Trong chương trình con SBR_0 thực hiện các lệnh sau:
         - Load giá trị DB(11011011) vào thanh ghi điều khiển SMB77 (Ở đây ta dùng chân Q0.1 để phát xung nên dùng thanh ghi SMB77 nhé)
              + chọn chế độ phát xung PWM
              + chọn đơn vị thời gian base time là ms
              + chọn phương pháp PWM là đồng bộ (synchronous update)
              + cho phép thay đổi độ rộng xung cũng như cycle time trong chương trình
      Load giá trị 10.000 vào thanh ghi SMW78 để chọn thời gian của 1 chu kì là 10s
      Load giá trị 1.000 vào thanh ghi SMW80 để chọn độ rộng xung là 1s
      Gọi instruction PLS để bắt đầu phát xung trên chân Q0.1
      Vì trong chương trình ta giả sử cần thay đổi độ rộng xung trong chuỗi xung tiếp theo nên ta phải load giá trị phù hợp vào thanh ghi điều khiển SMB77 trước khi               thoát khỏi chương trình con SBR_0 (Ở đây ta load giá trị là DA (11011010) tức là chỉ muốn thay đổi độ rộng xung chứ không thay đổi cycle time)


     Vậy sau khi PLC thực thi xong chương trình con SBR_0 thì xung ngỏ ra tại chân Q0.1 sẽ xuất hiện với độ rộng xung là 1s trên tổng chu kì 10s. Xung cứ phát ra như thế cho đến khi bit điều khiển M0.0 set lên 1 thì PLC thực hiện lệnh gọi chương trình con SBR_1
    Trong chương trình con SBR_1 thực hiện thay đổi độ rộng xung như sau:
    Load giá trị 5000 vào thanh ghi SMW80 để thay đổi độ rộng xung là 5s
    Gọi instruction PLS để thực hiện áp dụng thay đổi. Nếu không muốn thay đổi đặc tính sóng ngỏ ra nữa thì ta không cần phải load giá trị vào thanh ghi điều khiển nữa


   Vậy cuối cùng thực hiện xong chương trình con SBR_0 thì chân Q0.1 sẽ phát xung với độ rộng xung là 5s trên tổng chu kì là 10s. Và xung cứ phát ra như thế tiên tục
   Cụ thể hình sau cho ta dạng sóng ngỏ ra theo thời gian của chân Q0.1 với đoạn code trên