Điều khiển động cơ bước bằng PLC S7-1200: phát xung PTO, cấu hình Axis trong TIA Portal và đấu driver
Điều khiển động cơ bước bằng PLC S7-1200 là dùng ngõ ra phát xung tốc độ cao (PTO) của CPU Siemens S7-1200 để gửi tín hiệu xung và chiều tới driver động cơ bước, còn toàn bộ việc tăng tốc, giảm tốc, đếm vị trí, về gốc và giới hạn hành trình do đối tượng công nghệ Axis trong TIA Portal đảm nhận. Người lập trình không phải tự tạo từng xung: chỉ cần gọi các lệnh MC_Power, MC_Home, MC_MoveAbsolute, MC_MoveRelative, MC_MoveJog… với vị trí tính bằng mm hoặc độ, PLC tự quy đổi ra số xung.
Cách làm này phù hợp với máy định vị một đến bốn trục không cần nội suy: bàn xoay chia độ, cữ chặn máy cắt, cơ cấu đẩy phôi, trục nâng hạ, máy dán nhãn, máy cấp liệu theo chiều dài. Phần lớn rắc rối khi chạy lần đầu không nằm ở động cơ mà ở ba chỗ: chọn nhầm CPU ngõ ra relay, đấu ngõ ra PNP của S7-1200 sai kiểu với ngõ vào quang của driver, và khai báo số xung trên vòng trong TIA Portal không khớp với vi bước gạt trên driver.
Kiến thức chung về PLC phát xung của các hãng (Mitsubishi, Delta, Omron…), cách chọn PLC transistor NPN hay PNP được trình bày ở bài cách điều khiển động cơ bước bằng PLC. Nội dung dưới đây đi thẳng vào S7-1200 và TIA Portal.
Nội dung
- 1. CPU S7-1200 nào phát xung được để điều khiển động cơ bước
- 2. Tính tần số xung cần cho động cơ bước trước khi cấu hình
- 3. Đấu ngõ ra Q0.0, Q0.1 của S7-1200 tới driver động cơ bước
- 4. Cấu hình bộ phát xung và Technology Object Axis trong TIA Portal
- 5. Chạy thử trục bằng Axis control panel trước khi viết chương trình
- 6. Các lệnh Motion Control dùng cho động cơ bước trên S7-1200
- 7. Về gốc bằng MC_Home cho trục động cơ bước
- 8. Chương trình mẫu: trục vít me đi tới các vị trí đặt sẵn
- 9. Kết nối HMI để chạy tay, nhập vị trí và hiển thị trạng thái
- 10. Giới hạn của S7-1200 khi điều khiển động cơ bước và khi nào nên chọn hướng khác
- 11. Lỗi thường gặp khi điều khiển động cơ bước bằng PLC S7-1200 và cách xử lý
- 12. Câu hỏi thường gặp về điều khiển động cơ bước bằng PLC S7-1200
1. CPU S7-1200 nào phát xung được để điều khiển động cơ bước
Không phải CPU S7-1200 nào cũng phát xung ra ngõ ra tích hợp. Ký hiệu ba phần trên mã CPU cho biết nguồn nuôi / kiểu ngõ vào / kiểu ngõ ra:
- DC/DC/DC: nguồn 24 VDC, ngõ vào 24 VDC, ngõ ra transistor (MOSFET) 24 VDC. Loại này phát xung trực tiếp trên Q0.0–Q0.3.
- AC/DC/RLY và DC/DC/RLY: ngõ ra là relay. Relay không đóng cắt nổi hàng nghìn lần mỗi giây, nên CPU không cho gán bộ phát xung vào ngõ ra tích hợp. Muốn điều khiển động cơ bước phải cắm thêm signal board ngõ ra số tốc độ cao ở mặt trước CPU.
Từ firmware V4, mỗi CPU S7-1200 có tối đa 4 bộ phát xung (Pulse_1 đến Pulse_4), tức điều khiển được tối đa 4 trục động cơ bước hoặc servo nhận xung cùng lúc. Các CPU firmware đời đầu chỉ có 2 bộ phát xung.
Tần số xung tối đa theo ngõ ra
| CPU / module | Ngõ ra dùng phát xung | Tần số tối đa | Ghi chú |
| CPU 1211C DC/DC/DC | Q0.0–Q0.3 | 100 kHz | Đủ 4 ngõ ra nhanh |
| CPU 1212C DC/DC/DC | Q0.0–Q0.3 | 100 kHz | Q0.4, Q0.5 chỉ khoảng 20 kHz |
| CPU 1214C, 1215C DC/DC/DC | Q0.0–Q0.3 | 100 kHz | Q0.4 trở đi chỉ khoảng 20 kHz |
| CPU 1217C DC/DC/DC | Q0.0–Q0.3 (vi sai) | 1 MHz | Ngõ ra vi sai 5 V, cần driver nhận tín hiệu vi sai |
| Signal board DQ4 24 VDC 200 kHz | 4 ngõ ra trên board | 200 kHz | Dùng được cho cả CPU ngõ ra relay |
| Signal board DQ4 5 VDC 200 kHz | 4 ngõ ra trên board | 200 kHz | Hợp với driver chỉ nhận mức 5 V |
| Signal board DI2/DQ2 24 VDC 200 kHz | 2 ngõ ra trên board | 200 kHz | Đủ cho 1 trục (xung + chiều) |
| Signal board DI2/DQ2 24 VDC 20 kHz | 2 ngõ ra trên board | 20 kHz | Đời cũ, chỉ hợp với tốc độ thấp |
Khi mua signal board để dùng với CPU ngõ ra relay, cần xem kỹ chữ "200 kHz" trên mã và nhãn. Board đời cũ 20 kHz với driver đặt 1/8 chỉ cho tối đa khoảng 750 vòng/phút ở trục motor.

Lưu ý trước khi chọn CPU
- Mỗi trục chiếm hai ngõ ra: một ngõ xung, một ngõ chiều. CPU 1214C DC/DC/DC có 4 ngõ ra nhanh nên trên ngõ ra tích hợp chỉ chạy thoải mái 2 trục 100 kHz; trục thứ ba, thứ tư phải dùng ngõ ra chậm hơn hoặc signal board.
- Ngõ ra đã gán cho bộ phát xung không còn dùng như ngõ ra thường; ghi đè giá trị Q0.0 trong chương trình không có tác dụng và dễ gây nhầm khi gỡ lỗi.
- Bất kỳ driver nhận xung/chiều (PUL/DIR) nào cũng ghép được, từ module phổ thông đến driver công nghiệp cho động cơ bước 2 pha size 57, 86.
2. Tính tần số xung cần cho động cơ bước trước khi cấu hình
Bước bị bỏ qua nhiều nhất là tính xem trục cần bao nhiêu kHz. Công thức chỉ có một dòng:
Tần số xung (Hz) = Số xung trên một vòng motor × Tốc độ motor (vòng/phút) ÷ 60
Số xung trên một vòng = 200 (motor 1,8°) × hệ số vi bước đặt trên driver. Driver gạt 1/8 thì 1.600 xung/vòng, gạt 1/16 thì 3.200 xung/vòng.
| Cơ cấu | Số xung/vòng motor | Quãng đường mỗi vòng | Xung cho 1 đơn vị | Tốc độ mong muốn → tần số cần |
| Vít me bước 5 mm, nối thẳng | 1.600 | 5 mm | 320 xung/mm | 100 mm/s → 32 kHz |
| Vít me bước 10 mm, nối thẳng | 1.600 | 10 mm | 160 xung/mm | 200 mm/s → 32 kHz |
| Puly GT2 20 răng (dây đai) | 1.600 | 40 mm | 40 xung/mm | 500 mm/s → 20 kHz |
| Bàn xoay qua hộp số 10:1 | 1.600 | 36° trục ra | 44,44 xung/độ | 1 vòng bàn/giây → 16 kHz |
| Trục motor chạy 600 vòng/phút | 3.200 (1/16) | – | – | 32 kHz |
Ngõ ra tích hợp 100 kHz thừa sức cho hầu hết cơ cấu, vì motor bước hybrid mất mô-men rõ rệt khi vượt 600–1.000 vòng/phút. Nếu phép tính vượt 100 kHz, có ba hướng: giảm vi bước trên driver (1/4 thay cho 1/16), dùng signal board 200 kHz, hoặc chuyển sang servo. Với cơ cấu có hộp số, tốc độ trục ra bằng tốc độ motor chia tỉ số truyền, nên tần số xung cần cao hơn nhiều so với motor trục trơn; cách chọn hộp và tỉ số xem ở bài động cơ bước có hộp số.
Vi bước cao chủ yếu giúp chạy êm chứ không làm vị trí chính xác hơn tương ứng; với PLC, mức 1/4 đến 1/16 là vùng cân bằng. Sai số bước và vi bước được giải thích ở bài động cơ bước độ chính xác cao.
3. Đấu ngõ ra Q0.0, Q0.1 của S7-1200 tới driver động cơ bước
Ngõ ra transistor của S7-1200 bản DC/DC/DC là kiểu PNP (sourcing): khi bật, ngõ ra nối lên +24 V; khi tắt, ngõ ra hở; dòng định mức 0,5 A mỗi ngõ. Vì vậy driver phải đấu kiểu chung âm (chung cathode): các chân PUL−, DIR−, ENA− nối về 0 V của nguồn 24 V cấp cho ngõ ra PLC (cọc 3M hoặc M của CPU), còn PUL+, DIR+ nhận tín hiệu từ PLC.
Bảng đấu dây một trục tiêu chuẩn
| Chân PLC S7-1200 | Chức năng trong TIA Portal | Chân driver | Ghi chú |
| Q0.0 | Pulse output (xung) | PUL+ | Qua điện trở hạn dòng nếu driver chỉ nhận 5 V |
| Q0.1 | Direction output (chiều) | DIR+ | Qua điện trở hạn dòng nếu driver chỉ nhận 5 V |
| Q0.4 (tùy chọn) | Enable output (cho phép driver) | ENA+ | Nhiều driver: có dòng qua ENA thì motor thả lỏng, cần đảo logic |
| I0.4 (tùy chọn) | Ready input (driver sẵn sàng) | ALM/RDY của driver | Chỉ driver có ngõ ra báo lỗi mới dùng |
| 3M / M | 0 V chung | PUL−, DIR−, ENA− | Bắt buộc chung 0 V với nguồn ngõ ra PLC |
| 3L+ / L+ | +24 V cấp cho nhóm ngõ ra | – | Thiếu nguồn ở cọc này thì ngõ ra không bao giờ lên mức cao |
Q0.0/Q0.1 là mặc định cho Pulse_1, Pulse_2 thường dùng Q0.2/Q0.3.
Mức điện áp tín hiệu và điện trở hạn dòng
Driver công nghiệp đời mới (DM542, DM556, DM860 bản mới và nhiều driver vòng kín) thường in "5–24 V" ở cụm tín hiệu, khi đó nối thẳng 24 V từ PLC. Driver chỉ ghi 5 V, hoặc có jumper chọn 5 V/24 V, thì phải gạt jumper sang 24 V hoặc mắc điện trở nối tiếp khoảng 2–2,2 kΩ, 0,5 W ở mỗi chân PUL+, DIR+. Bảng điện trở cho từng mức áp và cách nhận biết module ghi 5 V được trình bày chi tiết ở bài mạch điều khiển động cơ bước TB6600; quy tắc áp dụng y hệt cho các driver khác dùng optocoupler.
Chất lượng xung ở tần số cao
Ngõ ra PNP khi tắt chỉ "buông" chứ không kéo về 0 V. Tải là optocoupler dòng nhỏ và dây dài thì sườn xuống của xung bị kéo dài; ở vài chục kHz driver có thể đếm thiếu xung, motor chạy hụt mà PLC vẫn báo đã tới vị trí. Thêm tải phụ để dòng ngõ ra đạt khoảng 10 % dòng định mức là cách cải thiện chất lượng xung hiệu quả. Thực tế tại tủ điện, mắc một điện trở khoảng 470 Ω – 1 kΩ (công suất 2 W) giữa Q0.0 và 0 V là đủ làm sườn xung gọn lại.
Cảnh báo khi đấu tín hiệu
- Không nối ngõ ra PNP của S7-1200 vào driver đấu chung dương (chung anode): PUL+ đã ở +5 V, ngõ ra PLC bật hay tắt thì LED trong opto cũng không có dòng, motor không quay.
- Dây xung và dây chiều nên dùng cáp xoắn có chống nhiễu, đi tách khỏi cáp động lực motor và biến tần, chiều dài càng ngắn càng tốt.
- 0 V của nguồn tín hiệu phải nối chung với chân PUL−/DIR−; thiếu dây 0 V này là lỗi gặp nhiều nhất khi motor hoàn toàn đứng im.
Ngõ vào công tắc hành trình và cảm biến gốc
Ngõ vào số của S7-1200 bản 24 VDC đấu được cả cảm biến PNP lẫn NPN, tùy cách nối cọc chung 1M: 1M về 0 V để dùng cảm biến PNP, 1M lên +24 V để dùng cảm biến NPN. Không trộn cảm biến PNP và NPN trên cùng nhóm ngõ vào dùng chung 1M. Công tắc hành trình cứng nên dùng tiếp điểm thường đóng (NC) để đứt dây cũng làm trục dừng; trong TIA Portal chỉ cần chọn mức tác động "Low level" cho ngõ vào đó.
4. Cấu hình bộ phát xung và Technology Object Axis trong TIA Portal
Cấu hình điều khiển động cơ bước bằng PLC S7-1200 trong TIA Portal đi theo đúng thứ tự trên cây cấu hình của Axis.
Bước 1: Thêm đối tượng công nghệ Axis
Trong cây dự án, mở CPU → Technology objects → Add new object → Motion Control → chọn TO_PositioningAxis, đặt tên ví dụ "Axis_1". TIA Portal tạo kèm DB của trục chứa vị trí, tốc độ, bit trạng thái và bit lỗi.
Bước 2: Basic parameters – General và Drive
- Drive (General): chọn "PTO (Pulse Train Output)" cho động cơ bước.
- Measurement unit: chọn mm cho trục thẳng, độ (°) cho bàn xoay, hoặc pulse nếu muốn làm việc trực tiếp với số xung.
- Pulse generator: chọn Pulse_1. Nếu bộ phát xung chưa được bật trong cấu hình thiết bị, nút "Device configuration" dẫn thẳng tới chỗ bật.
- Signal type: chọn "PTO (pulse A and direction B)" cho driver xung/chiều thông thường. Từ firmware V4 có thêm kiểu xung thuận/nghịch (CW/CCW) và A/B lệch pha.
- Pulse output và Direction output: mặc định Q0.0 và Q0.1; cột bên cạnh hiển thị tần số tối đa của ngõ ra đã chọn.
- Enable output và Ready input: khai báo nếu muốn PLC tự bật driver khi MC_Power kích hoạt và chờ tín hiệu sẵn sàng; không dùng thì đặt Ready input là TRUE.

Hình trên là dự án phát xung cho servo MR-J3-A; phần Hardware interface giống hệt khi nối driver động cơ bước, vì với PLC cả hai đều là thiết bị nhận xung và chiều.
Bước 3: Extended parameters – Mechanics
- Pulses per motor revolution: số xung trên một vòng motor, phải bằng đúng giá trị vi bước đang gạt trên driver (ví dụ 1.600 cho 1/8). Sai chỗ này là trục chạy sai quãng đường theo tỉ lệ cố định.
- Distance per revolution (Load movement per motor revolution): quãng đường tải đi được khi motor quay một vòng. Vít me 5 mm nối thẳng: 5 mm. Bàn xoay qua hộp số 10:1: 36°. Puly GT2 20 răng: 40 mm.
- Invert direction signal: đánh dấu khi trục chạy ngược với chiều mong muốn, thay vì đổi dây pha motor hay sửa chương trình.
Bước 4: Dynamics – tốc độ và gia tốc
- Maximum velocity: quy ra xung không được vượt tần số tối đa của ngõ ra.
- Start/stop velocity: tốc độ khởi đầu và kết thúc, motor nhảy thẳng lên mức này không qua tăng tốc. Với động cơ bước nên đặt thấp, khoảng 0,5–1 vòng/giây quy đổi; đặt cao dễ làm motor giật và trượt bước khi khởi động có tải.
- Acceleration / Deceleration: gia tốc tăng và giảm tốc, liên kết với thời gian tăng/giảm tốc.
- Jerk limit: bật để có đường tăng tốc mềm kiểu chữ S, giảm va đập với tải quán tính lớn.
- Emergency deceleration: gia tốc dừng khẩn cấp khi chạm công tắc hành trình hoặc khi tắt MC_Power với chế độ dừng khẩn.
Bước 5: Position limits và Homing
- Hardware limit switches: chọn ngõ vào và mức tác động cho công tắc giới hạn dưới, trên; chạm công tắc thì trục dừng khẩn và báo lỗi.
- Software limit switches: giới hạn mềm bằng giá trị vị trí, chỉ có hiệu lực sau khi trục đã về gốc. Nên đặt bên trong giới hạn cứng vài mm.
- Homing: chọn ngõ vào cảm biến gốc, chiều tiến về gốc, phía cảm biến (sườn lên hay sườn xuống), tốc độ tiếp cận nhanh, tốc độ về gốc chậm, độ lệch gốc (home offset) và tùy chọn tự đảo chiều khi chạm công tắc hành trình.
Bấm Compile để TIA Portal báo các giá trị vượt giới hạn phần cứng; nạp thay đổi cấu hình Technology Object thường cần chuyển CPU sang STOP.
5. Chạy thử trục bằng Axis control panel trước khi viết chương trình
Mục Commissioning → Axis control panel của trục cho chạy tay từ máy tính lập trình, không cần code – cách nhanh nhất để tách lỗi phần cứng khỏi lỗi chương trình:
- Bấm "Activate" để giành quyền điều khiển, sau đó "Enable" để bật trục.
- Chọn Jog, đặt tốc độ nhỏ, giữ nút Forward/Backward và quan sát motor.
- Chọn Positioning, nhập quãng đường ví dụ 100 mm, đo thực tế bằng thước để kiểm chứng số xung/vòng và quãng đường/vòng.
- Thử Homing để xác nhận cảm biến gốc và chiều về gốc.
Mục Diagnostics của trục hiển thị trạng thái, vị trí, tốc độ và các bit lỗi. Nếu Axis control panel chạy đúng mà chương trình không chạy, lỗi chắc chắn nằm ở logic gọi lệnh MC. Nếu panel cũng không chạy, kiểm tra lại dây, nguồn 24 V cho cọc 3L+ và cấu hình bộ phát xung.
Lưu ý: không kích hoạt được Axis control panel khi chương trình đang bật trục bằng MC_Power, và ngược lại. Khi chạy thử xong phải bấm "Deactivate" để trả quyền điều khiển cho chương trình.
6. Các lệnh Motion Control dùng cho động cơ bước trên S7-1200
Lệnh MC nằm trong thư viện Instructions → Technology → Motion Control. Mỗi lệnh có DB instance riêng, ngõ vào Axis nối tới DB trục "Axis_1".
| Lệnh | Chức năng | Tham số chính | Kiểu kích hoạt |
| MC_Power | Bật/tắt trục, bật ngõ Enable output | Enable, StopMode | Theo mức, phải gọi liên tục mỗi chu kỳ quét |
| MC_Reset | Xác nhận lỗi; Restart nạp lại cấu hình trục | Execute, Restart | Sườn lên |
| MC_Home | Đặt gốc tọa độ, về gốc chủ động/bị động | Execute, Position, Mode | Sườn lên |
| MC_MoveAbsolute | Chạy tới vị trí tuyệt đối (cần đã về gốc) | Execute, Position, Velocity | Sườn lên |
| MC_MoveRelative | Chạy thêm một quãng so với vị trí hiện tại | Execute, Distance, Velocity | Sườn lên |
| MC_MoveVelocity | Chạy liên tục ở tốc độ đặt đến khi có lệnh khác | Execute, Velocity, Direction | Sườn lên |
| MC_MoveJog | Chạy tay khi giữ nút | JogForward, JogBackward, Velocity | Theo mức |
| MC_Halt | Dừng trục theo gia tốc giảm tốc đã cấu hình | Execute | Sườn lên |
Các lệnh di chuyển có chung ngõ ra Done, Busy, CommandAborted, Error, ErrorID, ErrorInfo. Bốn quy tắc cần nhớ:
- MC_Power đặt ở đầu chương trình, gọi không điều kiện trong mỗi chu kỳ quét, Enable nối tới bit cho phép chạy. Không gọi MC_Power trong khối chỉ chạy một lần.
- Các lệnh dùng Execute chỉ nhận sườn lên. Giữ Execute ở mức 1 không làm lệnh chạy lại; muốn chạy lần hai phải trả Execute về 0 rồi bật lên 1.
- Lệnh di chuyển mới ngắt lệnh đang chạy (lệnh cũ báo CommandAborted).
- StartMode của MC_Power bị bỏ qua với trục PTO; StopMode quyết định cách dừng khi tắt Enable: 0 là dừng khẩn theo gia tốc dừng khẩn, 1 là dừng ngay (ngắt xung), 2 là dừng khẩn có giới hạn jerk.
Đọc vị trí và trạng thái trục
Vị trí và tốc độ hiện tại đọc từ DB trục: "Axis_1".Position và "Axis_1".Velocity. Các bit hay dùng nằm trong "Axis_1".StatusBits, ví dụ HomingDone (đã về gốc), StandStill (đứng yên), Enable; lỗi nằm trong "Axis_1".ErrorBits, ví dụ chạm công tắc hành trình cứng hoặc giới hạn mềm. Với động cơ bước chạy vòng hở, "vị trí" này là vị trí PLC đã phát xung tới, không phải vị trí đo được ở trục motor; nếu motor trượt bước, PLC không biết.
7. Về gốc bằng MC_Home cho trục động cơ bước
Động cơ bước không có encoder tuyệt đối, nên sau mỗi lần bật nguồn PLC không biết trục đang ở đâu. MC_Home giải quyết việc này. Tham số Mode quyết định cách về gốc:
| Mode | Kiểu về gốc | Cách hoạt động | Khi nào dùng |
| 0 | Gốc trực tiếp tuyệt đối | Gán ngay vị trí hiện tại bằng giá trị Position, trục không di chuyển | Đã đưa trục tới điểm chuẩn bằng tay, hoặc chỉ cần reset tọa độ |
| 1 | Gốc trực tiếp tương đối | Vị trí mới = vị trí hiện tại + Position, không di chuyển | Dịch gốc tọa độ, bù sai lệch |
| 2 | Gốc bị động | Không tự chạy; khi trục đi qua cảm biến gốc do lệnh khác thì gán gốc | Băng tải, trục chạy liên tục đi ngang qua dấu |
| 3 | Gốc chủ động | Tự chạy tìm cảm biến theo tốc độ tiếp cận, đảo chiều, dò lại chậm, gán gốc | Trường hợp phổ biến nhất cho trục định vị |
Cảm biến tiệm cận PNP 24 V 3 dây là lựa chọn dễ nhất; cần độ lặp lại cao hơn thì dùng cảm biến quang dạng khe và dò ở tốc độ thật thấp.
Sau khi về gốc thành công, bit HomingDone lên 1 và lúc đó MC_MoveAbsolute mới được phép chạy, giới hạn mềm mới có hiệu lực. Tắt MC_Power hoặc mất nguồn CPU, trục PTO mất trạng thái đã về gốc, nên chương trình phải buộc về gốc lại trước khi chạy tự động.
8. Chương trình mẫu: trục vít me đi tới các vị trí đặt sẵn
Bài toán mẫu: một trục vít me bước 5 mm, động cơ bước NEMA 23, driver gạt 1/8 (1.600 xung/vòng). Khi bấm Start, trục về gốc, sau đó lần lượt đi tới 50 mm, 120 mm, 200 mm, mỗi điểm dừng 2 giây rồi quay về 0. Chương trình viết theo kiểu bước tuần tự.
| Bước | Điều kiện chuyển | Hành động | Ghi chú |
| 0 | Nút Start, trục đã Enable (MC_Power.Status = 1) | Kích MC_Home, Mode 3 | Về gốc chủ động |
| 10 | MC_Home.Done | Kích MC_MoveAbsolute, Position 50.0, Velocity 50.0 | Tốc độ 50 mm/s = 16 kHz |
| 20 | MC_MoveAbsolute.Done, chờ 2 s | Position 120.0 | Chạy lại cùng lệnh với giá trị mới |
| 30 | Done, chờ 2 s | Position 200.0 | – |
| 40 | Done, chờ 2 s | Position 0.0 | Về điểm đầu |
| 99 | Bất kỳ lệnh nào báo Error | Dừng chuỗi, bật đèn lỗi, chờ Reset | Lưu ErrorID để hiển thị |
Viết bằng SCL, vài dòng cốt lõi
- "MC_Power_DB"(Axis := "Axis_1", Enable := "Cho_phep", StopMode := 0);
- "MC_MoveAbsolute_DB"(Axis := "Axis_1", Execute := #ExeAbs, Position := #ViTri, Velocity := 50.0);
- IF "MC_MoveAbsolute_DB".Done THEN #ExeAbs := FALSE; #Buoc := #Buoc + 10; END_IF;
- IF "MC_MoveAbsolute_DB".Error THEN #MaLoi := "MC_MoveAbsolute_DB".ErrorID; #Buoc := 99; END_IF;
Điểm quan trọng trong đoạn trên là trả #ExeAbs về FALSE sau khi lệnh xong, để lần kích sau có sườn lên.
Nút dừng khẩn của máy thật phải ngắt bằng phần cứng (nguồn driver hoặc ngõ ENA), không chỉ gửi MC_Halt qua chương trình.
9. Kết nối HMI để chạy tay, nhập vị trí và hiển thị trạng thái
HMI Siemens nối S7-1200 qua PROFINET, cấu hình chung dự án TIA Portal nên gán tag trực tiếp từ DB trục và DB lệnh MC.
| Chức năng trên HMI | Tag nối tới | Kiểu thao tác trên nút |
| Jog tiến / Jog lùi | Bit nối JogForward, JogBackward của MC_MoveJog | Set bit khi nhấn, Reset bit khi nhả |
| Nhập vị trí đích | Biến Real làm Position của MC_MoveAbsolute | Ô nhập số, giới hạn min/max |
| Hiển thị vị trí hiện tại | "Axis_1".Position | Ô hiển thị, 2 số lẻ |
| Đèn đã về gốc | "Axis_1".StatusBits.HomingDone | Đèn trạng thái |
Nút jog trên HMI phải dùng cặp sự kiện "Press" để Set và "Release" để Reset, không dùng sự kiện "Click" vì trục sẽ chạy mãi. Do trễ truyền thông, nhả nút trục vẫn đi thêm một đoạn ngắn, nên để tốc độ jog thấp; ô nhập vị trí đặt giới hạn đúng bằng hành trình cơ khí.
10. Giới hạn của S7-1200 khi điều khiển động cơ bước và khi nào nên chọn hướng khác
S7-1200 phát xung gọn và rẻ cho trục định vị độc lập, nhưng có các giới hạn sau:
- Không nội suy nhiều trục: mỗi trục chạy độc lập, không có lệnh nội suy đường thẳng hay cung tròn giữa hai trục.
- Tối đa 4 trục xung trên một CPU.
- Vòng hở: PLC đếm xung đã phát, không biết motor có trượt bước hay không. Không chấp nhận mất vị trí thì dùng step vòng kín có encoder hoặc servo.
- Tốc độ cao, tải quán tính lớn: động cơ bước mất mô-men nhanh khi tăng tốc độ; trên khoảng 1.000 vòng/phút nên chọn servo.
Thay động cơ bước bằng motor servo loại nhận xung, cấu hình TIA Portal gần như giữ nguyên. Một bộ motor servo 750W thường là bước nâng cấp tự nhiên cho trục vít me đang dùng động cơ bước NEMA 34 bị trượt bước ở tốc độ cao. Với trục chỉ cần chạy liên tục theo tốc độ đặt, không cần định vị, motor AC kèm động cơ giảm tốc và bộ điều tốc hoặc biến tần đơn giản và bền hơn động cơ bước.
Người đang dùng hệ cũ S7-200 hoặc S7-200 SMART có thể đối chiếu cách cấu hình bằng Position Control Wizard ở bài điều khiển động cơ bước bằng S7-200. Kiến thức nền về cấu tạo, các loại và cách chọn động cơ bước xem ở trang tổng quan động cơ bước.
11. Lỗi thường gặp khi điều khiển động cơ bước bằng PLC S7-1200 và cách xử lý
| Hiện tượng | Nguyên nhân thường gặp | Cách xử lý |
| Không chọn được Pulse_1 trên ngõ ra Q0.0 | CPU ngõ ra relay (AC/DC/RLY, DC/DC/RLY) | Lắp signal board ngõ ra số 200 kHz và gán bộ phát xung sang ngõ ra của board |
| Lệnh MC báo Busy, Q0.0 không ra xung | Thiếu nguồn 24 V ở cọc 3L+, hoặc trục chưa Enable | Đo áp cọc 3L+ – 3M; kiểm tra MC_Power.Status = 1 |
| Có xung ở Q0.0 (đo được áp) nhưng motor đứng im | Driver đấu chung anode, thiếu dây 0 V, driver chưa Enable | Đấu chung cathode, nối PUL−/DIR− về 3M, kiểm tra logic chân ENA |
| Motor chạy được lần đầu, lần sau không chạy | Execute không có sườn lên mới | Reset bit Execute sau khi Done hoặc Error |
| Chạy sai quãng đường theo tỉ lệ cố định (gấp đôi, một nửa) | Pulses per motor revolution khác vi bước gạt trên driver | Sửa cho khớp, đo lại bằng Axis control panel |
| Chạy hụt quãng đường không đều, càng nhanh càng hụt | Motor trượt bước do tăng tốc quá gắt, hoặc sườn xung xấu ở tần số cao | Giảm gia tốc, giảm Start/stop velocity, thêm điện trở tải phụ ở ngõ ra xung |
| MC_MoveAbsolute báo lỗi ngay khi kích | Trục chưa về gốc | Chạy MC_Home trước; kiểm tra HomingDone |
| MC_Home báo lỗi "Technology object not activated yet" (ErrorID 16#8206) | Trục chưa được bật bằng MC_Power hoặc đang bị Axis control panel giữ quyền | Bật Enable của MC_Power, Deactivate panel |
| Về gốc chạy mãi không dừng | Cảm biến gốc sai địa chỉ, sai mức tác động, cảm biến NPN đấu vào nhóm ngõ vào đang dùng PNP | Kiểm tra đèn ngõ vào khi che cảm biến, sửa cấu hình Homing |
| Motor kêu, rung mạnh ở một dải tốc độ | Cộng hưởng tầng giữa của động cơ bước | Tăng vi bước, tránh dải tốc độ đó, thêm giảm chấn hoặc dùng driver có chống cộng hưởng |
ErrorID cho biết nhóm lỗi, ErrorInfo cho biết chi tiết. Chọn lệnh và nhấn F1 để xem mô tả mã đúng phiên bản Motion Control đang dùng, vì bảng mã khác nhau giữa các phiên bản.
12. Câu hỏi thường gặp về điều khiển động cơ bước bằng PLC S7-1200
- CPU 1214C AC/DC/RLY có điều khiển động cơ bước được không? Được, nhưng không dùng ngõ ra relay trên thân CPU. Cần cắm thêm signal board ngõ ra số tốc độ cao (loại DQ4 24 VDC 200 kHz hoặc DI2/DQ2 24 VDC 200 kHz) ở mặt trước CPU, rồi trong cấu hình bộ phát xung chọn ngõ ra của board.
- Một CPU S7-1200 điều khiển được tối đa mấy động cơ bước? Tối đa 4 trục xung với firmware V4 trở lên, mỗi trục cần một ngõ xung và một ngõ chiều. Muốn cả 4 trục chạy tốc độ cao thì phải kết hợp 4 ngõ ra nhanh trên CPU với signal board, vì các ngõ ra từ Q0.4 trở đi chỉ đạt khoảng 20 kHz.
- Driver chỉ có kiểu đấu chung anode thì nối với ngõ ra PNP của S7-1200 được không? Không nối trực tiếp được, vì ngõ ra PNP chỉ cấp dòng ra chứ không kéo xuống 0 V. Phần lớn driver cho phép đấu chung cathode bằng cách nối PUL−, DIR− về 0 V; nếu driver bắt buộc chung anode, dùng một module chuyển đổi tín hiệu PNP sang NPN tốc độ cao hoặc chọn signal board 5 V.
- Có bắt buộc chạy MC_Home trước khi dùng MC_MoveRelative không? Không. MC_MoveRelative, MC_MoveVelocity và MC_MoveJog chạy được khi trục chưa về gốc, chỉ MC_MoveAbsolute và giới hạn mềm cần trục đã về gốc.
- Mất điện rồi bật lại, PLC S7-1200 có nhớ vị trí của động cơ bước không? Không đáng tin. Trục PTO mất trạng thái đã về gốc khi CPU mất nguồn hoặc tắt MC_Power, và trong lúc mất điện tải có thể bị xê dịch mà PLC không biết. Chương trình nên buộc về gốc mỗi lần khởi động.
- Đổi chiều quay của trục trong TIA Portal ở đâu? Trong cấu hình trục, mục Extended parameters → Mechanics, đánh dấu "Invert direction signal". Sau đó kiểm tra lại chiều về gốc và hai công tắc giới hạn.
- Có thay đổi tốc độ khi trục đang chạy được không? Được. Kích lại lệnh di chuyển (MC_MoveAbsolute, MC_MoveRelative hoặc MC_MoveVelocity) với giá trị Velocity mới; lệnh cũ bị ngắt và báo CommandAborted, trục chuyển sang tốc độ mới theo gia tốc đã cấu hình mà không dừng lại.
- S7-1200 có chạy được máy CNC hai trục vẽ đường chéo, đường tròn không? Không phù hợp. S7-1200 không có nội suy giữa các trục; hai trục có thể khởi động cùng lúc nhưng không phối hợp tốc độ để đi đúng đường thẳng chéo hay cung tròn.
- Dùng S7-1200 phát xung cho servo có cấu hình giống động cơ bước không? Gần như giống hoàn toàn: vẫn chọn Drive kiểu PTO, vẫn Q0.0/Q0.1. Khác biệt là số xung/vòng lấy theo cài đặt bánh răng điện tử của servo driver, và nên nối ngõ báo sẵn sàng của servo về Ready input.
- Có điều khiển động cơ bước trực tiếp từ ngõ ra S7-1200 không qua driver được không? Không. Ngõ ra PLC chỉ là tín hiệu 24 V, 0,5 A, không đảo chiều và băm dòng qua cuộn dây được. Động cơ bước luôn cần driver nhận xung/chiều nằm giữa PLC và motor.






